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.

1127 lines
50 KiB

  1. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. //
  3. // BVTUtil.CPP
  4. //
  5. //
  6. // Copyright (c)2000 Microsoft Corporation, All Rights Reserved
  7. //
  8. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  9. #include "bvt.h"
  10. #include <time.h>
  11. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  12. //*****************************************************************************************************************
  13. // Documentation arrays
  14. //*****************************************************************************************************************
  15. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  16. IniInfo g_Doc1[] = {
  17. { L"FYI", L"NAMESPACE is the Namespace the BVT will use"} };
  18. IniInfo g_Doc2[] = {
  19. { L"FYI", L"NAMESPACE is the Namespace the BVT will use. CLASS is the class used to create the namespace" }};
  20. IniInfo g_Doc3[] = {
  21. { L"FYI", L"NAMESPACE is the Namespace the BVT will use. CLASS is the class used to create the namespace" }};
  22. IniInfo g_Doc4[] = {
  23. { L"FYI", L"NAMESPACE is the Namespace the BVT will create" }};
  24. IniInfo g_Doc5[] = {
  25. {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" },
  26. {L"FYI_Format", L"Classes are defined in this format: ClassName = Parent:XClass, Key:TmpKey:CIM_SINT32:3, Property:PropertyName3:CIM_UINT32:3" },
  27. {L"FYI_Class", L"Using format as defined in FYI_Format, ClassName is the actual name of the class to be created" },
  28. {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." },
  29. {L"FYI_Qualifier", L"Doc this" },
  30. {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." },
  31. {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." }};
  32. IniInfo g_Doc6[] = {
  33. {L"FYI_Delete_Classes", L"First, Classes will be deleted as specified by the ini entry DELETE_CLASSES" },
  34. {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" },
  35. {L"FYI_Add_Classes", L"Third, Classes to be added are then specified by the ini entry ADD_CLASSES" },
  36. {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" },
  37. {L"FYI_Classes_Add_Delete_Order", L"Fifth, Classes to be deleted and added in specified order DELETE_ADD_CLASS_ORDER" },
  38. {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" },
  39. {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" },
  40. {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." }};
  41. IniInfo g_Doc7[] = {
  42. {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" },
  43. {L"FYI_Format", L"Example: Property:FirstPoint:TestClass1:Reference:REF:TestClass1, Property:SecondPoint:TestClass2:REF:TestClass2" },
  44. {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." },
  45. {L"FYI_Comments", L"REF is optional" }};
  46. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  47. // The repository tests
  48. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  49. IniInfo g_Test1[] = {{L"NAMESPACE",L"ROOT\\DEFAULT" },
  50. {L"Description", L"Basic connect using IWbemLocator"}};
  51. IniInfo g_Test2[] = { { L"NAMESPACE",L"ROOT\\DEFAULT" },
  52. { L"Description", L"Basic connect using IWbemConnection for IWbemServices, IWbemServicesEx, IWbemClassObject"},
  53. { L"CLASS" ,L"__NAMESPACE" } };
  54. IniInfo g_Test3[] = { { L"NAMESPACE",L"ROOT\\DEFAULT" },
  55. { L"Description", L"Basic async connect using IWbemConnection for IWbemServices, IWbemServicesEx, IWbemClassObject"},
  56. { L"CLASS" ,L"__NAMESPACE" } };
  57. IniInfo g_Test4[] = {{L"NAMESPACE",L"ROOT\\BVTAPITEST" },
  58. {L"Description", L"Creation of a test namespace"},
  59. {L"PARENT_NAMESPACE",L"ROOT"},
  60. {L"CLASSES", L"__NAMESPACE"},
  61. {L"__NAMESPACE", L"Class:__NAMESPACE,Property:Name:CIM_STRING:BVTAPITEST" }};
  62. IniInfo g_Test5[] = {
  63. { L"RUNTESTS", L"4" },
  64. {L"Description", L"Creates test classes in the test namespace"},
  65. { L"NAMESPACE", L"ROOT\\BVTAPITEST"},
  66. { L"Classes", L"1,2,3,4,5,6,7,8,9,10" },
  67. { L"1", L"Class:TestClass1" }, // an abstract class, so 4 and 5 can define additional keys
  68. { 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" },
  69. { 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" },
  70. { L"4", L"Class:TestClass4, Parent:TestClass1, Property:KeyName4:CIM_UINT32:4, PropertyQualifier:KEY:KeyName4:CIM_BOOLEAN:1, Property:PropertyName4:CIM_STRING:0" },
  71. { L"5", L"Class:TestClass5, Parent:TestClass1, Property:KeyName5:CIM_STRING:Temp, PropertyQualifier:KEY:KeyName5:CIM_BOOLEAN:1, Property:PropertyName5:CIM_STRING:Value5" },
  72. { L"6", L"Class:TestClass6, Parent:TestClass5, Property:PropertyName6:CIM_STRING:Value6,PropertyQualifier:ID:PropertyName6:CIM_SINT32:1" }, // no additional key can be defined
  73. { L"7", L"Class:TestClass7, Parent:TestClass6, Property:PropertyName7:CIM_STRING:1,PropertyQualifier:ID:PropertyName7:CIM_SINT32:1" }, // no additional key can be defined
  74. { L"8", L"Class:TestClass8, Parent:TestClass7, Property:PropertyName8:CIM_SINT32:2" }, // no additional key can be defined
  75. { L"9", L"Class:TestClass9, Parent:TestClass8, Property:PropertyName9:CIM_STRING:Value9" }, // no additional key can be defined
  76. { L"10", L"Class:TestClass10, Parent:TestClass9, Property:PropertyName10:CIM_STRING:0" } }; // no additional key can be defined
  77. IniInfo g_Test6[] = {
  78. {L"Description", L"Deletes and Creates the classes in the requested order."},
  79. { L"RUNTESTS", L"20,5" },
  80. { L"NAMESPACE", L"ROOT\\BVTAPITEST"},
  81. { L"DEFINITION_SECTION", L"5"},
  82. { L"DELETE_CLASSES", L"1,3" },
  83. { L"CLASSES_AFTER_DELETE", L"2" },
  84. { L"ADD_CLASSES", L"1,3,4,5,6,7,8,9,10" },
  85. { L"CLASSES_AFTER_ADD", L"1,2,3,4,5,6,7,8,9,10" },
  86. { L"DELETE_ADD_CLASS_ORDER", L"Delete:2, Delete:9, Add:2, Delete:7, Delete: 6" },
  87. { L"CLASSES_AFTER_DELETE_ADD", L"1,2,3,4,5" }};
  88. IniInfo g_Test7[] =
  89. {
  90. { L"RUNTESTS", L"5" },
  91. { L"Description",L"Creates simple associations"},
  92. { L"NAMESPACE", L"ROOT\\BVTAPITEST"},
  93. { L"DEFINITION_SECTION", L"7"},
  94. { L"CLASSES", L"1,2" },
  95. { 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" },
  96. { 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" }};
  97. IniInfo g_Test8[] = {
  98. { L"RUNTESTS", L"12" },
  99. { L"Description",L"Executes queries"},
  100. { L"NAMESPACE", L"ROOT\\BVTAPITEST"},
  101. { L"QUERY_LIST", L"QUERY,ASSOCIATORS_QUERY,REFERENCES_QUERY"},
  102. { L"QUERY", L"RESULTS:60,QUERY:select * from meta_class" },
  103. { L"ASSOCIATORS_QUERY", L"RESULTS:4,QUERY:Associators of" },
  104. { L"REFERENCES_QUERY", L"RESULTS:4,QUERY:References of" }};
  105. IniInfo g_Test9[] = {
  106. { L"RUNTESTS", L"5" },
  107. { L"Description", L"Create Instances"},
  108. { L"NAMESPACE", L"ROOT\\BVTAPITEST"},
  109. { L"DEFINITION_SECTION", L"9"},
  110. { L"INSTANCE_LIST", L"4,5,6,7"},
  111. { L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
  112. { L"4", L"Class:TestClass4, Property:KeyName4:CIM_UINT32:555, Property:PropertyName4:CIM_STRING:1, InstanceName:TestClass4.KeyName4=555$EndInstanceName" },
  113. { L"5", L"Class:TestClass5, Property:KeyName5:CIM_STRING:InstanceTest, Property:PropertyName5:CIM_STRING:TestTest, InstanceName:TestClass5.KeyName5=\"InstanceTest\"$EndInstanceName" },
  114. { L"6", L"Class:TestClass4, Property:KeyName4:CIM_UINT32:556, Property:PropertyName4:CIM_STRING:1, InstanceName:TestClass4.KeyName4=556$EndInstanceName" },
  115. { L"7", L"Class:TestClass5, Property:KeyName5:CIM_STRING:InstanceTest2, Property:PropertyName5:CIM_STRING:TestTest, InstanceName:TestClass5.KeyName5=\"InstanceTest2\"$EndInstanceName" }};
  116. IniInfo g_Test10[] = {
  117. { L"RUNTESTS", L"9" },
  118. { L"Description", L"Deletes Instances"},
  119. { L"NAMESPACE", L"ROOT\\BVTAPITEST"},
  120. { L"INSTANCE_LIST", L"4,5"},
  121. { L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
  122. { L"4", L"TestClass4.KeyName4=555" },
  123. { L"5", L"TestClass5.KeyName5=\"InstanceTest\"" }};
  124. IniInfo g_Test11[] = {
  125. { L"RUNTESTS", L"9" },
  126. { L"Description", L"Enumerates Instances"},
  127. { L"NAMESPACE", L"ROOT\\BVTAPITEST"},
  128. { L"INSTANCE_LIST", L"4,5"},
  129. { L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
  130. { L"4", L"Class:TestClass4,RESULTS:2" },
  131. { L"5", L"Class:TestClass5,RESULTS:2" }};
  132. IniInfo g_Test12[] = {
  133. { L"RUNTESTS", L"7,9" },
  134. { L"Description", L"Create Association Instances"},
  135. { L"NAMESPACE", L"ROOT\\BVTAPITEST"},
  136. { L"DEFINITION_SECTION", L"12"},
  137. { L"INSTANCE_LIST", L"4,5"},
  138. { L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
  139. { 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"},
  140. { 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"}};
  141. IniInfo g_Test13[] = {
  142. { L"RUNTESTS", L"12" },
  143. { L"Description", L"Deletes Association Instances"},
  144. { L"NAMESPACE", L"ROOT\\BVTAPITEST"},
  145. { L"INSTANCE_LIST", L"4,5"},
  146. { L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
  147. { L"4", L"Association1.EndPoint=\"TestClass5.KeyName5=\\\"InstanceTest\\\"\",FirstPoint=\"TestClass4.KeyName4=555\"" },
  148. { L"5", L"Association2.AssocProp1=\"TestClass4.KeyName4=556\",AssocProp2=\"TestClass5.KeyName5=\\\"InstanceTest\\\"\"" }};
  149. IniInfo g_Test14[] = {
  150. { L"RUNTESTS", L"12" },
  151. { L"Description", L"Enumerates Association Instances"},
  152. { L"NAMESPACE", L"ROOT\\BVTAPITEST"},
  153. { L"INSTANCE_LIST", L"4,5"},
  154. { L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
  155. { L"4", L"CLASS:Association1, RESULTS:1" },
  156. { L"5", L"CLASS:Association2, RESULTS:1" }};
  157. IniInfo g_Test15[] = {
  158. { L"RUNTESTS", L"9" },
  159. { L"Description", L"Deletes Class deletes all the instances"},
  160. { L"NAMESPACE", L"ROOT\\BVTAPITEST"},
  161. { L"DEFINITION_SECTION", L"15"},
  162. { L"CLASSES", L"4,5"},
  163. { L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
  164. { L"4", L"Class:TestClass4" },
  165. { L"5", L"Class:TestClass5" }};
  166. IniInfo g_Test16[] = {
  167. { L"RUNTESTS", L"9" },
  168. { L"Description", L"Gets specific objects by various specific paths"},
  169. { L"NAMESPACE", L"ROOT\\BVTAPITEST"},
  170. { L"OBJECT_LIST", L"4,5"},
  171. { L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
  172. { L"4", L"TestClass4.KeyName4=555" },
  173. { L"5", L"TestClass5.KeyName5=\"InstanceTest\"" }};
  174. IniInfo g_Test17[] = {
  175. { L"RUNTESTS", L"5" },
  176. { L"Description", L"Create methods for a class"},
  177. { L"NAMESPACE", L"ROOT\\BVTAPITEST"},
  178. { L"METHOD_LIST", L"4"},
  179. { L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
  180. { L"4", L"CLASS:TestClass2, METHOD:TestMethod, \
  181. INPUT:Property:InputArg1:CIM_UINT32:555, \
  182. INPUT:PropertyQualifier:ID:InputArg1:CIM_SINT32:0,\
  183. INPUT:PropertyQualifier:In:InputArg1:CIM_BOOLEAN:1, \
  184. OUTPUT:Property:OutputArg1:CIM_UINT32:111,\
  185. OUTPUT:PropertyQualifier:ID:OutputArg1:CIM_SINT32:1,\
  186. OUTPUT:PropertyQualifier:Out:OutputArg1:CIM_BOOLEAN:1"}};
  187. IniInfo g_Test18[] = {
  188. { L"RUNTESTS", L"17" },
  189. { L"Description", L"Delete methods for a class"},
  190. { L"NAMESPACE", L"ROOT\\BVTAPITEST"},
  191. { L"METHOD_LIST", L"4"},
  192. { L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
  193. { L"4", L"CLASS:TestClass2, METHOD:TestMethod"}};
  194. IniInfo g_Test19[] = {
  195. { L"RUNTESTS", L"17" },
  196. { L"Description", L"Enumerate methods for a class"},
  197. { L"NAMESPACE", L"ROOT\\BVTAPITEST"},
  198. { L"METHOD_LIST", L"4"},
  199. { L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
  200. { L"4", L"CLASS:TestClass2, RESULTS:1"}};
  201. IniInfo g_Test20[] = {
  202. { L"NAMESPACE", L"ROOT\\BVTAPITEST"},
  203. { L"DESCRIPTION", L"Deletes all non-system classes in the namespace"}};
  204. IniInfo g_Test21[] = {
  205. { L"NAMESPACE", L"ROOT"},
  206. { L"NAMESPACE_TO_DELETE", L"__NAMESPACE.Name=\"BVTAPITEST\""},
  207. { L"DESCRIPTION", L"Deletes requested namespace"}};
  208. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  209. // The Other Provider tests
  210. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  211. IniInfo g_Test200[] = {
  212. {L"PROVIDERS", L"WDM,CIMV2"},
  213. {L"WDM", L"NAMESPACE:ROOT\\WMI"},
  214. {L"CIMV2", L"NAMESPACE:ROOT\\CIMV2"},
  215. {L"Description", L"Basic connect using IWbemLocator"}};
  216. IniInfo g_Test201[] = {
  217. {L"PROVIDERS", L"WDM,CIMV2"},
  218. { L"Description", L"Enumerates Classes for Providers"},
  219. { L"RUNTESTS", L"200"},
  220. { L"NAMESPACE_DEFINITION_SECTION", L"201"},
  221. { L"FLAGS", L"WBEM_FLAG_SHALLOW, WBEM_FLAG_DEEP, WBEM_FLAG_RETURN_IMMEDIATELY | WBEM_FLAG_FORWARD_ONLY "},
  222. { L"WDM", L"1,2"},
  223. { L"CIMV2", L"3,4"},
  224. { L"1", L"CLASS:__ExtrinsicEvent, RESULTS:2, RESULTS:18, RESULTS: 18" },
  225. { L"2", L"Empty" },
  226. { L"3", L"Empty" },
  227. { L"4", L"CLASS:CIM_Action, RESULTS: 16, RESULTS:24, RESULTS:24" }};
  228. IniInfo g_Test202[] = {
  229. {L"PROVIDERS", L"WDM,CIMV2"},
  230. {L"Description", L"Executes queries for Providers"},
  231. {L"RUNTESTS", L"200"},
  232. {L"NAMESPACE_DEFINITION_SECTION", L"201"},
  233. {L"WDM", L"WDMQUERY"},
  234. {L"CIMV2", L"QUERY"},
  235. {L"WDMQUERY", L"RESULTS:235,QUERY:select * from meta_class" },
  236. {L"QUERY", L"RESULTS:627,QUERY:select * from meta_class" }};
  237. IniInfo g_Test204[] = {
  238. { L"PROVIDERS", L"WDM,CIMV2"},
  239. { L"Description", L"Enumerates Instances for Providers"},
  240. { L"RUNTESTS", L"200"},
  241. { L"NAMESPACE_DEFINITION_SECTION", L"201"},
  242. { L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
  243. { L"WDM", L"1,2"},
  244. { L"CIMV2", L"3,4"},
  245. { L"1", L"CLASS:RegisteredGuids, RESULTS:-1" },
  246. { L"2", L"CLASS:WmiBinaryMofResource, RESULTS:-1" },
  247. { L"3", L"CLASS:Win32_Process, RESULTS:-1" },
  248. { L"4", L"CLASS:Win32_Directory, RESULTS:-1" }};
  249. IniInfo g_Test205[] = {
  250. {L"PROVIDERS", L"WDM,CIMV2"},
  251. { L"RUNTESTS", L"200" },
  252. { L"Description", L"Gets specific objects by various specific paths for Providers"},
  253. { L"NAMESPACE_DEFINITION_SECTION", L"201"},
  254. { L"WDM", L"1"},
  255. { L"CIMV2", L"2"},
  256. { L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
  257. { L"1", L"MSNdis_CoDriverVersion.InstanceName=\"WAN Miniport (IP)\""},
  258. { L"2", L"Win32_Directory.Name=\"c:\\\\\"" }};
  259. IniInfo g_Test206[] = {
  260. {L"PROVIDERS", L"CIMV2"},
  261. { L"RUNTESTS", L"200" },
  262. { L"Description", L"Enumerate methods for a class for Providers"},
  263. { L"NAMESPACE_DEFINITION_SECTION", L"201"},
  264. { L"CIMV2", L"3,4"},
  265. { L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
  266. { L"3", L"CLASS:CIM_DataFile, RESULTS:14"},
  267. { L"4", L"CLASS:Win32_Process, RESULTS:4"}};
  268. IniInfo g_Test207[] = {
  269. { L"PROVIDERS", L"CIMV2"},
  270. { L"RUNTESTS", L"200" },
  271. { L"Description", L"Execute methods for Providers"},
  272. { L"NAMESPACE_DEFINITION_SECTION", L"201"},
  273. { L"CIMV2", L"1"},
  274. { L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
  275. { L"1", L"Class:CIM_DataFile, InstanceName:CIM_DataFile.Name=\"c:\\\\BVT.TST\"$EndInstanceName, METHOD:Copy, INPUT:Property:FileName:CIM_STRING:c:\\\\BVT2.TST"}};
  276. IniInfo g_Test208[] = {
  277. { L"PROVIDERS", L"WDM,CIMV2"},
  278. { L"RUNTESTS", L"200" },
  279. { L"NAMESPACE_DEFINITION_SECTION", L"201"},
  280. { L"Description", L"Test temporary semi-sync events for Providers"},
  281. { L"WDM", L"1"},
  282. { L"CIMV2", L"2"},
  283. { L"1", L"LANGUAGE:WQL, QUERY:\"select * from __InstanceCreationEvent within 10\", EXECUTE_SECTION: 212, RESULTS:2, NAMESPACE:ROOT\\WMI"},
  284. { L"2", L"LANGUAGE:WQL, QUERY:\"select * from __InstanceCreationEvent within 10\", EXECUTE_SECTION: 212, RESULTS:2, NAMESPACE:ROOT\\CIMV2"}};
  285. IniInfo g_Test209[] = {
  286. {L"PROVIDERS", L"WDM,CIMV2"},
  287. { L"RUNTESTS", L"200" },
  288. { L"NAMESPACE_DEFINITION_SECTION", L"201"},
  289. { L"Description", L"Test temporary async events for Providers"},
  290. { L"WDM", L"1"},
  291. { L"CIMV2", L"2"},
  292. { L"1", L"LANGUAGE:WQL, QUERY:\"select * from __InstanceCreationEvent within 10\", EXECUTE_SECTION: 212, RESULTS:2, NAMESPACE:ROOT\\WMI"},
  293. { L"2", L"LANGUAGE:WQL, QUERY:\"select * from __InstanceCreationEvent within 10\", EXECUTE_SECTION: 212, RESULTS:2, NAMESPACE:ROOT\\CIMV2"}};
  294. IniInfo g_Test210[] = {
  295. { L"PROVIDERS", L"WDM"},
  296. { L"RUNTESTS", L"200" },
  297. { L"NAMESPACE_DEFINITION_SECTION", L"201"},
  298. { L"Description", L"Create Refresher for Providers"},
  299. { L"WDM", L"1"},
  300. { L"1", L"Class:Win32_BasicHiPerf"}};
  301. IniInfo g_Test211[] = {
  302. { L"PROVIDERS", L"WDM, CIMV2"},
  303. { L"RUNTESTS", L"200" },
  304. { L"NAMESPACE_DEFINITION_SECTION", L"201"},
  305. { L"Description", L"Create Classes for Providers"},
  306. { L"WDM", L"1,2"},
  307. { L"CIMV2", L"3,4"},
  308. { L"1", L"Class:WDMTemp1, Property:Key1:CIM_UINT32:0, PropertyQualifier:KEY:Key1:CIM_BOOLEAN:1, Property:Prop1:CIM_STRING:x" },
  309. { L"2", L"Class:WDMTemp2, Property:Key2:CIM_UINT32:0, PropertyQualifier:KEY:Key2:CIM_BOOLEAN:1, Property:Prop2:CIM_STRING:x" },
  310. { L"3", L"Class:CIMTemp1, Property:Key1:CIM_UINT32:0, PropertyQualifier:KEY:Key1:CIM_BOOLEAN:1, Property:Prop1:CIM_STRING:x" },
  311. { L"4", L"Class:CIMTemp2, Property:Key2:CIM_UINT32:0, PropertyQualifier:KEY:Key2:CIM_BOOLEAN:1, Property:Prop2:CIM_STRING:x" }};
  312. IniInfo g_Test212[] = {
  313. { L"PROVIDERS", L"WDM,CIMV2"},
  314. { L"RUNTESTS", L"211" },
  315. { L"NAMESPACE_DEFINITION_SECTION", L"201"},
  316. { L"DEFINITION_SECTION", L"212"},
  317. { L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
  318. { L"Description", L"Create Instances for Providers"},
  319. { L"WDM", L"1,2"},
  320. { L"CIMV2", L"3,4"},
  321. { L"1", L"Class:WDMTemp1, Property:Key1:CIM_UINT32:1, Property:Prop1:CIM_STRING:Test1, InstanceName:WDMTemp1.Key1=1$EndInstanceName" },
  322. { L"2", L"Class:WDMTemp2, Property:Key2:CIM_UINT32:2, Property:Prop2:CIM_STRING:Test2, InstanceName:WDMTemp2.Key2=2$EndInstanceName" },
  323. { L"3", L"Class:CIMTemp1, Property:Key1:CIM_UINT32:1, Property:Prop1:CIM_STRING:Test1, InstanceName:CIMTemp1.Key1=1$EndInstanceName" },
  324. { L"4", L"Class:CIMTemp2, Property:Key2:CIM_UINT32:2, Property:Prop2:CIM_STRING:Test2, InstanceName:CIMTemp2.Key2=2$EndInstanceName" }};
  325. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  326. // The Event tests
  327. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  328. IniInfo g_Test300[] = {
  329. { L"RUNTESTS", L"21" },
  330. { L"NAMESPACE", L"ROOT"},
  331. { L"Description", L"Test temporary semi-sync events"},
  332. { L"EVENT_LIST", L"NAMESPACE_CREATION, CLASS_CREATION,INSTANCE_CREATION"},
  333. { L"NAMESPACE_CREATION", L"LANGUAGE:WQL, QUERY:\"select * from __NamespaceCreationEvent\", EXECUTE_SECTION: 4, RESULTS:1, NAMESPACE:ROOT"},
  334. { L"INSTANCE_CREATION", L"LANGUAGE:WQL, QUERY:\"select * from __InstanceCreationEvent\", EXECUTE_SECTION: 9, RESULTS:4, NAMESPACE:ROOT\\BVTAPITEST"},
  335. { L"CLASS_CREATION", L"LANGUAGE:WQL, QUERY:\"select * from __ClassCreationEvent\", EXECUTE_SECTION: 5, RESULTS:10, NAMESPACE:ROOT\\BVTAPITEST"}};
  336. IniInfo g_Test301[] = {
  337. { L"RUNTESTS", L"21" },
  338. { L"NAMESPACE", L"ROOT"},
  339. { L"Description", L"Test temporary async events"},
  340. { L"EVENT_LIST", L"NAMESPACE_CREATION, CLASS_CREATION,INSTANCE_CREATION"},
  341. { L"NAMESPACE_CREATION", L"LANGUAGE:WQL, QUERY:\"select * from __NamespaceCreationEvent\", EXECUTE_SECTION: 4, RESULTS:1, NAMESPACE:ROOT"},
  342. { L"INSTANCE_CREATION", L"LANGUAGE:WQL, QUERY:\"select * from __InstanceCreationEvent\", EXECUTE_SECTION: 9, RESULTS:4, NAMESPACE:ROOT\\BVTAPITEST"},
  343. { L"CLASS_CREATION", L"LANGUAGE:WQL, QUERY:\"select * from __ClassCreationEvent\", EXECUTE_SECTION: 5, RESULTS:10, NAMESPACE:ROOT\\BVTAPITEST"}};
  344. IniInfo g_Test302[] = {
  345. { L"RUNTESTS", L"21" },
  346. { L"NAMESPACE", L"ROOT\\BVTAPITEST"},
  347. { L"DEFINITION_SECTION", L"302"},
  348. { L"Description", L"Permanent events"},
  349. { L"MOF_COMMAND", L"mofcomp bvtperm\\BVT.MOF"},
  350. { L"REGISTER_PERM_EVENT_CONSUMER", L"bvtperm\\cmdlineconsumer.exe"},
  351. { L"RETRY", L"10"},
  352. { L"SLEEP_IN_MILLISECONDS", L"1000"},
  353. { L"FIRE_EVENTS", L"1"},
  354. { L"1", L"EXECUTE_SECTION: 303, RESULTS:2, NAMESPACE:ROOT\\BVTAPITEST"}};
  355. IniInfo g_Test303[] = {
  356. { L"RUNTESTS", L"304" },
  357. { L"Description", L"Create Instances for PermEventConsumer"},
  358. { L"NAMESPACE", L"ROOT\\BVTAPITEST"},
  359. { L"DEFINITION_SECTION", L"303"},
  360. { L"INSTANCE_LIST", L"4,5"},
  361. { L"FLAGS", L"WBEM_FLAG_NONSYSTEM_ONLY"},
  362. { L"4", L"Class:PermClass1, Property:Key1:CIM_SINT32:1, InstanceName:PermClass1.Key1=1$EndInstanceName" },
  363. { L"5", L"Class:PermClass1, Property:Key1:CIM_SINT32:2, InstanceName:PermClass1.Key1=2$EndInstanceName" }};
  364. IniInfo g_Test304[] = {
  365. { L"Description", L"Creates test classes for perm event consumer"},
  366. { L"NAMESPACE", L"ROOT\\BVTAPITEST"},
  367. { L"Classes", L"1" },
  368. { L"1", L"Class:PermClass1, Property:Key1:CIM_SINT32:1, PropertyQualifier:KEY:Key1:CIM_BOOLEAN:1" }};
  369. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  370. // The Adapter tests
  371. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  372. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  373. // The scripting tests
  374. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  375. IniInfo g_Test1000[] = {
  376. { L"SCRIPTS",L"1,2,3,4"},
  377. { L"1,", L"scripts\\Test1.vbs" },
  378. { L"2,", L"scripts\\Test1.vbs" },
  379. { L"3,", L"scripts\\Test1.vbs" },
  380. { L"4,", L"scripts\\Test1.vbs" }};
  381. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  382. BOOL CIniFileAndGlobalOptions::GetSpecificOptionForAPITest(const WCHAR * wcsKey, CHString & sInfo, int nTest)
  383. {
  384. BOOL fRc = FALSE;
  385. int nNum = 0;
  386. int nMax = 0;
  387. IniInfo * pArray = NULL;
  388. WCHAR * wcsSection = NULL;
  389. switch( nTest )
  390. {
  391. //==================================================================
  392. // The repository tests
  393. //==================================================================
  394. case 1:
  395. pArray = g_Test1;
  396. nMax = sizeof(g_Test1)/sizeof(IniInfo);
  397. wcsSection = L"1";
  398. break;
  399. case 2:
  400. pArray = g_Test2;
  401. nMax = sizeof(g_Test2)/sizeof(IniInfo);
  402. wcsSection = L"2";
  403. break;
  404. case 3:
  405. pArray = g_Test3;
  406. nMax = sizeof(g_Test3)/sizeof(IniInfo);
  407. wcsSection = L"3";
  408. break;
  409. case 4:
  410. pArray = g_Test4;
  411. nMax = sizeof(g_Test4)/sizeof(IniInfo);
  412. wcsSection = L"4";
  413. break;
  414. case 5:
  415. pArray = g_Test5;
  416. nMax = sizeof(g_Test5)/sizeof(IniInfo);
  417. wcsSection = L"5";
  418. break;
  419. case 6:
  420. pArray = g_Test6;
  421. nMax = sizeof(g_Test6)/sizeof(IniInfo);
  422. wcsSection = L"6";
  423. break;
  424. case 7:
  425. pArray = g_Test7;
  426. nMax = sizeof(g_Test7)/sizeof(IniInfo);
  427. wcsSection = L"7";
  428. break;
  429. case 8:
  430. pArray = g_Test8;
  431. nMax = sizeof(g_Test8)/sizeof(IniInfo);
  432. wcsSection = L"8";
  433. break;
  434. case 9:
  435. pArray = g_Test9;
  436. nMax = sizeof(g_Test9)/sizeof(IniInfo);
  437. wcsSection = L"9";
  438. break;
  439. case 10:
  440. pArray = g_Test10;
  441. nMax = sizeof(g_Test10)/sizeof(IniInfo);
  442. wcsSection = L"10";
  443. break;
  444. case 11:
  445. pArray = g_Test11;
  446. nMax = sizeof(g_Test11)/sizeof(IniInfo);
  447. wcsSection = L"11";
  448. break;
  449. case 12:
  450. pArray = g_Test12;
  451. nMax = sizeof(g_Test12)/sizeof(IniInfo);
  452. wcsSection = L"12";
  453. break;
  454. case 13:
  455. pArray = g_Test13;
  456. nMax = sizeof(g_Test13)/sizeof(IniInfo);
  457. wcsSection = L"13";
  458. break;
  459. case 14:
  460. pArray = g_Test14;
  461. nMax = sizeof(g_Test14)/sizeof(IniInfo);
  462. wcsSection = L"14";
  463. break;
  464. case 15:
  465. pArray = g_Test15;
  466. nMax = sizeof(g_Test15)/sizeof(IniInfo);
  467. wcsSection = L"15";
  468. break;
  469. case 16:
  470. pArray = g_Test16;
  471. nMax = sizeof(g_Test16)/sizeof(IniInfo);
  472. wcsSection = L"16";
  473. break;
  474. case 17:
  475. pArray = g_Test17;
  476. nMax = sizeof(g_Test17)/sizeof(IniInfo);
  477. wcsSection = L"17";
  478. break;
  479. case 18:
  480. pArray = g_Test18;
  481. nMax = sizeof(g_Test18)/sizeof(IniInfo);
  482. wcsSection = L"18";
  483. break;
  484. case 19:
  485. pArray = g_Test19;
  486. nMax = sizeof(g_Test19)/sizeof(IniInfo);
  487. wcsSection = L"19";
  488. break;
  489. case 20:
  490. pArray = g_Test20;
  491. nMax = sizeof(g_Test20)/sizeof(IniInfo);
  492. wcsSection = L"20";
  493. break;
  494. case 21:
  495. pArray = g_Test21;
  496. nMax = sizeof(g_Test21)/sizeof(IniInfo);
  497. wcsSection = L"21";
  498. break;
  499. //==================================================================
  500. // The Other Provider tests
  501. //==================================================================
  502. case 200:
  503. pArray = g_Test200;
  504. nMax = sizeof(g_Test200)/sizeof(IniInfo);
  505. wcsSection = L"200";
  506. break;
  507. case 201:
  508. pArray = g_Test201;
  509. nMax = sizeof(g_Test201)/sizeof(IniInfo);
  510. wcsSection = L"201";
  511. break;
  512. case 202:
  513. pArray = g_Test202;
  514. nMax = sizeof(g_Test202)/sizeof(IniInfo);
  515. wcsSection = L"202";
  516. break;
  517. case 204:
  518. pArray = g_Test204;
  519. nMax = sizeof(g_Test204)/sizeof(IniInfo);
  520. wcsSection = L"204";
  521. break;
  522. case 205:
  523. pArray = g_Test205;
  524. nMax = sizeof(g_Test205)/sizeof(IniInfo);
  525. wcsSection = L"205";
  526. break;
  527. case 206:
  528. pArray = g_Test206;
  529. nMax = sizeof(g_Test206)/sizeof(IniInfo);
  530. wcsSection = L"206";
  531. break;
  532. case 207:
  533. pArray = g_Test207;
  534. nMax = sizeof(g_Test207)/sizeof(IniInfo);
  535. wcsSection = L"207";
  536. break;
  537. case 208:
  538. pArray = g_Test208;
  539. nMax = sizeof(g_Test208)/sizeof(IniInfo);
  540. wcsSection = L"208";
  541. break;
  542. case 209:
  543. pArray = g_Test209;
  544. nMax = sizeof(g_Test209)/sizeof(IniInfo);
  545. wcsSection = L"209";
  546. break;
  547. case 210:
  548. pArray = g_Test210;
  549. nMax = sizeof(g_Test210)/sizeof(IniInfo);
  550. wcsSection = L"210";
  551. break;
  552. case 211:
  553. pArray = g_Test211;
  554. nMax = sizeof(g_Test211)/sizeof(IniInfo);
  555. wcsSection = L"211";
  556. break;
  557. case 212:
  558. pArray = g_Test212;
  559. nMax = sizeof(g_Test212)/sizeof(IniInfo);
  560. wcsSection = L"212";
  561. break;
  562. //==================================================================
  563. // The event tests
  564. //==================================================================
  565. case 300:
  566. pArray = g_Test300;
  567. nMax = sizeof(g_Test300)/sizeof(IniInfo);
  568. wcsSection = L"300";
  569. break;
  570. case 301:
  571. pArray = g_Test301;
  572. nMax = sizeof(g_Test301)/sizeof(IniInfo);
  573. wcsSection = L"301";
  574. break;
  575. case 302:
  576. pArray = g_Test302;
  577. nMax = sizeof(g_Test302)/sizeof(IniInfo);
  578. wcsSection = L"302";
  579. break;
  580. case 303:
  581. pArray = g_Test303;
  582. nMax = sizeof(g_Test303)/sizeof(IniInfo);
  583. wcsSection = L"303";
  584. break;
  585. case 304:
  586. pArray = g_Test304;
  587. nMax = sizeof(g_Test304)/sizeof(IniInfo);
  588. wcsSection = L"304";
  589. break;
  590. //==================================================================
  591. // The scripting tests
  592. //==================================================================
  593. case 1000:
  594. pArray = g_Test1000;
  595. nMax = sizeof(g_Test1000)/sizeof(IniInfo);
  596. wcsSection = L"1000";
  597. break;
  598. }
  599. if( GetDefaultMatch(pArray,wcsKey,nNum, nMax))
  600. {
  601. fRc = ReadIniFile(wcsSection,wcsKey,pArray[nNum].Value,sInfo);
  602. }
  603. else
  604. {
  605. fRc = ReadIniFile(wcsSection,wcsKey,L"Empty",sInfo);
  606. }
  607. return fRc;
  608. }
  609. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  610. void CIniFileAndGlobalOptions::WriteDefaultIniFile()
  611. {
  612. BOOL fRc;
  613. //================================================================================
  614. // Write out test 1
  615. //================================================================================
  616. for( int i=0; i<sizeof(g_Doc1)/sizeof(IniInfo); i++ )
  617. {
  618. fRc = WritePrivateProfileString(L"1", g_Doc1[i].Key, g_Doc1[i].Value,m_wcsFileName);
  619. }
  620. fRc = WritePrivateProfileString(L"1", g_Test1[1].Key, g_Test1[1].Value,m_wcsFileName);
  621. //================================================================================
  622. // Write out test 2
  623. //================================================================================
  624. for( int i=0; i<sizeof(g_Doc2)/sizeof(IniInfo); i++ )
  625. {
  626. WritePrivateProfileString(L"2", g_Doc2[i].Key, g_Doc2[i].Value,m_wcsFileName);
  627. }
  628. for( int i=0; i<sizeof(g_Test2)/sizeof(IniInfo); i++ )
  629. {
  630. WritePrivateProfileString(L"2", g_Test2[i].Key, g_Test2[i].Value,m_wcsFileName);
  631. }
  632. //================================================================================
  633. // Write out test 3
  634. //================================================================================
  635. for( int i=0; i<sizeof(g_Doc3)/sizeof(IniInfo); i++ )
  636. {
  637. WritePrivateProfileString(L"3", g_Doc3[i].Key, g_Doc3[i].Value,m_wcsFileName);
  638. }
  639. for( int i=0; i<sizeof(g_Test3)/sizeof(IniInfo); i++ )
  640. {
  641. WritePrivateProfileString(L"3", g_Test3[i].Key, g_Test3[i].Value,m_wcsFileName);
  642. }
  643. //================================================================================
  644. // Write out test 4
  645. //================================================================================
  646. for( int i=0; i<sizeof(g_Doc4)/sizeof(IniInfo); i++ )
  647. {
  648. WritePrivateProfileString(L"4", g_Doc4[i].Key, g_Doc4[i].Value,m_wcsFileName);
  649. }
  650. WritePrivateProfileString(L"4", g_Test4[0].Key, g_Test4[0].Value,m_wcsFileName);
  651. //================================================================================
  652. // Write out test 5
  653. //================================================================================
  654. for( int i=0; i<sizeof(g_Doc5)/sizeof(IniInfo); i++ )
  655. {
  656. WritePrivateProfileString(L"5", g_Doc5[i].Key, g_Doc5[i].Value,m_wcsFileName);
  657. }
  658. for( int i=0; i<sizeof(g_Test5)/sizeof(IniInfo); i++ )
  659. {
  660. WritePrivateProfileString(L"5", g_Test5[i].Key, g_Test5[i].Value,m_wcsFileName);
  661. }
  662. //================================================================================
  663. // Write out test 6
  664. //================================================================================
  665. for( int i=0; i<sizeof(g_Doc6)/sizeof(IniInfo); i++ )
  666. {
  667. WritePrivateProfileString(L"6", g_Doc6[i].Key, g_Doc6[i].Value,m_wcsFileName);
  668. }
  669. for( int i=0; i<sizeof(g_Test6)/sizeof(IniInfo); i++ )
  670. {
  671. WritePrivateProfileString(L"6", g_Test6[i].Key, g_Test6[i].Value,m_wcsFileName);
  672. }
  673. //================================================================================
  674. // Write out test 7
  675. //================================================================================
  676. for( int i=0; i<sizeof(g_Doc7)/sizeof(IniInfo); i++ )
  677. {
  678. WritePrivateProfileString(L"7", g_Doc7[i].Key, g_Doc7[i].Value,m_wcsFileName);
  679. }
  680. for( int i=0; i<sizeof(g_Test7)/sizeof(IniInfo); i++ )
  681. {
  682. WritePrivateProfileString(L"7", g_Test7[i].Key, g_Test7[i].Value,m_wcsFileName);
  683. }
  684. //================================================================================
  685. // Scripting: Write out test 1000
  686. //================================================================================
  687. for( int i=0; i<sizeof(g_Test1000)/sizeof(IniInfo); i++ )
  688. {
  689. WritePrivateProfileString(L"7", g_Test1000[i].Key, g_Test1000[i].Value,m_wcsFileName);
  690. }
  691. }
  692. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  693. //*****************************************************************************************************************
  694. //
  695. // Run the tests
  696. //
  697. //*****************************************************************************************************************
  698. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  699. int RunTests(int nWhichTest,BOOL fCompareResults, BOOL fSuppressHeader)
  700. {
  701. int nRc = FATAL_ERROR;
  702. Sleep(200);
  703. switch( nWhichTest )
  704. {
  705. //*************************************************************
  706. //=============================================================
  707. // The Repository Tests
  708. //=============================================================
  709. //*************************************************************
  710. //=================================================================
  711. // Basic connect using IWbemLocator
  712. //=================================================================
  713. case 1:
  714. nRc = BasicConnectUsingIWbemLocator(fCompareResults,fSuppressHeader);
  715. break;
  716. //=================================================================
  717. // Basic Sync connect using IWbemConnection
  718. //=================================================================
  719. case 2:
  720. nRc = BasicSyncConnectUsingIWbemConnection(fCompareResults,fSuppressHeader);
  721. break;
  722. //=============================================================
  723. // Basic connect sync & async using IWbemConnection
  724. //=============================================================
  725. case 3:
  726. nRc = BasicAsyncConnectUsingIWbemConnection(fCompareResults,fSuppressHeader);
  727. break;
  728. //=============================================================
  729. // Create a new test namespace
  730. //=============================================================
  731. case 4:
  732. nRc = CreateNewTestNamespace(fCompareResults,fSuppressHeader);
  733. break;
  734. //=============================================================
  735. // Create 10 classes with different properties. Some of
  736. // these should be in the following inheritance chain and
  737. // some should not inherit from the others at all:
  738. // classes = {A, B, C, D:A, E:A, F:E, G:F, H:G, I:F}.
  739. // A mix of simple string & sint32 keys are fine.
  740. //=============================================================
  741. case 5:
  742. nRc = CreateNewClassesInTestNamespace(fCompareResults,fSuppressHeader);
  743. break;
  744. //=============================================================
  745. // "memorize the class definitions". In a complex loop,
  746. // delete the classes and recreate them in various sequences,
  747. // ending with the full set.
  748. //=============================================================
  749. case 6:
  750. nRc = DeleteAndRecreateNewClassesInTestNamespace(fCompareResults,fSuppressHeader);
  751. break;
  752. //=============================================================
  753. // Create associations
  754. //=============================================================
  755. case 7:
  756. nRc= CreateSimpleAssociations(fCompareResults,fSuppressHeader);
  757. break;
  758. //=============================================================
  759. // Execute queries
  760. //=============================================================
  761. case 8:
  762. nRc = QueryAllClassesInTestNamespace(fCompareResults,fSuppressHeader);
  763. break;
  764. //=============================================================
  765. // Create instances of the above classes, randomly creating
  766. // and deleting in a loop, finishing up with a known set.
  767. // Query the instances and ensure that no instances disappeared
  768. // or appeared that shouldn't be there.
  769. //=============================================================
  770. case 9:
  771. nRc = CreateClassInstances(fCompareResults,fSuppressHeader);
  772. break;
  773. //=============================================================
  774. // Verify that deletion of instances works.
  775. //=============================================================
  776. case 10:
  777. nRc = DeleteClassInstances(fCompareResults,fSuppressHeader);
  778. break;
  779. //=============================================================
  780. // Enumerate the instances
  781. //=============================================================
  782. case 11:
  783. nRc = EnumerateClassInstances(fCompareResults,fSuppressHeader);
  784. break;
  785. //=============================================================
  786. // Create some simple association classes
  787. //=============================================================
  788. case 12:
  789. nRc = CreateAssociationInstances(fCompareResults,fSuppressHeader);
  790. break;
  791. //=============================================================
  792. // Delete association instances
  793. //=============================================================
  794. case 13:
  795. nRc = DeleteAssociationInstances(fCompareResults,fSuppressHeader);
  796. break;
  797. //=============================================================
  798. // Enumerate the association instances
  799. //=============================================================
  800. case 14:
  801. nRc = EnumerateAssociationInstances(fCompareResults,fSuppressHeader);
  802. break;
  803. //=============================================================
  804. // Verify that deletion of a class takes out all the instances.
  805. //=============================================================
  806. case 15:
  807. nRc = DeleteClassDeletesInstances(fCompareResults,fSuppressHeader);
  808. break;
  809. //=============================================================
  810. //
  811. //=============================================================
  812. case 16:
  813. nRc = GetObjects(fCompareResults,fSuppressHeader);
  814. break;
  815. case 17:
  816. nRc = CreateMethods(fCompareResults,fSuppressHeader);
  817. break;
  818. case 18:
  819. nRc = DeleteMethods(fCompareResults,fSuppressHeader);
  820. break;
  821. case 19:
  822. nRc = ListMethods(fCompareResults,fSuppressHeader);
  823. break;
  824. case 20:
  825. nRc = DeleteAllNonSystemClasses(fCompareResults,fSuppressHeader);
  826. break;
  827. case 21:
  828. nRc = DeleteRequestedNamespace(fCompareResults,fSuppressHeader);
  829. break;
  830. //*************************************************************
  831. //=============================================================
  832. // The Other Provider Tests
  833. //=============================================================
  834. //*************************************************************
  835. case 200:
  836. nRc = ProviderOpenNamespace(fCompareResults,fSuppressHeader);
  837. break;
  838. case 201:
  839. nRc = ProviderEnumerateClasses(fCompareResults,fSuppressHeader);
  840. break;
  841. case 202:
  842. nRc = ProviderExecuteQueries(fCompareResults,fSuppressHeader);
  843. break;
  844. case 203:
  845. nRc = SUCCESS;
  846. break;
  847. case 204:
  848. nRc = ProviderEnumerateInstances(fCompareResults,fSuppressHeader);
  849. break;
  850. case 205:
  851. nRc = ProviderGetObjects(fCompareResults,fSuppressHeader);
  852. break;
  853. case 206:
  854. nRc = ProviderEnumerateMethods(fCompareResults,fSuppressHeader);
  855. break;
  856. case 207:
  857. nRc = ProviderExecuteMethods(fCompareResults,fSuppressHeader);
  858. break;
  859. case 208:
  860. nRc = ProviderSemiSyncEvents(fCompareResults,fSuppressHeader);
  861. nRc = SUCCESS;
  862. break;
  863. case 209:
  864. nRc = ProviderTempAsyncEvents(fCompareResults,fSuppressHeader);
  865. nRc = SUCCESS;
  866. break;
  867. case 210:
  868. nRc = ProviderRefresher(fCompareResults,fSuppressHeader);
  869. break;
  870. case 211:
  871. nRc = ProviderCreateClasses(fCompareResults,fSuppressHeader);
  872. break;
  873. case 212:
  874. nRc = ProviderCreateInstances(fCompareResults,fSuppressHeader);
  875. break;
  876. //*************************************************************
  877. //=============================================================
  878. // The Event Tests
  879. //=============================================================
  880. //*************************************************************
  881. case 300:
  882. nRc = TempSemiSyncEvents(fCompareResults,fSuppressHeader);
  883. break;
  884. case 301:
  885. nRc = TempAsyncEvents(fCompareResults,fSuppressHeader);
  886. break;
  887. case 302:
  888. nRc = PermanentEvents(fCompareResults,fSuppressHeader);
  889. break;
  890. case 303:
  891. nRc = PermanentInstances(fCompareResults,fSuppressHeader);
  892. break;
  893. case 304:
  894. nRc = PermanentClasses(fCompareResults,fSuppressHeader);
  895. break;
  896. //*************************************************************
  897. //=============================================================
  898. // The XML Adapter Tests
  899. //=============================================================
  900. //*************************************************************
  901. //*************************************************************
  902. //=============================================================
  903. // The OLEDB Adapter Tests
  904. //=============================================================
  905. //*************************************************************
  906. //*************************************************************
  907. //=============================================================
  908. // The Scripting Tests
  909. //=============================================================
  910. //*************************************************************
  911. case 1000:
  912. ExecuteScript(nWhichTest);
  913. break;
  914. default:
  915. g_LogFile.LogError(__FILE__,__LINE__,WARNING, L"Requested test does not exist." );
  916. break;
  917. }
  918. return nRc;
  919. }
  920. ////////////////////////////////////////////////////////////////////////////////////////////////////
  921. DWORD WINAPI CMulti::RandomRunTest(LPVOID pHold)
  922. {
  923. CMulti * pTmp = (CMulti*) pHold;
  924. int nTest = 0, nMax = 0;
  925. nMax = pTmp->GetMax();
  926. if(nMax > 0)
  927. {
  928. float f=((float)rand())/(RAND_MAX+1);
  929. int nRet=(((int)(nMax*f))+1);
  930. nTest = ((nTest+GetCurrentThreadId()) % nMax)+1;
  931. }
  932. return RunTests(g_nMultiThreadTests[nTest-1],FALSE,FALSE);
  933. }
  934. ////////////////////////////////////////////////////////////////////////////////////////////////////
  935. int CMulti::MultiThreadTest(int nThreads, int nConnections )
  936. {
  937. HRESULT hr = S_OK;
  938. DWORD dwFlags = 0;
  939. DWORD lpExitCode;
  940. HANDLE * hpHandles = new HANDLE[nThreads];
  941. for(int n = 0; n < nConnections; n++)
  942. {
  943. for(int i = 0; i < nThreads; i++)
  944. {
  945. Sleep(100);
  946. hpHandles[i] = CreateThread(0, 0, RandomRunTest, (LPVOID)this, 0, &dwFlags);
  947. }
  948. for(i = 0; i < nThreads; i++)
  949. {
  950. do
  951. {
  952. GetExitCodeThread(hpHandles[i], &lpExitCode);
  953. }
  954. while(lpExitCode == STILL_ACTIVE);
  955. CloseHandle(hpHandles[i]);
  956. }
  957. }
  958. SAFE_DELETE_ARRAY(hpHandles);
  959. return hr;
  960. }