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
24 #define WIN32_NO_STATUS
31 #include "wine/test.h"
33 static ULONG (WINAPI
*pHttpCreateServerSession
)(HTTPAPI_VERSION version
, HTTP_SERVER_SESSION_ID
*session_id
,
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
,
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
);
52 static void test_HttpCreateHttpHandle(void)
54 HANDLE handle
, handle2
;
58 ret
= HttpCreateHttpHandle(NULL
, 0);
60 ok(ret
== ERROR_INVALID_PARAMETER
, "Unexpected ret value %u.\n", ret
);
62 /* Non-zero reserved parameter is accepted on XP/2k3. */
64 ret
= HttpCreateHttpHandle(&handle
, 0);
66 ok(!ret
, "Unexpected ret value %u.\n", ret
);
67 ok(handle
!= NULL
, "Unexpected handle value %p.\n", handle
);
70 ret
= HttpCreateHttpHandle(&handle2
, 0);
72 ok(!ret
, "Unexpected ret value %u.\n", ret
);
73 ok(handle2
!= NULL
&& handle
!= handle2
, "Unexpected handle %p.\n", handle2
);
75 b
= CloseHandle(handle
);
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
;
86 if (!pHttpCreateServerSession
|| !pHttpCloseServerSession
)
88 skip("HttpCreateServerSession() is not supported.\n");
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
;
132 if (!pHttpCreateUrlGroup
)
134 skip("HttpCreateUrlGroup is not supported.\n");
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
);
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
);
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
);
179 HTTPAPI_VERSION version
= { 1, 0 };
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
);