/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // BVTMain.CPP // // // Copyright (c)2000 Microsoft Corporation, All Rights Reserved // /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #define DECLARE_GLOBALS #include #include /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// BOOL ParseCommandLine(int argc, char *argv[]) { BOOL fRc = TRUE; //============================================================================================ // Set the default error log name. //============================================================================================ g_LogFile.SetFileName(L"BVT.LOG"); g_Options.SetFileName(L"BVT.INI"); //============================================================================================ // // Loop through the command line and get all of the available arguments. // //============================================================================================ for(int i=1; iGetObject(CBSTR(L"__NAMESPACE"),WBEM_FLAG_RETURN_WBEM_COMPLETE,NULL,&pClass,NULL ); if( hr == S_OK ) { IWbemClassObject * pInst = NULL; hr = pClass->SpawnInstance(0, &pInst); } } } } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //***************************************************************************************************************** // // Run the tests // //***************************************************************************************************************** /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int RunTests(int nWhichTest) { int nRc = FATAL_ERROR; g_LogFile.LogError(__FILE__,__LINE__,SUCCESS, L"Running Test# %d ", nWhichTest ); switch( nWhichTest ) { //================================================================= // Basic connect using IWbemLocator //================================================================= case APITEST1: nRc = BasicConnectUsingIWbemLocator(); break; //================================================================= // Basic Sync connect using IWbemConnection //================================================================= case APITEST2: nRc = BasicSyncConnectUsingIWbemConnection(); break; //============================================================= // Basic connect sync & async using IWbemConnection //============================================================= case APITEST3: nRc = BasicAsyncConnectUsingIWbemConnection(); break; //============================================================= // Create a new test namespace //============================================================= case APITEST4: nRc = CreateNewTestNamespace(); break; //============================================================= // Create 10 classes with different properties. Some of // these should be in the following inheritance chain and // some should not inherit from the others at all: // classes = {A, B, C, D:A, E:A, F:E, G:F, H:G, I:F}. // A mix of simple string & sint32 keys are fine. //============================================================= case APITEST5: nRc = CreateNewClassesInTestNamespace(); break; //============================================================= // "memorize the class definitions". In a complex loop, // delete the classes and recreate them in various sequences, // ending with the full set. //============================================================= case APITEST6: nRc = DeleteAndRecreateNewClassesInTestNamespace(); break; //============================================================= // Create associations //============================================================= case APITEST7: nRc= CreateSimpleAssociations(); break; //============================================================= // Execute queries //============================================================= case APITEST8: nRc = QueryAllClassesInTestNamespace(); break; //============================================================= // Create instances of the above classes, randomly creating // and deleting in a loop, finishing up with a known set. // Query the instances and ensure that no instances disappeared // or appeared that shouldn't be there. //============================================================= //============================================================= // Verify that deletion of instances works. //============================================================= case APITEST9: break; //============================================================= // Verify that deletion of a class takes out all the instances. //============================================================= case APITEST10: break; //============================================================= // Call each of the sync & async APIs at least once. //============================================================= case APITEST11: break; //============================================================= // Create some simple association classes //============================================================= case APITEST12: break; //============================================================= // Execute some simple refs/assocs queries over these and // ensure they work. //============================================================= case APITEST13: break; //============================================================= // Open an association endpoint as a collection // (Whistler-specific) and enumerate, ensure that results are // identical to [12]. //============================================================= case APITEST14: break; //============================================================= // Open a scope and do sets of simple instances operations // (create, enum,query, update, delete) //============================================================= case APITEST15: break; //============================================================= // Complex Repository Phase // Rerun the above tests in parallel from several threads // in different namespaces. //============================================================= case APITEST16: break; case SCRIPTTEST1: ExecuteScript(nWhichTest); break; default: g_LogFile.LogError(__FILE__,__LINE__,WARNING, L"Requested test does not exist." ); break; } g_LogFile.LogError(__FILE__,__LINE__,SUCCESS, L"Leaving Test# %d ", nWhichTest ); return nRc; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// extern "C" int __cdecl main( int argc, char *argv[] ) { int nRc = FATAL_ERROR; //============================================================== // Get the command line arguments //============================================================== if( !ParseCommandLine(argc, argv) ) { g_LogFile.LogError( __FILE__,__LINE__,FATAL_ERROR, L"GetCommandLineArguments failed." ); } else { // ========================================================= // Initialize COM // ========================================================= HRESULT hr = CoInitializeEx( NULL, COINIT_MULTITHREADED ); if ( SUCCEEDED( hr ) ) { // ===================================================== // Setup default security parameters // ===================================================== hr = CoInitializeSecurity( NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_CONNECT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL ); if ( SUCCEEDED( hr ) ) { if( g_Options.RunSpecificTests()) { // ================================================= // Execute the specific tests requested // ================================================= for( int i = 0; i < g_Options.SpecificTestSize(); i++ ) { int nTest = g_Options.GetSpecificTest(i); nRc = RunTests(nTest); if( nRc == FATAL_ERROR ) { g_LogFile.LogError( __FILE__,__LINE__,FATAL_ERROR, L"Test # %d returned a FATAL ERROR",nTest ); } } } else { // ================================================= // Execute all of the BVT tests // ================================================= int nMaxTests = sizeof(g_nDefaultTests) / sizeof(int); for( int i = 0; i < nMaxTests ; i++ ) { nRc = RunTests(g_nDefaultTests[i]); } } } else { g_LogFile.LogError( __FILE__,__LINE__,FATAL_ERROR, L"CoInitializeSecurity failed." ); } CoUninitialize(); } else { g_LogFile.LogError( __FILE__,__LINE__,FATAL_ERROR, L"CoInitializeEx failed." ); } } return nRc; }