2004-03-09 Casper S. Hornstrup <chorns@users.sourceforge.net>

* regtests/Makefile: Make REGTEST_TARGETS depend on *.c.
	* regtests/kmregtests/driver.c: Update call to PerformTests().
	* regtests/kmrtint/kmrtint.c (RegTestMain): Update to match prototype.
	* regtests/kmrtint/kmrtint.def (RegTestMain): Ditto.
	* regtests/kmrtint/kmrtint.edf (RegTestMain): Ditto.
	* regtests/win32base/tests/ws2event.c: New file.
	* regtests/regtests/regtests.c (OUPUT_MODE_DbgPrint,
	OUPUT_MODE_OutputDebugString, OUPUT_MODE_printf): Define.
	(OutputMode): New variable.
	(OutputRoutine): New function.
	(RunTestDriver): Add TestName parameter.
	(main): Parse command line to find output routine and test name.
	* regtests/shared/regtests.c (PerformTest): Use specified output routine
	if specified. Run only specified test if specified.
	(PerformTests): Update call to PerformTest().
	* regtests/shared/regtests.h (TestOutputRoutine): Add prototype.
	(TestDriverMain): Add OutputRoutine and TestName parameter.
	(PerformTests): Ditto.
	* regtests/win32base/Makefile (TARGET_SDKLIBS): Add ws2_32.a.
	* regtests/win32base/driver.c (RegTestMain): Update to match prototype.
	* regtests/win32base/win32base.def (RegTestMain): Ditto.
	* regtests/win32base/win32base.edf (RegTestMain): Ditto.
	* tools/regtests.c (UMSTUB): Update call to PerformTests().

svn path=/trunk/; revision=8617
This commit is contained in:
Casper Hornstrup 2004-03-09 22:08:04 +00:00
parent 6616abd532
commit e2b29d7f6c
15 changed files with 273 additions and 35 deletions

View file

@ -1,3 +1,29 @@
2004-03-09 Casper S. Hornstrup <chorns@users.sourceforge.net>
* regtests/Makefile: Make REGTEST_TARGETS depend on *.c.
* regtests/kmregtests/driver.c: Update call to PerformTests().
* regtests/kmrtint/kmrtint.c (RegTestMain): Update to match prototype.
* regtests/kmrtint/kmrtint.def (RegTestMain): Ditto.
* regtests/kmrtint/kmrtint.edf (RegTestMain): Ditto.
* regtests/win32base/tests/ws2event.c: New file.
* regtests/regtests/regtests.c (OUPUT_MODE_DbgPrint,
OUPUT_MODE_OutputDebugString, OUPUT_MODE_printf): Define.
(OutputMode): New variable.
(OutputRoutine): New function.
(RunTestDriver): Add TestName parameter.
(main): Parse command line to find output routine and test name.
* regtests/shared/regtests.c (PerformTest): Use specified output routine
if specified. Run only specified test if specified.
(PerformTests): Update call to PerformTest().
* regtests/shared/regtests.h (TestOutputRoutine): Add prototype.
(TestDriverMain): Add OutputRoutine and TestName parameter.
(PerformTests): Ditto.
* regtests/win32base/Makefile (TARGET_SDKLIBS): Add ws2_32.a.
* regtests/win32base/driver.c (RegTestMain): Update to match prototype.
* regtests/win32base/win32base.def (RegTestMain): Ditto.
* regtests/win32base/win32base.edf (RegTestMain): Ditto.
* tools/regtests.c (UMSTUB): Update call to PerformTests().
2004-03-04 Casper S. Hornstrup <chorns@users.sourceforge.net> 2004-03-04 Casper S. Hornstrup <chorns@users.sourceforge.net>
* drivers/net/tcpip/tcpip/i386: New directory. * drivers/net/tcpip/tcpip/i386: New directory.

View file

