Francois Gouget : kernel32/tests: Don't call ok() in child processes.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Aug 30 06:20:43 CDT 2007


Module: wine
Branch: master
Commit: 1f0fb354f5508be361b45167aba3b7da570d7ca9
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=1f0fb354f5508be361b45167aba3b7da570d7ca9

Author: Francois Gouget <fgouget at codeweavers.com>
Date:   Wed Aug 29 21:43:45 2007 +0200

kernel32/tests: Don't call ok() in child processes.

---

 dlls/kernel32/tests/debugger.c |   64 +++++++++++++++++++++++++++------------
 1 files changed, 44 insertions(+), 20 deletions(-)

diff --git a/dlls/kernel32/tests/debugger.c b/dlls/kernel32/tests/debugger.c
index c7c2270..54aae65 100644
--- a/dlls/kernel32/tests/debugger.c
+++ b/dlls/kernel32/tests/debugger.c
@@ -55,7 +55,7 @@ static void get_events(const char* name, HANDLE *start_event, HANDLE *done_event
     HeapFree(GetProcessHeap(), 0, event_name);
 }
 
-static void log_pid(const char* logfile, DWORD pid)
+static void save_blackbox(const char* logfile, void* blackbox, int size)
 {
     HANDLE hFile;
     DWORD written;
@@ -63,14 +63,14 @@ static void log_pid(const char* logfile, DWORD pid)
     hFile=CreateFileA(logfile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0);
     if (hFile == INVALID_HANDLE_VALUE)
         return;
-    WriteFile(hFile, &pid, sizeof(pid), &written, NULL);
+    WriteFile(hFile, blackbox, size, &written, NULL);
     CloseHandle(hFile);
 }
 
-static DWORD get_logged_pid(const char* logfile)
+static int load_blackbox(const char* logfile, void* blackbox, int size)
 {
     HANDLE hFile;
-    DWORD pid, read;
+    DWORD read;
     BOOL ret;
 
     hFile=CreateFileA(logfile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, 0);
@@ -79,20 +79,27 @@ static DWORD get_logged_pid(const char* logfile)
         ok(0, "unable to open '%s'\n", logfile);
         return 0;
     }
-    pid=0;
-    read=sizeof(pid);
-    ret=ReadFile(hFile, &pid, sizeof(pid), &read, NULL);
-    ok(read == sizeof(pid), "wrong size for '%s': read=%d\n", logfile, read);
+    ret=ReadFile(hFile, blackbox, size, &read, NULL);
+    ok(read == size, "wrong size for '%s': read=%d\n", logfile, read);
     CloseHandle(hFile);
-    return pid;
+    return 1;
 }
 
+typedef struct
+{
+    DWORD pid;
+} crash_blackbox_t;
+
 static void doCrash(int argc,  char** argv)
 {
     char* p;
 
     if (argc >= 4)
-        log_pid(argv[3], GetCurrentProcessId());
+    {
+        crash_blackbox_t blackbox;
+        blackbox.pid=GetCurrentProcessId();
+        save_blackbox(argv[3], &blackbox, sizeof(blackbox));
+    }
 
     /* Just crash */
     trace("child: crashing...\n");
@@ -100,22 +107,33 @@ static void doCrash(int argc,  char** argv)
     *p=0;
 }
 
+typedef struct
+{
+    int argc;
+    DWORD pid;
+    BOOL debug_rc;
+    DWORD debug_err;
+} debugger_blackbox_t;
+
 static void doDebugger(int argc, char** argv)
 {
     const char* logfile;
+    debugger_blackbox_t blackbox;
     HANDLE start_event, done_event, debug_event;
-    DWORD pid;
 
-    ok(argc == 6, "wrong debugger argument count: %d\n", argc);
+    blackbox.argc=argc;
     logfile=(argc >= 4 ? argv[3] : NULL);
-    pid=(argc >= 5 ? atol(argv[4]) : 0);
+    blackbox.pid=(argc >= 5 ? atol(argv[4]) : 0);
     debug_event=(argc >= 6 ? (HANDLE)atol(argv[5]) : NULL);
     if (debug_event && strcmp(myARGV[2], "dbgnoevent") != 0)
     {
-        ok(SetEvent(debug_event), "debugger: SetEvent(debug_event) failed\n");
+        blackbox.debug_rc=SetEvent(debug_event);
+        if (!blackbox.debug_rc)
+            blackbox.debug_err=GetLastError();
     }
+    else
+        blackbox.debug_rc=TRUE;
 
-    log_pid(logfile, pid);
     get_events(logfile, &start_event, &done_event);
     if (strcmp(myARGV[2], "dbgnoevent") != 0)
     {
@@ -123,8 +141,9 @@ static void doDebugger(int argc, char** argv)
         WaitForSingleObject(start_event, INFINITE);
     }
 
-    ok(SetEvent(done_event), "debugger: SetEvent(done_event) failed\n");
+    save_blackbox(logfile, &blackbox, sizeof(blackbox));
     trace("debugger: done debugging...\n");
+    SetEvent(done_event);
 
     /* Just exit with a known value */
     ExitProcess(0xdeadbeef);
@@ -140,7 +159,8 @@ static void crash_and_debug(HKEY hkey, const char* argv0, const char* debugger)
     PROCESS_INFORMATION	info;
     STARTUPINFOA startup;
     DWORD exit_code;
-    DWORD pid1, pid2;
+    crash_blackbox_t crash_blackbox;
+    debugger_blackbox_t dbg_blackbox;
 
     ret=RegSetValueExA(hkey, "auto", 0, REG_SZ, (BYTE*)"1", 2);
     ok(ret == ERROR_SUCCESS, "unable to set AeDebug/auto: ret=%d\n", ret);
@@ -180,9 +200,13 @@ static void crash_and_debug(HKEY hkey, const char* argv0, const char* debugger)
     trace("waiting for the debugger...\n");
     ok(WaitForSingleObject(done_event, 60000) == WAIT_OBJECT_0, "Timed out waiting for the debugger\n");
 
-    pid1=get_logged_pid(dbglog);
-    pid2=get_logged_pid(childlog);
-    ok(pid1 == pid2, "the child and debugged pids don't match: %d != %d\n", pid1, pid2);
+    assert(load_blackbox(childlog, &crash_blackbox, sizeof(crash_blackbox)));
+    assert(load_blackbox(dbglog, &dbg_blackbox, sizeof(dbg_blackbox)));
+
+    ok(dbg_blackbox.argc == 6, "wrong debugger argument count: %d\n", dbg_blackbox.argc);
+    ok(dbg_blackbox.pid == crash_blackbox.pid, "the child and debugged pids don't match: %d != %d\n", crash_blackbox.pid, dbg_blackbox.pid);
+    ok(dbg_blackbox.debug_rc, "debugger: SetEvent(debug_event) failed err=%d\n", dbg_blackbox.debug_err);
+
     assert(DeleteFileA(dbglog) != 0);
     assert(DeleteFileA(childlog) != 0);
 }




More information about the wine-cvs mailing list