[3/3] advapi32/tests: Add preliminary event tracing tests. (try 2)

Zebediah Figura z.figura12 at gmail.com
Tue Jun 9 13:49:10 CDT 2015


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

diff --git a/dlls/advapi32/tests/eventlog.c b/dlls/advapi32/tests/eventlog.c
index 1e48348..c9933c2 100644
--- a/dlls/advapi32/tests/eventlog.c
+++ b/dlls/advapi32/tests/eventlog.c
@@ -19,6 +19,7 @@
  */
 
 #include <stdarg.h>
+#include <initguid.h>
 
 #include "windef.h"
 #include "winbase.h"
@@ -26,6 +27,8 @@
 #include "winnt.h"
 #include "winreg.h"
 #include "sddl.h"
+#include "wmistr.h"
+#include "evntrace.h"
 
 #include "wine/test.h"
 
@@ -649,6 +652,154 @@ static const char eventlogsvc[] = "SYSTEM\\CurrentControlSet\\Services\\Eventlog
 static const char eventlogname[] = "Wine";
 static const char eventsources[][11] = { "WineSrc", "WineSrc1", "WineSrc20", "WineSrc300" };
 
+static void test_trace(void)
+{
+    const char sessionname[] = "Wine";
+    const char filepath[] = "wine.etl";
+    const GUID sessionguid = {0xdeadbeef,0xface,0xcafe,{0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef}};
+    const GUID providerguid = {0xdeadbeef,0xface,0xcafe,{0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42}};
+    PEVENT_TRACE_PROPERTIES properties;
+    TRACEHANDLE handle = 0;
+    LONG buffersize;
+    LONG ret;
+
+    /* set up EVENT_TRACE_PROPERTIES */
+    buffersize = sizeof(EVENT_TRACE_PROPERTIES)+sizeof(sessionname)+sizeof(providerguid);
+    properties = HeapAlloc(GetProcessHeap(), 0, buffersize);
+    ZeroMemory(properties,buffersize);
+    properties->Wnode.BufferSize = buffersize;
+    properties->Wnode.Guid = sessionguid;
+    properties->Wnode.ClientContext = 1;
+    properties->Wnode.Flags = WNODE_FLAG_TRACED_GUID;
+    properties->LogFileMode = EVENT_TRACE_FILE_MODE_NONE;
+    properties->LoggerNameOffset = sizeof(EVENT_TRACE_PROPERTIES);
+    properties->LogFileNameOffset = sizeof(EVENT_TRACE_PROPERTIES)+sizeof(sessionname);
+    strcpy((char*)properties+properties->LogFileNameOffset, filepath);
+
+    /* test for ERROR_BAD_LENGTH */
+
+    properties->Wnode.BufferSize = 0;
+    SetLastError(0xdeadbeef);
+    ret = StartTraceA(&handle, sessionname, properties);
+    todo_wine
+    {
+    ok(ret != ERROR_SUCCESS, "Expected failure\n");
+    ok(GetLastError() == ERROR_BAD_LENGTH, "Expected ERROR_BAD_LENGTH, got %d\n", GetLastError());
+    }
+    properties->Wnode.BufferSize = buffersize;
+
+    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());
+    }
+
+    properties->LogFileNameOffset = -1;
+    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 = sizeof(EVENT_TRACE_PROPERTIES);
+
+    properties->LoggerNameOffset = 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->LoggerNameOffset = sizeof(EVENT_TRACE_PROPERTIES);
+
+
+    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 = sizeof(EVENT_TRACE_PROPERTIES)+sizeof(sessionname);
+
+    /* invalid flag combination */
+    properties->LogFileMode = EVENT_TRACE_FILE_MODE_SEQUENTIAL | EVENT_TRACE_FILE_MODE_CIRCULAR;
+    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->LogFileMode = EVENT_TRACE_FILE_MODE_NONE;
+
+    properties->Wnode.Guid = SystemTraceControlGuid;
+    /*session name != KERNEL_LOGGER_NAME*/
+    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->Wnode.Guid = sessionguid;
+
+    /* test ERROR_BAD_PATHNAME */
+
+    properties->LogFileMode = 0;
+    properties->LogFileNameOffset = 0;
+    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());
+    }
+    properties->LogFileMode = EVENT_TRACE_FILE_MODE_NONE;
+    properties->LogFileNameOffset = sizeof(EVENT_TRACE_PROPERTIES)+sizeof(sessionname);
+
+    /* 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 */
+    ControlTraceA(handle, sessionname, properties, EVENT_TRACE_CONTROL_STOP);
+    HeapFree(GetProcessHeap(), 0, properties);
+}
+
 static BOOL create_new_eventlog(void)
 {
     HKEY key, eventkey;
@@ -1163,6 +1314,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