From d46de4a28a19fd074903e70d994417d15fee7295 Mon Sep 17 00:00:00 2001 From: Rex Jolliff Date: Wed, 4 Jul 2001 03:07:54 +0000 Subject: [PATCH] added some test cases to fsd tests svn path=/trunk/; revision=2033 --- reactos/apps/tests/test_old/makefile | 4 +- reactos/apps/tests/test_old/testfsd.c | 238 ++++++++++++++++-------- reactos/apps/tests/test_old/testsuite.c | 65 +++++++ reactos/apps/tests/test_old/testsuite.h | 44 +++++ 4 files changed, 273 insertions(+), 78 deletions(-) create mode 100644 reactos/apps/tests/test_old/testsuite.c create mode 100644 reactos/apps/tests/test_old/testsuite.h diff --git a/reactos/apps/tests/test_old/makefile b/reactos/apps/tests/test_old/makefile index f31eb8365e4..0e650cab477 100644 --- a/reactos/apps/tests/test_old/makefile +++ b/reactos/apps/tests/test_old/makefile @@ -65,8 +65,8 @@ tstdiomisc.exe: tstdiomisc.c $(CC) tstdiomisc.c -lkernel32 -o tstdiomisc.exe $(NM) --numeric-sort tstdiomisc.exe > tstdiomisc.sym -testfsd.exe: testfsd.c - $(CC) testfsd.c -lkernel32 -o testfsd.exe +testfsd.exe: testfsd.c testsuite.c + $(CC) testfsd.c testsuite.c -lkernel32 -o testfsd.exe $(NM) --numeric-sort testfsd.exe > testfsd.sym include ../../rules.mak diff --git a/reactos/apps/tests/test_old/testfsd.c b/reactos/apps/tests/test_old/testfsd.c index 5c3466d1573..2bf9cadd5c7 100644 --- a/reactos/apps/tests/test_old/testfsd.c +++ b/reactos/apps/tests/test_old/testfsd.c @@ -1,4 +1,4 @@ -/* $Id: testfsd.c,v 1.3 2001/05/01 19:42:56 narnaoud Exp $ +/* $Id: testfsd.c,v 1.4 2001/07/04 03:07:54 rex Exp $ * * FILE: testFSD.c * PURPOSE: A test set for the File System Driver @@ -8,19 +8,12 @@ * */ +#include #include #include +#include -#define ASSERT(x) doAssertion (x, #x, __FUNCTION__, __LINE__) - -struct TestSuite -{ - char *name; - void (*testFunc)(void); -}; - -#define ADD_TEST(x) {#x, x} -#define COUNT_TESTS(x) (sizeof x/sizeof (struct TestSuite)) +#include "testsuite.h" const char *rootDir = "c:\\"; const char *systemRootDir = "c:\\ReactOS"; @@ -29,56 +22,8 @@ const char *bogusRootFile = "c:\\bogus"; const char *bogusDirAndFile = "c:\\bogus\\bogus"; const char *bogusSystemRootFile = "c:\\ReactOS\\bogus"; const char *bogusSystemDllFile = "c:\\ReactOS\\System32\\bogus"; - -int tests, assertions, failures, successes; - -void doAssertion (BOOL pTest, PCHAR pTestText, PCHAR pFunction, int pLine); - -void testOpenExistant (void); -void testOpenNonExistant (void); -void testCreateExistant (void); -void testCreateNonExistant (void); -void testOverwriteExistant (void); -void testOverwriteNonExistant (void); -void testOpenWithBlankPathElements (void); - -struct TestSuite gTests [] = -{ - ADD_TEST (testOpenExistant), - ADD_TEST (testOpenNonExistant), - ADD_TEST (testCreateExistant), - ADD_TEST (testCreateNonExistant), -/* ADD_TEST (testOverwriteExistant),*/ -/* ADD_TEST (testOverwriteNonExistant),*/ - ADD_TEST (testOpenWithBlankPathElements) -}; - -int main (void) -{ - int testIndex; - - tests = assertions = failures = successes = 0; - - for (testIndex = 0; testIndex < COUNT_TESTS(gTests); testIndex++) - { - gTests [testIndex].testFunc (); - tests++; - } - - printf ("\nTotals: tests: %d assertions: %d successes: %d failures: %d\n", - tests, - assertions, - successes, - failures); - if (failures == 0) - { - printf ("\n*** OK ***\n"); - } - else - { - printf ("\n*** FAIL ***\n"); - } -} +const char *shortFile = "c:\\ReactOS\\boot.bat"; +const char *longFile = "c:\\ReactOS\\loadros.com"; void testOpenExistant (void) { @@ -133,24 +78,18 @@ void testCreateExistant (void) DWORD status; HANDLE fileHandle; -printf ("before CreateFile (%s)\n", rootDir); fileHandle = CreateFile (rootDir, GENERIC_READ, 0, 0, CREATE_NEW, 0, 0); -printf ("after CreateFile (%s)\n", rootDir); ASSERT (fileHandle == INVALID_HANDLE_VALUE); status = GetLastError (); ASSERT (status == ERROR_ALREADY_EXISTS); -printf ("before CreateFile (%s)\n", systemRootDir); fileHandle = CreateFile (systemRootDir, GENERIC_READ, 0, 0, CREATE_NEW, 0, 0); -printf ("after CreateFile (%s)\n", rootDir); ASSERT (fileHandle == INVALID_HANDLE_VALUE); status = GetLastError (); ASSERT (status == ERROR_ALREADY_EXISTS); -printf ("before CreateFile (%s)\n", systemDllDir); fileHandle = CreateFile (systemDllDir, GENERIC_READ, 0, 0, CREATE_NEW, 0, 0); -printf ("after CreateFile (%s)\n", rootDir); ASSERT (fileHandle == INVALID_HANDLE_VALUE); status = GetLastError (); ASSERT (status == ERROR_ALREADY_EXISTS); @@ -173,7 +112,6 @@ void testCreateNonExistant (void) CREATE_NEW, 0, 0); ASSERT (fileHandle != INVALID_HANDLE_VALUE); CloseHandle (fileHandle); - #if 0 fileHandle = CreateFile (bogusDirAndFile, GENERIC_READ, 0, 0, CREATE_NEW, 0, 0); @@ -184,6 +122,55 @@ void testCreateNonExistant (void) #endif } +void testDeleteFiles (void) +{ + BOOL returnValue; + HANDLE fileHandle; + + fileHandle = CreateFile ("bogus", GENERIC_READ, 0, 0, + CREATE_NEW, 0, 0); + ASSERT (fileHandle != INVALID_HANDLE_VALUE); + CloseHandle (fileHandle); + returnValue = DeleteFile ("bogus"); + ASSERT_MSG (returnValue, + "Delete of bogus failed, error:%d", + GetLastError ()); + +#if 0 + returnValue = DeleteFile (bogusRootFile); + ASSERT_MSG (returnValue, + "Delete of %s failed, error:%d", + bogusRootFile, + GetLastError ()); + returnValue = DeleteFile (bogusRootFile); + ASSERT_MSG (!returnValue, + "2nd Delete of %s succeeded but should fail", + bogusRootFile); + returnValue = DeleteFile (bogusSystemRootFile); + ASSERT_MSG (returnValue, + "Delete of %s failed, error:%d", + bogusSystemRootFile, + GetLastError ()); + returnValue = DeleteFile (bogusSystemRootFile); + ASSERT_MSG (!returnValue, + "2nd Delete of %s succeeded but should fail", + bogusSystemRootFile); + returnValue = DeleteFile (bogusSystemDllFile); + ASSERT_MSG (returnValue, + "Delete of %s failed, error:%d", + bogusSystemDllFile, + GetLastError ()); + returnValue = DeleteFile (bogusSystemDllFile); + ASSERT_MSG (!returnValue, + "2nd Delete of %s succeeded but should fail", + bogusSystemDllFile); + returnValue = DeleteFile (bogusDirAndFile); + ASSERT_MSG (!returnValue, + "Delete of %s succeded but should fail", + bogusDirAndFile); +#endif +} + void testOpenWithBlankPathElements (void) { HANDLE fileHandle; @@ -212,18 +199,117 @@ void testOpenWithBlankPathElements (void) CloseHandle (fileHandle); } -void doAssertion (BOOL pTest, PCHAR pTestText, PCHAR pFunction, int pLine) +void testReadOnInvalidHandle (void) { - assertions++; - if (!pTest) + BOOL returnValue; + char buffer [256]; + DWORD bytesRead; + + returnValue = ReadFile (INVALID_HANDLE_VALUE, + buffer, + 256, + &bytesRead, + NULL); + ASSERT_MSG (!returnValue, + "Read from invalid handle succeeded but should fail",0); + ASSERT (GetLastError () != ENOFILE); +} + +void testReadOnZeroLengthFile (void) +{ + BOOL returnValue; + HANDLE fileHandle; + char buffer [256]; + DWORD bytesRead; + + fileHandle = CreateFile (bogusRootFile, GENERIC_READ, 0, 0, + CREATE_NEW, 0, 0); + ASSERT (fileHandle != INVALID_HANDLE_VALUE); + CloseHandle (fileHandle); + fileHandle = CreateFile (bogusRootFile, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0); + ASSERT (fileHandle != INVALID_HANDLE_VALUE); + returnValue = ReadFile (fileHandle, buffer, 256, &bytesRead, NULL); + ASSERT_MSG (!returnValue, + "Read from zero length file succeeded but should fail",0); + ASSERT (GetLastError () != ERROR_HANDLE_EOF); + CloseHandle (fileHandle); + returnValue = DeleteFile (bogusRootFile); + ASSERT_MSG (returnValue, + "Delete of %s failed, error:%d", + bogusRootFile, + GetLastError ()); +} + +void testReadOnShortFile (void) +{ + BOOL returnValue; + HANDLE fileHandle; + char buffer [256]; + DWORD bytesRead; + + fileHandle = CreateFile (shortFile, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0); + ASSERT (fileHandle != INVALID_HANDLE_VALUE); + returnValue = ReadFile (fileHandle, + buffer, + 256, + &bytesRead, + NULL); + ASSERT_MSG (returnValue, + "Read from short length file failed, error:%d", + GetLastError ()); + ASSERT (bytesRead > 0 && bytesRead < 256); + CloseHandle (fileHandle); +} + +void testReadOnLongFile (void) +{ + BOOL returnValue; + HANDLE fileHandle; + char buffer [256]; + DWORD bytesRead; + int count; + + fileHandle = CreateFile (longFile, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0); + ASSERT (fileHandle != INVALID_HANDLE_VALUE); + for (count = 0; count < 20; count++) { - printf ("%s(%d): assertion \"%s\" failed", pFunction, pLine, pTestText); - failures++; + returnValue = ReadFile (fileHandle, + buffer, + 256, + &bytesRead, + NULL); + ASSERT_MSG (returnValue, + "Read from short length file failed, error:%d", + GetLastError ()); + ASSERT (bytesRead == 256); } - else + CloseHandle (fileHandle); +} + +int main (void) +{ + TEST_RUNNER testRunner; + TEST_SUITE testsToRun [] = { - successes++; - } + ADD_TEST (testOpenExistant), + ADD_TEST (testOpenNonExistant), + ADD_TEST (testCreateExistant), + ADD_TEST (testCreateNonExistant), + ADD_TEST (testDeleteFiles), +/* ADD_TEST (testOverwriteExistant),*/ +/* ADD_TEST (testOverwriteNonExistant),*/ + ADD_TEST (testOpenWithBlankPathElements), + ADD_TEST (testReadOnInvalidHandle), + ADD_TEST (testReadOnZeroLengthFile), + ADD_TEST (testReadOnShortFile), + ADD_TEST (testReadOnLongFile), +/* ADD_TEST (test), */ + END_TESTS + }; + + memset (&testRunner, 0, sizeof (TEST_RUNNER)); + tsRunTests (&testRunner, testsToRun); + tsReportResults (&testRunner); } diff --git a/reactos/apps/tests/test_old/testsuite.c b/reactos/apps/tests/test_old/testsuite.c new file mode 100644 index 00000000000..617bde8550f --- /dev/null +++ b/reactos/apps/tests/test_old/testsuite.c @@ -0,0 +1,65 @@ + +#include +#include + +#include "testsuite.h" + +static PTEST_RUNNER iTestRunner = 0; + +void tsRunTests (PTEST_RUNNER pTestRunner, PTEST_SUITE pTests) +{ + int testIndex; + + iTestRunner = pTestRunner; + for (testIndex = 0; pTests [testIndex].testFunc != 0; testIndex++) + { + pTests [testIndex].testFunc (); + pTestRunner->tests++; + } +} + +void tsReportResults (PTEST_RUNNER pTestRunner) +{ + printf ("\nTotal of %d tests.\n" + "Assertions: %d\n" + " Assertions which passed: %d\n" + " Assertions which failed: %d\n", + pTestRunner->tests, + pTestRunner->assertions, + pTestRunner->successes, + pTestRunner->failures); + if (pTestRunner->failures == 0) + { + printf ("\n*** OK ***\n"); + } + else + { + printf ("\n*** FAIL ***\n"); + } +} + +void tsDoAssertion (BOOL pTest, + PCHAR pTestText, + PCHAR pFunction, + int pLine, + ...) +{ + va_list ap; + + iTestRunner->assertions++; + if (!pTest) + { + va_start (ap, pLine); + printf ("%s(%d): ", pFunction, pLine); + vprintf (pTestText, ap); + printf ("\n"); + va_end(ap); + iTestRunner->failures++; + } + else + { + iTestRunner->successes++; + } +} + + diff --git a/reactos/apps/tests/test_old/testsuite.h b/reactos/apps/tests/test_old/testsuite.h new file mode 100644 index 00000000000..0abc2ef2b7d --- /dev/null +++ b/reactos/apps/tests/test_old/testsuite.h @@ -0,0 +1,44 @@ + +#ifndef H_TESTSUITE_H +#define H_TESTSUITE_H + +struct TestSuite +{ + char *name; + void (*testFunc)(void); +}; + +typedef struct TestSuite TEST_SUITE, *PTEST_SUITE; + +#define ADD_TEST(x) {#x, x} +#define END_TESTS {0, 0} +#define COUNT_TESTS(x) (sizeof x/sizeof (struct TestSuite)) + +struct TestRunner +{ + int tests; + int assertions; + int failures; + int successes; +}; + +typedef struct TestRunner TEST_RUNNER, *PTEST_RUNNER; + +void tsDoAssertion (BOOL pTest, + PCHAR pTestText, + PCHAR pFunction, + int pLine, + ...); + +#ifdef ASSERT +#undef ASSERT +#endif +#define ASSERT(x) tsDoAssertion (x, "assertion \"" ## #x ## "\" failed", __FUNCTION__, __LINE__) +#define ASSERT_MSG(x,y,a...) tsDoAssertion (x, y, __FUNCTION__, __LINE__,a) + +void tsRunTests (PTEST_RUNNER pTestRunner, PTEST_SUITE pTests); +void tsReportResults (PTEST_RUNNER pTestRunner); + +#endif + +