1 // Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
2 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
18 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 #include "NamingServiceTest.hxx"
22 #include "Utils_ORB_INIT.hxx"
23 #include "Utils_SINGLETON.hxx"
33 // --- uncomment to have some traces on standard error
34 // (useful only when adding new tests...)
38 #define MYDEVTRACE {std::cerr << __FILE__ << " [" << __LINE__ << "] : ";}
39 #define DEVTRACE(msg) {MYDEVTRACE; std::cerr<<msg<<std::endl<<std::flush;}
45 #define TRACEFILE "/tmp/traceUnitTest.log"
47 // ============================================================================
49 * a basic CORBA object implementation for use with namingService tests
51 // ============================================================================
53 NSTEST_echo_i::NSTEST_echo_i()
58 NSTEST_echo_i::NSTEST_echo_i(CORBA::Long num)
63 NSTEST_echo_i::~NSTEST_echo_i()
67 CORBA::Long NSTEST_echo_i::getId()
72 // ============================================================================
74 * a factory of CORBA objects for use with namingService tests
76 // ============================================================================
78 NSTEST_aFactory_i::NSTEST_aFactory_i()
83 NSTEST_aFactory_i::~NSTEST_aFactory_i()
87 NSTEST::echo_ptr NSTEST_aFactory_i::createInstance()
89 NSTEST_echo_i * anEcho = new NSTEST_echo_i(_num);
91 NSTEST::echo_var anEchoRef = anEcho->_this();
92 anEcho->_remove_ref();
93 return anEchoRef._retn();
96 // ============================================================================
99 * - delete preexisting trace classes if any
100 * - set trace on file
101 * Get or initialize the orb
102 * Create a SALOME_NamingService instance
104 // ============================================================================
107 NamingServiceTest::setUp()
109 LocalTraceBufferPool* bp1 = LocalTraceBufferPool::instance();
111 bp1->deleteInstance(bp1);
114 char *theFileName = TRACEFILE;
120 CPPUNIT_ASSERT(! setenv("SALOME_trace",s.c_str(),1)); // 1: overwrite
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
128 bp1 = LocalTraceBufferPool::instance();
131 // --- Get or initialize the orb
134 char* _argv[] = {""};
135 ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance() ;
136 ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting());
137 _orb = init(_argc , _argv ) ;
139 // --- Create a SALOME_NamingService instance
143 // --- Create an NSTEST::factory
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();
153 _myFactory->_remove_ref();
157 // ============================================================================
159 * - delete trace classes
161 // ============================================================================
164 NamingServiceTest::tearDown()
167 LocalTraceBufferPool* bp1 = LocalTraceBufferPool::instance();
169 bp1->deleteInstance(bp1);
172 // ============================================================================
174 * Test default constructor: must be followed by a call to init_orb(ORB)
176 // ============================================================================
179 NamingServiceTest::testConstructorDefault()
181 SALOME_NamingService NS;
182 //CPPUNIT_ASSERT_THROW(NS.getIORaddr(),CORBA::Exception);
185 char *root = NS.getIORaddr();
186 CORBA::Object_var obj = _orb->string_to_object(root);
188 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
190 CosNaming::NamingContext_var rootContext =
191 CosNaming::NamingContext::_narrow(obj);
192 CPPUNIT_ASSERT(!CORBA::is_nil(rootContext));
195 // ============================================================================
197 * Test constructor with ORB parameter
199 // ============================================================================
202 NamingServiceTest::testConstructorOrb()
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));
210 CosNaming::NamingContext_var rootContext =
211 CosNaming::NamingContext::_narrow(obj);
212 CPPUNIT_ASSERT(!CORBA::is_nil(rootContext));
215 // ============================================================================
217 * Test Register and resolve of a single CORBA object with absolute pathname,
218 * without subdirectories
220 // ============================================================================
223 NamingServiceTest::testRegisterResolveAbsNoPath()
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));
232 // ============================================================================
234 * Test Register and resolve of a single CORBA object with relative pathname,
235 * without subdirectories
237 // ============================================================================
240 NamingServiceTest::testRegisterResolveRelativeNoPath()
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));
247 _NS.Create_Directory("/myContext");
248 _NS.Change_Directory("/myContext");
250 NSTEST::echo_var anEchoRef = myFactory->createInstance();
251 _NS.Register(anEchoRef,"echo_0");
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());
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());
266 // ============================================================================
268 * Test Register and resolve of a single CORBA object with absolute pathname,
271 // ============================================================================
274 NamingServiceTest::testRegisterResolveAbsWithPath()
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));
281 NSTEST::echo_var anEchoRef = myFactory->createInstance();
282 _NS.Register(anEchoRef,"/nstest/echo_0");
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());
290 NSTEST::echo_var anEchoRef1 = myFactory->createInstance();
291 _NS.Register(anEchoRef1,"/nstest2/rep2/rep3/echo_1");
292 CPPUNIT_ASSERT(anEchoRef->getId() != anEchoRef1->getId());
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());
300 NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
301 _NS.Register(anEchoRef2,"/nstest2/1/2/3/4/echo_1");
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());
310 // ============================================================================
312 * Test Register and resolve of a single CORBA object with relative pathname,
314 * Relative Path is changed to the created subdirectory when Register()
316 // ============================================================================
319 NamingServiceTest::testRegisterResolveRelativeWithPath()
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");
328 NSTEST::echo_var anEchoRef = myFactory->createInstance();
329 _NS.Register(anEchoRef,"subdir/echo_0");
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));
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());
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());
350 // ============================================================================
352 * Test resolve with a name not known
354 // ============================================================================
357 NamingServiceTest::testResolveBadName()
359 CORBA::Object_var obj = _NS.Resolve("/notRegisteredName");
360 CPPUNIT_ASSERT(CORBA::is_nil(obj));
362 obj = _NS.Resolve("/nstest/notRegisteredName");
363 CPPUNIT_ASSERT(CORBA::is_nil(obj));
365 obj = _NS.Resolve("/unknownPath/notRegisteredName");
366 CPPUNIT_ASSERT(CORBA::is_nil(obj));
368 obj = _NS.Resolve("/anUnknown/ComplicatedPath/notRegisteredName");
369 CPPUNIT_ASSERT(CORBA::is_nil(obj));
372 // ============================================================================
374 * Test resolve with a name not known, with a relative path
376 // ============================================================================
379 NamingServiceTest::testResolveBadNameRelative()
381 _NS.Create_Directory("/myContext");
382 _NS.Change_Directory("/myContext");
384 CORBA::Object_var obj = _NS.Resolve("notRegisteredName");
385 CPPUNIT_ASSERT(CORBA::is_nil(obj));
387 obj = _NS.Resolve("unknownPath/notRegisteredName");
388 CPPUNIT_ASSERT(CORBA::is_nil(obj));
390 obj = _NS.Resolve("anUnknown/ComplicatedPath/notRegisteredName");
391 CPPUNIT_ASSERT(CORBA::is_nil(obj));
394 // ============================================================================
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.
402 // ============================================================================
407 NamingServiceTest::testResolveFirst()
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));
416 for (int i=0; i<NB_OBJS; i++)
418 NSTEST::echo_var anEchoRef = myFactory->createInstance();
419 ref[i] = anEchoRef->getId();
420 string name = "/nstestfirst/echo_";
422 sprintf(anum,"%d",ref[i]);
424 _NS.Register(anEchoRef,name.c_str());
427 for (int i=0; i<NB_OBJS; i++)
429 string name = "/nstestfirst/echo_";
431 sprintf(anum,"%d",ref[i]);
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]);
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]);
448 // ============================================================================
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.
456 // ============================================================================
459 NamingServiceTest::testResolveFirstRelative()
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));
468 for (int i=0; i<NB_OBJS; i++)
470 NSTEST::echo_var anEchoRef = myFactory->createInstance();
471 ref[i] = anEchoRef->getId();
472 string name = "/nstestfirstrel/echo_";
474 sprintf(anum,"%d",ref[i]);
476 _NS.Register(anEchoRef,name.c_str());
479 for (int i=0; i<NB_OBJS; i++)
481 _NS.Change_Directory("/nstestfirstrel");
482 string name = "echo_";
484 sprintf(anum,"%d",ref[i]);
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]);
493 _NS.Change_Directory("/nstestfirstrel");
494 string name = "echo";
495 obj = _NS.ResolveFirst(name.c_str());
496 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
499 // ============================================================================
501 * Test resolveFirst with unknown name
503 // ============================================================================
506 NamingServiceTest::testResolveFirstUnknown()
508 string name = "/notYeyRegistered";
509 CORBA::Object_var obj= _NS.ResolveFirst(name.c_str());
510 CPPUNIT_ASSERT(CORBA::is_nil(obj));
512 name = "/nstestfirst/notYeyRegistered";
513 obj = _NS.ResolveFirst(name.c_str());
514 CPPUNIT_ASSERT(CORBA::is_nil(obj));
516 name = "/rrr/sss/ttt/notYeyRegistered";
517 obj = _NS.ResolveFirst(name.c_str());
518 CPPUNIT_ASSERT(CORBA::is_nil(obj));
521 // ============================================================================
523 * Test resolveFirst with unknown name, relative Path
525 // ============================================================================
528 NamingServiceTest::testResolveFirstUnknownRelative()
530 _NS.Create_Directory("/myContext");
531 _NS.Change_Directory("/myContext");
533 string name = "RelnotYeyRegistered";
534 CORBA::Object_var obj = _NS.ResolveFirst(name.c_str());
535 CPPUNIT_ASSERT(CORBA::is_nil(obj));
537 name = "Relnstestfirst/notYeyRegistered";
538 obj = _NS.ResolveFirst(name.c_str());
539 CPPUNIT_ASSERT(CORBA::is_nil(obj));
541 name = "Relrrr/sss/ttt/notYeyRegistered";
542 obj = _NS.ResolveFirst(name.c_str());
543 CPPUNIT_ASSERT(CORBA::is_nil(obj));
546 // ============================================================================
548 * Test ResolveComponent works as specified
550 // ============================================================================
553 NamingServiceTest::testResolveComponentOK()
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));
560 NSTEST::echo_var anEchoRef = myFactory->createInstance();
561 _NS.Register(anEchoRef,
562 "/Containers/theHostName/theContainerName/theComponentName");
564 obj = _NS.ResolveComponent("theHostName",
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());
573 NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
574 _NS.Register(anEchoRef2,
575 "/Containers/theHostName/theContainerName_2/theComponentName");
577 obj = _NS.ResolveComponent("theHostName",
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());
587 // ============================================================================
589 * Test ResolveComponent gives nil pointer if hostname is not given (empty)
591 // ============================================================================
594 NamingServiceTest::testResolveComponentEmptyHostname()
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));
601 NSTEST::echo_var anEchoRef = myFactory->createInstance();
602 _NS.Register(anEchoRef,
603 "/Containers/theHostName/theContainerName/theComponentName");
605 obj = _NS.ResolveComponent("",
608 CPPUNIT_ASSERT(CORBA::is_nil(obj));
611 // ============================================================================
613 * Test ResolveComponent gives nil pointer if hostname is unknown
615 // ============================================================================
618 NamingServiceTest::testResolveComponentUnknownHostname()
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));
625 NSTEST::echo_var anEchoRef = myFactory->createInstance();
626 _NS.Register(anEchoRef,
627 "/Containers/theHostName/theContainerName/theComponentName");
629 obj = _NS.ResolveComponent("anUnknownHostName",
632 CPPUNIT_ASSERT(CORBA::is_nil(obj));
635 // ============================================================================
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.
643 // ============================================================================
646 NamingServiceTest::testResolveComponentEmptyContainerName()
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));
653 NSTEST::echo_var anEchoRef = myFactory->createInstance();
654 _NS.Register(anEchoRef,
655 "/Containers/theHostName/theContainerName/theComponentName");
657 NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
658 _NS.Register(anEchoRef2,
659 "/Containers/theHostName/aContainerName/aComponentName");
661 NSTEST::echo_var anEchoRef3 = myFactory->createInstance();
662 _NS.Register(anEchoRef3,
663 "/Containers/theHostName/otherContainerName/theComponentName");
665 obj = _NS.ResolveComponent("anUnknownHostName",
668 CPPUNIT_ASSERT(CORBA::is_nil(obj));
670 obj = _NS.ResolveComponent("theHostName",
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());
679 // ============================================================================
683 // ============================================================================
686 NamingServiceTest::testResolveComponentUnknownContainerName()
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));
693 NSTEST::echo_var anEchoRef = myFactory->createInstance();
694 _NS.Register(anEchoRef,
695 "/Containers/theHostName/theContainerName/theComponentName");
697 NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
698 _NS.Register(anEchoRef2,
699 "/Containers/theHostName/aContainerName/aComponentName");
701 NSTEST::echo_var anEchoRef3 = myFactory->createInstance();
702 _NS.Register(anEchoRef3,
703 "/Containers/theHostName/otherContainerName/theComponentName");
705 obj = _NS.ResolveComponent("theHostName",
706 "anUnknownContainerName",
708 CPPUNIT_ASSERT(CORBA::is_nil(obj));
711 // ============================================================================
715 // ============================================================================
718 NamingServiceTest::testResolveComponentEmptyComponentName()
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));
725 NSTEST::echo_var anEchoRef = myFactory->createInstance();
726 _NS.Register(anEchoRef,
727 "/Containers/theHostName/theContainerName/theComponentName");
729 NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
730 _NS.Register(anEchoRef2,
731 "/Containers/theHostName/EmptyContainerName/");
733 obj = _NS.ResolveComponent("theHostName",
734 "EmptyContainerName",
736 CPPUNIT_ASSERT(CORBA::is_nil(obj));
739 // ============================================================================
743 // ============================================================================
746 NamingServiceTest::testResolveComponentUnknownComponentName()
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));
753 NSTEST::echo_var anEchoRef = myFactory->createInstance();
754 _NS.Register(anEchoRef,
755 "/Containers/theHostName/theContainerName/theComponentName");
757 obj = _NS.ResolveComponent("theHostName",
759 "anUnknownComponentName");
760 CPPUNIT_ASSERT(CORBA::is_nil(obj));
763 // ============================================================================
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.
769 // ============================================================================
772 NamingServiceTest::testResolveComponentFalseNbproc()
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));
779 NSTEST::echo_var anEchoRef = myFactory->createInstance();
780 _NS.Register(anEchoRef,
781 "/Containers/theHostName/theContainerName/theComponentName");
783 obj = _NS.ResolveComponent("theHostName",
787 CPPUNIT_ASSERT(CORBA::is_nil(obj));
789 obj = _NS.ResolveComponent("theHostName",
793 CPPUNIT_ASSERT(! CORBA::is_nil(obj));
796 // ============================================================================
800 // ============================================================================
803 NamingServiceTest::testContainerName()
805 string ref0 = "FactoryServer";
806 string ret = _NS.ContainerName("");
807 CPPUNIT_ASSERT(ret == ref0);
809 ref0 = "MyContainerName";
810 ret = _NS.ContainerName(ref0.c_str());
811 CPPUNIT_ASSERT(ret == ref0);
814 // ============================================================================
818 // ============================================================================
821 NamingServiceTest::testContainerNameParams()
823 Engines::MachineParameters params;
824 params.container_name = "";
825 params.hostname = "";
828 params.cpu_clock = 0;
829 params.nb_proc_per_node = 0;
831 params.isMPI = false;
833 string ref0 = "FactoryServer";
834 string ret = _NS.ContainerName(params);
835 CPPUNIT_ASSERT(ret == ref0);
837 ref0 = "MyContainerName";
838 params.container_name = ref0.c_str();
839 ret = _NS.ContainerName(params);
840 CPPUNIT_ASSERT(ret == ref0);
843 // ============================================================================
847 // ============================================================================
850 NamingServiceTest::testBuildContainerNameForNS()
852 string ref0 = "/Containers/theHostName/theContainerName";
853 string ret = _NS.BuildContainerNameForNS("theContainerName","theHostName");
854 CPPUNIT_ASSERT(ret == ref0);
856 ref0 = "/Containers/theHostName/FactoryServer";
857 ret = _NS.BuildContainerNameForNS("","theHostName");
858 CPPUNIT_ASSERT(ret == ref0);
861 // ============================================================================
865 // ============================================================================
868 NamingServiceTest::testBuildContainerNameForNSParams()
870 Engines::MachineParameters params;
871 params.container_name = "";
872 params.hostname = "";
875 params.cpu_clock = 0;
876 params.nb_proc_per_node = 0;
878 params.isMPI = false;
880 params.container_name = "theContainerName";
881 string ref0 = "/Containers/theHostName/theContainerName";
882 string ret = _NS.BuildContainerNameForNS(params,"theHostName");
883 CPPUNIT_ASSERT(ret == ref0);
885 params.container_name = "";
886 ref0 = "/Containers/theHostName/FactoryServer";
887 ret = _NS.BuildContainerNameForNS(params,"theHostName");
888 CPPUNIT_ASSERT(ret == ref0);
891 // ============================================================================
895 // ============================================================================
898 NamingServiceTest::testFind()
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));
905 NSTEST::echo_var anEchoRef = myFactory->createInstance();
906 _NS.Register(anEchoRef,
907 "/Containers/theHostName/theContainerName/theComponentName");
909 NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
910 _NS.Register(anEchoRef2,
911 "/Containers/theHostName/aContainerName/aComponentName");
913 NSTEST::echo_var anEchoRef3 = myFactory->createInstance();
914 _NS.Register(anEchoRef3,
915 "/Containers/theHostName/otherContainerName/theComponentName");
917 NSTEST::echo_var anEchoRef4 = myFactory->createInstance();
918 _NS.Register(anEchoRef4,
919 "/Containers/anHostName/oneContainerName/theComponentName");
921 _NS.Change_Directory("/Containers");
922 int occ= _NS.Find("theComponentName");
923 CPPUNIT_ASSERT(occ >= 3); // see previous tests
925 _NS.Change_Directory("/Containers");
926 occ= _NS.Find("aComponentName");
927 CPPUNIT_ASSERT(occ == 1);
929 _NS.Change_Directory("/Containers");
930 occ= _NS.Find("UnknownCompnentName");
931 CPPUNIT_ASSERT(occ == 0);
934 // ============================================================================
938 // ============================================================================
941 NamingServiceTest::testCreateDirectory()
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));
948 bool ret = _NS.Create_Directory("/aaa/bbb/ccc/ddd/eee");
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_";
956 sprintf(anum,"%d",val);
958 _NS.Register(anEchoRef,name.c_str());
960 string dirname = "/aaa/bbb/ccc/ddd/eee/";
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());
968 ret = _NS.Create_Directory("/aaa/bbb/ccc/ddd/eee");
971 _NS.Change_Directory("/aaa/bbb");
972 ret = _NS.Create_Directory("cccccc/dddddd/eeeeee");
973 _NS.Register(anEchoRef,"echo_abcde");
976 _NS.Change_Directory("/aaa/bbb/cccccc/dddddd/eeeeee");
977 obj = _NS.Resolve("echo_abcde");
978 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
981 // ============================================================================
985 // ============================================================================
988 NamingServiceTest::testChangeDirectory()
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));
995 NSTEST::echo_var anEchoRef = myFactory->createInstance();
996 _NS.Register(anEchoRef,
997 "/Containers/theHostName/theContainerName/theComponentName");
999 NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
1000 _NS.Register(anEchoRef2,
1001 "/Containers/theHostName/aContainerName/aComponentName");
1003 NSTEST::echo_var anEchoRef3 = myFactory->createInstance();
1004 _NS.Register(anEchoRef3,
1005 "/Containers/theHostName/otherContainerName/theComponentName");
1007 NSTEST::echo_var anEchoRef4 = myFactory->createInstance();
1008 _NS.Register(anEchoRef4,
1009 "/Containers/anHostName/oneContainerName/theComponentName");
1011 _NS.Change_Directory("/Containers/theHostName/otherContainerName");
1012 obj = _NS.Resolve("theComponentName");
1013 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
1015 NSTEST::echo_var anEchoRefa = NSTEST::echo::_narrow(obj);
1016 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRefa));
1017 CPPUNIT_ASSERT(anEchoRefa->getId() == anEchoRef3->getId());
1020 // ============================================================================
1024 // ============================================================================
1027 NamingServiceTest::testCurrentDirectory()
1029 string path = "/aaa/bbb/ccc/ddd/eee";
1030 bool ret = _NS.Create_Directory(path.c_str());
1031 CPPUNIT_ASSERT(ret);
1033 _NS.Change_Directory(path.c_str());
1034 char* acurdir = _NS.Current_Directory();
1035 string curdir = acurdir;
1037 CPPUNIT_ASSERT(curdir == path);
1040 // ============================================================================
1044 // ============================================================================
1047 NamingServiceTest::testList()
1049 _NS.Change_Directory("/Containers/theHostName/theContainerName");
1051 _NS.Change_Directory("/Containers");
1055 // ============================================================================
1059 // ============================================================================
1062 NamingServiceTest::testListDirectory()
1064 _NS.Change_Directory("/Containers/theHostName/theContainerName");
1065 _NS.list_directory();
1066 _NS.Change_Directory("/Containers");
1067 _NS.list_directory();
1070 // ============================================================================
1074 // ============================================================================
1077 NamingServiceTest::testListDirectoryRecurs()
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();
1088 // ============================================================================
1092 // ============================================================================
1095 NamingServiceTest::testListSubdirs()
1097 _NS.Change_Directory("/Containers/theHostName/theContainerName");
1099 _NS.Change_Directory("/Containers");
1101 _NS.Change_Directory("/");
1104 // ============================================================================
1108 // ============================================================================
1111 NamingServiceTest::testDestroyName()
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));
1118 string path = "/Containers/theHostName/theContainerName/theComponentName";
1120 NSTEST::echo_var anEchoRef = myFactory->createInstance();
1121 _NS.Register(anEchoRef, path.c_str());
1123 obj=_NS.Resolve(path.c_str());
1124 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
1126 _NS.Destroy_Name(path.c_str());
1127 obj=_NS.Resolve(path.c_str());
1128 CPPUNIT_ASSERT(CORBA::is_nil(obj));
1131 // ============================================================================
1135 // ============================================================================
1138 NamingServiceTest::testDestroyDirectory()
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));
1145 string path = "/Containers/theHostName/theContainerName/theComponentName";
1147 NSTEST::echo_var anEchoRef = myFactory->createInstance();
1148 _NS.Register(anEchoRef, path.c_str());
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
1154 _NS.Destroy_Name(path.c_str());
1155 _NS.Destroy_Directory("/Containers/theHostName/theContainerName");
1156 _NS.Change_Directory("/Containers/theHostName");
1160 // ============================================================================
1162 * DestroyFullDirectory is not recursive
1163 * Need Housekeeping of /Containers for further tests !
1165 // ============================================================================
1167 void NamingServiceTest::_destroyDirectoryRecurs(string path)
1169 string current = path;
1171 if (_NS.Change_Directory(path.c_str()))
1173 vector<string> subdirs = _NS.list_subdirs();
1174 for (int i=0; i<subdirs.size(); i++)
1176 string subpath=path + "/" +subdirs[i];
1177 _destroyDirectoryRecurs(subpath);
1179 if (_NS.Change_Directory(path.c_str()))
1181 _NS.Destroy_FullDirectory(path.c_str());
1187 NamingServiceTest::testDestroyFullDirectory()
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("/");
1199 _NS.list_directory_recurs();
1202 // ============================================================================
1206 // ============================================================================
1209 NamingServiceTest::testGetIorAddr()
1211 char *root = _NS.getIORaddr();
1212 CORBA::Object_var obj = _orb->string_to_object(root);
1214 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
1217 // ============================================================================
1221 // ============================================================================
1224 // NamingServiceTest::()
1226 // CPPUNIT_ASSERT(0);