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

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

ViewCVS 0.9.2