Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

1363 lines
60 KiB

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// BVTUtil.CPP
//
//
// Copyright (c)2000 Microsoft Corporation, All Rights Reserved
//
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "bvt.h"
#include <time.h>
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Documentation arrays
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
IniInfo g_Doc1[] = {
{ L"FYI", L"NAMESPACE is the Namespace the BVT will use"} };
IniInfo g_Doc2[] = {
{ L"FYI", L"NAMESPACE is the Namespace the BVT will use. CLASS is the class used to create the namespace" }};
IniInfo g_Doc3[] = {
{ L"FYI", L"NAMESPACE is the Namespace the BVT will use. CLASS is the class used to create the namespace" }};
IniInfo g_Doc4[] = {
{ L"FYI", L"NAMESPACE is the Namespace the BVT will create" }};
IniInfo g_Doc5[] = {
{L"FYI", L"Classes = the list of comma separated class names, all of these classes should exist in this section as defined in the FYI_Format entry below" },
{L"FYI_Format", L"Classes are defined in this format: ClassName = Parent:XClass, Key:TmpKey:CIM_SINT32:3, Property:PropertyName3:CIM_UINT32:3" },
{L"FYI_Class", L"Using format as defined in FYI_Format, ClassName is the actual name of the class to be created" },
{L"FYI_InHeritance",L"Using format as defined in FYI_Format, Parent:XClass where Parent means this entity describes the inheritance of the class. XClass is the name of the ParentClass." },
{L"FYI_Qualifier", L"Doc this" },
{L"FYI_Property", L"Using format as defined in FYI_Format, Property:PropName:CIM_UINT32:5 where Property means this entity describes the Property. PropName is the name of the Property. CIM_UINT32 is the type and 5 is the value." },
{L"FYI_Comments", L"Classes may contain more than one qualifier and more than one property. These must be comma separated and identified as described." }};
IniInfo g_Doc6[] = {
{L"FYI_Delete_Classes", L"First, Classes will be deleted as specified by the ini entry DELETE_CLASSES" },
{L"FYI_Classes_After_Delete", L"Second, Classes will then be compared to what is expected to be left, by looking at the values in the ini entry CLASSES_AFTER_DELETE" },
{L"FYI_Add_Classes", L"Third, Classes to be added are then specified by the ini entry ADD_CLASSES" },
{L"FYI_Classes_After_Add", L"Fourth, Classes will then be compared to what is expected to be left, by looking at the values in the ini entry CLASSES_AFTER_ADD" },
{L"FYI_Classes_Add_Delete_Order", L"Fifth, Classes to be deleted and added in specified order DELETE_ADD_CLASS_ORDER" },
{L"FYI_Classes_After_Delete_Add", L"Sixth, Classes will then be compared to what is expected to be left, by looking at the values in the ini entry CLASSES_AFTER_DELETE_ADD" },
{L"FYI_Comments", L"All of these entries, with the exception of DELETE_ADD_CLASS_ORDER are comma separated class names. See FYI_FORMAT for DELETE_ADD_CLASS_ORDER format" },
{L"FYI_FORMAT", L"DELETE_ADD_CLASS_ORDER format: 'Delete:Class1, Add:Class2, Add:Class3' where Delete means to delete the following class, and Add to add the following class, this may be in any order." }};
IniInfo g_Doc7[] = {
{L"FYI", L"ASSOCIATION_CLASSES is a comma separated list of associations to create. These must exist in this section. See FYI_Format to see how to create an association" },
{L"FYI_Format", L"Example: Property:FirstPoint:TestClass1:Reference:REF:TestClass1, Property:SecondPoint:TestClass2:REF:TestClass2" },
{L"FYI_Property", L"Using format as defined in FYI_Format, Property:FirstPoint:TestClass1:REF:TestClass1 where Property means this entity describes the Property. FirstPoint is the name of first Key, TestClass1 is that key's value, Reference creates a strongly typed reference as defined in REF:TestClass1." },
{L"FYI_Comments", L"REF is optional" }};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// The repository tests
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
IniInfo g_Test1[] = {{L"NAMESPACE",L"ROOT\\DEFAULT" },
{L"Description", L"Basic connect using IWbemLocator"}};
IniInfo g_Test2[] = { { L"NAMESPACE",L"ROOT\\DEFAULT" },
{ L"Description", L"Basic connect using IWbemConnection for IWbemServices, IWbemServicesEx, IWbemClassObject"},
{ L"CLASS" ,L"__NAMESPACE" } };
IniInfo g_Test3[] = { { L"NAMESPACE",L"ROOT\\DEFAULT" },
{ L"Description", L"Basic async connect using IWbemConnection for IWbemServices, IWbemServicesEx, IWbemClassObject"},
{ L"CLASS" ,L"__NAMESPACE" } };
IniInfo g_Test4[] = {{L"NAMESPACE",L"ROOT\\BVTAPITEST" },
{L"Description", L"Creation of a test namespace"},
{L"PARENT_NAMESPACE",L"ROOT"},
{L"CLASSES", L"__NAMESPACE"},
{L"__NAMESPACE", L"Class:__NAMESPACE,Property:Name:CIM_STRING:BVTAPITEST" }};
IniInfo g_Test5[] = {
{ L"RUNTESTS", L"4" },
{L"Description", L"Creates test classes in the test namespace"},
{ L"NAMESPACE", L"ROOT\\BVTAPITEST"},
{ L"Classes", L"1,2,3,4,5,6,7,8,9,10" },
{ L"1", L"Class:TestClass1" }, // an abstract class, so 4 and 5 can define additional keys
{ L"2", L"Class:TestClass2, Property:LaKey1:CIM_STRING:Key1, PropertyQualifier:KEY:LaKey1:CIM_BOOLEAN:1, Property:LaKey2:CIM_STRING:Key2, PropertyQualifier:Key:LaKey2:CIM_BOOLEAN:1" },
{ L"3", L"Class:TestClass3, Property:KeyName1:CIM_SINT32:3, PropertyQualifier:KEY:KeyName1:CIM_BOOLEAN:1, Property:PropertyName3:CIM_UINT32:3, Property:PropertyName3B:CIM_STRING:Test" },
{ L"4", L"Class:TestClass4, Parent:TestClass1, Property:KeyName4:CIM_UINT32:4, PropertyQualifier:KEY:KeyName4:CIM_BOOLEAN:1, Property:PropertyName4:CIM_STRING:0" },
{ L"5", L"Class:TestClass5, Parent:TestClass1, Property:KeyName5:CIM_STRING:Temp, PropertyQualifier:KEY:KeyName5:CIM_BOOLEAN:1, Property:PropertyName5:CIM_STRING:Value5" },
{ L"6", L"Class:TestClass6, Parent:TestClass5, Property:PropertyName6:CIM_STRING:Value6,PropertyQualifier:ID:PropertyName6:CIM_SINT32:1" }, // no additional key can be defined
{ L"7", L"Class:TestClass7, Parent:TestClass6, Property:PropertyName7:CIM_STRING:1,PropertyQualifier:ID:PropertyName7:CIM_SINT32:1" }, // no additional key can be defined
{ L"8", L"Class:TestClass8, Parent:TestClass7, Property:PropertyName8:CIM_SINT32:2" }, // no additional key can be defined
{ L"9", L"Class:TestClass9, Parent:TestClass8, Property:PropertyName9:CIM_STRING:Value9" }, // no additional key can be defined
{ L"10", L"Class:TestClass10, Parent:TestClass9, Property:PropertyName10:CIM_STRING:0" } }; // no additional key can be defined
IniInfo g_Test6[] = {
{L"Description", L"Deletes and Creates the classes in the requested order."},
{ L"RUNTESTS", L"20,5" },
{ L"NAMESPACE", L"ROOT\\BVTAPITEST"},
{ L"DEFINITION_SECTION", L"5"},
{ L"DELETE_CLASSES", L"1,3" },
{ L"CLASSES_AFTER_DELETE", L"2" },
{ L"ADD_CLASSES", L"1,3,4,5,6,7,8,9,10" },
{ L"CLASSES_AFTER_ADD", L"1,2,3,4,5,6,7,8,9,10" },
{ L"DELETE_ADD_CLASS_ORDER", L"Delete:2, Delete:9, Add:2, Delete:7, Delete: 6" },
{ L"CLASSES_AFTER_DELETE_ADD", L"1,2,3,4,5" }};
IniInfo g_Test7[] =
{
{ L"RUNTESTS", L"5" },
{ L"Description",L"Creates simple associations"},
{ L"NAMESPACE", L"ROOT\\BVTAPITEST"},
{ L"DEFINITION_SECTION", L"7"},
{ L"CLASSES", L"1,2" },
{ L"1", L"Class:Association1, Property:FirstPoint:CIM_REFERENCE:Value, PropertyQualifier:KEY:FirstPoint:CIM_BOOLEAN:1, PropertyQualifier:CIMTYPE:FirstPoint:CIM_STRING:ref:TestClass4,Property:EndPoint:CIM_REFERENCE:Value, PropertyQualifier:CIMTYPE:EndPoint:CIM_STRING:ref:TestClass5, PropertyQualifier:Key:EndPoint:CIM_BOOLEAN:1" },
{ L"2", L"Class:Association2, Property:AssocProp1:CIM_STRING:TestClass4, PropertyQualifier:Key:AssocProp1:CIM_BOOLEAN:1, Property:AssocProp2:CIM_STRING:TestClass5, PropertyQualifier:Key:AssocProp2:CIM_BOOLEAN:1" }};
IniInfo g_Test8[] = {
{ L"RUNTESTS", L"12" },
{ L"Description",L"Executes queries"},
{ L"NAMESPACE", L"ROOT\\BVTAPITEST"},
{ L"QUERY_LIST", L"QUERY,ASSOCIATORS_QUERY,REFERENCES_QUERY"},
{ L"QUERY", L"RESULTS:95,QUERY:select * from meta_class" },
{ L"ASSOCIATORS_QUERY", L"RESULTS:1,QUERY:Associators of {TestClass4.KeyName4=555}" },
{ L"REFERENCES_QUERY", L"RESULTS:1,QUERY:References of {TestClass4.KeyName4=555}" }};
IniInfo g_Test9[] = {
{ L"RUNTESTS", L"5" },
{ L"Description", L"Create Instances"},
{ L"NAMESPACE", L"ROOT\\BVTAPITEST"},
{ L"DEFINITION_SECTION", L"9"},
{ L"INSTANCE_LIST", L"4,5,6,7"},
{ L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
{ L"4", L"Class:TestClass4, Property:KeyName4:CIM_UINT32:555, Property:PropertyName4:CIM_STRING:1, InstanceName:TestClass4.KeyName4=555$EndInstanceName" },
{ L"5", L"Class:TestClass5, Property:KeyName5:CIM_STRING:InstanceTest, Property:PropertyName5:CIM_STRING:TestTest, InstanceName:TestClass5.KeyName5=\"InstanceTest\"$EndInstanceName" },
{ L"6", L"Class:TestClass4, Property:KeyName4:CIM_UINT32:556, Property:PropertyName4:CIM_STRING:1, InstanceName:TestClass4.KeyName4=556$EndInstanceName" },
{ L"7", L"Class:TestClass5, Property:KeyName5:CIM_STRING:InstanceTest2, Property:PropertyName5:CIM_STRING:TestTest, InstanceName:TestClass5.KeyName5=\"InstanceTest2\"$EndInstanceName" }};
IniInfo g_Test10[] = {
{ L"RUNTESTS", L"9" },
{ L"Description", L"Deletes Instances"},
{ L"NAMESPACE", L"ROOT\\BVTAPITEST"},
{ L"INSTANCE_LIST", L"4,5"},
{ L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
{ L"4", L"TestClass4.KeyName4=555" },
{ L"5", L"TestClass5.KeyName5=\"InstanceTest\"" }};
IniInfo g_Test11[] = {
{ L"RUNTESTS", L"9" },
{ L"Description", L"Enumerates Instances"},
{ L"NAMESPACE", L"ROOT\\BVTAPITEST"},
{ L"INSTANCE_LIST", L"4,5"},
{ L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
{ L"4", L"Class:TestClass4,RESULTS:2" },
{ L"5", L"Class:TestClass5,RESULTS:2" }};
IniInfo g_Test12[] = {
{ L"RUNTESTS", L"7,9" },
{ L"Description", L"Create Association Instances"},
{ L"NAMESPACE", L"ROOT\\BVTAPITEST"},
{ L"DEFINITION_SECTION", L"12"},
{ L"INSTANCE_LIST", L"4,5"},
{ L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
{ L"4", L"Class:Association1, Property:FirstPoint:CIM_REFERENCE:TestClass4.KeyName4=555,Property:EndPoint:CIM_REFERENCE:TestClass5.KeyName5=\"InstanceTest\", InstanceName:Association1.EndPoint=\"TestClass5.KeyName5=\\\"InstanceTest\\\"\",FirstPoint=\"TestClass4.KeyName4=555\"$EndInstanceName"},
{ L"5", L"Class:Association2, Property:AssocProp1:CIM_STRING:TestClass4.KeyName4=556,Property:AssocProp2:CIM_STRING:TestClass5.KeyName5=\"InstanceTest\", InstanceName:Association2.AssocProp2=TestClass5.KeyName5=\"InstanceTest\",AssocProp1=TestClass4.KeyName4=555$EndInstanceName"}};
IniInfo g_Test13[] = {
{ L"RUNTESTS", L"12" },
{ L"Description", L"Deletes Association Instances"},
{ L"NAMESPACE", L"ROOT\\BVTAPITEST"},
{ L"INSTANCE_LIST", L"4,5"},
{ L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
{ L"4", L"Association1.EndPoint=\"TestClass5.KeyName5=\\\"InstanceTest\\\"\",FirstPoint=\"TestClass4.KeyName4=555\"" },
{ L"5", L"Association2.AssocProp1=\"TestClass4.KeyName4=556\",AssocProp2=\"TestClass5.KeyName5=\\\"InstanceTest\\\"\"" }};
IniInfo g_Test14[] = {
{ L"RUNTESTS", L"12" },
{ L"Description", L"Enumerates Association Instances"},
{ L"NAMESPACE", L"ROOT\\BVTAPITEST"},
{ L"INSTANCE_LIST", L"4,5"},
{ L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
{ L"4", L"CLASS:Association1, RESULTS:1" },
{ L"5", L"CLASS:Association2, RESULTS:1" }};
IniInfo g_Test15[] = {
{ L"RUNTESTS", L"9" },
{ L"Description", L"Deletes Class deletes all the instances"},
{ L"NAMESPACE", L"ROOT\\BVTAPITEST"},
{ L"DEFINITION_SECTION", L"15"},
{ L"CLASSES", L"4,5"},
{ L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
{ L"4", L"Class:TestClass4" },
{ L"5", L"Class:TestClass5" }};
IniInfo g_Test16[] = {
{ L"RUNTESTS", L"9" },
{ L"Description", L"Gets specific objects by various specific paths"},
{ L"NAMESPACE", L"ROOT\\BVTAPITEST"},
{ L"OBJECT_LIST", L"4,5"},
{ L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
{ L"4", L"TestClass4.KeyName4=555" },
{ L"5", L"TestClass5.KeyName5=\"InstanceTest\"" }};
IniInfo g_Test17[] = {
{ L"RUNTESTS", L"5" },
{ L"Description", L"Create methods for a class"},
{ L"NAMESPACE", L"ROOT\\BVTAPITEST"},
{ L"METHOD_LIST", L"4"},
{ L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
{ L"4", L"CLASS:TestClass2, METHOD:TestMethod, \
INPUT:Property:InputArg1:CIM_UINT32:555, \
INPUT:PropertyQualifier:ID:InputArg1:CIM_SINT32:0,\
INPUT:PropertyQualifier:In:InputArg1:CIM_BOOLEAN:1, \
OUTPUT:Property:OutputArg1:CIM_UINT32:111,\
OUTPUT:PropertyQualifier:ID:OutputArg1:CIM_SINT32:1,\
OUTPUT:PropertyQualifier:Out:OutputArg1:CIM_BOOLEAN:1"}};
IniInfo g_Test18[] = {
{ L"RUNTESTS", L"17" },
{ L"Description", L"Delete methods for a class"},
{ L"NAMESPACE", L"ROOT\\BVTAPITEST"},
{ L"METHOD_LIST", L"4"},
{ L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
{ L"4", L"CLASS:TestClass2, METHOD:TestMethod"}};
IniInfo g_Test19[] = {
{ L"RUNTESTS", L"17" },
{ L"Description", L"Enumerate methods for a class"},
{ L"NAMESPACE", L"ROOT\\BVTAPITEST"},
{ L"METHOD_LIST", L"4"},
{ L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
{ L"4", L"CLASS:TestClass2, RESULTS:1"}};
IniInfo g_Test20[] = {
{ L"NAMESPACE", L"ROOT\\BVTAPITEST"},
{ L"DESCRIPTION", L"Deletes all non-system classes in the namespace"}};
IniInfo g_Test21[] = {
{ L"NAMESPACE", L"ROOT"},
{ L"NAMESPACE_TO_DELETE", L"__NAMESPACE.Name=\"BVTAPITEST\""},
{ L"DESCRIPTION", L"Deletes requested namespace"}};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// The Other Provider tests
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
IniInfo g_Test200[] = {
{L"PROVIDERS", L"WDM,CIMV2"},
{L"WDM", L"NAMESPACE:ROOT\\WMI"},
{L"CIMV2", L"NAMESPACE:ROOT\\CIMV2"},
{L"Description", L"Basic connect using IWbemLocator"}};
IniInfo g_Test201[] = {
{L"PROVIDERS", L"WDM,CIMV2"},
{ L"Description", L"Enumerates Classes for Providers"},
{ L"RUNTESTS", L"200"},
{ L"NAMESPACE_DEFINITION_SECTION", L"201"},
{ L"FLAGS", L"WBEM_FLAG_SHALLOW, WBEM_FLAG_DEEP, WBEM_FLAG_RETURN_IMMEDIATELY | WBEM_FLAG_FORWARD_ONLY "},
{ L"WDM", L"1,2"},
{ L"CIMV2", L"3,4"},
{ L"1", L"CLASS:__ExtrinsicEvent, RESULTS:3, RESULTS:25, RESULTS: 25" },
{ L"2", L"Empty" },
{ L"3", L"Empty" },
{ L"4", L"CLASS:CIM_Action, RESULTS: 16, RESULTS:25, RESULTS:25" }};
IniInfo g_Test202[] = {
{L"PROVIDERS", L"WDM,CIMV2"},
{L"Description", L"Executes queries for Providers"},
{L"RUNTESTS", L"200"},
{L"NAMESPACE_DEFINITION_SECTION", L"201"},
{L"WDM", L"WDMQUERY"},
{L"CIMV2", L"QUERY"},
{L"WDMQUERY", L"RESULTS:294,QUERY:select * from meta_class" },
{L"QUERY", L"RESULTS:939,QUERY:select * from meta_class" }};
IniInfo g_Test204[] = {
{ L"PROVIDERS", L"WDM,CIMV2"},
{ L"Description", L"Enumerates Instances for Providers"},
{ L"RUNTESTS", L"200"},
{ L"NAMESPACE_DEFINITION_SECTION", L"201"},
{ L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
{ L"WDM", L"1,2"},
{ L"CIMV2", L"3,4"},
{ L"1", L"CLASS:RegisteredGuids, RESULTS:-1" },
{ L"2", L"CLASS:WmiBinaryMofResource, RESULTS:-1" },
{ L"3", L"CLASS:Win32_Process, RESULTS:-1" },
{ L"4", L"CLASS:Win32_Directory, RESULTS:-1" }};
IniInfo g_Test205[] = {
{L"PROVIDERS", L"WDM,CIMV2"},
{ L"RUNTESTS", L"200" },
{ L"Description", L"Gets specific objects by various specific paths for Providers"},
{ L"NAMESPACE_DEFINITION_SECTION", L"201"},
{ L"WDM", L"1"},
{ L"CIMV2", L"2"},
{ L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
{ L"1", L"MSNdis_CoDriverVersion.InstanceName=\"WAN Miniport (IP)\""},
{ L"2", L"Win32_Directory.Name=\"c:\\\\\"" }};
IniInfo g_Test206[] = {
{L"PROVIDERS", L"CIMV2"},
{ L"RUNTESTS", L"200" },
{ L"Description", L"Enumerate methods for a class for Providers"},
{ L"NAMESPACE_DEFINITION_SECTION", L"201"},
{ L"CIMV2", L"3,4"},
{ L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
{ L"3", L"CLASS:CIM_DataFile, RESULTS:14"},
{ L"4", L"CLASS:Win32_Process, RESULTS:4"}};
IniInfo g_Test207[] = {
{ L"PROVIDERS", L"CIMV2"},
{ L"RUNTESTS", L"200" },
{ L"Description", L"Execute methods for Providers"},
{ L"NAMESPACE_DEFINITION_SECTION", L"201"},
{ L"CIMV2", L"1"},
{ L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
{ L"1", L"Class:CIM_DataFile, InstanceName:CIM_DataFile.Name=\"c:\\\\BVT.TST\"$EndInstanceName, METHOD:Copy, INPUT:Property:FileName:CIM_STRING:c:\\\\BVT2.TST"}};
IniInfo g_Test208[] = {
{ L"PROVIDERS", L"WDM,CIMV2"},
{ L"RUNTESTS", L"200" },
{ L"NAMESPACE_DEFINITION_SECTION", L"201"},
{ L"Description", L"Test temporary semi-sync events for Providers"},
{ L"WDM", L"1"},
{ L"CIMV2", L"2"},
{ L"1", L"LANGUAGE:WQL, QUERY:\"select * from __InstanceCreationEvent within 10\", EXECUTE_SECTION: 212, RESULTS:2, NAMESPACE:ROOT\\WMI"},
{ L"2", L"LANGUAGE:WQL, QUERY:\"select * from __InstanceCreationEvent within 10\", EXECUTE_SECTION: 212, RESULTS:2, NAMESPACE:ROOT\\CIMV2"}};
IniInfo g_Test209[] = {
{L"PROVIDERS", L"WDM,CIMV2"},
{ L"RUNTESTS", L"200" },
{ L"NAMESPACE_DEFINITION_SECTION", L"201"},
{ L"Description", L"Test temporary async events for Providers"},
{ L"WDM", L"1"},
{ L"CIMV2", L"2"},
{ L"1", L"LANGUAGE:WQL, QUERY:\"select * from __InstanceCreationEvent within 10\", EXECUTE_SECTION: 212, RESULTS:2, NAMESPACE:ROOT\\WMI"},
{ L"2", L"LANGUAGE:WQL, QUERY:\"select * from __InstanceCreationEvent within 10\", EXECUTE_SECTION: 212, RESULTS:2, NAMESPACE:ROOT\\CIMV2"}};
IniInfo g_Test210[] = {
{ L"PROVIDERS", L"WDM"},
{ L"RUNTESTS", L"200" },
{ L"NAMESPACE_DEFINITION_SECTION", L"201"},
{ L"Description", L"Create Refresher for Providers"},
{ L"WDM", L"1"},
{ L"1", L"Class:Win32_BasicHiPerf"}};
IniInfo g_Test211[] = {
{ L"PROVIDERS", L"WDM, CIMV2"},
{ L"RUNTESTS", L"200" },
{ L"NAMESPACE_DEFINITION_SECTION", L"201"},
{ L"Description", L"Create Classes for Providers"},
{ L"WDM", L"1,2"},
{ L"CIMV2", L"3,4"},
{ L"1", L"Class:WDMTemp1, Property:Key1:CIM_UINT32:0, PropertyQualifier:KEY:Key1:CIM_BOOLEAN:1, Property:Prop1:CIM_STRING:x" },
{ L"2", L"Class:WDMTemp2, Property:Key2:CIM_UINT32:0, PropertyQualifier:KEY:Key2:CIM_BOOLEAN:1, Property:Prop2:CIM_STRING:x" },
{ L"3", L"Class:CIMTemp1, Property:Key1:CIM_UINT32:0, PropertyQualifier:KEY:Key1:CIM_BOOLEAN:1, Property:Prop1:CIM_STRING:x" },
{ L"4", L"Class:CIMTemp2, Property:Key2:CIM_UINT32:0, PropertyQualifier:KEY:Key2:CIM_BOOLEAN:1, Property:Prop2:CIM_STRING:x" }};
IniInfo g_Test212[] = {
{ L"PROVIDERS", L"WDM,CIMV2"},
{ L"RUNTESTS", L"211" },
{ L"NAMESPACE_DEFINITION_SECTION", L"201"},
{ L"DEFINITION_SECTION", L"212"},
{ L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
{ L"Description", L"Create Instances for Providers"},
{ L"WDM", L"1,2"},
{ L"CIMV2", L"3,4"},
{ L"1", L"Class:WDMTemp1, Property:Key1:CIM_UINT32:1, Property:Prop1:CIM_STRING:Test1, InstanceName:WDMTemp1.Key1=1$EndInstanceName" },
{ L"2", L"Class:WDMTemp2, Property:Key2:CIM_UINT32:2, Property:Prop2:CIM_STRING:Test2, InstanceName:WDMTemp2.Key2=2$EndInstanceName" },
{ L"3", L"Class:CIMTemp1, Property:Key1:CIM_UINT32:1, Property:Prop1:CIM_STRING:Test1, InstanceName:CIMTemp1.Key1=1$EndInstanceName" },
{ L"4", L"Class:CIMTemp2, Property:Key2:CIM_UINT32:2, Property:Prop2:CIM_STRING:Test2, InstanceName:CIMTemp2.Key2=2$EndInstanceName" }};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// The Event tests
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
IniInfo g_Test300[] = {
{ L"RUNTESTS", L"21" },
{ L"NAMESPACE", L"ROOT"},
{ L"Description", L"Test temporary semi-sync events"},
{ L"EVENT_LIST", L"NAMESPACE_CREATION, CLASS_CREATION,INSTANCE_CREATION"},
{ L"NAMESPACE_CREATION", L"LANGUAGE:WQL, QUERY:\"select * from __NamespaceCreationEvent\", EXECUTE_SECTION: 4, RESULTS:1, NAMESPACE:ROOT"},
{ L"INSTANCE_CREATION", L"LANGUAGE:WQL, QUERY:\"select * from __InstanceCreationEvent\", EXECUTE_SECTION: 9, RESULTS:4, NAMESPACE:ROOT\\BVTAPITEST"},
{ L"CLASS_CREATION", L"LANGUAGE:WQL, QUERY:\"select * from __ClassCreationEvent\", EXECUTE_SECTION: 5, RESULTS:10, NAMESPACE:ROOT\\BVTAPITEST"}};
IniInfo g_Test301[] = {
{ L"RUNTESTS", L"21" },
{ L"NAMESPACE", L"ROOT"},
{ L"Description", L"Test temporary async events"},
{ L"EVENT_LIST", L"NAMESPACE_CREATION, CLASS_CREATION,INSTANCE_CREATION"},
{ L"NAMESPACE_CREATION", L"LANGUAGE:WQL, QUERY:\"select * from __NamespaceCreationEvent\", EXECUTE_SECTION: 4, RESULTS:1, NAMESPACE:ROOT"},
{ L"INSTANCE_CREATION", L"LANGUAGE:WQL, QUERY:\"select * from __InstanceCreationEvent\", EXECUTE_SECTION: 9, RESULTS:4, NAMESPACE:ROOT\\BVTAPITEST"},
{ L"CLASS_CREATION", L"LANGUAGE:WQL, QUERY:\"select * from __ClassCreationEvent\", EXECUTE_SECTION: 5, RESULTS:10, NAMESPACE:ROOT\\BVTAPITEST"}};
IniInfo g_Test302[] = {
{ L"RUNTESTS", L"21" },
{ L"NAMESPACE", L"ROOT\\BVTAPITEST"},
{ L"DEFINITION_SECTION", L"302"},
{ L"Description", L"Permanent events"},
{ L"MOF_COMMAND", L"mofcomp bvtperm\\BVT.MOF"},
{ L"REGISTER_PERM_EVENT_CONSUMER", L"bvtperm\\cmdlineconsumer.exe"},
{ L"RETRY", L"10"},
{ L"SLEEP_IN_MILLISECONDS", L"1000"},
{ L"FIRE_EVENTS", L"1"},
{ L"1", L"EXECUTE_SECTION: 303, RESULTS:2, NAMESPACE:ROOT\\BVTAPITEST"}};
IniInfo g_Test303[] = {
{ L"RUNTESTS", L"304" },
{ L"Description", L"Create Instances for PermEventConsumer"},
{ L"NAMESPACE", L"ROOT\\BVTAPITEST"},
{ L"DEFINITION_SECTION", L"303"},
{ L"INSTANCE_LIST", L"4,5"},
{ L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
{ L"4", L"Class:PermClass1, Property:Key1:CIM_SINT32:1, InstanceName:PermClass1.Key1=1$EndInstanceName" },
{ L"5", L"Class:PermClass1, Property:Key1:CIM_SINT32:2, InstanceName:PermClass1.Key1=2$EndInstanceName" }};
IniInfo g_Test304[] = {
{ L"Description", L"Creates test classes for perm event consumer"},
{ L"NAMESPACE", L"ROOT\\BVTAPITEST"},
{ L"Classes", L"1" },
{ L"1", L"Class:PermClass1, Property:Key1:CIM_SINT32:1, PropertyQualifier:KEY:Key1:CIM_BOOLEAN:1" }};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// The Adapter tests
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// The scripting tests
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
IniInfo g_Test1000[] = {
{ L"SCRIPTS",L"1,2,3,4"},
{ L"1,", L"scripts\\Test1.vbs" },
{ L"2,", L"scripts\\Test1.vbs" },
{ L"3,", L"scripts\\Test1.vbs" },
{ L"4,", L"scripts\\Test1.vbs" }};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL CIniFileAndGlobalOptions::GetSpecificOptionForAPITest(const WCHAR * wcsKey, CHString & sInfo, int nTest)
{
BOOL fRc = FALSE;
int nNum = 0;
int nMax = 0;
IniInfo * pArray = NULL;
WCHAR * wcsSection = NULL;
switch( nTest )
{
//==================================================================
// The repository tests
//==================================================================
case 1:
pArray = g_Test1;
nMax = sizeof(g_Test1)/sizeof(IniInfo);
wcsSection = L"1";
break;
case 2:
pArray = g_Test2;
nMax = sizeof(g_Test2)/sizeof(IniInfo);
wcsSection = L"2";
break;
case 3:
pArray = g_Test3;
nMax = sizeof(g_Test3)/sizeof(IniInfo);
wcsSection = L"3";
break;
case 4:
pArray = g_Test4;
nMax = sizeof(g_Test4)/sizeof(IniInfo);
wcsSection = L"4";
break;
case 5:
pArray = g_Test5;
nMax = sizeof(g_Test5)/sizeof(IniInfo);
wcsSection = L"5";
break;
case 6:
pArray = g_Test6;
nMax = sizeof(g_Test6)/sizeof(IniInfo);
wcsSection = L"6";
break;
case 7:
pArray = g_Test7;
nMax = sizeof(g_Test7)/sizeof(IniInfo);
wcsSection = L"7";
break;
case 8:
pArray = g_Test8;
nMax = sizeof(g_Test8)/sizeof(IniInfo);
wcsSection = L"8";
break;
case 9:
pArray = g_Test9;
nMax = sizeof(g_Test9)/sizeof(IniInfo);
wcsSection = L"9";
break;
case 10:
pArray = g_Test10;
nMax = sizeof(g_Test10)/sizeof(IniInfo);
wcsSection = L"10";
break;
case 11:
pArray = g_Test11;
nMax = sizeof(g_Test11)/sizeof(IniInfo);
wcsSection = L"11";
break;
case 12:
pArray = g_Test12;
nMax = sizeof(g_Test12)/sizeof(IniInfo);
wcsSection = L"12";
break;
case 13:
pArray = g_Test13;
nMax = sizeof(g_Test13)/sizeof(IniInfo);
wcsSection = L"13";
break;
case 14:
pArray = g_Test14;
nMax = sizeof(g_Test14)/sizeof(IniInfo);
wcsSection = L"14";
break;
case 15:
pArray = g_Test15;
nMax = sizeof(g_Test15)/sizeof(IniInfo);
wcsSection = L"15";
break;
case 16:
pArray = g_Test16;
nMax = sizeof(g_Test16)/sizeof(IniInfo);
wcsSection = L"16";
break;
case 17:
pArray = g_Test17;
nMax = sizeof(g_Test17)/sizeof(IniInfo);
wcsSection = L"17";
break;
case 18:
pArray = g_Test18;
nMax = sizeof(g_Test18)/sizeof(IniInfo);
wcsSection = L"18";
break;
case 19:
pArray = g_Test19;
nMax = sizeof(g_Test19)/sizeof(IniInfo);
wcsSection = L"19";
break;
case 20:
pArray = g_Test20;
nMax = sizeof(g_Test20)/sizeof(IniInfo);
wcsSection = L"20";
break;
case 21:
pArray = g_Test21;
nMax = sizeof(g_Test21)/sizeof(IniInfo);
wcsSection = L"21";
break;
//==================================================================
// The Other Provider tests
//==================================================================
case 200:
pArray = g_Test200;
nMax = sizeof(g_Test200)/sizeof(IniInfo);
wcsSection = L"200";
break;
case 201:
pArray = g_Test201;
nMax = sizeof(g_Test201)/sizeof(IniInfo);
wcsSection = L"201";
break;
case 202:
pArray = g_Test202;
nMax = sizeof(g_Test202)/sizeof(IniInfo);
wcsSection = L"202";
break;
case 204:
pArray = g_Test204;
nMax = sizeof(g_Test204)/sizeof(IniInfo);
wcsSection = L"204";
break;
case 205:
pArray = g_Test205;
nMax = sizeof(g_Test205)/sizeof(IniInfo);
wcsSection = L"205";
break;
case 206:
pArray = g_Test206;
nMax = sizeof(g_Test206)/sizeof(IniInfo);
wcsSection = L"206";
break;
case 207:
pArray = g_Test207;
nMax = sizeof(g_Test207)/sizeof(IniInfo);
wcsSection = L"207";
break;
case 208:
pArray = g_Test208;
nMax = sizeof(g_Test208)/sizeof(IniInfo);
wcsSection = L"208";
break;
case 209:
pArray = g_Test209;
nMax = sizeof(g_Test209)/sizeof(IniInfo);
wcsSection = L"209";
break;
case 210:
pArray = g_Test210;
nMax = sizeof(g_Test210)/sizeof(IniInfo);
wcsSection = L"210";
break;
case 211:
pArray = g_Test211;
nMax = sizeof(g_Test211)/sizeof(IniInfo);
wcsSection = L"211";
break;
case 212:
pArray = g_Test212;
nMax = sizeof(g_Test212)/sizeof(IniInfo);
wcsSection = L"212";
break;
//==================================================================
// The event tests
//==================================================================
case 300:
pArray = g_Test300;
nMax = sizeof(g_Test300)/sizeof(IniInfo);
wcsSection = L"300";
break;
case 301:
pArray = g_Test301;
nMax = sizeof(g_Test301)/sizeof(IniInfo);
wcsSection = L"301";
break;
case 302:
pArray = g_Test302;
nMax = sizeof(g_Test302)/sizeof(IniInfo);
wcsSection = L"302";
break;
case 303:
pArray = g_Test303;
nMax = sizeof(g_Test303)/sizeof(IniInfo);
wcsSection = L"303";
break;
case 304:
pArray = g_Test304;
nMax = sizeof(g_Test304)/sizeof(IniInfo);
wcsSection = L"304";
break;
//==================================================================
// The scripting tests
//==================================================================
case 1000:
pArray = g_Test1000;
nMax = sizeof(g_Test1000)/sizeof(IniInfo);
wcsSection = L"1000";
break;
}
if( GetDefaultMatch(pArray,wcsKey,nNum, nMax))
{
fRc = ReadIniFile(wcsSection,wcsKey,pArray[nNum].Value,sInfo);
}
else
{
fRc = ReadIniFile(wcsSection,wcsKey,L"Empty",sInfo);
}
return fRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CIniFileAndGlobalOptions::WriteDefaultIniFile()
{
BOOL fRc;
//================================================================================
// Write out test 1
//================================================================================
for( int i=0; i<sizeof(g_Doc1)/sizeof(IniInfo); i++ )
{
fRc = WritePrivateProfileString(L"1", g_Doc1[i].Key, g_Doc1[i].Value,m_wcsFileName);
}
for( int i=0; i<sizeof(g_Test1)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"1", g_Test1[i].Key, g_Test1[i].Value,m_wcsFileName);
}
//================================================================================
// Write out test 2
//================================================================================
for( int i=0; i<sizeof(g_Doc2)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"2", g_Doc2[i].Key, g_Doc2[i].Value,m_wcsFileName);
}
for( int i=0; i<sizeof(g_Test2)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"2", g_Test2[i].Key, g_Test2[i].Value,m_wcsFileName);
}
//================================================================================
// Write out test 3
//================================================================================
for( int i=0; i<sizeof(g_Doc3)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"3", g_Doc3[i].Key, g_Doc3[i].Value,m_wcsFileName);
}
for( int i=0; i<sizeof(g_Test3)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"3", g_Test3[i].Key, g_Test3[i].Value,m_wcsFileName);
}
//================================================================================
// Write out test 4
//================================================================================
for( int i=0; i<sizeof(g_Doc4)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"4", g_Doc4[i].Key, g_Doc4[i].Value,m_wcsFileName);
}
WritePrivateProfileString(L"4", g_Test4[0].Key, g_Test4[0].Value,m_wcsFileName);
//================================================================================
// Write out test 5
//================================================================================
for( int i=0; i<sizeof(g_Doc5)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"5", g_Doc5[i].Key, g_Doc5[i].Value,m_wcsFileName);
}
for( int i=0; i<sizeof(g_Test5)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"5", g_Test5[i].Key, g_Test5[i].Value,m_wcsFileName);
}
//================================================================================
// Write out test 6
//================================================================================
for( int i=0; i<sizeof(g_Doc6)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"6", g_Doc6[i].Key, g_Doc6[i].Value,m_wcsFileName);
}
for( int i=0; i<sizeof(g_Test6)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"6", g_Test6[i].Key, g_Test6[i].Value,m_wcsFileName);
}
//================================================================================
// Write out test 7
//================================================================================
for( int i=0; i<sizeof(g_Doc7)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"7", g_Doc7[i].Key, g_Doc7[i].Value,m_wcsFileName);
}
for( int i=0; i<sizeof(g_Test7)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"7", g_Test7[i].Key, g_Test7[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test8)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"8", g_Test8[i].Key, g_Test8[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test9)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"9", g_Test9[i].Key, g_Test9[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test10)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"10", g_Test10[i].Key, g_Test10[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test11)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"11", g_Test11[i].Key, g_Test11[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test12)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"12", g_Test12[i].Key, g_Test12[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test13)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"13", g_Test13[i].Key, g_Test13[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test14)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"14", g_Test14[i].Key, g_Test14[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test15)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"15", g_Test15[i].Key, g_Test15[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test16)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"16", g_Test16[i].Key, g_Test16[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test17)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"17", g_Test17[i].Key, g_Test17[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test18)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"18", g_Test18[i].Key, g_Test18[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test19)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"19", g_Test19[i].Key, g_Test19[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test20)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"20", g_Test20[i].Key, g_Test20[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test21)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"21", g_Test21[i].Key, g_Test21[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test200)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"200", g_Test200[i].Key, g_Test200[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test201)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"201", g_Test201[i].Key, g_Test201[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test202)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"202", g_Test202[i].Key, g_Test202[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test204)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"204", g_Test204[i].Key, g_Test204[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test205)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"205", g_Test205[i].Key, g_Test205[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test206)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"206", g_Test206[i].Key, g_Test206[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test207)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"207", g_Test207[i].Key, g_Test207[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test208)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"208", g_Test208[i].Key, g_Test208[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test209)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"209", g_Test209[i].Key, g_Test209[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test210)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"210", g_Test210[i].Key, g_Test210[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test211)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"211", g_Test211[i].Key, g_Test211[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test212)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"212", g_Test212[i].Key, g_Test212[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test300)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"300", g_Test300[i].Key, g_Test300[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test301)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"301", g_Test301[i].Key, g_Test301[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test302)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"302", g_Test302[i].Key, g_Test302[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test303)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"303", g_Test303[i].Key, g_Test303[i].Value,m_wcsFileName);
}
//================================================================================
for( int i=0; i<sizeof(g_Test304)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"304", g_Test304[i].Key, g_Test304[i].Value,m_wcsFileName);
}
//================================================================================
// Scripting: Write out test 1000
//================================================================================
for( int i=0; i<sizeof(g_Test1000)/sizeof(IniInfo); i++ )
{
WritePrivateProfileString(L"7", g_Test1000[i].Key, g_Test1000[i].Value,m_wcsFileName);
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
//
// Run the tests
//
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int RunTests(int nWhichTest,BOOL fCompareResults, BOOL fSuppressHeader)
{
int nRc = FATAL_ERROR;
Sleep(200);
switch( nWhichTest )
{
//*************************************************************
//=============================================================
// The Repository Tests
//=============================================================
//*************************************************************
//=================================================================
// Basic connect using IWbemLocator
//=================================================================
case 1:
nRc = BasicConnectUsingIWbemLocator(fCompareResults,fSuppressHeader);
break;
//=================================================================
// Basic Sync connect using IWbemConnection
//=================================================================
case 2:
nRc = BasicSyncConnectUsingIWbemConnection(fCompareResults,fSuppressHeader);
break;
//=============================================================
// Basic connect sync & async using IWbemConnection
//=============================================================
case 3:
nRc = BasicAsyncConnectUsingIWbemConnection(fCompareResults,fSuppressHeader);
break;
//=============================================================
// Create a new test namespace
//=============================================================
case 4:
nRc = CreateNewTestNamespace(fCompareResults,fSuppressHeader);
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 5:
nRc = CreateNewClassesInTestNamespace(fCompareResults,fSuppressHeader);
break;
//=============================================================
// "memorize the class definitions". In a complex loop,
// delete the classes and recreate them in various sequences,
// ending with the full set.
//=============================================================
case 6:
nRc = DeleteAndRecreateNewClassesInTestNamespace(fCompareResults,fSuppressHeader);
break;
//=============================================================
// Create associations
//=============================================================
case 7:
nRc= CreateSimpleAssociations(fCompareResults,fSuppressHeader);
break;
//=============================================================
// Execute queries
//=============================================================
case 8:
nRc = QueryAllClassesInTestNamespace(fCompareResults,fSuppressHeader);
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.
//=============================================================
case 9:
nRc = CreateClassInstances(fCompareResults,fSuppressHeader);
break;
//=============================================================
// Verify that deletion of instances works.
//=============================================================
case 10:
nRc = DeleteClassInstances(fCompareResults,fSuppressHeader);
break;
//=============================================================
// Enumerate the instances
//=============================================================
case 11:
nRc = EnumerateClassInstances(fCompareResults,fSuppressHeader);
break;
//=============================================================
// Create some simple association classes
//=============================================================
case 12:
nRc = CreateAssociationInstances(fCompareResults,fSuppressHeader);
break;
//=============================================================
// Delete association instances
//=============================================================
case 13:
nRc = DeleteAssociationInstances(fCompareResults,fSuppressHeader);
break;
//=============================================================
// Enumerate the association instances
//=============================================================
case 14:
nRc = EnumerateAssociationInstances(fCompareResults,fSuppressHeader);
break;
//=============================================================
// Verify that deletion of a class takes out all the instances.
//=============================================================
case 15:
nRc = DeleteClassDeletesInstances(fCompareResults,fSuppressHeader);
break;
//=============================================================
//
//=============================================================
case 16:
nRc = GetObjects(fCompareResults,fSuppressHeader);
break;
case 17:
nRc = CreateMethods(fCompareResults,fSuppressHeader);
break;
case 18:
nRc = DeleteMethods(fCompareResults,fSuppressHeader);
break;
case 19:
nRc = ListMethods(fCompareResults,fSuppressHeader);
break;
case 20:
nRc = DeleteAllNonSystemClasses(fCompareResults,fSuppressHeader);
break;
case 21:
nRc = DeleteRequestedNamespace(fCompareResults,fSuppressHeader);
break;
//*************************************************************
//=============================================================
// The Other Provider Tests
//=============================================================
//*************************************************************
case 200:
nRc = ProviderOpenNamespace(fCompareResults,fSuppressHeader);
break;
case 201:
nRc = ProviderEnumerateClasses(fCompareResults,fSuppressHeader);
break;
case 202:
nRc = ProviderExecuteQueries(fCompareResults,fSuppressHeader);
break;
case 203:
nRc = SUCCESS;
break;
case 204:
nRc = ProviderEnumerateInstances(fCompareResults,fSuppressHeader);
break;
case 205:
nRc = ProviderGetObjects(fCompareResults,fSuppressHeader);
break;
case 206:
nRc = ProviderEnumerateMethods(fCompareResults,fSuppressHeader);
break;
case 207:
nRc = ProviderExecuteMethods(fCompareResults,fSuppressHeader);
break;
case 208:
nRc = ProviderSemiSyncEvents(fCompareResults,fSuppressHeader);
nRc = SUCCESS;
break;
case 209:
nRc = ProviderTempAsyncEvents(fCompareResults,fSuppressHeader);
nRc = SUCCESS;
break;
case 210:
nRc = ProviderRefresher(fCompareResults,fSuppressHeader);
break;
case 211:
nRc = ProviderCreateClasses(fCompareResults,fSuppressHeader);
break;
case 212:
nRc = ProviderCreateInstances(fCompareResults,fSuppressHeader);
break;
//*************************************************************
//=============================================================
// The Event Tests
//=============================================================
//*************************************************************
case 300:
nRc = TempSemiSyncEvents(fCompareResults,fSuppressHeader);
break;
case 301:
nRc = TempAsyncEvents(fCompareResults,fSuppressHeader);
break;
case 302:
nRc = PermanentEvents(fCompareResults,fSuppressHeader);
break;
case 303:
nRc = PermanentInstances(fCompareResults,fSuppressHeader);
break;
case 304:
nRc = PermanentClasses(fCompareResults,fSuppressHeader);
break;
//*************************************************************
//=============================================================
// The XML Adapter Tests
//=============================================================
//*************************************************************
//*************************************************************
//=============================================================
// The OLEDB Adapter Tests
//=============================================================
//*************************************************************
//*************************************************************
//=============================================================
// The Scripting Tests
//=============================================================
//*************************************************************
case 1000:
ExecuteScript(nWhichTest);
break;
default:
gp_LogFile->LogError(__FILE__,__LINE__,WARNING, L"Requested test does not exist." );
break;
}
return nRc;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
DWORD WINAPI CMulti::RandomRunTest(LPVOID pHold)
{
CMulti * pTmp = (CMulti*) pHold;
int nTest = 0, nMax = 0;
nMax = pTmp->GetMax();
if(nMax > 0)
{
float f=((float)rand())/(RAND_MAX+1);
int nRet=(((int)(nMax*f))+1);
nTest = ((nTest+GetCurrentThreadId()) % nMax)+1;
}
return RunTests(g_nMultiThreadTests[nTest-1],FALSE,FALSE);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
int CMulti::MultiThreadTest(int nThreads, int nConnections )
{
HRESULT hr = S_OK;
DWORD dwFlags = 0;
DWORD lpExitCode;
HANDLE * hpHandles = new HANDLE[nThreads];
for(int n = 0; n < nConnections; n++)
{
for(int i = 0; i < nThreads; i++)
{
Sleep(100);
hpHandles[i] = CreateThread(0, 0, RandomRunTest, (LPVOID)this, 0, &dwFlags);
}
for(i = 0; i < nThreads; i++)
{
do
{
GetExitCodeThread(hpHandles[i], &lpExitCode);
}
while(lpExitCode == STILL_ACTIVE);
CloseHandle(hpHandles[i]);
}
}
SAFE_DELETE_ARRAY(hpHandles);
return hr;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL ParseCommandLine(int argc, WCHAR *argv[])
{
BOOL fRc = TRUE;
//============================================================================================
// Set the default error log name.
//============================================================================================
gp_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; i<argc; i++)
{
if(_wcsicmp(argv[i], L"-INIFILE") == 0)
{
g_Options.SetFileName(argv[++i]);
}
else if(_wcsicmp(argv[i], L"-LOGFILE") == 0)
{
gp_LogFile->SetFileName(argv[++i]);
}
else if(_wcsicmp(argv[i], L"-TEST") == 0)
{
WCHAR * pSeps = L"[], ";
WCHAR * pToken = wcstok( argv[++i], pSeps );
while( pToken != NULL )
{
g_Options.AddToSpecificTestList(_wtoi(pToken));
pToken = wcstok( NULL, pSeps );
}
g_Options.SpecificTests(TRUE);
}
else if(_wcsicmp(argv[i], L"-THREADS") == 0)
{
WCHAR * pSeps = L"[], ";
WCHAR * pToken = wcstok( argv[++i], pSeps );
g_Options.SetThreads(_wtoi(pToken));
}
else if(_wcsicmp(argv[i], L"-CONNECTIONS") == 0)
{
WCHAR * pSeps = L"[], ";
WCHAR * pToken = wcstok( argv[++i], pSeps );
g_Options.SetConnections(_wtoi(pToken));
}
else if(_wcsicmp(argv[i], L"-WRITEDEFAULTINI") == 0)
{
g_Options.WriteDefaultIniFile();
}
else
{
printf("Usage : %s OPTIONS\n\n", argv[0]);
printf("Valid options are: \n");
printf(" -TEST [1,2,10...] Default: All tests are executed\n");
printf(" -THREADS [210] Default: 100\n");
printf(" -CONNECTIONS [210] Default: 100\n");
printf(" -INIFILE inifilename The name of the ini file.\n");
printf(" -WRITEDEFAULTINI Writes out the default ini file.\n");
printf(" -LOGFILE logfilename The name of the output log file.\n");
printf(" Default: BVT.LOG\n\n");
return FALSE;
}
}
return fRc;
}