Author: tfaber
Date: Sun Jul 10 08:03:15 2011
New Revision: 52599

URL: http://svn.reactos.org/svn/reactos?rev=52599&view=rev
Log:
[KMTEST]
- improve user friendliness by making the service management functions actually 
work

Modified:
    branches/GSoC_2011/KMTestSuite/kmtests/kmtest/kmtest.c
    branches/GSoC_2011/KMTestSuite/kmtests/kmtest/support.c
    branches/GSoC_2011/KMTestSuite/kmtests/kmtest/testlist.c

Modified: branches/GSoC_2011/KMTestSuite/kmtests/kmtest/kmtest.c
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2011/KMTestSuite/kmtests/kmtest/kmtest.c?rev=52599&r1=52598&r2=52599&view=diff
==============================================================================
--- branches/GSoC_2011/KMTestSuite/kmtests/kmtest/kmtest.c [iso-8859-1] 
(original)
+++ branches/GSoC_2011/KMTestSuite/kmtests/kmtest/kmtest.c [iso-8859-1] Sun Jul 
10 08:03:15 2011
@@ -22,11 +22,20 @@
 
 #define SERVICE_NAME        L"Kmtest"
 #define SERVICE_PATH        L"kmtest_drv.sys"
+#define SERVICE_DESCRIPTION L"ReactOS Kernel-Mode Test Suite Driver"
 
 #define LOGBUFFER_SIZE      16364
 #define RESULTBUFFER_SIZE   FIELD_OFFSET(KMT_RESULTBUFFER, 
LogBuffer[LOGBUFFER_SIZE])
 
+typedef enum
+{
+    KMT_DO_NOTHING,
+    KMT_LIST_TESTS,
+    KMT_RUN_TEST,
+} KMT_OPERATION;
+
 HANDLE KmtestHandle;
+SC_HANDLE KmtestServiceHandle;
 PCSTR ErrorFileAndLine = "No error";
 
 static void OutputError(DWORD Error);
@@ -211,6 +220,8 @@
     PKMT_TESTFUNC TestFunction;
     DWORD BytesRead;
 
+    assert(TestName != NULL);
+
     ResultBuffer = KmtAllocateResultBuffer(LOGBUFFER_SIZE);
     if (!DeviceIoControl(KmtestHandle, IOCTL_KMTEST_SET_RESULTBUFFER, 
ResultBuffer, RESULTBUFFER_SIZE, NULL, 0, &BytesRead, NULL))
         error_goto(Error, cleanup);