@ -1,4 +1,4 @@
# $Id: Makefile,v 1.3 2004/02/22 18:53:39 dwelch Exp $ # $Id: Makefile,v 1.4 2004/03/09 22:08:04 chorns Exp $
PATH_TO_TOP = .. PATH_TO_TOP = ..
@ -27,7 +27,7 @@ install:
$(MAKE) -C kmrtint install $(MAKE) -C kmrtint install
$(MAKE) -C regtests install $(MAKE) -C regtests install
$(REGTEST_TARGETS): kmregtests/tests/* win32base/tests/* $(REGTEST_TARGETS): kmregtests/tests/*.c win32base/tests/*.c
$(REGTESTS) ./kmregtests/tests ./kmregtests/_regtests.c ./kmregtests/Makefile.tests $(REGTESTS) ./kmregtests/tests ./kmregtests/_regtests.c ./kmregtests/Makefile.tests
$(REGTESTS) ./win32base/tests ./win32base/_regtests.c ./win32base/Makefile.tests $(REGTESTS) ./win32base/tests ./win32base/_regtests.c ./win32base/Makefile.tests

View file

@ -60,7 +60,7 @@ KMRegTestsRun(
PIRP Irp, PIRP Irp,
PIO_STACK_LOCATION IrpSp) PIO_STACK_LOCATION IrpSp)
{ {
PerformTests(); PerformTests(NULL, NULL);
ShutdownBochs(); ShutdownBochs();
Irp->IoStatus.Status = STATUS_SUCCESS; Irp->IoStatus.Status = STATUS_SUCCESS;

View file

@ -53,7 +53,7 @@ OpenDevice()
} }
VOID STDCALL VOID STDCALL
RegTestMain() RegTestMain(TestOutputRoutine OutputRoutine, LPSTR TestName)
{ {
IO_STATUS_BLOCK Iosb; IO_STATUS_BLOCK Iosb;
HANDLE DeviceHandle; HANDLE DeviceHandle;

View file

@ -1,3 +1,3 @@
LIBRARY kmrtint.dll LIBRARY kmrtint.dll
EXPORTS EXPORTS
RegTestMain@0 RegTestMain@8

View file

@ -1,3 +1,3 @@
LIBRARY kmrtint.dll LIBRARY kmrtint.dll
EXPORTS EXPORTS
RegTestMain=RegTestMain@0 RegTestMain=RegTestMain@8

View file

@ -7,11 +7,34 @@
* 06-07-2003 CSH Created * 06-07-2003 CSH Created
*/ */
#define NTOS_MODE_USER #define NTOS_MODE_USER
#include <stdio.h>
#include <ntos.h> #include <ntos.h>
#include "regtests.h" #include "regtests.h"
VOID #define OUPUT_MODE_DbgPrint 0
RunTestDriver(LPTSTR FileName) #define OUPUT_MODE_OutputDebugString 1
#define OUPUT_MODE_printf 2
static int OutputMode = 0;
static void OutputRoutine(char *Buffer)
{
if (OutputMode == OUPUT_MODE_DbgPrint)
{
DbgPrint(Buffer);
}
else if (OutputMode == OUPUT_MODE_OutputDebugString)
{
OutputDebugString(Buffer);
}
else if (OutputMode == OUPUT_MODE_printf)
{
printf(Buffer);
}
}
static VOID
RunTestDriver(LPSTR FileName, LPSTR TestName)
{ {
TestDriverMain Main; TestDriverMain Main;
HMODULE hModule; HMODULE hModule;
@ -22,7 +45,7 @@ RunTestDriver(LPTSTR FileName)
Main = (TestDriverMain) GetProcAddress(hModule, "RegTestMain"); Main = (TestDriverMain) GetProcAddress(hModule, "RegTestMain");
if (Main != NULL) if (Main != NULL)
{ {
(Main)(); (Main)(OutputRoutine, TestName);
} }
FreeLibrary(hModule); FreeLibrary(hModule);
} }
@ -31,7 +54,36 @@ RunTestDriver(LPTSTR FileName)
int int
main(int argc, char* argv[]) main(int argc, char* argv[])
{ {
RunTestDriver("win32base.dll"); LPSTR testname = NULL;
RunTestDriver("kmrtint.dll"); int i;
if (argc > 1)
{
i = 1;
if (argv[i][0] == '-')
{
switch (argv[i][1])
{
case 'd':
OutputMode = OUPUT_MODE_DbgPrint;
break;
case 'o':
OutputMode = OUPUT_MODE_OutputDebugString;
break;
case 'p':
OutputMode = OUPUT_MODE_printf;
break;
default:
printf("Usage: regtests [-dop] [testname]");
return 0;
}
i++;
}
testname = argv[i];
}
RunTestDriver("win32base.dll", testname);
RunTestDriver("kmrtint.dll", testname);
return 0; return 0;
} }

View file

