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