2017-12-04 10:09:16 +01:00
|
|
|
/*
|
|
|
|
* HttpApi tests
|
|
|
|
*
|
|
|
|
* Copyright 2017 Nikolay Sivov for CodeWeavers
|
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <stdarg.h>
|
|
|
|
|
|
|
|
#include "ntstatus.h"
|
|
|
|
#define WIN32_NO_STATUS
|
|
|
|
#include "windef.h"
|
|
|
|
#include "winbase.h"
|
|
|
|
#include "winnt.h"
|
|
|
|
#include "winternl.h"
|
|
|
|
#include "http.h"
|
|
|
|
|
|
|
|
#include "wine/test.h"
|
|
|
|
|
|
|
|
static ULONG (WINAPI *pHttpCreateServerSession)(HTTPAPI_VERSION version, HTTP_SERVER_SESSION_ID *session_id,
|
|
|
|
ULONG reserved);
|
|
|
|
static ULONG (WINAPI *pHttpCloseServerSession)(HTTP_SERVER_SESSION_ID session_id);
|
|
|
|
static ULONG (WINAPI *pHttpCreateUrlGroup)(HTTP_SERVER_SESSION_ID session_id, HTTP_URL_GROUP_ID *group_id,
|
|
|
|
ULONG reserved);
|
|
|
|
static ULONG (WINAPI *pHttpCloseUrlGroup)(HTTP_URL_GROUP_ID group_id);
|
|
|
|
|
|
|
|
static void init(void)
|
|
|
|
{
|
|
|
|
HMODULE mod = GetModuleHandleA("httpapi.dll");
|
|
|
|
|
|
|
|
#define X(f) p##f = (void *)GetProcAddress(mod, #f)
|
|
|
|
X(HttpCreateServerSession);
|
|
|
|
X(HttpCloseServerSession);
|
|
|
|
X(HttpCreateUrlGroup);
|
|
|
|
X(HttpCloseUrlGroup);
|
|
|
|
#undef X
|
|
|
|
}
|
|
|
|
|
|
|
|
static void test_HttpCreateHttpHandle(void)
|
|
|
|
{
|
|
|
|
HANDLE handle, handle2;
|
|
|
|
ULONG ret;
|
|
|
|
BOOL b;
|
|
|
|
|
|
|
|
ret = HttpCreateHttpHandle(NULL, 0);
|
|
|
|
todo_wine
|
|
|
|
ok(ret == ERROR_INVALID_PARAMETER, "Unexpected ret value %u.\n", ret);
|
|
|
|
|
|
|
|
/* Non-zero reserved parameter is accepted on XP/2k3. */
|
|
|
|
handle = NULL;
|
|
|
|
ret = HttpCreateHttpHandle(&handle, 0);
|
|
|
|
todo_wine {
|
|
|
|
ok(!ret, "Unexpected ret value %u.\n", ret);
|
|
|
|
ok(handle != NULL, "Unexpected handle value %p.\n", handle);
|
|
|
|
}
|
|
|
|
handle2 = NULL;
|
|
|
|
ret = HttpCreateHttpHandle(&handle2, 0);
|
|
|
|
todo_wine {
|
|
|
|
ok(!ret, "Unexpected ret value %u.\n", ret);
|
|
|
|
ok(handle2 != NULL && handle != handle2, "Unexpected handle %p.\n", handle2);
|
|
|
|
}
|
|
|
|
b = CloseHandle(handle);
|
|
|
|
todo_wine
|
|
|
|
ok(b, "Failed to close queue handle.\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
static void test_HttpCreateServerSession(void)
|
|
|
|
{
|
|
|
|
HTTP_SERVER_SESSION_ID session;
|
|
|
|
HTTPAPI_VERSION version;
|
|
|
|
ULONG ret;
|
|
|
|
|
|
|
|
if (!pHttpCreateServerSession || !pHttpCloseServerSession)
|
|
|
|
{
|
|
|
|
skip("HttpCreateServerSession() is not supported.\n");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
version.HttpApiMajorVersion = 1;
|
|
|
|
version.HttpApiMinorVersion = 0;
|
|
|
|
ret = pHttpCreateServerSession(version, NULL, 0);
|
2019-02-11 11:07:31 +01:00
|
|
|
todo_wine
|
2017-12-04 10:09:16 +01:00
|
|
|
ok(ret == ERROR_INVALID_PARAMETER, "Unexpected return value %u.\n", ret);
|
|
|
|
|
|
|
|
version.HttpApiMajorVersion = 1;
|
|
|
|
version.HttpApiMinorVersion = 1;
|
|
|
|
ret = pHttpCreateServerSession(version, &session, 0);
|
2019-02-11 11:07:31 +01:00
|
|
|
todo_wine
|
2017-12-04 10:09:16 +01:00
|
|
|
ok(ret == ERROR_REVISION_MISMATCH, "Unexpected return value %u.\n", ret);
|
|
|
|
|
|
|
|
version.HttpApiMajorVersion = 3;
|
|
|
|
version.HttpApiMinorVersion = 0;
|
|
|
|
ret = pHttpCreateServerSession(version, &session, 0);
|
2019-02-11 11:07:31 +01:00
|
|
|
todo_wine
|
2017-12-04 10:09:16 +01:00
|
|
|
ok(ret == ERROR_REVISION_MISMATCH, "Unexpected return value %u.\n", ret);
|
|
|
|
|
|
|
|
version.HttpApiMajorVersion = 2;
|
|
|
|
version.HttpApiMinorVersion = 0;
|
|
|
|
ret = pHttpCreateServerSession(version, &session, 0);
|
2019-02-11 11:07:31 +01:00
|
|
|
todo_wine
|
2017-12-04 10:09:16 +01:00
|
|
|
ok(!ret, "Unexpected return value %u.\n", ret);
|
|
|
|
ret = pHttpCloseServerSession(session);
|
2019-02-11 11:07:31 +01:00
|
|
|
todo_wine
|
2017-12-04 10:09:16 +01:00
|
|
|
ok(!ret, "Unexpected return value %u.\n", ret);
|
|
|
|
|
|
|
|
version.HttpApiMajorVersion = 1;
|
|
|
|
version.HttpApiMinorVersion = 0;
|
|
|
|
ret = pHttpCreateServerSession(version, &session, 0);
|
2019-02-11 11:07:31 +01:00
|
|
|
todo_wine
|
2017-12-04 10:09:16 +01:00
|
|
|
ok(!ret, "Unexpected return value %u.\n", ret);
|
|
|
|
ret = pHttpCloseServerSession(session);
|
2019-02-11 11:07:31 +01:00
|
|
|
todo_wine
|
2017-12-04 10:09:16 +01:00
|
|
|
ok(!ret, "Unexpected return value %u.\n", ret);
|
|
|
|
|
|
|
|
ret = pHttpCloseServerSession(0xdead);
|
|
|
|
ok(ret == ERROR_INVALID_PARAMETER, "Unexpected return value %u.\n", ret);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void test_HttpCreateUrlGroup(void)
|
|
|
|
{
|
|
|
|
HTTP_SERVER_SESSION_ID session;
|
|
|
|
HTTP_URL_GROUP_ID group_id;
|
|
|
|
HTTPAPI_VERSION version;
|
|
|
|
ULONG ret;
|
|
|
|
|
|
|
|
if (!pHttpCreateUrlGroup)
|
|
|
|
{
|
|
|
|
skip("HttpCreateUrlGroup is not supported.\n");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
group_id = 1;
|
|
|
|
ret = pHttpCreateUrlGroup(0, &group_id, 0);
|
|
|
|
ok(ret == ERROR_INVALID_PARAMETER, "Unexpected return value %u.\n", ret);
|
|
|
|
ok(group_id == 1, "Unexpected group id %s.\n", wine_dbgstr_longlong(group_id));
|
|
|
|
|
|
|
|
/* Create session, url group, close session. */
|
|
|
|
version.HttpApiMajorVersion = 1;
|
|
|
|
version.HttpApiMinorVersion = 0;
|
|
|
|
ret = pHttpCreateServerSession(version, &session, 0);
|
|
|
|
ok(!ret, "Unexpected return value %u.\n", ret);
|
|
|
|
|
|
|
|
group_id = 0;
|
|
|
|
ret = pHttpCreateUrlGroup(session, &group_id, 0);
|
|
|
|
ok(!ret, "Unexpected return value %u.\n", ret);
|
|
|
|
ok(group_id != 0, "Unexpected group id %s.\n", wine_dbgstr_longlong(group_id));
|
|
|
|
|
|
|
|
ret = pHttpCloseServerSession(session);
|
|
|
|
ok(!ret, "Unexpected return value %u.\n", ret);
|
|
|
|
|
|
|
|
/* Groups are closed together with their session. */
|
|
|
|
ret = pHttpCloseUrlGroup(group_id);
|
|
|
|
ok(ret == ERROR_INVALID_PARAMETER, "Unexpected return value %u.\n", ret);
|
|
|
|
|
|
|
|
/* Create session, url group, close group. */
|
|
|
|
ret = pHttpCreateServerSession(version, &session, 0);
|
|
|
|
ok(!ret, "Unexpected return value %u.\n", ret);
|
|
|
|
|
|
|
|
group_id = 0;
|
|
|
|
ret = pHttpCreateUrlGroup(session, &group_id, 0);
|
|
|
|
ok(!ret, "Unexpected return value %u.\n", ret);
|
|
|
|
ok(group_id != 0, "Unexpected group id %s.\n", wine_dbgstr_longlong(group_id));
|
|
|
|
|
|
|
|
ret = pHttpCloseUrlGroup(group_id);
|
|
|
|
ok(!ret, "Unexpected return value %u.\n", ret);
|
|
|
|
|
|
|
|
ret = pHttpCloseServerSession(session);
|
|
|
|
ok(!ret, "Unexpected return value %u.\n", ret);
|
|
|
|
}
|
|
|
|
|
|
|
|
START_TEST(httpapi)
|
|
|
|
{
|
|
|
|
HTTPAPI_VERSION version = { 1, 0 };
|
|
|
|
ULONG ret;
|
|
|
|
|
|
|
|
init();
|
|
|
|
|
|
|
|
ret = HttpInitialize(version, HTTP_INITIALIZE_SERVER, NULL);
|
|
|
|
ok(!ret, "Failed to initialize library, ret %u.\n", ret);
|
|
|
|
|
|
|
|
test_HttpCreateHttpHandle();
|
|
|
|
test_HttpCreateServerSession();
|
|
|
|
test_HttpCreateUrlGroup();
|
|
|
|
|
|
|
|
ret = HttpTerminate(HTTP_INITIALIZE_SERVER, NULL);
|
|
|
|
ok(!ret, "Failed to terminate, ret %u.\n", ret);
|
|
|
|
}
|