Piotr Caban : ucrtbase: Report child process test failures in exit() tests.

Alexandre Julliard julliard at winehq.org
Mon Jul 9 16:00:35 CDT 2018


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Mon Jul  9 18:03:29 2018 +0200

ucrtbase: Report child process test failures in exit() tests.

Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ucrtbase/tests/misc.c | 33 ++++++++++++++++++++++++++++++++-
 1 file changed, 32 insertions(+), 1 deletion(-)

diff --git a/dlls/ucrtbase/tests/misc.c b/dlls/ucrtbase/tests/misc.c
index 99b9fd2..fad9311 100644
--- a/dlls/ucrtbase/tests/misc.c
+++ b/dlls/ucrtbase/tests/misc.c
@@ -769,16 +769,41 @@ static void test_asctime(void)
     ok(!strcmp(ret, "Thu Jan  1 00:00:00 1970\n"), "asctime returned %s\n", ret);
 }
 
+static LONG* get_failures_counter(HANDLE *map)
+{
+    *map = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE,
+            0, sizeof(LONG), "winetest_failures_counter");
+    return MapViewOfFile(*map, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(LONG));
+}
+
+static void free_failures_counter(LONG *mem, HANDLE map)
+{
+    UnmapViewOfFile(mem);
+    CloseHandle(map);
+}
+
+static void set_failures_counter(LONG add)
+{
+    HANDLE failures_map;
+    LONG *failures;
+
+    failures = get_failures_counter(&failures_map);
+    *failures = add;
+    free_failures_counter(failures, failures_map);
+}
+
 static void test_exit(const char *argv0)
 {
     PROCESS_INFORMATION proc;
     STARTUPINFOA startup = {0};
     char path[MAX_PATH];
-    HANDLE exit_event;
+    HANDLE failures_map, exit_event;
+    LONG *failures;
     DWORD ret;
 
     exit_event = CreateEventA(NULL, FALSE, FALSE, "exit_event");
 
+    failures = get_failures_counter(&failures_map);
     sprintf(path, "%s misc exit", argv0);
     startup.cb = sizeof(startup);
     CreateProcessA(NULL, path, NULL, NULL, TRUE, 0, NULL, NULL, &startup, &proc);
@@ -788,6 +813,9 @@ static void test_exit(const char *argv0)
     ok(ret == 1, "child process exited with code %d\n", ret);
     CloseHandle(proc.hProcess);
     CloseHandle(proc.hThread);
+    ok(!*failures, "%d tests failed in child process\n", *failures);
+    free_failures_counter(failures, failures_map);
+
 
     ret = WaitForSingleObject(exit_event, 0);
     ok(ret == WAIT_OBJECT_0, "exit_event was not set (%x)\n", ret);
@@ -805,18 +833,21 @@ static void CDECL at_exit_func1(void)
     atexit_called++;
     SetEvent(exit_event);
     CloseHandle(exit_event);
+    set_failures_counter(winetest_get_failures());
 }
 
 static void CDECL at_exit_func2(void)
 {
     ok(!atexit_called, "atexit_called = %d\n", atexit_called);
     atexit_called++;
+    set_failures_counter(winetest_get_failures());
 }
 
 static void test_call_exit(void)
 {
     ok(!p__crt_atexit(at_exit_func1), "_crt_atexit failed\n");
     ok(!p__crt_atexit(at_exit_func2), "_crt_atexit failed\n");
+    set_failures_counter(winetest_get_failures());
     p_exit(1);
 }
 




More information about the wine-cvs mailing list