(file) Return to test_provreg.cpp CVS log (file) (dir) Up to [OMI] / omi / provreg / tests

  1 mike  1.1 /*
  2           **==============================================================================
  3           **
  4           ** Open Management Infrastructure (OMI)
  5           **
  6           ** Copyright (c) Microsoft Corporation
  7           ** 
  8           ** Licensed under the Apache License, Version 2.0 (the "License"); you may not 
  9           ** use this file except in compliance with the License. You may obtain a copy 
 10           ** of the License at 
 11           **
 12           **     http://www.apache.org/licenses/LICENSE-2.0 
 13           **
 14           ** THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 15           ** KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED 
 16           ** WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, 
 17           ** MERCHANTABLITY OR NON-INFRINGEMENT. 
 18           **
 19           ** See the Apache 2 License for the specific language governing permissions 
 20           ** and limitations under the License.
 21           **
 22 mike  1.1 **==============================================================================
 23           */
 24           
 25           #include <ut/ut.h>
 26           #include <provreg/provreg.h>
 27           #include <provreg/regfile.h>
 28           #include <base/strings.h>
 29           #include <base/dir.h>
 30           #include <unittest/utils.h>
 31           #include <base/paths.h>
 32           #include <algorithm>
 33           #include <base/io.h>
 34           
 35           //#define ENABLE_PRINT
 36           
 37           static char TEMP_FILE[MAX_PATH_SIZE];
 38           
 39           using namespace std;
 40           
 41           static FILE* outStream = NULL;
 42           
 43 mike  1.1 static void setUp()
 44           {
 45               Strlcpy(TEMP_FILE, GetPath(ID_TMPDIR), sizeof(TEMP_FILE));
 46               Strlcat(TEMP_FILE, "/test_temp.tmp", sizeof(TEMP_FILE));
 47           
 48           #if defined(CONFIG_POSIX)
 49               // Change directory to PREFIX/unittest.
 50               char path[MAX_PATH_SIZE];
 51               Strlcpy(path, CONFIG_PREFIX, sizeof(path));
 52               Strlcat(path, "/unittest", sizeof(path));
 53               Chdir(path);
 54           #endif
 55           
 56           #if defined(ENABLE_PRINT)
 57               outStream = stdout;
 58           #else
 59               outStream = Fopen(NULL_FILE, "w");
 60           #endif
 61           }
 62           
 63           static void cleanup()
 64 mike  1.1 {
 65           #if defined(ENABLE_PRINT)
 66               outStream = NULL;
 67           #else
 68               fclose(outStream);
 69               outStream = NULL;
 70           #endif
 71               ut::removeIfExist( TEMP_FILE );
 72           }
 73           
 74           #if 0
 75           static void TestProvReg()
 76           {
 77               /* Relative to 'unittest' directory */
 78               std::string path = ut::findSampleFile(0,"","../provreg/tests/omiregister.conf");
 79               ProvReg reg;
 80               MI_Result r;
 81               ProvRegEntry* p;
 82               size_t index = 0;
 83           
 84               /* Load the registrations */
 85 mike  1.1     r = ProvReg_Init(&reg, path.c_str());
 86           
 87               if (r != MI_RESULT_OK)
 88               {
 89                   fprintf(stdout, "failed to open: %s\n", path.c_str());
 90                   UT_ASSERT_FAILED_MSG("failed to open register.conf");
 91               }
 92           
 93               /* Check the registrations */
 94               for (p = reg.head; p; p = p->next, index++)
 95               {
 96                   switch (index)
 97                   {
 98                       case 0:
 99                       {
100                           UT_ASSERT(p->provInterface == PROV_INTERFACE_STATIK);
101                           UT_ASSERT(Zcmp(p->nameSpace, T("root/test")) == 0);
102                           UT_ASSERT(Zcmp(p->className, T("Dog")) == 0);
103                           UT_ASSERT(strcmp(p->libraryName, "MyProvider") == 0);
104                           break;
105                       }
106 mike  1.1             case 1:
107                       {
108                           UT_ASSERT(p->provInterface == PROV_INTERFACE_STATIK);
109                           UT_ASSERT(Zcmp(p->nameSpace, T("root/test")) == 0);
110                           UT_ASSERT(Zcmp(p->className, T("Cat")) == 0);
111                           UT_ASSERT(strcmp(p->libraryName, "MyProvider") == 0);
112                           break;
113                       }
114                       case 2:
115                       {
116                           UT_ASSERT(p->provInterface == PROV_INTERFACE_STATIK);
117                           UT_ASSERT(Zcmp(p->nameSpace, T("root/test")) == 0);
118                           UT_ASSERT(Zcmp(p->className, T("Bird")) == 0);
119                           UT_ASSERT(strcmp(p->libraryName, "MyProvider") == 0);
120                           break;
121                       }
122                       default:
123                           UT_ASSERT_FAILED_MSG("unexpected branch");
124                   }
125               }
126           
127 mike  1.1     ProvReg_Dump(&reg, outStream);
128           
129               // Find a provider for the given class.
130               {
131                   const ProvRegEntry* entry;
132                   
133                   entry = ProvReg_FindProviderForClass(&reg, T("root/test"), 
134                       T("Bird"));
135                   UT_ASSERT(entry != NULL);
136           
137                   entry = ProvReg_FindProviderForClass(&reg, T("blah"), T("blah"));
138                   UT_ASSERT(entry == NULL);
139               }
140           
141               // check derived classes
142               vector<ut::String>  res;
143               ProvRegPosition pos;
144               MI_ConstString derived = 0;
145           
146               r = ProvReg_BeginClasses( &reg, T("root/test"), T("Animal"), MI_TRUE, &pos );
147           
148 mike  1.1     UT_ASSERT (MI_RESULT_OK == r);
149           
150               for (;;)
151               {
152                   MI_Boolean done;
153                   r = ProvReg_NextClass( &pos, &derived, &done);
154           
155                   if (done)
156                       break;
157           
158                   UT_ASSERT (MI_RESULT_OK == r);
159                   res.push_back( derived );
160               }
161           
162               r = ProvReg_EndClasses(&pos);
163               UT_ASSERT(MI_RESULT_OK == r);
164           
165           
166               std::sort< vector< ut::String >::iterator >(res.begin(), res.end());
167           
168               vector<ut::String>  expected_res;
169 mike  1.1     expected_res.push_back(T("Bird"));
170               expected_res.push_back(T("Cat"));
171               expected_res.push_back(T("Dog"));
172           
173               UT_ASSERT(expected_res == res);
174           
175               ProvReg_Destroy(&reg);
176           }
177           #endif
178           
179           #if 0
180           static void TestProvRegInvalidConfigFile()
181           {
182               ProvReg reg;
183               MI_Result r;
184           
185               /* Load the registrations */
186               r = ProvReg_Init(&reg, "non-exisiting-file");
187           
188               UT_ASSERT (MI_RESULT_OPEN_FAILED == r);
189           }
190 mike  1.1 #endif
191           
192           #if 0
193           static void VerifyInheritanceChain(ProvReg* reg, MI_ConstString ns, MI_ConstString base, MI_Boolean deep, MI_ConstString expected)
194           {
195               // check derived classes
196               vector<ut::String>  res;
197               ProvRegPosition pos;
198               MI_ConstString derived = 0;
199           
200               MI_Result r = ProvReg_BeginClasses( reg, ns, base, deep, &pos );
201           
202               UT_ASSERT (MI_RESULT_OK == r);
203           
204               for (;;)
205               {
206                   MI_Boolean done;
207                   r = ProvReg_NextClass( &pos, &derived, &done);
208           
209                   if (done)
210                       break;
211 mike  1.1 
212                   UT_ASSERT (MI_RESULT_OK == r);
213                   res.push_back( derived );
214               }
215           
216               r = ProvReg_EndClasses(&pos);
217               UT_ASSERT(MI_RESULT_OK == r);
218           
219               std::sort< vector< ut::String >::iterator >(res.begin(), res.end());
220           
221               vector<ut::String>  expected_res;
222               ut::StringToArray(expected, expected_res);
223               std::sort< vector< ut::String >::iterator >(expected_res.begin(), expected_res.end());
224           
225               if(expected_res != res)
226               {
227                   UT_ASSERT_FAILED_MSG(string(string("actual result is different from expected: expected {") + 
228                       ut::StrToChar(ut::ArrayToString(expected_res)) +
229                       "} but actual is {" +
230                       ut::StrToChar(ut::ArrayToString(res)) +
231                       "}").c_str() );
232 mike  1.1     }
233           }
234           #endif
235           
236           #if 0
237           static void VerifyAssociationChain(ProvReg* reg, MI_ConstString ns, MI_ConstString cn, MI_ConstString assocClass, MI_ConstString resultClass, MI_ConstString expected)
238           {
239               // check derived classes
240               vector<ut::String>  res;
241               ProvRegAssocPosition pos;
242               MI_ConstString nextClass = 0;
243           
244               MI_Result r = ProvReg_BeginAssocClasses( reg, ns, cn, assocClass, resultClass, &pos );
245           
246               UT_ASSERT (MI_RESULT_OK == r);
247           
248               for (;;)
249               {
250                   MI_Boolean done;
251                   r = ProvReg_NextAssocClass( &pos, &nextClass, &done);
252           
253 mike  1.1         if (done)
254                       break;
255           
256                   UT_ASSERT (MI_RESULT_OK == r);
257                   res.push_back( nextClass );
258               }
259           
260               r = ProvReg_EndAssocClasses(&pos);
261               UT_ASSERT(MI_RESULT_OK == r);
262           
263               std::sort< vector< ut::String >::iterator >(res.begin(), res.end());
264           
265               vector<ut::String>  expected_res;
266               ut::StringToArray(expected, expected_res);
267               std::sort< vector< ut::String >::iterator >(expected_res.begin(), expected_res.end());
268           
269               if(expected_res != res)
270               {
271                   UT_ASSERT_FAILED_MSG(string(string("actual result is different from expected: expected {") + 
272                       ut::StrToChar(ut::ArrayToString(expected_res)) +
273                       "} but actual is {" +
274 mike  1.1             ut::StrToChar(ut::ArrayToString(res)) +
275                       "}").c_str() );
276               }
277           }
278           #endif
279           
280           #if 0
281           static void TestClassInheritanceTreeMultipleDerived()
282           {
283               const char* content = "# sample config entry\n"
284                   "statik:namespace           :Dog,Animal,Base    :provider_name\n"
285                   "statik:another_namespace   :Dog,Animal,Base    :provider_name\n"
286                   "statik:another_namespace   :Programmer,Person,Base    :software_provider_name\n"
287                   "statik:another_namespace   :CEO,Manager,Person,Base    :executive_provider_name\n"
288                   "statik:another_namespace   :stand_alone_Base    :one_more_provider_name\n"
289                   ;
290           
291               // verify inheritance chains:
292               // Base -> Dog,Animal,Person,Programmer,Manager,CEO
293               // Animal -> Dog
294               // Person -> Programmer, Manager, CEO
295 mike  1.1     // Manager-> CEO
296               // CEO, Programmer, Dog ->
297           
298               ut::writeFileContent( TEMP_FILE, vector<unsigned char>( reinterpret_cast<const unsigned char*>(content), 
299                   reinterpret_cast<const unsigned char*>(content)+strlen(content)));
300           
301               ProvReg reg;
302           
303               UT_ASSERT (MI_RESULT_OK == ProvReg_Init(&reg, TEMP_FILE));
304           
305               /////////////////////////////////////////////////////////////////////////////////////////////////
306               //  another_namespace
307               // deep == true
308               VerifyInheritanceChain(&reg, T("another_namespace"), T("Base"), MI_TRUE, T("Dog,Animal,Person,Programmer,Manager,CEO"));
309               VerifyInheritanceChain(&reg, T("another_namespace"), T("Animal"), MI_TRUE, T("Dog"));
310               VerifyInheritanceChain(&reg, T("another_namespace"), T("Person"), MI_TRUE, T("Programmer,Manager,CEO"));
311               VerifyInheritanceChain(&reg, T("another_namespace"), T("Manager"), MI_TRUE, T("CEO"));
312               VerifyInheritanceChain(&reg, T("another_namespace"), T("CEO"), MI_TRUE, T(""));
313               VerifyInheritanceChain(&reg, T("another_namespace"), T("Programmer"), MI_TRUE, T(""));
314               VerifyInheritanceChain(&reg, T("another_namespace"), T("Dog"), MI_TRUE, T(""));
315           
316 mike  1.1     // deep == false
317               VerifyInheritanceChain(&reg, T("another_namespace"), T("Base"), MI_FALSE, T("Animal,Person"));
318               VerifyInheritanceChain(&reg, T("another_namespace"), T("Animal"), MI_FALSE, T("Dog"));
319               VerifyInheritanceChain(&reg, T("another_namespace"), T("Person"), MI_FALSE, T("Programmer,Manager"));
320               VerifyInheritanceChain(&reg, T("another_namespace"), T("Manager"), MI_FALSE, T("CEO"));
321               VerifyInheritanceChain(&reg, T("another_namespace"), T("CEO"), MI_FALSE, T(""));
322               VerifyInheritanceChain(&reg, T("another_namespace"), T("Programmer"), MI_FALSE, T(""));
323               VerifyInheritanceChain(&reg, T("another_namespace"), T("Dog"), MI_FALSE, T(""));
324           
325               // ALL CLASSES, deep == true
326               VerifyInheritanceChain(&reg, T("another_namespace"), 0, MI_TRUE, T("Dog,Base,Animal,Person,Programmer,Manager,CEO,stand_alone_Base"));
327           
328               // ALL CLASSES, deep == false
329               VerifyInheritanceChain(&reg, T("another_namespace"), 0, MI_FALSE, T("Base,stand_alone_Base"));
330           
331               /////////////////////////////////////////////////////////////////////////////////////////////////
332               //  namespace
333               // deep == true
334               VerifyInheritanceChain(&reg, T("namespace"), T("Base"), MI_TRUE, T("Dog,Animal"));
335               VerifyInheritanceChain(&reg, T("namespace"), T("Animal"), MI_TRUE, T("Dog"));
336               VerifyInheritanceChain(&reg, T("namespace"), T("Dog"), MI_TRUE, T(""));
337 mike  1.1 
338               // deep == false
339               VerifyInheritanceChain(&reg, T("namespace"), T("Base"), MI_FALSE, T("Animal"));
340               VerifyInheritanceChain(&reg, T("namespace"), T("Animal"), MI_FALSE, T("Dog"));
341               VerifyInheritanceChain(&reg, T("namespace"), T("Dog"), MI_FALSE, T(""));
342           
343               // ALL CLASSES, deep == true
344               VerifyInheritanceChain(&reg, T("namespace"), 0, MI_TRUE, T("Dog,Base,Animal"));
345           
346               // ALL CLASSES, deep == false
347               VerifyInheritanceChain(&reg, T("namespace"), 0, MI_FALSE, T("Base"));
348           
349               /////////////////////////////////////////////////////////////////////////////////////////////////
350               //  base classes
351               const MI_Char* res = 0;
352               UT_ASSERT( MI_RESULT_OK == ProvReg_GetDirectBaseClass(&reg, T("another_namespace"), T("Base"), &res) &&
353                   0 == res );
354               UT_ASSERT( MI_RESULT_OK == ProvReg_GetDirectBaseClass(&reg, T("another_namespace"), T("Animal"), &res) &&
355                   ut::String(T("Base")) == res );
356               UT_ASSERT( MI_RESULT_OK == ProvReg_GetDirectBaseClass(&reg, T("another_namespace"), T("Dog"), &res) &&
357                   ut::String(T("Animal")) == res );
358 mike  1.1     UT_ASSERT( MI_RESULT_OK == ProvReg_GetDirectBaseClass(&reg, T("another_namespace"), T("Programmer"), &res) &&
359                   ut::String(T("Person")) == res );
360           
361               // different case
362               UT_ASSERT( MI_RESULT_OK == ProvReg_GetDirectBaseClass(&reg, T("another_namespace"), T("mAnAger"), &res) &&
363                   ut::String(T("Person")) == res );
364           
365               UT_ASSERT( MI_RESULT_OK == ProvReg_GetDirectBaseClass(&reg, T("Another_Namespace"), T("ceo"), &res) &&
366                   ut::String(T("Manager")) == res );
367           
368               // invalid class
369               UT_ASSERT( MI_RESULT_INVALID_CLASS == ProvReg_GetDirectBaseClass(&reg, T("another_namespace"), T("not-existing-class"), &res) );
370           
371               // invalid namespace
372               UT_ASSERT( MI_RESULT_INVALID_NAMESPACE == ProvReg_GetDirectBaseClass(&reg, T("not-existing-namespace"), T("Base"), &res) );
373           
374               ProvReg_Destroy(&reg);
375           }
376           #endif
377           
378           #if 0
379 mike  1.1 static void TestInvalidClassInheritanceTree()
380           {
381               const char* content = "# sample config entry\n"
382                   "statik:namespace           :Dog,Animal,Base    :provider_name\n"
383                   "statik:  namespace         :Base,Animal,Dog    :provider_name\n"
384                   ;
385           
386               // entry is invalid - expect error back
387           
388               ut::writeFileContent( TEMP_FILE, vector<unsigned char>( reinterpret_cast<const unsigned char*>(content), 
389                   reinterpret_cast<const unsigned char*>(content)+strlen(content)));
390           
391               ProvReg reg;
392           
393               UT_ASSERT (MI_RESULT_INVALID_CLASS_HIERARCHY == ProvReg_Init(&reg, TEMP_FILE));
394           }
395           #endif
396           
397           #if 0
398           static void TestInvalidNamespace()
399           {
400 mike  1.1     const char* content = "# sample config entry\n"
401                   "statik:namespace           :Dog,Animal,Base    :provider_name\n"
402                   ;
403           
404               // entry is invalid - expect error back
405           
406               ut::writeFileContent( TEMP_FILE, vector<unsigned char>( reinterpret_cast<const unsigned char*>(content), 
407                   reinterpret_cast<const unsigned char*>(content)+strlen(content)));
408           
409               ProvReg reg;
410           
411               UT_ASSERT (MI_RESULT_OK == ProvReg_Init(&reg, TEMP_FILE));
412           
413           
414               ProvReg_Destroy(&reg);
415           }
416           #endif
417           
418           #if 0
419           static void TestAssociations()
420           {
421 mike  1.1     const char* content = "# sample config entry\n"
422                   "# interop namespace\n"
423                   "statik:interop: Prov_Profile,CIM_RegisteredProfile,CIM_ManagedElement + "
424                       "Prov_ElementConformsToProfile,CIM_ElementConformsToProfile + "
425                       "Prov_CS,CIM_ComputerSystem,CIM_ManagedElement:provider_lib\n"
426                   "statik:interop: Prov_Profile,CIM_RegisteredProfile,CIM_ManagedElement:provider_lib\n"
427                   "# provider impl namespace\n"
428                   "statik:provider/impl: Prov_Profile,CIM_RegisteredProfile,CIM_ManagedElement + "
429                       "Prov_ElementConformsToProfile,CIM_ElementConformsToProfile +"
430                       "Prov_CS,CIM_ComputerSystem,CIM_ManagedElement:provider_lib\n"
431           
432                   "statik:provider/impl:Prov_CS,CIM_ComputerSystem,CIM_ManagedElement:provider_lib\n"
433                   "statik:provider/impl:Prov_CustomCS,Prov_CS,CIM_ComputerSystem,CIM_ManagedElement:provider_lib\n"
434                   ;
435           
436               // verify inheritance chains:
437               // CIM_ManagedElement -> CIM_RegisteredProfile, Prov_Profile, CIM_ComputerSystem, Prov_CS
438               // CIM_ElementConformsToProfile -> Prov_ElementConformsToProfile
439               // CIM_RegisteredProfile -> Prov_Profile
440               // CIM_ComputerSystem -> Prov_CS
441           
442 mike  1.1     ut::writeFileContent( TEMP_FILE, vector<unsigned char>( reinterpret_cast<const unsigned char*>(content), 
443                   reinterpret_cast<const unsigned char*>(content)+strlen(content)));
444           
445               ProvReg reg;
446           
447               UT_ASSERT (MI_RESULT_OK == ProvReg_Init(&reg, TEMP_FILE));
448           
449               /////////////////////////////////////////////////////////////////////////////////////////////////
450               //  interop
451               // deep == true
452               VerifyInheritanceChain(&reg, T("interop"), T("CIM_ManagedElement"), MI_TRUE, T("CIM_RegisteredProfile,Prov_Profile,CIM_ComputerSystem,Prov_CS"));
453               VerifyInheritanceChain(&reg, T("interop"), T("CIM_ElementConformsToProfile"), MI_TRUE, T("Prov_ElementConformsToProfile"));
454               VerifyInheritanceChain(&reg, T("interop"), T("CIM_RegisteredProfile"), MI_TRUE, T("Prov_Profile"));
455               VerifyInheritanceChain(&reg, T("interop"), T("CIM_ComputerSystem"), MI_TRUE, T("Prov_CS"));
456           
457               // deep == false
458               VerifyInheritanceChain(&reg, T("interop"), T("CIM_ManagedElement"), MI_FALSE, T("CIM_RegisteredProfile,CIM_ComputerSystem"));
459               VerifyInheritanceChain(&reg, T("interop"), T("CIM_ElementConformsToProfile"), MI_FALSE, T("Prov_ElementConformsToProfile"));
460               VerifyInheritanceChain(&reg, T("interop"), T("CIM_RegisteredProfile"), MI_FALSE, T("Prov_Profile"));
461               VerifyInheritanceChain(&reg, T("interop"), T("CIM_ComputerSystem"), MI_FALSE, T("Prov_CS"));
462           
463 mike  1.1     // associations
464               VerifyAssociationChain(&reg, T("provider/impl"), T("Prov_CustomCS"), 0, 0, T("Prov_ElementConformsToProfile"));
465               VerifyAssociationChain(&reg, T("provider/impl"), T("Prov_CustomCS"), T("CIM_ElementConformsToProfile"), 0, T("Prov_ElementConformsToProfile"));
466               VerifyAssociationChain(&reg, T("provider/impl"), T("Prov_CustomCS"), T("CIM_ElementConformsToProfile"), T("CIM_RegisteredProfile"), T("Prov_ElementConformsToProfile"));
467               VerifyAssociationChain(&reg, T("provider/impl"), T("Prov_CustomCS"), 0, T("CIM_ManagedElement"), T("Prov_ElementConformsToProfile"));
468           
469               VerifyAssociationChain(&reg, T("interop"), T("Prov_Profile"), 0, 0, T("Prov_ElementConformsToProfile"));
470           
471               ProvReg_Destroy(&reg);
472           }
473           #endif
474           
475           #if 0
476           static void TestMultipleAssociations()
477           {
478               const char* content = "# sample config entry\n"
479                   "statik:ns:B,C+xb+X,Z:provider_lib\n"
480                   "statik:ns:B,C+bx+X,Z:provider_lib\n"
481                   "statik:ns:B,C+bz+Z:provider_lib\n"
482                   "statik:ns:A,B,C:provider_lib\n"
483                   "statik:ns:AA,B,C:provider_lib\n"
484 mike  1.1         "statik:ns:AAA,B,C:provider_lib\n"
485                   "statik:ns:X,Z + mx,zn + M,N:provider_lib\n"
486                   "statik:ns:Z + zn + N:provider_lib\n"
487                   ;
488           
489               ut::writeFileContent( TEMP_FILE, vector<unsigned char>( reinterpret_cast<const unsigned char*>(content), 
490                   reinterpret_cast<const unsigned char*>(content)+strlen(content)));
491           
492               ProvReg reg;
493           
494               UT_ASSERT (MI_RESULT_OK == ProvReg_Init(&reg, TEMP_FILE));
495           
496               // associations
497               VerifyAssociationChain(&reg, T("ns"), T("AAA"), 0,          0, T("xb,bx,bz"));
498               VerifyAssociationChain(&reg, T("ns"), T("AAA"), T("bz"),    0, T("bz"));
499               VerifyAssociationChain(&reg, T("ns"), T("AAA"), 0,          T("X"), T("xb,bx,bz"));
500               VerifyAssociationChain(&reg, T("ns"), T("AAA"), 0,          T("Z"), T("xb,bx,bz"));
501           
502               VerifyAssociationChain(&reg, T("ns"), T("X"), 0,        0, T("xb,bx,bz,mx,zn"));
503               VerifyAssociationChain(&reg, T("ns"), T("Z"), 0,        0, T("bz,zn"));
504               VerifyAssociationChain(&reg, T("ns"), T("X"), T("zn"),  0, T("mx,zn"));
505 mike  1.1     VerifyAssociationChain(&reg, T("ns"), T("X"), T("bz"),  0, T("bz"));
506               VerifyAssociationChain(&reg, T("ns"), T("X"), T("bz"),  T("A"), T("bz"));
507           
508               VerifyAssociationChain(&reg, T("ns"), T("C"), 0,        0, T(""));
509               VerifyAssociationChain(&reg, T("ns"), T("AAA"), T("mx"),    0, T(""));
510           
511               ProvReg_Destroy(&reg);
512           }
513           #endif
514           
515           #if 0
516           static void TestAssociationsInvalidClass()
517           {
518               const char* content = "# sample config entry\n"
519                   "statik:ns:B,C+xb+X,Z:provider_lib\n"
520                   "statik:ns:B,C+bx+X,Z:provider_lib\n"
521                   "statik:ns:B,C+bz+Z:provider_lib\n"
522                   "statik:ns:A,B,C:provider_lib\n"
523                   "statik:ns:AA,B,C:provider_lib\n"
524                   "statik:ns:AAA,B,C:provider_lib\n"
525                   "statik:ns:X,Z + mx,zn + M,N:provider_lib\n"
526 mike  1.1         "statik:ns:Z + zn + N:provider_lib\n"
527                   ;
528           
529               ut::writeFileContent( TEMP_FILE, vector<unsigned char>( reinterpret_cast<const unsigned char*>(content), 
530                   reinterpret_cast<const unsigned char*>(content)+strlen(content)));
531           
532               ProvReg reg;
533           
534               UT_ASSERT (MI_RESULT_OK == ProvReg_Init(&reg, TEMP_FILE));
535           
536               ProvRegAssocPosition pos;
537           
538               UT_ASSERT (MI_RESULT_INVALID_NAMESPACE == ProvReg_BeginAssocClasses( &reg, T("notExistingNamespace"), T("X"), 0, 0, &pos ));
539               UT_ASSERT (MI_RESULT_INVALID_CLASS == ProvReg_BeginAssocClasses( &reg, T("ns"), T("noExisitingClass"), 0, 0, &pos ));
540               UT_ASSERT (MI_RESULT_INVALID_CLASS == ProvReg_BeginAssocClasses( &reg, T("ns"), T("AA"), T("noExisitingClass"), 0, &pos ));
541               UT_ASSERT (MI_RESULT_INVALID_CLASS == ProvReg_BeginAssocClasses( &reg, T("ns"), T("AA"), 0, T("noExisitingClass"), &pos ));
542           
543               ProvReg_Destroy(&reg);
544           }
545           #endif
546           
547 mike  1.1 #if 0
548           static void TestAssociationsToTheSameClass()
549           {
550               const char* content = "# sample config entry\n"
551                   "statik:ns:X+a+X:provider_lib\n"
552                   ;
553           
554               ut::writeFileContent( TEMP_FILE, vector<unsigned char>( reinterpret_cast<const unsigned char*>(content), 
555                   reinterpret_cast<const unsigned char*>(content)+strlen(content)));
556           
557               ProvReg reg;
558           
559               UT_ASSERT (MI_RESULT_OK == ProvReg_Init(&reg, TEMP_FILE));
560           
561               // associations
562               VerifyAssociationChain(&reg, T("ns"), T("X"), 0,          0, T("a"));
563           
564               ProvReg_Destroy(&reg);
565           }
566           #endif
567           
568 mike  1.1 #if 0
569           static void TestProvRegHosting()
570           {
571               const char* content = "# sample config entry\n"
572                   "statik:ns:Default:provider_lib\n"
573                   "statik:ns:Inproc:provider_lib:@inproc@\t \n"
574                   "statik:ns:Requestor:provider_lib:\t@requestor@\n"
575                   "statik:ns:User:provider_lib:a_user \n"
576                   ;
577           
578               ut::writeFileContent( TEMP_FILE, vector<unsigned char>( reinterpret_cast<const unsigned char*>(content), 
579                   reinterpret_cast<const unsigned char*>(content)+strlen(content)));
580           
581               ProvReg reg;
582           
583               UT_ASSERT (MI_RESULT_OK == ProvReg_Init(&reg, TEMP_FILE));
584           
585               // verify hosting types are set correctly
586               const ProvRegEntry* regItem; 
587               
588               regItem = ProvReg_FindProviderForClass(&reg, T("ns"), T("Default"));
589 mike  1.1     UT_ASSERT(regItem);
590               UT_ASSERT(regItem->hosting == PROV_HOSTING_INPROC);
591               UT_ASSERT(regItem->user == 0);
592           
593               regItem = ProvReg_FindProviderForClass(&reg, T("ns"), T("Inproc"));
594               UT_ASSERT(regItem);
595               UT_ASSERT(regItem->hosting == PROV_HOSTING_INPROC);
596               UT_ASSERT(regItem->user == 0);
597           
598               regItem = ProvReg_FindProviderForClass(&reg, T("ns"), T("Requestor"));
599               UT_ASSERT(regItem);
600               UT_ASSERT(regItem->hosting == PROV_HOSTING_REQUESTOR);
601               UT_ASSERT(regItem->user == 0);
602           
603               regItem = ProvReg_FindProviderForClass(&reg, T("ns"), T("user"));
604               UT_ASSERT(regItem);
605               UT_ASSERT(regItem->hosting == PROV_HOSTING_USER);
606               UT_ASSERT(regItem->user != 0);
607               UT_ASSERT(string(regItem->user) == "a_user");
608           
609               ProvReg_Destroy(&reg);
610 mike  1.1 }
611           #endif
612           
613           static void TestRegFile()
614           {
615               RegFile* rf = RegFile_New(
616                   "./provreg/omiregister/root#cimv2/ConnectorProviderCXX.reg");
617               UT_ASSERT(rf != NULL);
618           
619           #if 0
620               RegFile_Print(rf, stdout);
621           #endif
622           
623               RegFile_Delete(rf);
624           }
625           
626           static void TestRegNameSpaces()
627           {
628               vector<string> expected;
629               vector<string> names;
630           
631 mike  1.1     Dir* dir = Dir_Open("./provreg/omiregister");
632               UT_ASSERT(dir != NULL);
633           
634               for (;;)
635               {
636                   DirEnt *ent = Dir_Read(dir);
637                   if (!ent)
638                       break;
639           
640                   if (strcmp(ent->name, "..") == 0 || strcmp(ent->name, ".") == 0)
641                       continue;
642           
643                   if (strcmp(ent->name, "CVS") == 0)
644                       continue;
645           
646                   names.push_back(ent->name);
647               }
648           
649               Dir_Close(dir);
650           
651               expected.push_back("interop");
652 mike  1.1     expected.push_back("root");
653               expected.push_back("root#cimv2");
654           
655               UT_ASSERT(names.size() == 3);
656               UT_ASSERT(expected.size() == 3);
657           
658               sort(names.begin(), names.end());
659               sort(expected.begin(), expected.end());
660               UT_ASSERT(names == expected);
661           }
662           
663           #if defined(CONFIG_POSIX)
664           static void TestProvReg2()
665           {
666               ProvReg provReg;
667               MI_Result r = ProvReg_Init2(&provReg);
668               UT_ASSERT(r == MI_RESULT_OK);
669           
670               ProvReg_Destroy(&provReg);
671           }
672           #endif
673 mike  1.1 
674           static void RunTests()
675           {
676               // ATTN: These tests tested the now obsolete omiregister.conf.
677           #if 0
678               UT_TEST(TestProvReg);
679               UT_TEST(TestProvRegInvalidConfigFile);
680               UT_TEST(TestClassInheritanceTreeMultipleDerived);
681               UT_TEST(TestInvalidClassInheritanceTree);
682               UT_TEST(TestInvalidNamespace);
683               UT_TEST(TestAssociations);
684               UT_TEST(TestMultipleAssociations);
685               UT_TEST(TestAssociationsInvalidClass);
686               UT_TEST(TestAssociationsToTheSameClass);
687               UT_TEST(TestProvRegHosting);
688           #endif
689               UT_TEST(TestRegFile);
690               UT_TEST(TestRegNameSpaces);
691           #if defined(CONFIG_POSIX)
692               UT_TEST(TestProvReg2);
693           #endif
694 mike  1.1 }
695           
696           UT_ENTRY_POINT(RunTests);

ViewCVS 0.9.2