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