windows-nt/Source/XPSP1/NT/admin/wmi/wbem/bvt/whistler/bvtreposit.cpp
2020-09-26 16:20:57 +08:00

1173 lines
54 KiB
C++

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// BVTReposit.CPP
//
//
// Copyright (c)2000 Microsoft Corporation, All Rights Reserved
//
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <bvt.h>
#define NO_ERRORS_EXPECTED FALSE,__FILE__,__LINE__
#define ERRORS_CAN_BE_EXPECTED TRUE,__FILE__,__LINE__
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 1
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int BasicConnectUsingIWbemLocator(BOOL fCompareResults, BOOL fSuppressHeader )
{
int nRc = FATAL_ERROR;
IWbemServices * pNamespace = NULL;
CHString sNamespace;
LogTestBeginning(1,fSuppressHeader);
if( g_Options.GetSpecificOptionForAPITest(L"NAMESPACE",sNamespace, 1) )
{
// =====================================================================
// Open the namespace
// =====================================================================
nRc = OpenNamespaceAndKeepOpen( &pNamespace, WPTR sNamespace,FALSE,fCompareResults);
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
}
LogTestEnding(1,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 2
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int BasicSyncConnectUsingIWbemConnection(BOOL fCompareResults, BOOL fSuppressHeader )
{
int nRc = FATAL_ERROR;
IWbemConnection * pConnection = NULL;
CHString sNamespace;
CHString sClass;
LogTestBeginning(2,fSuppressHeader);
if( g_Options.GetSpecificOptionForAPITest(L"NAMESPACE",sNamespace,2) )
{
if( g_Options.GetSpecificOptionForAPITest(L"CLASS",sClass,2) )
{
nRc = CoCreateInstanceAndLogErrors(CLSID_WbemConnection,IID_IWbemConnection,(void**)&pConnection,NO_ERRORS_EXPECTED);
if( SUCCESS == nRc )
{
// =================================================================
// Test Open with all three types:
//
// IWbemServices
// IWbemServicesEx
// IWbemClassObject
//
// Initialize all vars
// =================================================================
short FatalErrors = 0;
// =================================================================
// Open the namespace with IWbemServices
// =================================================================
IWbemServices * pNamespace = NULL;
nRc = OpenObjectAndLogErrors(pConnection, IID_IWbemServices, (void**) &pNamespace, WPTR sNamespace,NO_ERRORS_EXPECTED);
if ( nRc != SUCCESS )
{
FatalErrors++;
}
SAFE_RELEASE_PTR(pNamespace);
// =================================================================
// Open the namespace with IWbemServicesEx
// =================================================================
IWbemServicesEx * pNamespaceEx = NULL;
nRc = OpenObjectAndLogErrors(pConnection, IID_IWbemServicesEx, (void**) &pNamespaceEx,WPTR sNamespace,NO_ERRORS_EXPECTED);
if ( nRc != SUCCESS )
{
FatalErrors++;
}
SAFE_RELEASE_PTR(pNamespaceEx);
// =================================================================
// Open the Class for IWbemClassObject
// =================================================================
IWbemClassObject* pWbemClassObject = NULL;
nRc = OpenObjectAndLogErrors(pConnection, IID_IWbemClassObject, (void**) &pWbemClassObject, WPTR sClass,NO_ERRORS_EXPECTED);
if ( nRc != SUCCESS )
{
FatalErrors++;
}
SAFE_RELEASE_PTR(pWbemClassObject);
// =================================================================
// Check to see if there were any fatal errors
// =================================================================
if( !FatalErrors )
{
nRc = SUCCESS;
}
}
// =====================================================================
// Release the locator
// =====================================================================
SAFE_RELEASE_PTR(pConnection);
}
}
LogTestEnding(2,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 3
//*****************************************************************************************************************
int BasicAsyncConnectUsingIWbemConnection(BOOL fCompareResults, BOOL fSuppressHeader )
{
int nRc = FATAL_ERROR;
HRESULT hr = S_OK;
IWbemConnection * pConnection = NULL;
CHString sNamespace;
CHString sClass;
LogTestBeginning(3,fSuppressHeader);
if( g_Options.GetSpecificOptionForAPITest(L"NAMESPACE",sNamespace,2) )
{
if( g_Options.GetSpecificOptionForAPITest(L"CLASS",sClass,2))
{
nRc = CoCreateInstanceAndLogErrors(CLSID_WbemConnection,IID_IWbemConnection,(void**)&pConnection,NO_ERRORS_EXPECTED);
if( SUCCESS == nRc )
{
// =================================================================
// Test Open with all three types:
//
// IWbemServices
// IWbemServicesEx
// IWbemClassObject
//
// Initialize all the vars
// =================================================================
short FatalErrors = 0;
CSinkEx * pHandler = NULL;
pHandler = new CSinkEx;
if( pHandler )
{
// =================================================================
// Open the namespace with IWbemServices
// =================================================================
nRc = OpenObjectAsyncAndLogErrors(pConnection, IID_IWbemServices,WPTR sNamespace,pHandler,NO_ERRORS_EXPECTED);
if ( nRc == FATAL_ERROR )
{
FatalErrors++;
}
else
{
IWbemServices * pNamespace = NULL;
pHandler->WaitForSignal(INFINITE);
hr = pHandler->GetStatusCode();
if(SUCCEEDED(hr))
{
pNamespace = (IWbemServices*)pHandler->GetInterface();
}
SAFE_RELEASE_PTR(pNamespace);
}
}
else
{
gp_LogFile->LogError(__FILE__,__LINE__,FATAL_ERROR, L"Allocation of new CSinkEx Failed - Out of memory.");
}
SAFE_DELETE_PTR(pHandler);
// =================================================================
// Open the namespace with IWbemServicesEx
// =================================================================
pHandler = new CSinkEx;
if( pHandler )
{
nRc = OpenObjectAsyncAndLogErrors(pConnection, IID_IWbemServicesEx,WPTR sNamespace, pHandler,NO_ERRORS_EXPECTED);
if ( nRc == FATAL_ERROR )
{
FatalErrors++;
}
else
{
IWbemServicesEx * pNamespace = NULL;
pHandler->WaitForSignal(INFINITE);
hr = pHandler->GetStatusCode();
if(SUCCEEDED(hr))
{
pNamespace = (IWbemServicesEx*)pHandler->GetInterface();
}
SAFE_RELEASE_PTR(pNamespace);
}
}
else
{
gp_LogFile->LogError(__FILE__,__LINE__,FATAL_ERROR, L"Allocation of new CSinkEx Failed - Out of memory.");
}
SAFE_DELETE_PTR(pHandler);
// =================================================================
// Open the class for IWbemClassObject
// =================================================================
pHandler = new CSinkEx;
if( pHandler )
{
nRc = OpenObjectAsyncAndLogErrors(pConnection, IID_IWbemClassObject, WPTR sClass, pHandler,NO_ERRORS_EXPECTED);
if ( nRc == FATAL_ERROR )
{
FatalErrors++;
}
else
{
IWbemClassObject * pWbemClassObject = NULL;
pHandler->WaitForSignal(INFINITE);
hr = pHandler->GetStatusCode();
if(SUCCEEDED(hr))
{
pWbemClassObject = (IWbemClassObject*)pHandler->GetInterface();
}
SAFE_RELEASE_PTR(pWbemClassObject);
}
}
else
{
gp_LogFile->LogError(__FILE__,__LINE__,FATAL_ERROR, L"Allocation of new CSinkEx Failed - Out of memory.");
}
SAFE_DELETE_PTR(pHandler);
// =================================================================
// Check to see if there are any fatal errors
// =================================================================
if( !FatalErrors )
{
nRc = SUCCESS;
}
}
// =====================================================================
// Release the locator
// =====================================================================
SAFE_RELEASE_PTR(pConnection);
}
}
LogTestEnding(3,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 4
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int CreateNewTestNamespace(BOOL fCompareResults, BOOL fSuppressHeader )
{
int nRc = SUCCESS;
CHString sNamespace;
CHString sParentNamespace;
CHString sInstance;
LogTestBeginning(4,fSuppressHeader);
if( g_Options.GetSpecificOptionForAPITest(L"PARENT_NAMESPACE",sParentNamespace, 4))
{
if( g_Options.GetSpecificOptionForAPITest(L"NAMESPACE",sNamespace, 4))
{
if( g_Options.GetSpecificOptionForAPITest(L"CLASSES",sInstance, 4 ))
{
IWbemLocator * pLocator = NULL;
nRc = CoCreateInstanceAndLogErrors(CLSID_WbemLocator,IID_IWbemLocator,(void**)&pLocator,NO_ERRORS_EXPECTED);
if( SUCCESS == nRc )
{
//==========================================================================
// Parse the namespace name to get the parent first, and open the parent
// this one must be existing
//==========================================================================
IWbemServices * pParentNamespace = NULL;
IWbemServices * pChildNamespace = NULL;
nRc = ConnectServerAndLogErrors(pLocator,&pParentNamespace, WPTR sParentNamespace,NO_ERRORS_EXPECTED);
if( nRc == SUCCESS )
{
//==============================================================
// If we got here, then we know that the child namespace does
// not exist, so create it.
//==============================================================
nRc = CreateInstances(pParentNamespace,sInstance, WPTR sParentNamespace, 4 );
if( SUCCESS == nRc )
{
//==========================================================
// Open the namespace with IWbemServices as the new parent
//==========================================================
nRc = ConnectServerAndLogErrors(pLocator, &pChildNamespace,WPTR sNamespace,NO_ERRORS_EXPECTED);
}
}
SAFE_RELEASE_PTR(pParentNamespace);
SAFE_RELEASE_PTR(pChildNamespace);
}
// =============================================================================
// Release the locator
// =============================================================================
SAFE_RELEASE_PTR(pLocator);
}
}
}
LogTestEnding(4,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 5
//*****************************************************************************************************************
int CreateNewClassesInTestNamespace(BOOL fCompareResults, BOOL fSuppressHeader )
{
int nRc = FATAL_ERROR;
CHString sNamespace;
IWbemServices * pNamespace = NULL;
LogTestBeginning(5,fSuppressHeader);
// =====================================================================
// Run the requested tests and get then namespace open
// =====================================================================
nRc = RunRequestedTestsAndOpenNamespace(5, sNamespace, &pNamespace, fCompareResults);
if( SUCCESS == nRc )
{
//=========================================================
// Create 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.
//=========================================================
nRc = CreateClassesForSpecificTest(pNamespace, WPTR sNamespace,L"CLASSES",5);
}
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
LogTestEnding(5,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 6
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int DeleteAndRecreateNewClassesInTestNamespace(BOOL fCompareResults, BOOL fSuppressHeader )
{
int nRc = FATAL_ERROR;
CHString sNamespace;
IWbemServices * pNamespace = NULL;
LogTestBeginning(6,fSuppressHeader);
// =====================================================================
// Run the requested tests and get then namespace open
// =====================================================================
nRc = RunRequestedTestsAndOpenNamespace(6, sNamespace, &pNamespace, fCompareResults);
if( SUCCESS == nRc )
{
//=========================================
// Get all of the class operations for
// this test:
// Classes to be deleted
// Classes to be compared
// Classes to be added
// Classes to be compared
// Classes to be added_deleted
// Classes to be compared
//=============================================
CHString sDeleteClasses;
CHString sClassesAfterDelete;
CHString sAddClasses;
CHString sClassesAfterAdd;
CHString sDeleteAddClassOrder;
CHString sClassesAfterDeleteAdd;
if( g_Options.GetSpecificOptionForAPITest( L"DELETE_CLASSES", sDeleteClasses, 6))
{
if( g_Options.GetSpecificOptionForAPITest( L"CLASSES_AFTER_DELETE", sClassesAfterDelete, 6))
{
if( g_Options.GetSpecificOptionForAPITest( L"ADD_CLASSES", sAddClasses, 6))
{
if( g_Options.GetSpecificOptionForAPITest( L"CLASSES_AFTER_ADD", sClassesAfterAdd, 6))
{
if( g_Options.GetSpecificOptionForAPITest( L"DELETE_ADD_CLASS_ORDER", sDeleteAddClassOrder, 6))
{
if( g_Options.GetSpecificOptionForAPITest( L"CLASSES_AFTER_DELETE_ADD", sClassesAfterDeleteAdd, 6))
{
nRc = DeleteClasses(sDeleteClasses, 6, fCompareResults,pNamespace,WPTR sNamespace);
if( nRc == SUCCESS )
{
nRc = EnumerateClassesAndCompare(sClassesAfterDelete, 6,fCompareResults, pNamespace,WPTR sNamespace);
if( nRc == SUCCESS )
{
nRc = AddClasses(sAddClasses, pNamespace, WPTR sNamespace, 6 );
if( nRc == SUCCESS )
{
nRc = EnumerateClassesAndCompare(sClassesAfterAdd,6,fCompareResults, pNamespace, WPTR sNamespace);
if( nRc == SUCCESS )
{
nRc = DeleteAndAddClasses(sDeleteAddClassOrder, pNamespace, WPTR sNamespace, 6);
if( nRc == SUCCESS )
{
nRc = EnumerateClassesAndCompare(sClassesAfterDeleteAdd,6, fCompareResults,pNamespace, WPTR sNamespace);
}
}
}
}
}
}
}
}
}
}
}
}
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
LogTestEnding(6,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 7
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int CreateSimpleAssociations(BOOL fCompareResults, BOOL fSuppressHeader )
{
int nRc = FATAL_ERROR;
CHString sNamespace;
IWbemServices * pNamespace = NULL;
LogTestBeginning(7,fSuppressHeader);
// =====================================================================
// Run the requested tests and get then namespace open
// =====================================================================
nRc = RunRequestedTestsAndOpenNamespace(7, sNamespace, &pNamespace, fCompareResults);
if( SUCCESS == nRc )
{
//=================================================
// Get the list of associations to create
//=================================================
CHString sItemList;
if( g_Options.GetSpecificOptionForAPITest(L"CLASSES",sItemList, 7))
{
ItemList MasterList;
//=======================================================
// Parse the list of the associations to be created
//=======================================================
if( InitMasterList(sItemList,MasterList))
{
for( int i = 0; i < MasterList.Size(); i++ )
{
ItemInfo * p = MasterList.GetAt(i);
CHString sItemInformation;
// =============================================================
// Get definition of the association
// =============================================================
int nWhichTest = 0;
CHString sClassDef;
nRc = GetClassDefinitionSection(7, sClassDef, nWhichTest );
if( SUCCESS == nRc )
{
if( g_Options.GetSpecificOptionForAPITest(p->Item,sItemInformation,nWhichTest) )
{
//===========================================================
// Create the association
//===========================================================
nRc = CreateAssociationAndLogErrors(pNamespace,p->Item,WPTR sItemInformation,WPTR sNamespace);
if( nRc != SUCCESS )
{
break;
}
}
}
}
}
}
}
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
LogTestEnding(7,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 8
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int QueryAllClassesInTestNamespace(BOOL fCompareResults, BOOL fSuppressHeader )
{
int nRc = FATAL_ERROR;
CHString sNamespace;
IWbemServices * pNamespace = NULL;
LogTestBeginning(8,fSuppressHeader);
// =====================================================================
// Run the requested tests and get then namespace open
// =====================================================================
nRc = RunRequestedTestsAndOpenNamespace(8, sNamespace, &pNamespace, fCompareResults);
if( SUCCESS == nRc )
{
//==================================================================
// Query classes in test namespace
//==================================================================
CHString sQueryList;
if( g_Options.GetSpecificOptionForAPITest(L"QUERY_LIST",sQueryList, 8))
{
ItemList MasterList;
//=======================================================
// Get the list of the queries
//=======================================================
if( InitMasterList(sQueryList,MasterList))
{
for( int i = 0; i < MasterList.Size(); i++ )
{
ItemInfo * p = MasterList.GetAt(i);
CHString sQuery;
if( g_Options.GetSpecificOptionForAPITest(p->Item,sQuery,8) )
{
EventInfo Query;
nRc = CrackEvent(WPTR sQuery, Query,NO_ERRORS_EXPECTED);
if( SUCCESS == nRc )
{
//==================================================================
// Regular query
//==================================================================
nRc = QueryAndCompareResults( pNamespace,WPTR Query.Query,Query.Results,WPTR sNamespace);
if( nRc != S_OK )
{
break;
}
}
}
}
}
}
}
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
LogTestEnding(8,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 9
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int CreateClassInstances(BOOL fCompareResults, BOOL fSuppressHeader )
{
int nRc = FATAL_ERROR;
CHString sNamespace;
IWbemServices * pNamespace = NULL;
LogTestBeginning(9,fSuppressHeader);
// =====================================================================
// Run the requested tests and get then namespace open
// =====================================================================
nRc = RunRequestedTestsAndOpenNamespace(9, sNamespace, &pNamespace, fCompareResults);
if( SUCCESS == nRc )
{
nRc = CreateInstancesForSpecificTest(pNamespace, WPTR sNamespace,L"INSTANCE_LIST",9,TRUE);
}
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
LogTestEnding(9,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 10
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int DeleteClassInstances(BOOL fCompareResults, BOOL fSuppressHeader )
{
int nRc = FATAL_ERROR;
CHString sNamespace;
IWbemServices * pNamespace = NULL;
LogTestBeginning(10,fSuppressHeader);
// =====================================================================
// Run the requested tests and get then namespace open
// =====================================================================
nRc = RunRequestedTestsAndOpenNamespace(10, sNamespace, &pNamespace, fCompareResults);
if( SUCCESS == nRc )
{
// =============================================================
// Get the list of instances to delete
// =============================================================
CHString sInstanceList;
if( g_Options.GetSpecificOptionForAPITest( L"INSTANCE_LIST",sInstanceList, 10 ) )
{
// =========================================================
// Delete the instances in the namespace
// =========================================================
nRc = DeleteInstancesAndCompareResults(sInstanceList, 10, pNamespace, WPTR sNamespace);
}
}
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
LogTestEnding(10,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 11
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int EnumerateClassInstances(BOOL fCompareResults, BOOL fSuppressHeader )
{
int nRc = FATAL_ERROR;
CHString sNamespace;
IWbemServices * pNamespace = NULL;
LogTestBeginning(11,fSuppressHeader);
// =====================================================================
// Run the requested tests and get then namespace open
// =====================================================================
nRc = RunRequestedTestsAndOpenNamespace(11, sNamespace, &pNamespace, fCompareResults);
if( SUCCESS == nRc )
{
// =============================================================
// Get the list of classes to get instances for
// =============================================================
CHString sInstanceList;
if( g_Options.GetSpecificOptionForAPITest( L"INSTANCE_LIST", sInstanceList, 11 ) )
{
// =========================================================
// Get the enumeration flags
// =========================================================
ItemList FlagList;
nRc = GetFlags(11, FlagList);
if( SUCCESS == nRc )
{
for( int i = 0; i < FlagList.Size(); i++ )
{
ItemInfo * p = FlagList.GetAt(i);
// =================================================
// Make sure those instances are in the namespace
// =================================================
nRc = EnumerateInstancesAndCompare( sInstanceList, 11, fCompareResults, pNamespace,WPTR sNamespace);
}
}
}
}
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
LogTestEnding(11,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 12
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int CreateAssociationInstances(BOOL fCompareResults, BOOL fSuppressHeader )
{
int nRc = FATAL_ERROR;
CHString sNamespace;
IWbemServices * pNamespace = NULL;
LogTestBeginning(12,fSuppressHeader);
// =====================================================================
// Run the requested tests and get then namespace open
// =====================================================================
nRc = RunRequestedTestsAndOpenNamespace(12, sNamespace, &pNamespace, fCompareResults);
if( SUCCESS == nRc )
{
nRc = CreateInstancesForSpecificTest(pNamespace, WPTR sNamespace,L"INSTANCE_LIST",12,TRUE);
}
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
LogTestEnding(12,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 13
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int DeleteAssociationInstances(BOOL fCompareResults, BOOL fSuppressHeader )
{
int nRc = FATAL_ERROR;
CHString sNamespace;
IWbemServices * pNamespace = NULL;
LogTestBeginning(13,fSuppressHeader);
// =====================================================================
// Run the requested tests and get then namespace open
// =====================================================================
nRc = RunRequestedTestsAndOpenNamespace(13, sNamespace, &pNamespace, fCompareResults);
if( SUCCESS == nRc )
{
// =============================================================
// Get the list of instances to delete
// =============================================================
CHString sInstanceList;
if( g_Options.GetSpecificOptionForAPITest(L"INSTANCE_LIST", sInstanceList, 13 ) )
{
// =========================================================
// Delete the instances in the namespace
// =========================================================
nRc = DeleteInstancesAndCompareResults(sInstanceList,13, pNamespace, WPTR sNamespace);
}
}
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
LogTestEnding(13,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 14
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int EnumerateAssociationInstances(BOOL fCompareResults, BOOL fSuppressHeader )
{
int nRc = FATAL_ERROR;
CHString sNamespace;
IWbemServices * pNamespace = NULL;
LogTestBeginning(14,fSuppressHeader);
// =====================================================================
// Run the requested tests and get then namespace open
// =====================================================================
nRc = RunRequestedTestsAndOpenNamespace(14, sNamespace, &pNamespace, fCompareResults);
if( SUCCESS == nRc )
{
// =============================================================
// Get the list of classes to get instances for
// =============================================================
CHString sInstanceList;
if( g_Options.GetSpecificOptionForAPITest( L"INSTANCE_LIST", sInstanceList, 14 ) )
{
// =========================================================
// Get the enumeration flags
// =========================================================
ItemList FlagList;
nRc = GetFlags(14, FlagList);
if( SUCCESS == nRc )
{
for( int i = 0; i < FlagList.Size(); i++ )
{
ItemInfo * p = FlagList.GetAt(i);
// =========================================================
// Make sure those instances are in the namespace
// =========================================================
nRc = EnumerateInstancesAndCompare( sInstanceList, 14, fCompareResults, pNamespace,WPTR sNamespace);
}
}
}
}
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
LogTestEnding(14,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 15
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int DeleteClassDeletesInstances(BOOL fCompareResults, BOOL fSuppressHeader )
{
int nRc = FATAL_ERROR;
CHString sNamespace;
IWbemServices * pNamespace = NULL;
LogTestBeginning(15,fSuppressHeader);
// =====================================================================
// Run the requested tests and get then namespace open
// =====================================================================
nRc = RunRequestedTestsAndOpenNamespace(15, sNamespace, &pNamespace, fCompareResults);
if( SUCCESS == nRc )
{
// =============================================================
// Get the list of classes to delete
// =============================================================
CHString sClassList;
if( g_Options.GetSpecificOptionForAPITest( L"CLASSES", sClassList, 15 ) )
{
// =========================================================
// Get the enumeration flags
// =========================================================
ItemList FlagList;
nRc = GetFlags(15, FlagList);
if( SUCCESS == nRc )
{
for( int i = 0; i < FlagList.Size(); i++ )
{
ItemInfo * p = FlagList.GetAt(i);
// ==================================================
// Make sure those instances are in the namespace
// ==================================================
nRc = DeleteClasses(sClassList,15,fCompareResults,pNamespace,WPTR sNamespace);
}
}
}
}
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
LogTestEnding(15,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 16
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int GetObjects(BOOL fCompareResults, BOOL fSuppressHeader )
{
//==========================================================================
// Get the various types of objects (classes/instances) using the various
// types of paths accepted by WMI ( WMI path/ UMI path/ HTTP path)
//==========================================================================
int nRc = FATAL_ERROR;
CHString sNamespace;
IWbemServices * pNamespace = NULL;
LogTestBeginning(16,fSuppressHeader);
// =====================================================================
// Run the requested tests and get then namespace open
// =====================================================================
nRc = RunRequestedTestsAndOpenNamespace(16, sNamespace, &pNamespace, fCompareResults);
if( SUCCESS == nRc )
{
// =============================================================
// Get the list of objexts to get
// =============================================================
CHString sObjects;
if( g_Options.GetSpecificOptionForAPITest( L"OBJECT_LIST",sObjects, 16 ) )
{
// =========================================================
// Get the requested objects
// =========================================================
nRc = GetSpecificObjects(sObjects, pNamespace, 16,WPTR sNamespace);
}
}
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
LogTestEnding(16,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 17
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int CreateMethods(BOOL fCompareResults, BOOL fSuppressHeader )
{
// =====================================================================
// Getting a list of Methods for a class and instance
// =====================================================================
int nRc = FATAL_ERROR;
CHString sNamespace;
IWbemServices * pNamespace = NULL;
LogTestBeginning(17,fSuppressHeader);
// =====================================================================
// Run the requested tests and get then namespace open
// =====================================================================
nRc = RunRequestedTestsAndOpenNamespace(17, sNamespace, &pNamespace, fCompareResults);
if( SUCCESS == nRc )
{
// =============================================================
// Get the list of methods to create
// =============================================================
CHString sObjects;
if( g_Options.GetSpecificOptionForAPITest( L"METHOD_LIST",sObjects, 17 ) )
{
// =========================================================
// Create the methods
// =========================================================
nRc = CreateMethodsAndCompare(sObjects, pNamespace, 17, fCompareResults, WPTR sNamespace);
}
}
SAFE_RELEASE_PTR(pNamespace);
LogTestEnding(17,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 18
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int DeleteMethods(BOOL fCompareResults, BOOL fSuppressHeader )
{
// =====================================================================
// Getting a list of Methods for a class and instance
// =====================================================================
int nRc = FATAL_ERROR;
CHString sNamespace;
IWbemServices * pNamespace = NULL;
LogTestBeginning(18,fSuppressHeader);
// =====================================================================
// Run the requested tests and get then namespace open
// =====================================================================
nRc = RunRequestedTestsAndOpenNamespace(18, sNamespace, &pNamespace, fCompareResults);
if( SUCCESS == nRc )
{
// =============================================================
// Get the list of methods to delete
// =============================================================
CHString sObjects;
if( g_Options.GetSpecificOptionForAPITest( L"METHOD_LIST",sObjects, 18 ) )
{
// =========================================================
// Delete the methods
// =========================================================
nRc = DeleteMethodsAndCompare(sObjects, pNamespace, 18,fCompareResults,WPTR sNamespace);
}
}
SAFE_RELEASE_PTR(pNamespace);
LogTestEnding(18,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 19
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int ListMethods(BOOL fCompareResults, BOOL fSuppressHeader )
{
// =====================================================================
// Getting a list of Methods for a class and instance
// =====================================================================
int nRc = FATAL_ERROR;
CHString sNamespace;
IWbemServices * pNamespace = NULL;
LogTestBeginning(19,fSuppressHeader);
// =====================================================================
// Run the requested tests and get then namespace open
// =====================================================================
nRc = RunRequestedTestsAndOpenNamespace(19, sNamespace, &pNamespace, fCompareResults);
if( SUCCESS == nRc )
{
// =============================================================
// Get the list of methods to delete
// =============================================================
CHString sObjects;
if( g_Options.GetSpecificOptionForAPITest( L"METHOD_LIST",sObjects, 19 ) )
{
// =========================================================
// Delete the methods
// =========================================================
nRc = EnumerateMethodsAndCompare(sObjects, pNamespace, 19,fCompareResults,WPTR sNamespace);
}
}
SAFE_RELEASE_PTR(pNamespace);
LogTestEnding(19,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 20
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int DeleteAllNonSystemClasses(BOOL fCompareResults, BOOL fSuppressHeader )
{
int nRc = FATAL_ERROR;
CHString sNamespace;
IWbemServices * pNamespace = NULL;
LogTestBeginning(20,fSuppressHeader);
// =====================================================================
// Run the requested tests and get then namespace open
// =====================================================================
nRc = RunRequestedTestsAndOpenNamespace(20, sNamespace, &pNamespace, fCompareResults);
if( SUCCESS == nRc )
{
IEnumWbemClassObject * pEnum = NULL;
//===========================================================
// Begin enumerating all of the classes in the namespace
//===========================================================
nRc = EnumerateClassesAndLogErrors(pNamespace,&pEnum, WBEM_FLAG_RETURN_IMMEDIATELY|WBEM_FLAG_FORWARD_ONLY , NULL, WPTR sNamespace,NO_ERRORS_EXPECTED);
if( nRc == S_OK )
{
//===================================================
// while we get the classes in the namespace
//===================================================
IWbemClassObject * pClass = NULL;
while( TRUE )
{
nRc = NextClassAndLogErrors(pEnum, &pClass,WPTR sNamespace,NO_ERRORS_EXPECTED);
if( nRc == NO_MORE_DATA )
{
nRc = SUCCESS;
break;
}
if( nRc != SUCCESS )
{
break;
}
CVARIANT vProperty;
CIMTYPE pType = 0;
LONG lFlavor = 0;
//===================================================
// Get the name of the class
//===================================================
nRc = GetPropertyAndLogErrors( pClass, L"__CLASS", &vProperty, &pType, &lFlavor, NULL,WPTR sNamespace, NO_ERRORS_EXPECTED);
if( nRc == S_OK )
{
//===============================================
// filter out system classes
//===============================================
if( wcsncmp( vProperty.GetStr(), L"__", 2 ) != 0 )
{
//===============================================
// Delete it, however, it may not be there if
// the parent class has already been deleted.
//===============================================
DeleteClassAndLogErrors(pNamespace, vProperty.GetStr(), WPTR sNamespace,ERRORS_CAN_BE_EXPECTED);
}
}
SAFE_RELEASE_PTR(pClass);
}
SAFE_RELEASE_PTR(pClass);
}
}
SAFE_RELEASE_PTR(pNamespace);
LogTestEnding(20,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 21
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int DeleteRequestedNamespace(BOOL fCompareResults, BOOL fSuppressHeader )
{
int nRc = FATAL_ERROR;
CHString sNamespace;
IWbemServices * pNamespace = NULL;
LogTestBeginning(21,fSuppressHeader);
// =====================================================================
// Run the requested tests
// Go to the parent namespace
// =====================================================================
nRc = RunRequestedTestsAndOpenNamespace(21, sNamespace, &pNamespace, fCompareResults);
if( SUCCESS == nRc )
{
//==================================================================
// Get the name of the namespace to delete
//==================================================================
CHString sObjects;
if( g_Options.GetSpecificOptionForAPITest( L"NAMESPACE_TO_DELETE",sObjects, 21 ) )
{
// =========================================================
// See if the instance exists
// =========================================================
IWbemClassObject * pClass = NULL;
nRc = GetClassObjectAndLogErrors( pNamespace, sObjects, &pClass,WPTR sNamespace,ERRORS_CAN_BE_EXPECTED);
SAFE_RELEASE_PTR(pClass);
if( SUCCESS == nRc )
{
// =========================================================
// Delete the instances of the namespace
// =========================================================
nRc = DeleteInstanceAndLogErrors(pNamespace, sObjects, WPTR sNamespace, NO_ERRORS_EXPECTED );
}
else
{
if( nRc == FAILED_AS_EXPECTED )
{
nRc = SUCCESS;
}
}
}
}
SAFE_RELEASE_PTR(pNamespace);
LogTestEnding(21,nRc,fSuppressHeader);
return nRc;
}