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