@@ -253,44 +264,70 @@
 {
     INT Status = EXIT_SUCCESS;
     DWORD Error = ERROR_SUCCESS;
-    SC_HANDLE ServiceHandle;
     PCSTR AppName = "kmtest.exe";
-    PCSTR TestName;
+    PCSTR TestName = NULL;
+    KMT_OPERATION Operation = KMT_DO_NOTHING;
 
     Error = KmtServiceInit();
     if (Error)
         goto cleanup;
 
-    Error = KmtCreateAndStartService(SERVICE_NAME, SERVICE_PATH, L"ReactOS 
Kernel-Mode Test Suite Driver", &ServiceHandle, FALSE);
-    if (Error)
-        goto cleanup;
-
-    KmtestHandle = CreateFile(KMTEST_DEVICE_PATH, GENERIC_READ | 
GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
-    if (KmtestHandle == INVALID_HANDLE_VALUE)
-        error_goto(Error, cleanup);
-
     if (ArgCount >= 1)
         AppName = Arguments[0];
 
     if (ArgCount <= 1)
     {
-        printf("Usage: %s <test_name>                 - run the specified 
test\n", AppName);
+        printf("Usage: %s <test_name>                 - run the specified test 
(creates/starts the driver(s) as appropriate)\n", AppName);
         printf("       %s --list                      - list available 
tests\n", AppName);
         printf("       %s <create|delete|start|stop>  - manage the kmtest 
driver\n\n", AppName);
-        Error = ListTests();
+        Operation = KMT_LIST_TESTS;
     }
     else
     {
         TestName = Arguments[1];
-        if (!lstrcmpA(Arguments[1], "--list"))
-            Error = ListTests();
+        if (!lstrcmpA(TestName, "create"))
+            Error = KmtCreateService(SERVICE_NAME, SERVICE_PATH, 
SERVICE_DESCRIPTION, &KmtestServiceHandle);
+        else if (!lstrcmpA(TestName, "delete"))
+            Error = KmtDeleteService(SERVICE_NAME, &KmtestServiceHandle);
+        else if (!lstrcmpA(TestName, "start"))
+            Error = KmtStartService(SERVICE_NAME, &KmtestServiceHandle);
+        else if (!lstrcmpA(TestName, "stop"))
+            Error = KmtStopService(SERVICE_NAME, &KmtestServiceHandle);
+
+        else if (!lstrcmpA(TestName, "--list"))
+            Operation = KMT_LIST_TESTS;
         else
-            Error = RunTest(TestName);
+            Operation = KMT_RUN_TEST;
+    }
+
+    if (Operation)
+    {
+        Error = KmtCreateAndStartService(SERVICE_NAME, SERVICE_PATH, 
SERVICE_DESCRIPTION, &KmtestServiceHandle, FALSE);
+        if (Error)
+            goto cleanup;
+
+        KmtestHandle = CreateFile(KMTEST_DEVICE_PATH, GENERIC_READ | 
GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
+        if (KmtestHandle == INVALID_HANDLE_VALUE)
+            error_goto(Error, cleanup);
+
+        switch (Operation)
+        {
+            case KMT_LIST_TESTS:
+                Error = ListTests();
+                break;
+            case KMT_RUN_TEST:
+                Error = RunTest(TestName);
+                break;
+            default:
+                assert(FALSE);
+        }
     }
 
 cleanup:
     if (KmtestHandle)
         CloseHandle(KmtestHandle);
+
+    KmtCloseService(&KmtestServiceHandle);
 
     if (Error)
         KmtServiceCleanup(TRUE);
@@ -298,10 +335,11 @@
         Error = KmtServiceCleanup(FALSE);
 
     if (Error)
+    {
         OutputError(Error);
 
-    if (Error)
         Status = EXIT_FAILURE;
+    }
 
     return Status;
 }

Modified: branches/GSoC_2011/KMTestSuite/kmtests/kmtest/support.c
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2011/KMTestSuite/kmtests/kmtest/support.c?rev=52599&r1=52598&r2=52599&view=diff
==============================================================================
--- branches/GSoC_2011/KMTestSuite/kmtests/kmtest/support.c [iso-8859-1] 
(original)
+++ branches/GSoC_2011/KMTestSuite/kmtests/kmtest/support.c [iso-8859-1] Sun 
Jul 10 08:03:15 2011
@@ -17,39 +17,6 @@
 #include <kmt_public.h>
 #include <kmt_test.h>
 
-/* pseudo-tests */
-START_TEST(Create)
-{
-    // nothing to do here. All tests create the service if needed
-}
-
-START_TEST(Delete)
-{
-    SC_HANDLE Handle = NULL;
-    DWORD Error = KmtDeleteService(L"Kmtest", &Handle);
-
-    ok_eq_hex(Error, (DWORD)ERROR_SUCCESS);
-}
-
-START_TEST(Start)
-{
-    // nothing to do here. All tests start the service
-}
-
-START_TEST(Stop)
-{
-    // TODO: requiring the service to be started for this is... bad,
-    // especially when it's marked for deletion and won't start ;)
-    SC_HANDLE Handle = NULL;
-    DWORD Error = KmtStopService(L"Kmtest", &Handle);
-
-    ok_eq_hex(Error, (DWORD)ERROR_SUCCESS);
-    Error = KmtCloseService(&Handle);
-    ok_eq_hex(Error, (DWORD)ERROR_SUCCESS);
-}
-
-/* test support functions for special-purpose drivers */
-
 extern HANDLE KmtestHandle;
 
 /**

Modified: branches/GSoC_2011/KMTestSuite/kmtests/kmtest/testlist.c
URL: 
http://svn.reactos.org/svn/reactos/branches/GSoC_2011/KMTestSuite/kmtests/kmtest/testlist.c?rev=52599&r1=52598&r2=52599&view=diff
==============================================================================
--- branches/GSoC_2011/KMTestSuite/kmtests/kmtest/testlist.c [iso-8859-1] 
(original)
+++ branches/GSoC_2011/KMTestSuite/kmtests/kmtest/testlist.c [iso-8859-1] Sun 
Jul 10 08:03:15 2011
@@ -10,19 +10,11 @@
 #include <windows.h>
 #include <kmt_test.h>
 
-VOID Test_Create(VOID);
-VOID Test_Delete(VOID);
-VOID Test_Start(VOID);
-VOID Test_Stop(VOID);
 VOID Test_Example(VOID);
 
 /* tests with a leading '-' will not be listed */
 const KMT_TEST TestList[] =
 {
-    { "-create",            Test_Create },
-    { "-delete",            Test_Delete },
-    { "-start",             Test_Start },
-    { "-stop",              Test_Stop, },
     { "Example",            Test_Example },
     { NULL,                 NULL },
 };


Reply via email to