[PATCH] advapi32: Add some tests for StartTrace(). (v2)

Zebediah Figura z.figura12 at gmail.com
Sun Jul 3 21:15:30 CDT 2016


---
 dlls/advapi32/tests/eventlog.c | 139 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 139 insertions(+)

diff --git a/dlls/advapi32/tests/eventlog.c b/dlls/advapi32/tests/eventlog.c
index 3ca59c3..5163537 100644
--- a/dlls/advapi32/tests/eventlog.c
+++ b/dlls/advapi32/tests/eventlog.c
@@ -20,12 +20,15 @@
 
 #include <stdarg.h>
 
+#include "initguid.h"
 #include "windef.h"
 #include "winbase.h"
 #include "winerror.h"
 #include "winnt.h"
 #include "winreg.h"
 #include "sddl.h"
+#include "wmistr.h"
+#include "evntrace.h"
 
 #include "wine/test.h"
 
@@ -1142,6 +1145,141 @@ static void cleanup_eventlog(void)
     ok(bret, "Expected MoveFileEx to succeed: %d\n", GetLastError());
 }
 
+static void test_trace(void)
+{
+    const char sessionname[] = "Wine";
+    const char filepath[] = "wine.etl";
+    const LONG lnoffset = ((sizeof(EVENT_TRACE_PROPERTIES) >> 3) + 1) << 3; //pad to 8 bytes
+    const LONG lfnoffset = (((lnoffset + sizeof(sessionname)) >> 3) + 1) << 3; //pad to 8 bytes
+    EVENT_TRACE_PROPERTIES *properties;
+    TRACEHANDLE handle;
+    LONG buffersize;
+    LONG ret;
+
+    /* set up EVENT_TRACE_PROPERTIES */
+    buffersize = lfnoffset + sizeof(filepath);
+    properties = HeapAlloc(GetProcessHeap(), 0, buffersize);
+    ZeroMemory(properties, buffersize);
+    properties->Wnode.BufferSize = buffersize;
+    properties->LogFileMode = EVENT_TRACE_FILE_MODE_NONE;
+    properties->LoggerNameOffset = lnoffset;
+    properties->LogFileNameOffset = lfnoffset;
+    
+    /* test for ERROR_BAD_PATHNAME */
+    SetLastError(0xdeadbeef);
+    ret = StartTraceA(&handle, sessionname, properties);
+    todo_wine
+    {
+    ok(ret != ERROR_SUCCESS, "Expected failure\n");
+    ok(GetLastError() == ERROR_BAD_PATHNAME, "Expected ERROR_BAD_PATHNAME, got %d\n", GetLastError());
+    }
+
+    strcpy((char *)properties+properties->LogFileNameOffset, filepath);
+
+    /* test for ERROR_BAD_LENGTH */
+
+    SetLastError(0xdeadbeef);
+    ret = StartTraceA(&handle, "This name is too long", properties);
+    todo_wine
+    {
+    ok(ret != ERROR_SUCCESS, "Expected failure\n");
+    ok(GetLastError() == ERROR_BAD_LENGTH, "Expected ERROR_BAD_LENGTH, got %d\n", GetLastError());
+    }
+
+    /* test for ERROR_INVALID_PARAMETER */
+
+    SetLastError(0xdeadbeef);
+    ret = StartTraceA(&handle, sessionname, NULL);
+    todo_wine
+    {
+    ok(ret != ERROR_SUCCESS, "Expected failure\n");
+    ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
+    }
+
+    SetLastError(0xdeadbeef);
+    ret = StartTraceA(NULL, sessionname, properties);
+    todo_wine
+    {
+    ok(ret != ERROR_SUCCESS, "Expected failure\n");
+    ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
+    }
+
+    SetLastError(0xdeadbeef);
+    properties->LoggerNameOffset = 1;
+    ret = StartTraceA(&handle, sessionname, properties);
+    todo_wine
+    {
+    ok(ret != ERROR_SUCCESS, "Expected failure\n");
+    ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
+    }
+    properties->LoggerNameOffset = lnoffset;
+
+
+    properties->LogFileNameOffset = 0xdeadbeef;
+    SetLastError(0xdeadbeef);
+    ret = StartTraceA(&handle, sessionname, properties);
+    todo_wine
+    {
+    ok(ret != ERROR_SUCCESS, "Expected failure\n");
+    ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
+    }
+    properties->LogFileNameOffset = lfnoffset;
+
+    /* invalid flag combination */
+    SetLastError(0xdeadbeef); 
+    properties->LogFileMode = EVENT_TRACE_FILE_MODE_SEQUENTIAL | EVENT_TRACE_FILE_MODE_CIRCULAR;
+    ret = StartTraceA(&handle, sessionname, properties);
+    todo_wine
+    {
+    ok(ret != ERROR_SUCCESS, "Expected failure\n");
+    ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
+    }
+    properties->LogFileMode = EVENT_TRACE_FILE_MODE_NONE;
+
+    /* test ERROR_BAD_PATHNAME */
+
+    SetLastError(0xdeadbeef);
+    properties->LogFileNameOffset = 0;
+    ret = StartTraceA(&handle, sessionname, properties);
+    todo_wine
+    {
+    ok(ret != ERROR_SUCCESS, "Expected failure\n");
+    ok(GetLastError() == ERROR_BAD_PATHNAME, "Expected ERROR_BAD_PATHNAME, got %d\n", GetLastError());
+    }
+    properties->LogFileNameOffset = lfnoffset;
+
+    /* test ERROR_INVALID_NAME */
+
+    SetLastError(0xdeadbeef);
+    ret = StartTraceA(&handle, NULL, properties);
+    todo_wine
+    {
+    ok(ret != ERROR_SUCCESS, "Expected failure\n");
+    ok(GetLastError() == ERROR_INVALID_NAME, "Expected ERROR_INVALID_NAME, got %d\n", GetLastError());
+    }
+
+    /* test success */
+    SetLastError(0xdeadbeef);
+    ret = StartTraceA(&handle, sessionname, properties);
+    ok(ret == ERROR_SUCCESS, "Expected success\n");
+
+    /* start twice */
+    SetLastError(0xdeadbeef);
+    ret = StartTraceA(&handle, sessionname, properties);
+    todo_wine
+    {
+    ok(ret != ERROR_SUCCESS, "Expected failure\n");
+    ok(GetLastError() == ERROR_ALREADY_EXISTS, "Expected ERROR_ALREADY_EXISTS, got %d\n", GetLastError());
+    }
+
+    /* clean up */
+    if(handle){
+        ControlTraceA(handle, sessionname, properties, EVENT_TRACE_CONTROL_STOP);
+    }
+    HeapFree(GetProcessHeap(), 0, properties);
+}
+
+
 START_TEST(eventlog)
 {
     SetLastError(0xdeadbeef);
@@ -1163,6 +1301,7 @@ START_TEST(eventlog)
     test_openbackup();
     test_read();
     test_clear();
+    test_trace();
 
     /* Functional tests */
     if (create_new_eventlog())
-- 
1.9.1




More information about the wine-patches mailing list