/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // BVTUtil.CPP // // // Copyright (c)2000 Microsoft Corporation, All Rights Reserved // /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #include "bvt.h" #include /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //***************************************************************************************************************** // 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; iLogError(__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; iSetFileName(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; }