Salome HOME
PR: merge from BR_UT_V310a3 tag mergeto_trunk_06dec05
[modules/kernel.git] / src / NamingService / Test / NamingServiceTest.cxx
1
2 #include "NamingServiceTest.hxx"
3 #include "Utils_ORB_INIT.hxx"
4 #include "Utils_SINGLETON.hxx"
5
6 #include <iostream>
7 #include <fstream>
8 #include <string>
9 #include <cstdlib>
10 #include <cstdio>
11
12 using namespace std;
13
14 // --- uncomment to have some traces on standard error
15 //     (useful only when adding new tests...)
16 //#define _DEVDEBUG_
17
18 #ifdef _DEVDEBUG_
19 #define MYDEVTRACE {std::cerr << __FILE__ << " [" << __LINE__ << "] : ";}
20 #define DEVTRACE(msg) {MYDEVTRACE; std::cerr<<msg<<std::endl<<std::flush;}
21 #else
22 #define MYDEVTRACE
23 #define DEVTRACE(msg)
24 #endif
25
26 #define TRACEFILE "/tmp/traceUnitTest.log"
27
28 // ============================================================================
29 /*!
30  * a basic CORBA object implementation for use with namingService tests
31  */
32 // ============================================================================
33
34 NSTEST_echo_i::NSTEST_echo_i()
35 {
36   _num=-1;
37 }
38
39 NSTEST_echo_i::NSTEST_echo_i(CORBA::Long num)
40 {
41   _num=num;
42 }
43
44 NSTEST_echo_i::~NSTEST_echo_i()
45 {
46 }
47
48 CORBA::Long NSTEST_echo_i::getId()
49 {
50   return _num;
51 }
52
53 // ============================================================================
54 /*!
55  * a factory of CORBA objects for use with namingService tests
56  */
57 // ============================================================================
58
59 NSTEST_aFactory_i::NSTEST_aFactory_i()
60 {
61   _num=0;
62 }
63
64 NSTEST_aFactory_i::~NSTEST_aFactory_i()
65 {
66 }
67
68 NSTEST::echo_ptr NSTEST_aFactory_i::createInstance()
69 {
70   NSTEST_echo_i * anEcho = new NSTEST_echo_i(_num);
71   _num++;
72   NSTEST::echo_var anEchoRef = anEcho->_this();
73   return anEchoRef._retn();
74 }
75
76 // ============================================================================
77 /*!
78  * Set Trace mecanism
79  * - delete preexisting trace classes if any
80  * - set trace on file
81  * Get or initialize the orb
82  * Create a SALOME_NamingService instance
83  */
84 // ============================================================================
85
86 void 
87 NamingServiceTest::setUp()
88 {
89   LocalTraceBufferPool* bp1 = LocalTraceBufferPool::instance();
90   CPPUNIT_ASSERT(bp1);
91   bp1->deleteInstance(bp1);
92
93   // --- trace on file
94   char *theFileName = TRACEFILE;
95
96   string s = "file:";
97   s += theFileName;
98   //s="local";
99   //s="with_logger";
100   CPPUNIT_ASSERT(! setenv("SALOME_trace",s.c_str(),1)); // 1: overwrite
101
102   ofstream traceFile;
103   //  traceFile.open(theFileName, ios::out | ios::trunc);
104   traceFile.open(theFileName, ios::out | ios::app);
105   CPPUNIT_ASSERT(traceFile); // file created empty, then closed
106   traceFile.close();
107
108   bp1 = LocalTraceBufferPool::instance();
109   CPPUNIT_ASSERT(bp1);
110
111   // --- Get or initialize the orb
112
113   int _argc = 1;
114   char* _argv[] = {""};
115   ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance() ;
116   ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting());
117   _orb = init(_argc , _argv ) ;
118
119   // --- Create a SALOME_NamingService instance
120
121   _NS.init_orb(_orb) ;
122
123   // --- Create an NSTEST::factory
124
125   CORBA::Object_var obj = _orb->resolve_initial_references("RootPOA");
126   ASSERT(!CORBA::is_nil(obj));
127   _root_poa = PortableServer::POA::_narrow(obj);
128   _pman = _root_poa->the_POAManager();
129   _myFactory  = new NSTEST_aFactory_i();
130   _myFactoryId = _root_poa->activate_object(_myFactory);
131   _factoryRef = _myFactory->_this();
132   _pman->activate();
133   
134 }
135
136 // ============================================================================
137 /*!
138  *  - delete trace classes
139  */
140 // ============================================================================
141
142 void 
143 NamingServiceTest::tearDown()
144 {
145
146   LocalTraceBufferPool* bp1 = LocalTraceBufferPool::instance();
147   CPPUNIT_ASSERT(bp1);
148   bp1->deleteInstance(bp1);
149 }
150
151 // ============================================================================
152 /*!
153  *  Test default constructor: must be followed by a call to init_orb(ORB)
154  */
155 // ============================================================================
156
157 void
158 NamingServiceTest::testConstructorDefault()
159 {
160   SALOME_NamingService  NS;
161   //CPPUNIT_ASSERT_THROW(NS.getIORaddr(),CORBA::Exception);
162   NS.init_orb(_orb);
163
164   char *root = NS.getIORaddr();
165   CORBA::Object_var obj = _orb->string_to_object(root);
166   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
167
168   CosNaming::NamingContext_var rootContext =
169     CosNaming::NamingContext::_narrow(obj);
170   CPPUNIT_ASSERT(!CORBA::is_nil(rootContext));
171 }
172
173 // ============================================================================
174 /*!
175  *  Test constructor with ORB parameter
176  */
177 // ============================================================================
178
179 void
180 NamingServiceTest::testConstructorOrb()
181 {
182   SALOME_NamingService  NS(_orb);
183   char *root = NS.getIORaddr();
184   CORBA::Object_var obj = _orb->string_to_object(root);
185   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
186
187   CosNaming::NamingContext_var rootContext =
188     CosNaming::NamingContext::_narrow(obj);
189   CPPUNIT_ASSERT(!CORBA::is_nil(rootContext));
190 }
191
192 // ============================================================================
193 /*!
194  * Test Register and resolve of a single CORBA object with absolute pathname,
195  * without subdirectories
196  */
197 // ============================================================================
198
199 void
200 NamingServiceTest::testRegisterResolveAbsNoPath()
201 {
202   _NS.Register(_factoryRef,"/nstest_factory");
203   CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
204   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
205   NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
206   CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
207 }
208
209 // ============================================================================
210 /*!
211  * Test Register and resolve of a single CORBA object with relative pathname,
212  * without subdirectories
213  */
214 // ============================================================================
215
216 void
217 NamingServiceTest::testRegisterResolveRelativeNoPath()
218 {
219   CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
220   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
221   NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
222   CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
223
224   _NS.Create_Directory("/myContext");
225   _NS.Change_Directory("/myContext");
226
227   NSTEST::echo_var anEchoRef = myFactory->createInstance();
228   _NS.Register(anEchoRef,"echo_0");
229
230   obj = _NS.Resolve("echo_0");
231   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
232   NSTEST::echo_var anEchoRef2 = NSTEST::echo::_narrow(obj);
233   CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef2));
234   CPPUNIT_ASSERT(anEchoRef->getId() == anEchoRef2->getId());
235
236   obj = _NS.Resolve("/myContext/echo_0");
237   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
238   NSTEST::echo_var anEchoRef3 = NSTEST::echo::_narrow(obj);
239   CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef3));
240   CPPUNIT_ASSERT(anEchoRef->getId() == anEchoRef3->getId());
241 }
242
243 // ============================================================================
244 /*!
245  * Test Register and resolve of a single CORBA object with absolute pathname,
246  * in a subdirectory
247  */
248 // ============================================================================
249
250 void
251 NamingServiceTest::testRegisterResolveAbsWithPath()
252 {
253   CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
254   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
255   NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
256   CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
257
258   NSTEST::echo_var anEchoRef = myFactory->createInstance();
259   _NS.Register(anEchoRef,"/nstest/echo_0");
260
261   obj = _NS.Resolve("/nstest/echo_0");
262   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
263   NSTEST::echo_var anEchoRefa = NSTEST::echo::_narrow(obj);
264   CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRefa));
265   CPPUNIT_ASSERT(anEchoRef->getId() == anEchoRefa->getId());
266
267   NSTEST::echo_var anEchoRef1 = myFactory->createInstance();
268   _NS.Register(anEchoRef1,"/nstest2/rep2/rep3/echo_1");
269   CPPUNIT_ASSERT(anEchoRef->getId() != anEchoRef1->getId());
270
271   obj = _NS.Resolve("/nstest2/rep2/rep3/echo_1");
272   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
273   NSTEST::echo_var anEchoRef1a = NSTEST::echo::_narrow(obj);
274   CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef1a));
275   CPPUNIT_ASSERT(anEchoRef1->getId() == anEchoRef1a->getId());
276
277   NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
278   _NS.Register(anEchoRef2,"/nstest2/1/2/3/4/echo_1");
279
280   obj = _NS.Resolve("/nstest2/1/2/3/4/echo_1");
281   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
282   NSTEST::echo_var anEchoRef2a = NSTEST::echo::_narrow(obj);
283   CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef2a));
284   CPPUNIT_ASSERT(anEchoRef2->getId() == anEchoRef2a->getId());
285 }
286
287 // ============================================================================
288 /*!
289  * Test Register and resolve of a single CORBA object with relative pathname,
290  * in a subdirectory.
291  * Relative Path is changed to the created subdirectory when Register()
292  */
293 // ============================================================================
294
295 void
296 NamingServiceTest::testRegisterResolveRelativeWithPath()
297 {
298   CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
299   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
300   NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
301   CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
302   _NS.Create_Directory("/myContext");
303   _NS.Change_Directory("/myContext");
304
305   NSTEST::echo_var anEchoRef = myFactory->createInstance();
306   _NS.Register(anEchoRef,"subdir/echo_0");
307
308   obj = _NS.Resolve("echo_0");
309   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
310   NSTEST::echo_var anEchoRef2 = NSTEST::echo::_narrow(obj);
311   CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef2));
312
313   obj = _NS.Resolve("/myContext/subdir/echo_0");
314   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
315   NSTEST::echo_var anEchoRef3 = NSTEST::echo::_narrow(obj);
316   CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef3));
317   CPPUNIT_ASSERT(anEchoRef->getId() == anEchoRef3->getId());
318
319   _NS.Change_Directory("/myContext");
320   obj = _NS.Resolve("subdir/echo_0");
321   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
322   NSTEST::echo_var anEchoRef4 = NSTEST::echo::_narrow(obj);
323   CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef4));
324   CPPUNIT_ASSERT(anEchoRef->getId() == anEchoRef4->getId());
325 }
326
327 // ============================================================================
328 /*!
329  * Test resolve with a name not known
330  */
331 // ============================================================================
332
333 void
334 NamingServiceTest::testResolveBadName()
335 {
336   CORBA::Object_var obj = _NS.Resolve("/notRegisteredName");
337   CPPUNIT_ASSERT(CORBA::is_nil(obj));
338
339   obj = _NS.Resolve("/nstest/notRegisteredName");
340   CPPUNIT_ASSERT(CORBA::is_nil(obj));
341
342   obj = _NS.Resolve("/unknownPath/notRegisteredName");
343   CPPUNIT_ASSERT(CORBA::is_nil(obj));
344
345   obj = _NS.Resolve("/anUnknown/ComplicatedPath/notRegisteredName");
346   CPPUNIT_ASSERT(CORBA::is_nil(obj));
347 }
348
349 // ============================================================================
350 /*!
351  * Test resolve with a name not known, with a relative path
352  */
353 // ============================================================================
354
355 void
356 NamingServiceTest::testResolveBadNameRelative()
357 {
358   _NS.Create_Directory("/myContext");
359   _NS.Change_Directory("/myContext");
360
361   CORBA::Object_var obj = _NS.Resolve("notRegisteredName");
362   CPPUNIT_ASSERT(CORBA::is_nil(obj));
363
364   obj = _NS.Resolve("unknownPath/notRegisteredName");
365   CPPUNIT_ASSERT(CORBA::is_nil(obj));
366
367   obj = _NS.Resolve("anUnknown/ComplicatedPath/notRegisteredName");
368   CPPUNIT_ASSERT(CORBA::is_nil(obj));
369 }
370
371 // ============================================================================
372 /*!
373  * Test register and resolve multiple objects, test resolveFirst.
374  * Register a few objects in /nstestfirst/echo_n where n is the object id.
375  * Resolve all the objects.
376  * ResolveFirst /nstestfirst/echo must give /nstestfirst/echo_i, corresponding
377  * to the first object.
378  */
379 // ============================================================================
380
381 #define NB_OBJS 10
382
383 void
384 NamingServiceTest::testResolveFirst()
385 {
386   CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
387   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
388   NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
389   CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
390
391   int ref[NB_OBJS];
392
393   for (int i=0; i<NB_OBJS; i++)
394     {
395       NSTEST::echo_var anEchoRef = myFactory->createInstance();
396       ref[i] = anEchoRef->getId();
397       string name = "/nstestfirst/echo_";
398       char anum[10];
399       sprintf(anum,"%d",ref[i]);
400       name += anum;
401       _NS.Register(anEchoRef,name.c_str());
402     }
403
404   for (int i=0; i<NB_OBJS; i++)
405     {
406       string name = "/nstestfirst/echo_";
407       char anum[10];
408       sprintf(anum,"%d",ref[i]);
409       name += anum;
410       obj = _NS.Resolve(name.c_str());
411       CPPUNIT_ASSERT(!CORBA::is_nil(obj));
412       NSTEST::echo_var anEchoRef = NSTEST::echo::_narrow(obj);
413       CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef));
414       CPPUNIT_ASSERT(anEchoRef->getId() == ref[i]);
415     }
416
417   string name = "/nstestfirst/echo";
418   obj = _NS.ResolveFirst(name.c_str());
419   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
420   NSTEST::echo_var anEchoRef = NSTEST::echo::_narrow(obj);
421   CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef));
422   CPPUNIT_ASSERT(anEchoRef->getId() == ref[0]);
423 }
424
425 // ============================================================================
426 /*!
427  * Test register and resolve multiple objects, test resolveFirst, relative path
428  * Register a few objects in /nstestfirstrel/echo_n where n is the object id.
429  * Resolve all the objects.
430  * ResolveFirst echo with a relative path /nstestfirstrel must give 
431  * /nstestfirst/echo_i, corresponding to the first object.
432  */
433 // ============================================================================
434
435 void
436 NamingServiceTest::testResolveFirstRelative()
437 {
438   CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
439   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
440   NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
441   CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
442
443   int ref[NB_OBJS];
444
445   for (int i=0; i<NB_OBJS; i++)
446     {
447       NSTEST::echo_var anEchoRef = myFactory->createInstance();
448       ref[i] = anEchoRef->getId();
449       string name = "/nstestfirstrel/echo_";
450       char anum[10];
451       sprintf(anum,"%d",ref[i]);
452       name += anum;
453       _NS.Register(anEchoRef,name.c_str());
454     }
455
456   for (int i=0; i<NB_OBJS; i++)
457     {
458       _NS.Change_Directory("/nstestfirstrel");
459       string name = "echo_";
460       char anum[10];
461       sprintf(anum,"%d",ref[i]);
462       name += anum;
463       obj = _NS.Resolve(name.c_str());
464       CPPUNIT_ASSERT(!CORBA::is_nil(obj));
465       NSTEST::echo_var anEchoRef = NSTEST::echo::_narrow(obj);
466       CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef));
467       CPPUNIT_ASSERT(anEchoRef->getId() == ref[i]);
468     }
469
470   _NS.Change_Directory("/nstestfirstrel");
471   string name = "echo";
472   obj = _NS.ResolveFirst(name.c_str());
473   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
474 }
475
476 // ============================================================================
477 /*!
478  * Test resolveFirst with unknown name
479  */
480 // ============================================================================
481
482 void
483 NamingServiceTest::testResolveFirstUnknown()
484 {
485   string name = "/notYeyRegistered";
486   CORBA::Object_var obj= _NS.ResolveFirst(name.c_str());
487   CPPUNIT_ASSERT(CORBA::is_nil(obj));
488
489   name = "/nstestfirst/notYeyRegistered";
490   obj = _NS.ResolveFirst(name.c_str());
491   CPPUNIT_ASSERT(CORBA::is_nil(obj));
492
493   name = "/rrr/sss/ttt/notYeyRegistered";
494   obj = _NS.ResolveFirst(name.c_str());
495   CPPUNIT_ASSERT(CORBA::is_nil(obj));
496 }
497
498 // ============================================================================
499 /*!
500  * Test resolveFirst with unknown name, relative Path
501  */
502 // ============================================================================
503
504 void
505 NamingServiceTest::testResolveFirstUnknownRelative()
506 {
507   _NS.Create_Directory("/myContext");
508   _NS.Change_Directory("/myContext");
509
510   string name = "RelnotYeyRegistered";
511   CORBA::Object_var obj = _NS.ResolveFirst(name.c_str());
512   CPPUNIT_ASSERT(CORBA::is_nil(obj));
513
514   name = "Relnstestfirst/notYeyRegistered";
515   obj = _NS.ResolveFirst(name.c_str());
516   CPPUNIT_ASSERT(CORBA::is_nil(obj));
517
518   name = "Relrrr/sss/ttt/notYeyRegistered";
519   obj = _NS.ResolveFirst(name.c_str());
520   CPPUNIT_ASSERT(CORBA::is_nil(obj));
521 }
522
523 // ============================================================================
524 /*!
525  * Test ResolveComponent works as specified
526  */
527 // ============================================================================
528
529 void
530 NamingServiceTest::testResolveComponentOK()
531 {
532   CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
533   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
534   NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
535   CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
536
537   NSTEST::echo_var anEchoRef = myFactory->createInstance();
538   _NS.Register(anEchoRef,
539                "/Containers/theHostName/theContainerName/theComponentName");
540
541   obj = _NS.ResolveComponent("theHostName",
542                              "theContainerName",
543                              "theComponentName");
544   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
545   NSTEST::echo_var anEchoRefa = NSTEST::echo::_narrow(obj);
546   CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRefa));
547   CPPUNIT_ASSERT(anEchoRefa->getId() == anEchoRef->getId());
548
549
550   NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
551   _NS.Register(anEchoRef2,
552                "/Containers/theHostName/theContainerName_2/theComponentName");
553
554   obj = _NS.ResolveComponent("theHostName",
555                              "theContainerName",
556                              "theComponentName",
557                              2);
558   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
559   NSTEST::echo_var anEchoRefb = NSTEST::echo::_narrow(obj);
560   CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRefb));
561   CPPUNIT_ASSERT(anEchoRefb->getId() == anEchoRef2->getId());
562 }
563
564 // ============================================================================
565 /*!
566  * Test ResolveComponent gives nil pointer if hostname is not given (empty)
567  */
568 // ============================================================================
569
570 void
571 NamingServiceTest::testResolveComponentEmptyHostname()
572 {
573   CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
574   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
575   NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
576   CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
577
578   NSTEST::echo_var anEchoRef = myFactory->createInstance();
579   _NS.Register(anEchoRef,
580                "/Containers/theHostName/theContainerName/theComponentName");
581
582   obj = _NS.ResolveComponent("",
583                              "theContainerName",
584                              "theComponentName");
585   CPPUNIT_ASSERT(CORBA::is_nil(obj));
586 }
587
588 // ============================================================================
589 /*!
590  * Test ResolveComponent gives nil pointer if hostname is unknown
591  */
592 // ============================================================================
593
594 void
595 NamingServiceTest::testResolveComponentUnknownHostname()
596 {
597   CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
598   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
599   NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
600   CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
601
602   NSTEST::echo_var anEchoRef = myFactory->createInstance();
603   _NS.Register(anEchoRef,
604                "/Containers/theHostName/theContainerName/theComponentName");
605
606   obj = _NS.ResolveComponent("anUnknownHostName",
607                              "theContainerName",
608                              "theComponentName");
609   CPPUNIT_ASSERT(CORBA::is_nil(obj));
610 }
611
612 // ============================================================================
613 /*!
614  * Test ResolveComponent when containerName is empty.
615  * check bad hostname gives nil pointer.
616  * If componentName registered on a container from hostname, a component
617  * reference is found (the first one).
618  * Else give nil pointer.
619  */
620 // ============================================================================
621
622 void
623 NamingServiceTest::testResolveComponentEmptyContainerName()
624 {
625   CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
626   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
627   NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
628   CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
629
630   NSTEST::echo_var anEchoRef = myFactory->createInstance();
631   _NS.Register(anEchoRef,
632                "/Containers/theHostName/theContainerName/theComponentName");
633
634   NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
635   _NS.Register(anEchoRef2,
636                "/Containers/theHostName/aContainerName/aComponentName");
637
638   NSTEST::echo_var anEchoRef3 = myFactory->createInstance();
639   _NS.Register(anEchoRef3,
640                "/Containers/theHostName/otherContainerName/theComponentName");
641
642   obj = _NS.ResolveComponent("anUnknownHostName",
643                              "",
644                              "theComponentName");
645   CPPUNIT_ASSERT(CORBA::is_nil(obj));
646
647   obj = _NS.ResolveComponent("theHostName",
648                              "",
649                              "theComponentName");
650   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
651   NSTEST::echo_var anEchoRefa = NSTEST::echo::_narrow(obj);
652   CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRefa));
653   CPPUNIT_ASSERT(anEchoRefa->getId() == anEchoRef->getId());
654 }
655
656 // ============================================================================
657 /*!
658  * Test 
659  */
660 // ============================================================================
661
662 void
663 NamingServiceTest::testResolveComponentUnknownContainerName()
664 {
665   CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
666   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
667   NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
668   CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
669
670   NSTEST::echo_var anEchoRef = myFactory->createInstance();
671   _NS.Register(anEchoRef,
672                "/Containers/theHostName/theContainerName/theComponentName");
673
674   NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
675   _NS.Register(anEchoRef2,
676                "/Containers/theHostName/aContainerName/aComponentName");
677
678   NSTEST::echo_var anEchoRef3 = myFactory->createInstance();
679   _NS.Register(anEchoRef3,
680                "/Containers/theHostName/otherContainerName/theComponentName");
681
682   obj = _NS.ResolveComponent("theHostName",
683                              "anUnknownContainerName",
684                              "theComponentName");
685   CPPUNIT_ASSERT(CORBA::is_nil(obj));
686 }
687
688 // ============================================================================
689 /*!
690  * Test 
691  */
692 // ============================================================================
693
694 void
695 NamingServiceTest::testResolveComponentEmptyComponentName()
696 {
697   CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
698   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
699   NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
700   CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
701
702   NSTEST::echo_var anEchoRef = myFactory->createInstance();
703   _NS.Register(anEchoRef,
704                "/Containers/theHostName/theContainerName/theComponentName");
705
706   NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
707   _NS.Register(anEchoRef2,
708                "/Containers/theHostName/EmptyContainerName/");
709
710   obj = _NS.ResolveComponent("theHostName",
711                              "EmptyContainerName",
712                              "");
713   CPPUNIT_ASSERT(CORBA::is_nil(obj));
714 }
715
716 // ============================================================================
717 /*!
718  * Test 
719  */
720 // ============================================================================
721
722 void
723 NamingServiceTest::testResolveComponentUnknownComponentName()
724 {
725   CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
726   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
727   NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
728   CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
729
730   NSTEST::echo_var anEchoRef = myFactory->createInstance();
731   _NS.Register(anEchoRef,
732                "/Containers/theHostName/theContainerName/theComponentName");
733
734   obj = _NS.ResolveComponent("theHostName",
735                              "theContainerName",
736                              "anUnknownComponentName");
737   CPPUNIT_ASSERT(CORBA::is_nil(obj));
738 }
739
740 // ============================================================================
741 /*!
742  * Test with a false number nbproc. 
743  * A positive number not corresponding to a registered component gives nil ref.
744  * A negative number is not taken into account and may give a non nil ref.
745  */
746 // ============================================================================
747
748 void
749 NamingServiceTest::testResolveComponentFalseNbproc()
750 {
751   CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
752   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
753   NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
754   CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
755
756   NSTEST::echo_var anEchoRef = myFactory->createInstance();
757   _NS.Register(anEchoRef,
758                "/Containers/theHostName/theContainerName/theComponentName");
759
760   obj = _NS.ResolveComponent("theHostName",
761                              "theContainerName",
762                              "theComponentName",
763                              25);
764   CPPUNIT_ASSERT(CORBA::is_nil(obj));
765
766   obj = _NS.ResolveComponent("theHostName",
767                              "theContainerName",
768                              "theComponentName",
769                              -25);
770   CPPUNIT_ASSERT(! CORBA::is_nil(obj));
771 }
772
773 // ============================================================================
774 /*!
775  * Test 
776  */
777 // ============================================================================
778
779 void
780 NamingServiceTest::testContainerName()
781 {
782   string ref0 = "FactoryServer";
783   string ret = _NS.ContainerName("");
784   CPPUNIT_ASSERT(ret == ref0);
785
786   ref0 = "MyContainerName";
787   ret = _NS.ContainerName(ref0.c_str());
788   CPPUNIT_ASSERT(ret == ref0);
789 }
790
791 // ============================================================================
792 /*!
793  * Test 
794  */
795 // ============================================================================
796
797 void
798 NamingServiceTest::testContainerNameParams()
799 {
800   Engines::MachineParameters params;
801   params.container_name = "";
802   params.hostname = "";
803   params.OS = "";
804   params.mem_mb = 0;
805   params.cpu_clock = 0;
806   params.nb_proc_per_node = 0;
807   params.nb_node = 0;
808   params.isMPI = false;
809
810   string ref0 = "FactoryServer";
811   string ret = _NS.ContainerName(params);
812   CPPUNIT_ASSERT(ret == ref0);
813
814   ref0 = "MyContainerName";
815   params.container_name = ref0.c_str();
816   ret = _NS.ContainerName(params);
817   CPPUNIT_ASSERT(ret == ref0);
818 }
819
820 // ============================================================================
821 /*!
822  * Test 
823  */
824 // ============================================================================
825
826 void
827 NamingServiceTest::testBuildContainerNameForNS()
828 {
829   string ref0 = "/Containers/theHostName/theContainerName";
830   string ret = _NS.BuildContainerNameForNS("theContainerName","theHostName");
831   CPPUNIT_ASSERT(ret == ref0);
832
833   ref0 = "/Containers/theHostName/FactoryServer";
834   ret = _NS.BuildContainerNameForNS("","theHostName");
835   CPPUNIT_ASSERT(ret == ref0);
836 }
837
838 // ============================================================================
839 /*!
840  * Test 
841  */
842 // ============================================================================
843
844 void
845 NamingServiceTest::testBuildContainerNameForNSParams()
846 {
847   Engines::MachineParameters params;
848   params.container_name = "";
849   params.hostname = "";
850   params.OS = "";
851   params.mem_mb = 0;
852   params.cpu_clock = 0;
853   params.nb_proc_per_node = 0;
854   params.nb_node = 0;
855   params.isMPI = false;
856
857   params.container_name = "theContainerName";
858   string ref0 = "/Containers/theHostName/theContainerName";
859   string ret = _NS.BuildContainerNameForNS(params,"theHostName");
860   CPPUNIT_ASSERT(ret == ref0);
861
862   params.container_name = "";
863   ref0 = "/Containers/theHostName/FactoryServer";
864   ret = _NS.BuildContainerNameForNS(params,"theHostName");
865   CPPUNIT_ASSERT(ret == ref0);
866 }
867
868 // ============================================================================
869 /*!
870  * Test 
871  */
872 // ============================================================================
873
874 void
875 NamingServiceTest::testFind()
876 {
877   CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
878   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
879   NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
880   CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
881
882   NSTEST::echo_var anEchoRef = myFactory->createInstance();
883   _NS.Register(anEchoRef,
884                "/Containers/theHostName/theContainerName/theComponentName");
885
886   NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
887   _NS.Register(anEchoRef2,
888                "/Containers/theHostName/aContainerName/aComponentName");
889
890   NSTEST::echo_var anEchoRef3 = myFactory->createInstance();
891   _NS.Register(anEchoRef3,
892                "/Containers/theHostName/otherContainerName/theComponentName");
893
894   NSTEST::echo_var anEchoRef4 = myFactory->createInstance();
895   _NS.Register(anEchoRef4,
896                "/Containers/anHostName/oneContainerName/theComponentName");
897
898   _NS.Change_Directory("/Containers");
899   int occ= _NS.Find("theComponentName");
900   CPPUNIT_ASSERT(occ >= 3); // see previous tests
901
902   _NS.Change_Directory("/Containers");
903   occ= _NS.Find("aComponentName");
904   CPPUNIT_ASSERT(occ == 1);
905
906   _NS.Change_Directory("/Containers");
907   occ= _NS.Find("UnknownCompnentName");
908   CPPUNIT_ASSERT(occ == 0);
909 }
910
911 // ============================================================================
912 /*!
913  * Test 
914  */
915 // ============================================================================
916
917 void
918 NamingServiceTest::testCreateDirectory()
919 {
920   CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
921   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
922   NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
923   CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
924
925   bool ret = _NS.Create_Directory("/aaa/bbb/ccc/ddd/eee");
926   CPPUNIT_ASSERT(ret);
927
928   _NS.Change_Directory("/aaa/bbb/ccc/ddd/eee");
929   NSTEST::echo_var anEchoRef = myFactory->createInstance();
930   int val = anEchoRef->getId();
931   string name = "echo_";
932   char anum[10];
933   sprintf(anum,"%d",val);
934   name += anum;
935   _NS.Register(anEchoRef,name.c_str());
936
937   string dirname = "/aaa/bbb/ccc/ddd/eee/";
938   dirname += name;
939   obj = _NS.Resolve(dirname.c_str());
940   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
941   NSTEST::echo_var anEchoRef2 = NSTEST::echo::_narrow(obj);
942   CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef2));
943   CPPUNIT_ASSERT(anEchoRef->getId() == anEchoRef2->getId());
944
945   ret = _NS.Create_Directory("/aaa/bbb/ccc/ddd/eee");
946   CPPUNIT_ASSERT(ret);
947
948   _NS.Change_Directory("/aaa/bbb");
949   ret = _NS.Create_Directory("cccccc/dddddd/eeeeee");
950   _NS.Register(anEchoRef,"echo_abcde");
951
952   CPPUNIT_ASSERT(ret);
953   _NS.Change_Directory("/aaa/bbb/cccccc/dddddd/eeeeee");
954   obj = _NS.Resolve("echo_abcde");
955   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
956 }
957
958 // ============================================================================
959 /*!
960  * Test 
961  */
962 // ============================================================================
963
964 void
965 NamingServiceTest::testChangeDirectory()
966 {
967   CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
968   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
969   NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
970   CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
971
972   NSTEST::echo_var anEchoRef = myFactory->createInstance();
973   _NS.Register(anEchoRef,
974                "/Containers/theHostName/theContainerName/theComponentName");
975
976   NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
977   _NS.Register(anEchoRef2,
978                "/Containers/theHostName/aContainerName/aComponentName");
979
980   NSTEST::echo_var anEchoRef3 = myFactory->createInstance();
981   _NS.Register(anEchoRef3,
982                "/Containers/theHostName/otherContainerName/theComponentName");
983
984   NSTEST::echo_var anEchoRef4 = myFactory->createInstance();
985   _NS.Register(anEchoRef4,
986                "/Containers/anHostName/oneContainerName/theComponentName");
987   
988   _NS.Change_Directory("/Containers/theHostName/otherContainerName");
989   obj = _NS.Resolve("theComponentName");
990   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
991   
992   NSTEST::echo_var anEchoRefa = NSTEST::echo::_narrow(obj);
993   CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRefa));
994   CPPUNIT_ASSERT(anEchoRefa->getId() == anEchoRef3->getId());
995 }
996
997 // ============================================================================
998 /*!
999  * Test 
1000  */
1001 // ============================================================================
1002
1003 void
1004 NamingServiceTest::testCurrentDirectory()
1005 {
1006   string path = "/aaa/bbb/ccc/ddd/eee";
1007   bool ret = _NS.Create_Directory(path.c_str());
1008   CPPUNIT_ASSERT(ret);
1009
1010   _NS.Change_Directory(path.c_str());
1011   string curdir = _NS.Current_Directory();
1012   CPPUNIT_ASSERT(curdir == path);
1013 }
1014
1015 // ============================================================================
1016 /*!
1017  * Test 
1018  */
1019 // ============================================================================
1020
1021 void
1022 NamingServiceTest::testList()
1023 {
1024   _NS.Change_Directory("/Containers/theHostName/theContainerName");
1025   _NS.list();
1026   _NS.Change_Directory("/Containers");
1027   _NS.list();
1028 }
1029
1030 // ============================================================================
1031 /*!
1032  * Test 
1033  */
1034 // ============================================================================
1035
1036 void
1037 NamingServiceTest::testListDirectory()
1038 {
1039   _NS.Change_Directory("/Containers/theHostName/theContainerName");
1040   _NS.list_directory();
1041   _NS.Change_Directory("/Containers");
1042   _NS.list_directory();
1043 }
1044
1045 // ============================================================================
1046 /*!
1047  * Test 
1048  */
1049 // ============================================================================
1050
1051 void
1052 NamingServiceTest::testListDirectoryRecurs()
1053 {
1054   _NS.Change_Directory("/Containers/theHostName/theContainerName");
1055   _NS.list_directory_recurs();
1056   _NS.Change_Directory("/Containers");
1057   _NS.list_directory_recurs();
1058   _NS.Change_Directory("/");
1059   _NS.list_directory_recurs();
1060 }
1061
1062
1063 // ============================================================================
1064 /*!
1065  * Test 
1066  */
1067 // ============================================================================
1068
1069 void
1070 NamingServiceTest::testListSubdirs()
1071 {
1072   _NS.Change_Directory("/Containers/theHostName/theContainerName");
1073   _NS.list_subdirs();
1074   _NS.Change_Directory("/Containers");
1075   _NS.list_subdirs();
1076   _NS.Change_Directory("/");
1077   _NS.list_subdirs();
1078 }
1079 // ============================================================================
1080 /*!
1081  * Test 
1082  */
1083 // ============================================================================
1084
1085 void
1086 NamingServiceTest::testDestroyName()
1087 {
1088   CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
1089   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
1090   NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
1091   CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
1092
1093   string path = "/Containers/theHostName/theContainerName/theComponentName";
1094
1095   NSTEST::echo_var anEchoRef = myFactory->createInstance();
1096   _NS.Register(anEchoRef, path.c_str());
1097
1098   obj=_NS.Resolve(path.c_str());
1099   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
1100
1101   _NS.Destroy_Name(path.c_str());
1102   obj=_NS.Resolve(path.c_str());
1103   CPPUNIT_ASSERT(CORBA::is_nil(obj));
1104 }
1105
1106 // ============================================================================
1107 /*!
1108  * Test 
1109  */
1110 // ============================================================================
1111
1112 void
1113 NamingServiceTest::testDestroyDirectory()
1114 {
1115   CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
1116   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
1117   NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
1118   CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
1119
1120   string path = "/Containers/theHostName/theContainerName/theComponentName";
1121
1122   NSTEST::echo_var anEchoRef = myFactory->createInstance();
1123   _NS.Register(anEchoRef, path.c_str());
1124
1125   _NS.Destroy_Directory("/Containers/theHostName/theContainerName");
1126   obj=_NS.Resolve(path.c_str());
1127   CPPUNIT_ASSERT(!CORBA::is_nil(obj)); // directory not empty: not destroyed
1128
1129   _NS.Destroy_Name(path.c_str());
1130   _NS.Destroy_Directory("/Containers/theHostName/theContainerName");
1131   _NS.Change_Directory("/Containers/theHostName");
1132   _NS.list_subdirs();
1133 }
1134
1135 // ============================================================================
1136 /*!
1137  * DestroyFullDirectory is not recursive
1138  * Need Housekeeping of /Containers for further tests !
1139  */
1140 // ============================================================================
1141
1142 void NamingServiceTest::_destroyDirectoryRecurs(string path)
1143 {
1144   string current = path;
1145   SCRUTE(path);
1146   if (_NS.Change_Directory(path.c_str()))
1147     {
1148       vector<string> subdirs = _NS.list_subdirs();
1149       for (int i=0; i<subdirs.size(); i++)
1150         {
1151           string subpath=path + "/" +subdirs[i];
1152           _destroyDirectoryRecurs(subpath);
1153         }
1154       if (_NS.Change_Directory(path.c_str()))
1155         {
1156           _NS.Destroy_FullDirectory(path.c_str());
1157         }
1158     }
1159 }
1160
1161 void
1162 NamingServiceTest::testDestroyFullDirectory()
1163 {
1164   _NS.Destroy_FullDirectory("/Containers");
1165   CPPUNIT_ASSERT(_NS.Change_Directory("/Containers"));
1166   vector<string> subdirs = _NS.list_subdirs();
1167   CPPUNIT_ASSERT(subdirs.size() >0);
1168   _NS.list_directory_recurs();
1169   string path = "/Containers";
1170   _destroyDirectoryRecurs(path);
1171   CPPUNIT_ASSERT( ! _NS.Change_Directory("/Containers"));
1172   _NS.Change_Directory("/");
1173   _NS.list_subdirs();
1174   _NS.list_directory_recurs();
1175 }
1176
1177 // ============================================================================
1178 /*!
1179  * Test 
1180  */
1181 // ============================================================================
1182
1183 void
1184 NamingServiceTest::testGetIorAddr()
1185 {
1186   char *root = _NS.getIORaddr();
1187   CORBA::Object_var obj = _orb->string_to_object(root);
1188   CPPUNIT_ASSERT(!CORBA::is_nil(obj)); 
1189 }
1190
1191 // ============================================================================
1192 /*!
1193  * Test 
1194  */
1195 // ============================================================================
1196
1197 // void
1198 // NamingServiceTest::()
1199 // {
1200 //   CPPUNIT_ASSERT(0);
1201 // }
1202