Paul Gofman : ntoskrnl/tests: Add initial test for WSK listen socket.

Alexandre Julliard julliard at winehq.org
Mon Jun 15 15:03:05 CDT 2020


Module: wine
Branch: master
Commit: eea911a58b8d71f86973741477c124230e4710cd
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=eea911a58b8d71f86973741477c124230e4710cd

Author: Paul Gofman <pgofman at codeweavers.com>
Date:   Sun Jun 14 21:58:55 2020 +0300

ntoskrnl/tests: Add initial test for WSK listen socket.

Signed-off-by: Paul Gofman <pgofman at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ntoskrnl.exe/tests/driver4.c | 51 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)

diff --git a/dlls/ntoskrnl.exe/tests/driver4.c b/dlls/ntoskrnl.exe/tests/driver4.c
index 5f45c770df..4336fdb21a 100644
--- a/dlls/ntoskrnl.exe/tests/driver4.c
+++ b/dlls/ntoskrnl.exe/tests/driver4.c
@@ -163,6 +163,56 @@ static void test_wsk_get_address_info(void)
     provider_npi.Dispatch->WskFreeAddressInfo(provider_npi.Client, result);
 }
 
+struct socket_context
+{
+};
+
+static void test_wsk_listen_socket(void)
+{
+    static const WSK_CLIENT_LISTEN_DISPATCH client_listen_dispatch;
+    const WSK_PROVIDER_LISTEN_DISPATCH *dispatch;
+    struct socket_context context;
+    NTSTATUS status;
+    WSK_SOCKET *s;
+
+    status = provider_npi.Dispatch->WskSocket(NULL, AF_INET, SOCK_STREAM, IPPROTO_TCP,
+            WSK_FLAG_LISTEN_SOCKET, &context, &client_listen_dispatch, NULL, NULL, NULL, NULL);
+    ok(status == STATUS_INVALID_PARAMETER, "Got unexpected status %#x.\n", status);
+
+    IoReuseIrp(wsk_irp, STATUS_UNSUCCESSFUL);
+    IoSetCompletionRoutine(wsk_irp, irp_completion_routine, &irp_complete_event, TRUE, TRUE, TRUE);
+    status = provider_npi.Dispatch->WskSocket(NULL, AF_INET, SOCK_STREAM, IPPROTO_TCP,
+            WSK_FLAG_LISTEN_SOCKET, &context, &client_listen_dispatch, NULL, NULL, NULL, wsk_irp);
+    ok(status == STATUS_INVALID_HANDLE, "Got unexpected status %#x.\n", status);
+
+    IoReuseIrp(wsk_irp, STATUS_UNSUCCESSFUL);
+    IoSetCompletionRoutine(wsk_irp, irp_completion_routine, &irp_complete_event, TRUE, TRUE, TRUE);
+    wsk_irp->IoStatus.Status = 0xdeadbeef;
+    wsk_irp->IoStatus.Information = 0xdeadbeef;
+    status = provider_npi.Dispatch->WskSocket(provider_npi.Client, AF_INET, SOCK_STREAM, IPPROTO_TCP,
+            WSK_FLAG_LISTEN_SOCKET, &context, &client_listen_dispatch, NULL, NULL, NULL, wsk_irp);
+    ok(status == STATUS_PENDING, "Got unexpected status %#x.\n", status);
+    status = KeWaitForSingleObject(&irp_complete_event, Executive, KernelMode, FALSE, NULL);
+    ok(status == STATUS_SUCCESS, "Got unexpected status %#x.\n", status);
+    ok(wsk_irp->IoStatus.Status == STATUS_SUCCESS, "Got unexpected status %#x.\n", wsk_irp->IoStatus.Status);
+    ok(wsk_irp->IoStatus.Information, "Got zero Information.\n");
+
+    s = (WSK_SOCKET *)wsk_irp->IoStatus.Information;
+    dispatch = s->Dispatch;
+
+    IoReuseIrp(wsk_irp, STATUS_UNSUCCESSFUL);
+    IoSetCompletionRoutine(wsk_irp, irp_completion_routine, &irp_complete_event, TRUE, TRUE, TRUE);
+    wsk_irp->IoStatus.Status = 0xdeadbeef;
+    wsk_irp->IoStatus.Information = 0xdeadbeef;
+    status = dispatch->Basic.WskCloseSocket(s, wsk_irp);
+    ok(status == STATUS_PENDING, "Got unexpected status %#x.\n", status);
+    status = KeWaitForSingleObject(&irp_complete_event, Executive, KernelMode, FALSE, NULL);
+    ok(status == STATUS_SUCCESS, "Got unexpected status %#x.\n", status);
+    ok(wsk_irp->IoStatus.Status == STATUS_SUCCESS, "Got unexpected status %#x.\n", wsk_irp->IoStatus.Status);
+    ok(!wsk_irp->IoStatus.Information, "Got unexpected Information %#lx.\n",
+            wsk_irp->IoStatus.Information);
+}
+
 static NTSTATUS main_test(DEVICE_OBJECT *device, IRP *irp, IO_STACK_LOCATION *stack)
 {
     ULONG length = stack->Parameters.DeviceIoControl.OutputBufferLength;
@@ -188,6 +238,7 @@ static NTSTATUS main_test(DEVICE_OBJECT *device, IRP *irp, IO_STACK_LOCATION *st
 
     netio_init();
     test_wsk_get_address_info();
+    test_wsk_listen_socket();
 
     if (winetest_debug)
     {




More information about the wine-cvs mailing list