@ -7,6 +7,7 @@
* 06-07-2003 CSH Created * 06-07-2003 CSH Created
*/ */
#include <roscfg.h> #include <roscfg.h>
#include <stdio.h>
#define NTOS_MODE_USER #define NTOS_MODE_USER
#include <ntos.h> #include <ntos.h>
#include "regtests.h" #include "regtests.h"
@ -40,18 +41,31 @@ InitializeTests()
} }
VOID VOID
PerformTest(PROS_TEST Test) PerformTest(TestOutputRoutine OutputRoutine, PROS_TEST Test, LPSTR TestName)
{ {
char TestName[200]; char OutputBuffer[200];
char Buffer[200]; char Buffer[200];
char Name[200];
int Result; int Result;
memset(TestName, 0, sizeof(TestName)); memset(Name, 0, sizeof(Name));
memset(Buffer, 0, sizeof(Buffer)); memset(Buffer, 0, sizeof(Buffer));
if (!((Test->Routine)(TESTCMD_TESTNAME, TestName) == 0)) if (!((Test->Routine)(TESTCMD_TESTNAME, Name) == 0))
{ {
strcpy(TestName, "Unnamed"); if (TestName != NULL)
{
return;
}
strcpy(Name, "Unnamed");
}
if (TestName != NULL)
{
if (_stricmp(Name, TestName) != 0)
{
return;
}
} }
#ifdef SEH #ifdef SEH
@ -67,16 +81,24 @@ PerformTest(PROS_TEST Test)
if (Result != TS_OK) if (Result != TS_OK)
{ {
DbgPrint("ROSREGTEST: (%s) Status: Failed (%s)\n", TestName, Buffer); sprintf(OutputBuffer, "ROSREGTEST: (%s) Status: Failed (%s)\n", Name, Buffer);
} }
else else
{ {
DbgPrint("ROSREGTEST: (%s) Status: Success\n", TestName); sprintf(OutputBuffer, "ROSREGTEST: (%s) Status: Success\n", Name);
}
if (OutputRoutine != NULL)
{
(*OutputRoutine)(OutputBuffer);
}
else
{
DbgPrint(OutputBuffer);
} }
} }
VOID VOID
PerformTests() PerformTests(TestOutputRoutine OutputRoutine, LPSTR TestName)
{ {
PLIST_ENTRY CurrentEntry; PLIST_ENTRY CurrentEntry;
PLIST_ENTRY NextEntry; PLIST_ENTRY NextEntry;
@ -87,7 +109,7 @@ PerformTests()
{ {
NextEntry = CurrentEntry->Flink; NextEntry = CurrentEntry->Flink;
Current = CONTAINING_RECORD(CurrentEntry, ROS_TEST, ListEntry); Current = CONTAINING_RECORD(CurrentEntry, ROS_TEST, ListEntry);
PerformTest(Current); PerformTest(OutputRoutine, Current, TestName);
CurrentEntry = NextEntry; CurrentEntry = NextEntry;
} }
} }

View file

