Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

217 lines
5.4 KiB

//+--------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1996.
//
// File: drt.cxx
//
// Contents: DRT main routine
//
//---------------------------------------------------------------
#include "headers.cxx"
#include "../../h/dbg.hxx"
#include "tests.hxx"
#include "illeg.hxx"
// Test flags and type
typedef ULONG FLAGS;
#define TF_NONE 0x00000000
// Suppression flags
#define TF_SUPPRESS 0x0000FFFF
#define TFS_ILLEGITIMATE 0x00000001
#define TFS_16BIT 0x00000002
// Enabling flags
#define TF_ENABLE 0xFFFF0000
#define TFE_DIRECT 0x00010000
#define TFE_ANY (TFE_DIRECT)
// Pointer to a test function
typedef void (*TestFn)(void);
static struct
{
char *pszName;
char *pszDesc;
TestFn tfn;
FLAGS flags;
} tests[] =
{
"Create", "Creation",
t_create, TFE_ANY,
"Open", "Opening",
t_open, TFE_ANY,
"AddRef", "AddRef/Release",
t_addref, TFE_ANY,
"DModify", "Direct modifications",
t_dmodify, TFE_DIRECT,
"Stat", "Stat",
t_stat, TFE_ANY,
"Stream", "Stream operations",
t_stream, TFE_ANY,
"Enum", "Enumerator operations",
t_enum, TFE_ANY,
"StgCopyTo", "IStorage::CopyTo",
t_stgcopyto, TFE_ANY,
"MoveCopy", "IStorage::MoveElementTo",
t_movecopy, TFE_ANY,
"ILockBytes", "ILockBytes usage",
t_ilb, TFE_ANY,
"StgMisc", "Miscellaneous Stg functions",
t_stgmisc, TFE_ANY,
"IllStg", "Illegitimate IStorage calls",
i_storage, TFE_ANY | TFS_ILLEGITIMATE,
"IllStm", "Illegitimate IStream calls",
i_stream, TFE_ANY | TFS_ILLEGITIMATE,
"IllEnum", "Illegitimate enumerator calls",
i_enum, TFE_ANY | TFS_ILLEGITIMATE
};
#define NTESTS (sizeof(tests)/sizeof(tests[0]))
DWORD dwRootDenyWrite = STGM_SHARE_DENY_WRITE;
BOOL fVerbose = FALSE;
OLECHAR atcDrtDocfile[_MAX_PATH];
static BOOL fRun[NTESTS];
#ifdef FLAT
static FLAGS flTests = TF_NONE;
#else
static FLAGS flTests = TF_NONE | TFS_16BIT;
#endif
static void Initialize(void)
{
SetData();
}
static void Uninitialize(void)
{
UnsetData();
}
static int FindTest(char *pszName)
{
int i, cchName;
cchName = strlen(pszName);
for (i = 0; i<NTESTS; i++)
if (!_strnicmp(pszName, tests[i].pszName, cchName))
return i;
return -1;
}
static void RunTests(void)
{
int i;
for (i = 0; i<NTESTS; i++)
// For a test to run:
// 1) fRun[test] must be TRUE
// 2) No suppression flags can be set that are not set in flTests
// 3) At least one enabling flag must be set that is set in flTests
if (fRun[i] &&
(tests[i].flags & ~flTests & TF_SUPPRESS) == 0 &&
(tests[i].flags & flTests & TF_ENABLE) != 0)
{
out("\n----- Test #%2d - %s -----\n", i+1, tests[i].pszDesc);
tests[i].tfn();
CleanData();
}
}
static void Usage(void)
{
int i;
printf("Usage: drt [options]\n");
printf("Options are:\n");
printf(" -h - This message\n");
printf(" -d - Suppress direct tests\n");
printf(" -i - Enable illegitimate tests\n");
printf(" -v - Display test output\n");
printf(" -#[+|-]<number> - Turn test <number> on (+) or off (-)\n");
printf(" No number means all\n");
printf(" -n[+|-]<prefix> - Turn test <prefix> on or off\n");
printf(" -N<file> - Set file to use for tests\n");
printf("Prefix can be any prefix of:\n");
printf("HR=%lx\n", E_INVALIDARG);
for (i = 0; i<NTESTS; i++)
printf(" %s\n", tests[i].pszName);
exit(1);
}
int __cdecl main(int argc, char **argv)
{
int i, iTest;
BOOL fDirect = TRUE;
// change the following line to set mem check breakpoints
// on win32, using debug CRT.
//_CrtSetBreakAlloc();
for (i = 0; i<NTESTS; i++)
fRun[i] = TRUE;
ATOOLE(pszDRTDF, atcDrtDocfile, _MAX_PATH);
while (--argc>0)
{
if (**++argv == '-')
{
switch(argv[0][1])
{
case '#':
if (sscanf(argv[0]+3, "%d", &iTest) != 1)
iTest = -1;
else
iTest--;
for (i = 0; i<NTESTS; i++)
if (iTest == -1 || iTest == i)
fRun[i] = argv[0][2] == '+';
break;
case 'd':
fDirect = FALSE;
break;
case 'i':
flTests |= TFS_ILLEGITIMATE;
break;
case 'n':
iTest = FindTest(argv[0]+3);
if (iTest >= 0)
fRun[iTest] = argv[0][2] == '+';
break;
case 'N':
ATOOLE(argv[0]+2, atcDrtDocfile, _MAX_PATH);
break;
case 'v':
fVerbose = TRUE;
break;
case 'h':
default:
Usage();
}
}
else
Usage();
}
Initialize();
if (fDirect)
{
out("\n---------- Direct ----------\n");
dwRootDenyWrite = STGM_SHARE_EXCLUSIVE;
flTests |= TFE_DIRECT;
RunTests();
flTests &= ~TFE_DIRECT;
}
printf("Storage DRT - PASSED\n");
Uninitialize();
return(0);
}