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.
 
 
 
 
 
 

388 lines
9.5 KiB

//+-------------------------------------------------------------------
// Microsoft OLE
// Copyright (C) Microsoft Corporation, 1994-1995.
//
// File: cmdutest.cxx
//
// Contents: Unit test for the CDebugHelp class implementation.
// Utilizes functions in arghelp.cxx and the CRegistryHelp
// class.
//
// Classes: None
//
// History: 28-Nov-94 DeanE Created
//---------------------------------------------------------------------
#include <oleworld.hxx>
// Declare the CDebugHelp object
DH_DECLARE;
// Local Functions
HRESULT SettingsTest(VOID);
HRESULT TraceTest(VOID);
HRESULT LogTest(VOID);
HRESULT AssertTest(VOID);
// Test TRACE level flags
#define DH_UTEST_LVL1 0x00001000
#define DH_UTEST_LVL2 0x08000000
// Results macros
#define TESTFAIL(msg) \
printf("FAIL: %s, %ul - %s\n", __FILE__, __LINE__, msg)
#define TESTPASS(msg) \
printf("PASS: %s\n", msg)
// Define the CDebugHelp object
DH_DEFINE;
//+---------------------------------------------------------------------
// Function: main
//
// Synopsis: Command line test utilizing a CDebugHelp object.
// Excercises Trace Location, Log Location, Trace Level,
// Trace and Log output, and Assert functionality. Uses
// a log created via DH_CREATELOGARGS.
//
// Arguments: [argc] - Number of command line arguments.
// [argv] - Command line arguments.
//
// Returns: Zero if no errors, otherwise non-zero
//
// History: 28-Nov-94 DeanE Created
//----------------------------------------------------------------------
int _cdecl main(int argc, char *argv[])
{
HRESULT hr;
// First, create a log
hr = DH_CREATELOGARGS(argc, argv);
if (FAILED(hr))
{
printf("Log creation failed - %lx\n", hr);
return(1);
}
// Set & retrieve settings
hr = SettingsTest();
if (SUCCEEDED(hr))
{
TESTPASS("Debug settings");
}
else
{
TESTFAIL("Debug settings");
return(1);
}
// Trace output macro tests
hr = TraceTest();
if (SUCCEEDED(hr))
{
TESTPASS("Trace Output");
}
else
{
TESTFAIL("Trace Output");
return(1);
}
// Logging output macro tests
hr = LogTest();
if (SUCCEEDED(hr))
{
TESTPASS("Log Output");
}
else
{
TESTFAIL("Log Output");
return(1);
}
// Assert tests
hr = AssertTest();
if (SUCCEEDED(hr))
{
TESTPASS("Assert Test");
}
else
{
TESTFAIL("Assert Test");
return(1);
}
return(0);
}
//+---------------------------------------------------------------------
// Function: SettingsTest
//
// Synopsis: Sets and checks (by retrieving) values in the
// global CDebugHelp object. Assumes a log has been
// created.
//
// Arguments: None.
//
// Returns: S_OK if test passes, error code if not.
//
// History: 28-Nov-94 DeanE Created
//----------------------------------------------------------------------
HRESULT SettingsTest()
{
HRESULT hr;
DWORD fValues;
// Set and check Trace Location
// Set a valid setting - should succeed
//
hr = DH_SETTRACELOC(DH_LOC_STDOUT);
if (SUCCEEDED(hr))
{
fValues = DH_GETTRACELOC;
hr = (fValues & DH_LOC_STDOUT) ? S_OK : E_FAIL;
}
if (FAILED(hr))
{
TESTFAIL("DH_SETTRACELOC test - valid setting");
}
// Set an invalid setting - should fail
if (SUCCEEDED(hr))
{
hr = DH_SETTRACELOC(DH_LOC_NONE);
if (FAILED(hr))
{
hr = S_OK;
}
}
if (FAILED(hr))
{
TESTFAIL("DH_SETTRACELOC test - invalid setting");
return(hr);
}
// Set and check Log Location
// Set a valid setting - should succeed
//
hr = DH_SETLOGLOC(DH_LOC_STDOUT|DH_LOC_LOG);
if (SUCCEEDED(hr))
{
fValues = DH_GETLOGLOC;
hr = (fValues & DH_LOC_STDOUT) &&
(fValues & DH_LOC_LOG) ? S_OK : E_FAIL;
}
if (FAILED(hr))
{
TESTFAIL("DH_SETLOGLOC test - valid setting");
}
// Set an invalid setting - should fail
if (SUCCEEDED(hr))
{
hr = DH_SETLOGLOC(DH_LOC_NONE);
if (FAILED(hr))
{
hr = S_OK;
}
}
if (FAILED(hr))
{
TESTFAIL("DH_SETLOGLOC test - invalid setting");
return(hr);
}
// Set and check Trace Level
// Set a valid level - should succeed
//
hr = DH_SETLVL(DH_UTEST_LVL1|DH_LVL_TRACE1);
if (SUCCEEDED(hr))
{
fValues = DH_GETTRACELVL;
hr = (fValues & DH_UTEST_LVL1) &&
(fValues & DH_LVL_TRACE1) ? S_OK : E_FAIL;
}
if (FAILED(hr))
{
TESTFAIL("DH_SETLVL test - valid setting");
}
// Try to turn one of the reserved settings off - should fail
if (SUCCEEDED(hr))
{
hr = DH_SETLVL(DH_GETTRACELVL&~DH_LVL_ERROR);
if (SUCCEEDED(hr))
{
fValues = DH_GETTRACELVL;
hr = (fValues & DH_LVL_ERROR) ? S_OK : E_FAIL;
}
}
if (FAILED(hr))
{
TESTFAIL("DH_SETLVL - turn reserved off");
}
return(hr);
}
//+---------------------------------------------------------------------
// Function: TraceTest
//
// Synopsis: Tests TRACE macro outputs of the global CDebugHelp object.
//
// Arguments: None.
//
// Returns: S_OK if test passes, error code if not.
//
// History: 28-Nov-94 DeanE Created
//----------------------------------------------------------------------
HRESULT TraceTest()
{
HRESULT hr;
// Set the Trace Location to STDOUT and the debug terminal so we
// can see messages
//
hr = DH_SETTRACELOC(DH_LOC_STDOUT|DH_LOC_TERM);
if (FAILED(hr))
{
TESTFAIL("Cannot set test trace location");
return(hr);
}
printf("Six messages should appear\n");
// Set a level that should NOT produce a message...
hr = DH_SETLVL(DH_UTEST_LVL2);
if (FAILED(hr))
{
TESTFAIL("Failure setting test trace level");
return(hr);
}
// Output a message at a level NOT set
DH_TRACE((DH_UTEST_LVL1, TEXT("ERROR! Message should not appear!")));
// Output simple messages that should appear
DH_TRACE((DH_LVL_ALWAYS, TEXT("Sample ALWAYS message")));
DH_TRACE((DH_LVL_ERROR, TEXT("Sample ERROR message")));
DH_TRACE((DH_UTEST_LVL2, TEXT("Sample USER-DEFINED message")));
// Output complex messages
DH_TRACE((DH_LVL_ALWAYS,
TEXT("ALWAYS - Expansion File: %s, Line: %lu"),
TEXT(__FILE__),
__LINE__));
// Output messages with multiple levels set
hr = DH_SETLVL(DH_UTEST_LVL2 | DH_UTEST_LVL1);
if (FAILED(hr))
{
TESTFAIL("Failure setting multiple trace levels");
return(hr);
}
DH_TRACE((DH_UTEST_LVL1,
TEXT("Sample MULTI-USER-DEFINED message value: %lx"),
DH_UTEST_LVL1));
DH_TRACE((DH_UTEST_LVL2,
TEXT("Sample MULTI-USER-DEFINED message value: %lx"),
DH_UTEST_LVL2));
DH_TRACE((DH_LVL_TRACE4,
TEXT("ERROR! Message TRACE4 should not appear!")));
return(hr);
}
//+---------------------------------------------------------------------
// Function: LogTest
//
// Synopsis: Tests LOG macro outputs of the global CDebugHelp object.
//
// Arguments: None.
//
// Returns: S_OK if test passes, error code if not.
//
// History: 28-Nov-94 DeanE Created
//----------------------------------------------------------------------
HRESULT LogTest()
{
HRESULT hr;
// Set the Log Location to STDOUT, the log, and the debug
// terminal so we can see messages
//
hr = DH_SETLOGLOC(DH_LOC_STDOUT|DH_LOC_TERM|DH_LOC_LOG);
if (FAILED(hr))
{
TESTFAIL("Cannot set test log location");
return(hr);
}
// Report a simple PASS, complex FAIL, and statistics
DH_LOG((LOG_PASS, TEXT("Simple sample PASS")));
DH_LOG((LOG_FAIL,
TEXT("Complex sample FAIL %s, %lu"),
TEXT(__FILE__),
__LINE__));
printf("Correct totals: 1 PASS, 1 FAIL, 0 ABORT\n");
DH_LOGSTATS;
return(hr);
}
//+---------------------------------------------------------------------
// Function: AssertTest
//
// Synopsis: Tests ASSERT macro outputs of the global CDebugHelp object.
//
// Arguments: None.
//
// Returns: S_OK if test passes, error code if not.
//
// History: 28-Nov-94 DeanE Created
//----------------------------------------------------------------------
HRESULT AssertTest()
{
#pragma warning(disable: 4127) // Examined and ignored
// Set Lab Mode to ON - we should NOT get any popups
DH_SETMODE(DH_LABMODE_ON);
// Trigger an assert
DH_ASSERT(!"LABMODE ON - NO POPUP SHOULD APPEAR");
// Set Lab Mode to ON - we should get popups
DH_SETMODE(DH_LABMODE_OFF);
// This assert should NOT trigger
DH_ASSERT(5 < 6);
// Set Lab Mode to OFF - we should get a popup
DH_ASSERT(!"LABMODE OFF - POPUP SHOULD APPEAR");
#pragma warning(default: 4127) // Examined and ignored
return(S_OK);
}