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