httpapi/tests: Added some basic tests for session and group creation.
[wine.git] / dlls / httpapi / tests / httpapi.c
blob47df2260c188091fdb9190aac048cefcc1dd7bbb
1 /*
2 * HttpApi tests
4 * Copyright 2017 Nikolay Sivov for CodeWeavers
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #include <stdarg.h>
23 #include "ntstatus.h"
24 #define WIN32_NO_STATUS
25 #include "windef.h"
26 #include "winbase.h"
27 #include "winnt.h"
28 #include "winternl.h"
29 #include "http.h"
31 #include "wine/test.h"
33 static ULONG (WINAPI *pHttpCreateServerSession)(HTTPAPI_VERSION version, HTTP_SERVER_SESSION_ID *session_id,
34 ULONG reserved);
35 static ULONG (WINAPI *pHttpCloseServerSession)(HTTP_SERVER_SESSION_ID session_id);
36 static ULONG (WINAPI *pHttpCreateUrlGroup)(HTTP_SERVER_SESSION_ID session_id, HTTP_URL_GROUP_ID *group_id,
37 ULONG reserved);
38 static ULONG (WINAPI *pHttpCloseUrlGroup)(HTTP_URL_GROUP_ID group_id);
40 static void init(void)
42 HMODULE mod = GetModuleHandleA("httpapi.dll");
44 #define X(f) p##f = (void *)GetProcAddress(mod, #f)
45 X(HttpCreateServerSession);
46 X(HttpCloseServerSession);
47 X(HttpCreateUrlGroup);
48 X(HttpCloseUrlGroup);
49 #undef X
52 static void test_HttpCreateHttpHandle(void)
54 HANDLE handle, handle2;
55 ULONG ret;
56 BOOL b;
58 ret = HttpCreateHttpHandle(NULL, 0);
59 todo_wine
60 ok(ret == ERROR_INVALID_PARAMETER, "Unexpected ret value %u.\n", ret);
62 /* Non-zero reserved parameter is accepted on XP/2k3. */
63 handle = NULL;
64 ret = HttpCreateHttpHandle(&handle, 0);
65 todo_wine {
66 ok(!ret, "Unexpected ret value %u.\n", ret);
67 ok(handle != NULL, "Unexpected handle value %p.\n", handle);
69 handle2 = NULL;
70 ret = HttpCreateHttpHandle(&handle2, 0);
71 todo_wine {
72 ok(!ret, "Unexpected ret value %u.\n", ret);
73 ok(handle2 != NULL && handle != handle2, "Unexpected handle %p.\n", handle2);
75 b = CloseHandle(handle);
76 todo_wine
77 ok(b, "Failed to close queue handle.\n");
80 static void test_HttpCreateServerSession(void)
82 HTTP_SERVER_SESSION_ID session;
83 HTTPAPI_VERSION version;
84 ULONG ret;
86 if (!pHttpCreateServerSession || !pHttpCloseServerSession)
88 skip("HttpCreateServerSession() is not supported.\n");
89 return;
92 version.HttpApiMajorVersion = 1;
93 version.HttpApiMinorVersion = 0;
94 ret = pHttpCreateServerSession(version, NULL, 0);
95 ok(ret == ERROR_INVALID_PARAMETER, "Unexpected return value %u.\n", ret);
97 version.HttpApiMajorVersion = 1;
98 version.HttpApiMinorVersion = 1;
99 ret = pHttpCreateServerSession(version, &session, 0);
100 ok(ret == ERROR_REVISION_MISMATCH, "Unexpected return value %u.\n", ret);
102 version.HttpApiMajorVersion = 3;
103 version.HttpApiMinorVersion = 0;
104 ret = pHttpCreateServerSession(version, &session, 0);
105 ok(ret == ERROR_REVISION_MISMATCH, "Unexpected return value %u.\n", ret);
107 version.HttpApiMajorVersion = 2;
108 version.HttpApiMinorVersion = 0;
109 ret = pHttpCreateServerSession(version, &session, 0);
110 ok(!ret, "Unexpected return value %u.\n", ret);
111 ret = pHttpCloseServerSession(session);
112 ok(!ret, "Unexpected return value %u.\n", ret);
114 version.HttpApiMajorVersion = 1;
115 version.HttpApiMinorVersion = 0;
116 ret = pHttpCreateServerSession(version, &session, 0);
117 ok(!ret, "Unexpected return value %u.\n", ret);
118 ret = pHttpCloseServerSession(session);
119 ok(!ret, "Unexpected return value %u.\n", ret);
121 ret = pHttpCloseServerSession(0xdead);
122 ok(ret == ERROR_INVALID_PARAMETER, "Unexpected return value %u.\n", ret);
125 static void test_HttpCreateUrlGroup(void)
127 HTTP_SERVER_SESSION_ID session;
128 HTTP_URL_GROUP_ID group_id;
129 HTTPAPI_VERSION version;
130 ULONG ret;
132 if (!pHttpCreateUrlGroup)
134 skip("HttpCreateUrlGroup is not supported.\n");
135 return;
138 group_id = 1;
139 ret = pHttpCreateUrlGroup(0, &group_id, 0);
140 ok(ret == ERROR_INVALID_PARAMETER, "Unexpected return value %u.\n", ret);
141 ok(group_id == 1, "Unexpected group id %s.\n", wine_dbgstr_longlong(group_id));
143 /* Create session, url group, close session. */
144 version.HttpApiMajorVersion = 1;
145 version.HttpApiMinorVersion = 0;
146 ret = pHttpCreateServerSession(version, &session, 0);
147 ok(!ret, "Unexpected return value %u.\n", ret);
149 group_id = 0;
150 ret = pHttpCreateUrlGroup(session, &group_id, 0);
151 ok(!ret, "Unexpected return value %u.\n", ret);
152 ok(group_id != 0, "Unexpected group id %s.\n", wine_dbgstr_longlong(group_id));
154 ret = pHttpCloseServerSession(session);
155 ok(!ret, "Unexpected return value %u.\n", ret);
157 /* Groups are closed together with their session. */
158 ret = pHttpCloseUrlGroup(group_id);
159 ok(ret == ERROR_INVALID_PARAMETER, "Unexpected return value %u.\n", ret);
161 /* Create session, url group, close group. */
162 ret = pHttpCreateServerSession(version, &session, 0);
163 ok(!ret, "Unexpected return value %u.\n", ret);
165 group_id = 0;
166 ret = pHttpCreateUrlGroup(session, &group_id, 0);
167 ok(!ret, "Unexpected return value %u.\n", ret);
168 ok(group_id != 0, "Unexpected group id %s.\n", wine_dbgstr_longlong(group_id));
170 ret = pHttpCloseUrlGroup(group_id);
171 ok(!ret, "Unexpected return value %u.\n", ret);
173 ret = pHttpCloseServerSession(session);
174 ok(!ret, "Unexpected return value %u.\n", ret);
177 START_TEST(httpapi)
179 HTTPAPI_VERSION version = { 1, 0 };
180 ULONG ret;
182 init();
184 ret = HttpInitialize(version, HTTP_INITIALIZE_SERVER, NULL);
185 ok(!ret, "Failed to initialize library, ret %u.\n", ret);
187 test_HttpCreateHttpHandle();
188 test_HttpCreateServerSession();
189 test_HttpCreateUrlGroup();
191 ret = HttpTerminate(HTTP_INITIALIZE_SERVER, NULL);
192 ok(!ret, "Failed to terminate, ret %u.\n", ret);