@ -24,8 +24,18 @@
*/ */
typedef int (*TestRoutine)(int Command, char *Buffer); typedef int (*TestRoutine)(int Command, char *Buffer);
/* Test driver entry routine */ /*
typedef VOID STDCALL (*TestDriverMain)(); * Test output routine prototype
* Buffer - Address of buffer with text to output
*/
typedef void (*TestOutputRoutine)(char *Buffer);
/*
* Test driver entry routine.
* OutputRoutine - Output routine.
* TestName - If NULL all tests are run. If non-NULL specifies the test to be run
*/
typedef void STDCALL (*TestDriverMain)(TestOutputRoutine OutputRoutine, char *TestName);
typedef struct _ROS_TEST typedef struct _ROS_TEST
{ {
@ -37,7 +47,7 @@ extern LIST_ENTRY AllTests;
extern VOID InitializeTests(); extern VOID InitializeTests();
extern VOID RegisterTests(); extern VOID RegisterTests();
extern VOID PerformTests(); extern VOID PerformTests(TestOutputRoutine OutputRoutine, LPSTR TestName);
/* Routines provided by the driver */ /* Routines provided by the driver */
extern PVOID AllocateMemory(ULONG Size); extern PVOID AllocateMemory(ULONG Size);

View file

@ -1,4 +1,4 @@
# $Id: Makefile,v 1.3 2003/12/07 11:34:41 chorns Exp $ # $Id: Makefile,v 1.4 2004/03/09 22:08:04 chorns Exp $
PATH_TO_TOP = ../.. PATH_TO_TOP = ../..
@ -8,7 +8,7 @@ TARGET_TYPE = dynlink
TARGET_NAME = win32base TARGET_NAME = win32base
TARGET_SDKLIBS = rtshared.a ntdll.a kernel32.a TARGET_SDKLIBS = rtshared.a ntdll.a kernel32.a ws2_32.a
TARGET_CFLAGS = -I../shared -Wall -Werror TARGET_CFLAGS = -I../shared -Wall -Werror

View file

@ -81,12 +81,13 @@ RunPrivateTests(LPTSTR FileName)
VOID STDCALL VOID STDCALL
RegTestMain() RegTestMain(TestOutputRoutine OutputRoutine, LPSTR TestName)
{ {
/* /*
* Private module regression tests in components already mapped * Private module regression tests in components already mapped
* (ntdll.dll, kernel32.dll, msvcrt.dll) * (ntdll.dll, kernel32.dll, msvcrt.dll)
*/ */
/* FIXME: Need to pass TestName to the driver */
RunPrivateTests(_T("ntdll.dll")); RunPrivateTests(_T("ntdll.dll"));
/* Other private module regression tests */ /* Other private module regression tests */
@ -94,5 +95,5 @@ RegTestMain()
/* Cross-module regression tests */ /* Cross-module regression tests */
InitializeTests(); InitializeTests();
RegisterTests(); RegisterTests();
PerformTests(); PerformTests(OutputRoutine, TestName);
} }

View file

@ -0,0 +1,127 @@
#include <stdio.h>
#include <windows.h>
#include <winsock2.h>
#include "regtests.h"
static int RunTest(char *Buffer)
{
const WSAEVENT* lphEvents;
WORD wVersionRequested;
WSAEVENT hEvent;
WSADATA wsaData;
DWORD ErrorCode;
int startup;
/* Require WinSock 2.0 or later */
wVersionRequested = MAKEWORD(2, 0);
startup = WSAStartup(wVersionRequested, &wsaData);
if (startup != 0)
{
sprintf(Buffer, "WSAStartup() failed with status %d", startup);
return TS_FAILED;
}
/* Check if the WinSock version is 2.0 */
if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 0)
{
strcpy(Buffer, "Winsock dll version is not 2.0 or higher");
WSACleanup();
return TS_FAILED;
}
/* Create an event */
hEvent = WSACreateEvent();
if (hEvent == WSA_INVALID_EVENT)
{
sprintf(Buffer, "WSACreateEvent() failed with status %d", WSAGetLastError());
WSACleanup();
return TS_FAILED;
}
/* Check that the state of the event defaults to non-signalled */
lphEvents = &hEvent;
ErrorCode = WSAWaitForMultipleEvents(1,
lphEvents,
FALSE,
0,
FALSE);
if (ErrorCode != WSA_WAIT_TIMEOUT)
{
sprintf(Buffer, "WSAWaitForMultipleEvents() has bad status %ld (should be WSA_WAIT_TIMEOUT (%ld))",
ErrorCode, WSA_WAIT_TIMEOUT);
WSACleanup();
return TS_FAILED;
}
if (!WSASetEvent(hEvent))
{
sprintf(Buffer, "WSASetEvent() failed with status %d", WSAGetLastError());
WSACleanup();
return TS_FAILED;
}
/* Check that the state of the event is now signalled */
lphEvents = &hEvent;
ErrorCode = WSAWaitForMultipleEvents(1,
lphEvents,
FALSE,
0,
FALSE);
if (ErrorCode != WSA_WAIT_EVENT_0)
{
sprintf(Buffer, "WSAWaitForMultipleEvents() has bad status %ld (should be WSA_WAIT_EVENT_0 (%ld))",
ErrorCode, WSA_WAIT_EVENT_0);
WSACleanup();
return TS_FAILED;
}
if (!WSAResetEvent(hEvent))
{
sprintf(Buffer, "WSAResetEvent() failed with status %d", WSAGetLastError());
WSACleanup();
return TS_FAILED;
}
/* Check that the state of the event is now non-signalled */
lphEvents = &hEvent;
ErrorCode = WSAWaitForMultipleEvents(1,
lphEvents,
FALSE,
0,
FALSE);
if (ErrorCode != WSA_WAIT_TIMEOUT)
{
/*sprintf(Buffer, "WSAWaitForMultipleEvents() now has bad status %d (should be WSA_WAIT_TIMEOUT (%d))",
ErrorCode, WSA_WAIT_TIMEOUT);*/
WSACleanup();
return TS_FAILED;
}
if (!WSACloseEvent(hEvent))
{
sprintf(Buffer, "WSACloseEvent() failed with status %d", WSAGetLastError());
WSACleanup();
return TS_FAILED;
}
WSACleanup();
return TS_OK;
}
int
Ws2eventTest(int Command, char *Buffer)
{
switch (Command)
{
case TESTCMD_RUN:
return RunTest(Buffer);
case TESTCMD_TESTNAME:
strcpy(Buffer, "Winsock 2 event");
return TS_OK;
default:
break;
}
return TS_FAILED;
}

View file

@ -1,3 +1,3 @@
LIBRARY win32base.dll LIBRARY win32base.dll
EXPORTS EXPORTS
RegTestMain@0 RegTestMain@8

View file

@ -1,3 +1,3 @@
LIBRARY win32base.dll LIBRARY win32base.dll
EXPORTS EXPORTS
RegTestMain=RegTestMain@0 RegTestMain=RegTestMain@8

View file

@ -480,7 +480,7 @@ static char UMSTUB[] =
" testsRegistered = 1;\n" " testsRegistered = 1;\n"
" InitializeTests();\n" " InitializeTests();\n"
" RegisterTests();\n" " RegisterTests();\n"
" PerformTests();\n" " PerformTests(NULL, NULL);\n"
" }\n" " }\n"
" }\n" " }\n"
"}\n"; "}\n";