Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
7a1ad698
Commit
7a1ad698
authored
Dec 07, 2011
by
Jacek Caban
Committed by
Alexandre Julliard
Dec 08, 2011
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wininet: Added more connection failure tests.
parent
892d3cd4
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
89 additions
and
20 deletions
+89
-20
http.c
dlls/wininet/tests/http.c
+89
-20
No files found.
dlls/wininet/tests/http.c
View file @
7a1ad698
...
...
@@ -3221,6 +3221,8 @@ struct info
HANDLE
wait
;
DWORD
thread
;
unsigned
int
line
;
DWORD
expect_result
;
BOOL
is_aborted
;
};
static
CRITICAL_SECTION
notification_cs
;
...
...
@@ -3233,11 +3235,27 @@ static void CALLBACK check_notification( HINTERNET handle, DWORD_PTR context, DW
EnterCriticalSection
(
&
notification_cs
);
if
(
info
->
is_aborted
)
{
LeaveCriticalSection
(
&
notification_cs
);
return
;
}
if
(
status
==
INTERNET_STATUS_HANDLE_CREATED
)
{
DWORD
size
=
sizeof
(
struct
info
*
);
HttpQueryInfoA
(
handle
,
INTERNET_OPTION_CONTEXT_VALUE
,
&
info
,
&
size
,
0
);
}
else
if
(
status
==
INTERNET_STATUS_REQUEST_COMPLETE
)
{
INTERNET_ASYNC_RESULT
*
ar
=
(
INTERNET_ASYNC_RESULT
*
)
buffer
;
ok
(
buflen
==
sizeof
(
*
ar
),
"unexpected buflen = %d
\n
"
,
buflen
);
if
(
info
->
expect_result
==
ERROR_SUCCESS
)
{
ok
(
ar
->
dwResult
==
1
,
"ar->dwResult = %ld, expected 1
\n
"
,
ar
->
dwResult
);
}
else
{
ok
(
!
ar
->
dwResult
,
"ar->dwResult = %ld, expected 1
\n
"
,
ar
->
dwResult
);
ok
(
ar
->
dwError
==
info
->
expect_result
,
"ar->dwError = %d, expected %d
\n
"
,
ar
->
dwError
,
info
->
expect_result
);
}
}
i
=
info
->
index
;
if
(
i
>=
info
->
count
)
{
...
...
@@ -3277,17 +3295,22 @@ static void CALLBACK check_notification( HINTERNET handle, DWORD_PTR context, DW
LeaveCriticalSection
(
&
notification_cs
);
}
static
void
setup_test
(
struct
info
*
info
,
enum
api
function
,
unsigned
int
line
)
static
void
setup_test
(
struct
info
*
info
,
enum
api
function
,
unsigned
int
line
,
DWORD
expect_result
)
{
info
->
function
=
function
;
info
->
line
=
line
;
info
->
expect_result
=
expect_result
;
}
struct
notification_data
{
const
struct
notification
*
test
;
const
unsigned
int
count
;
const
char
*
method
;
const
char
*
host
;
const
char
*
path
;
const
char
*
data
;
BOOL
expect_conn_failure
;
};
static
const
struct
notification
async_send_request_ex_test
[]
=
...
...
@@ -3334,16 +3357,46 @@ static const struct notification async_send_request_ex_test2[] =
{
internet_close_handle
,
INTERNET_STATUS_HANDLE_CLOSING
,
0
,
}
};
static
const
struct
notification
async_send_request_ex_resolve_failure_test
[]
=
{
{
internet_connect
,
INTERNET_STATUS_HANDLE_CREATED
,
0
},
{
http_open_request
,
INTERNET_STATUS_HANDLE_CREATED
,
0
},
{
http_send_request_ex
,
INTERNET_STATUS_DETECTING_PROXY
,
1
,
0
,
1
},
{
http_send_request_ex
,
INTERNET_STATUS_RESOLVING_NAME
,
1
},
{
http_send_request_ex
,
INTERNET_STATUS_DETECTING_PROXY
,
1
,
0
,
1
},
{
http_send_request_ex
,
INTERNET_STATUS_REQUEST_COMPLETE
,
1
},
{
http_end_request
,
INTERNET_STATUS_REQUEST_COMPLETE
,
1
},
{
internet_close_handle
,
INTERNET_STATUS_CLOSING_CONNECTION
,
0
,
0
,
1
},
{
internet_close_handle
,
INTERNET_STATUS_CONNECTION_CLOSED
,
0
,
0
,
1
},
{
internet_close_handle
,
INTERNET_STATUS_HANDLE_CLOSING
,
0
,
},
{
internet_close_handle
,
INTERNET_STATUS_HANDLE_CLOSING
,
0
,
}
};
static
const
struct
notification_data
notification_data
[]
=
{
{
async_send_request_ex_test
,
sizeof
(
async_send_request_ex_test
)
/
sizeof
(
async_send_request_ex_test
[
0
]),
"POST"
,
"test.winehq.org"
,
"tests/posttest.php"
,
"Public ID=codeweavers"
},
{
async_send_request_ex_test2
,
sizeof
(
async_send_request_ex_test
)
/
sizeof
(
async_send_request_ex_test
[
0
])
sizeof
(
async_send_request_ex_test
)
/
sizeof
(
async_send_request_ex_test
[
0
]),
"POST"
,
"test.winehq.org"
,
"tests/posttest.php"
},
{
async_send_request_ex_resolve_failure_test
,
sizeof
(
async_send_request_ex_resolve_failure_test
)
/
sizeof
(
async_send_request_ex_resolve_failure_test
[
0
]),
"GET"
,
"brokenhost"
,
"index.html"
,
NULL
,
TRUE
}
};
static
void
test_async_HttpSendRequestEx
(
const
struct
notification_data
*
nd
)
...
...
@@ -3356,7 +3409,7 @@ static void test_async_HttpSendRequestEx(const struct notification_data *nd)
static
const
char
*
accept
[
2
]
=
{
"*/*"
,
NULL
};
char
buffer
[
32
];
trace
(
"
\n
"
);
trace
(
"
Async HttpSendRequestEx test (%s %s)
\n
"
,
nd
->
method
,
nd
->
host
);
InitializeCriticalSection
(
&
notification_cs
);
...
...
@@ -3365,50 +3418,63 @@ static void test_async_HttpSendRequestEx(const struct notification_data *nd)
info
.
index
=
0
;
info
.
wait
=
CreateEvent
(
NULL
,
FALSE
,
FALSE
,
NULL
);
info
.
thread
=
GetCurrentThreadId
();
info
.
is_aborted
=
FALSE
;
ses
=
InternetOpen
(
"winetest"
,
0
,
NULL
,
NULL
,
INTERNET_FLAG_ASYNC
);
ok
(
ses
!=
NULL
,
"InternetOpen failed
\n
"
);
pInternetSetStatusCallbackA
(
ses
,
check_notification
);
setup_test
(
&
info
,
internet_connect
,
__LINE__
);
con
=
InternetConnect
(
ses
,
"test.winehq.org"
,
80
,
NULL
,
NULL
,
INTERNET_SERVICE_HTTP
,
0
,
(
DWORD_PTR
)
&
info
);
setup_test
(
&
info
,
internet_connect
,
__LINE__
,
ERROR_SUCCESS
);
con
=
InternetConnect
(
ses
,
nd
->
host
,
80
,
NULL
,
NULL
,
INTERNET_SERVICE_HTTP
,
0
,
(
DWORD_PTR
)
&
info
);
ok
(
con
!=
NULL
,
"InternetConnect failed %u
\n
"
,
GetLastError
()
);
WaitForSingleObject
(
info
.
wait
,
10000
);
setup_test
(
&
info
,
http_open_request
,
__LINE__
);
req
=
HttpOpenRequest
(
con
,
"POST"
,
"tests/posttest.php"
,
NULL
,
NULL
,
accept
,
0
,
(
DWORD_PTR
)
&
info
);
setup_test
(
&
info
,
http_open_request
,
__LINE__
,
ERROR_SUCCESS
);
req
=
HttpOpenRequest
(
con
,
nd
->
method
,
nd
->
path
,
NULL
,
NULL
,
accept
,
0
,
(
DWORD_PTR
)
&
info
);
ok
(
req
!=
NULL
,
"HttpOpenRequest failed %u
\n
"
,
GetLastError
()
);
WaitForSingleObject
(
info
.
wait
,
10000
);
memset
(
&
b
,
0
,
sizeof
(
INTERNET_BUFFERSA
)
);
b
.
dwStructSize
=
sizeof
(
INTERNET_BUFFERSA
);
b
.
lpcszHeader
=
"Content-Type: application/x-www-form-urlencoded"
;
b
.
dwHeadersLength
=
strlen
(
b
.
lpcszHeader
);
b
.
dwBufferTotal
=
nd
->
data
?
strlen
(
nd
->
data
)
:
0
;
if
(
nd
->
data
)
{
memset
(
&
b
,
0
,
sizeof
(
INTERNET_BUFFERSA
)
);
b
.
dwStructSize
=
sizeof
(
INTERNET_BUFFERSA
);
b
.
lpcszHeader
=
"Content-Type: application/x-www-form-urlencoded"
;
b
.
dwHeadersLength
=
strlen
(
b
.
lpcszHeader
);
b
.
dwBufferTotal
=
nd
->
data
?
strlen
(
nd
->
data
)
:
0
;
}
setup_test
(
&
info
,
http_send_request_ex
,
__LINE__
);
setup_test
(
&
info
,
http_send_request_ex
,
__LINE__
,
nd
->
expect_conn_failure
?
ERROR_INTERNET_NAME_NOT_RESOLVED
:
ERROR_SUCCESS
);
ret
=
HttpSendRequestExA
(
req
,
nd
->
data
?
&
b
:
NULL
,
NULL
,
0x28
,
0
);
ok
(
!
ret
&&
GetLastError
()
==
ERROR_IO_PENDING
,
"HttpSendRequestExA failed %d %u
\n
"
,
ret
,
GetLastError
()
);
WaitForSingleObject
(
info
.
wait
,
10000
);
error
=
WaitForSingleObject
(
info
.
wait
,
10000
);
if
(
error
!=
WAIT_OBJECT_0
)
{
skip
(
"WaitForSingleObject returned %d, assuming DNS problem
\n
"
,
error
);
info
.
is_aborted
=
TRUE
;
goto
abort
;
}
size
=
sizeof
(
buffer
);
SetLastError
(
0xdeadbeef
);
ret
=
HttpQueryInfoA
(
req
,
HTTP_QUERY_CONTENT_ENCODING
,
buffer
,
&
size
,
0
);
error
=
GetLastError
();
ok
(
!
ret
,
"HttpQueryInfoA failed %u
\n
"
,
GetLastError
()
);
todo_wine
ok
(
error
==
ERROR_INTERNET_INCORRECT_HANDLE_STATE
,
"expected ERROR_INTERNET_INCORRECT_HANDLE_STATE got %u
\n
"
,
error
);
if
(
nd
->
expect_conn_failure
)
{
ok
(
error
==
ERROR_HTTP_HEADER_NOT_FOUND
,
"expected ERROR_HTTP_HEADER_NOT_FOUND got %u
\n
"
,
error
);
}
else
{
todo_wine
ok
(
error
==
ERROR_INTERNET_INCORRECT_HANDLE_STATE
,
"expected ERROR_INTERNET_INCORRECT_HANDLE_STATE got %u
\n
"
,
error
);
}
if
(
nd
->
data
)
{
written
=
0
;
size
=
strlen
(
nd
->
data
);
setup_test
(
&
info
,
internet_writefile
,
__LINE__
);
setup_test
(
&
info
,
internet_writefile
,
__LINE__
,
ERROR_SUCCESS
);
ret
=
InternetWriteFile
(
req
,
nd
->
data
,
size
,
&
written
);
ok
(
ret
,
"InternetWriteFile failed %u
\n
"
,
GetLastError
()
);
ok
(
written
==
size
,
"expected %u got %u
\n
"
,
written
,
size
);
...
...
@@ -3423,7 +3489,8 @@ static void test_async_HttpSendRequestEx(const struct notification_data *nd)
}
SetLastError
(
0xdeadbeef
);
setup_test
(
&
info
,
http_end_request
,
__LINE__
);
setup_test
(
&
info
,
http_end_request
,
__LINE__
,
nd
->
expect_conn_failure
?
ERROR_INTERNET_OPERATION_CANCELLED
:
ERROR_SUCCESS
);
ret
=
HttpEndRequestA
(
req
,
NULL
,
0x28
,
0
);
error
=
GetLastError
();
ok
(
!
ret
,
"HttpEndRequestA succeeded
\n
"
);
...
...
@@ -3431,7 +3498,8 @@ static void test_async_HttpSendRequestEx(const struct notification_data *nd)
WaitForSingleObject
(
info
.
wait
,
10000
);
setup_test
(
&
info
,
internet_close_handle
,
__LINE__
);
setup_test
(
&
info
,
internet_close_handle
,
__LINE__
,
ERROR_SUCCESS
);
abort:
InternetCloseHandle
(
req
);
InternetCloseHandle
(
con
);
InternetCloseHandle
(
ses
);
...
...
@@ -3571,6 +3639,7 @@ START_TEST(http)
test_open_url_async
();
test_async_HttpSendRequestEx
(
&
notification_data
[
0
]);
test_async_HttpSendRequestEx
(
&
notification_data
[
1
]);
test_async_HttpSendRequestEx
(
&
notification_data
[
2
]);
InternetOpenRequest_test
();
test_http_cache
();
InternetOpenUrlA_test
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment