1 // Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 #include "NamingServiceTest.hxx"
23 #include "Utils_ORB_INIT.hxx"
24 #include "Utils_SINGLETON.hxx"
34 // --- uncomment to have some traces on standard error
35 // (useful only when adding new tests...)
39 #define MYDEVTRACE {std::cerr << __FILE__ << " [" << __LINE__ << "] : ";}
40 #define DEVTRACE(msg) {MYDEVTRACE; std::cerr<<msg<<std::endl<<std::flush;}
46 #define TRACEFILE "/tmp/traceUnitTest.log"
48 // ============================================================================
50 * a basic CORBA object implementation for use with namingService tests
52 // ============================================================================
54 NSTEST_echo_i::NSTEST_echo_i()
59 NSTEST_echo_i::NSTEST_echo_i(CORBA::Long num)
64 NSTEST_echo_i::~NSTEST_echo_i()
68 CORBA::Long NSTEST_echo_i::getId()
73 // ============================================================================
75 * a factory of CORBA objects for use with namingService tests
77 // ============================================================================
79 NSTEST_aFactory_i::NSTEST_aFactory_i()
84 NSTEST_aFactory_i::~NSTEST_aFactory_i()
88 NSTEST::echo_ptr NSTEST_aFactory_i::createInstance()
90 NSTEST_echo_i * anEcho = new NSTEST_echo_i(_num);
92 NSTEST::echo_var anEchoRef = anEcho->_this();
93 anEcho->_remove_ref();
94 return anEchoRef._retn();
97 // ============================================================================
100 * - delete preexisting trace classes if any
101 * - set trace on file
102 * Get or initialize the orb
103 * Create a SALOME_NamingService instance
105 // ============================================================================
108 NamingServiceTest::setUp()
110 LocalTraceBufferPool* bp1 = LocalTraceBufferPool::instance();
112 bp1->deleteInstance(bp1);
115 const char *theFileName = TRACEFILE;
121 CPPUNIT_ASSERT(! setenv("SALOME_trace",s.c_str(),1)); // 1: overwrite
124 // traceFile.open(theFileName, ios::out | ios::trunc);
125 traceFile.open(theFileName, ios::out | ios::app);
126 CPPUNIT_ASSERT(traceFile); // file created empty, then closed
129 bp1 = LocalTraceBufferPool::instance();
132 // --- Get or initialize the orb
135 char* _argv[] = {(char*)""};
136 ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance() ;
137 ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting());
138 _orb = init(_argc , _argv ) ;
140 // --- Create a SALOME_NamingService instance
144 // --- Create an NSTEST::factory
146 CORBA::Object_var obj = _orb->resolve_initial_references("RootPOA");
147 ASSERT(!CORBA::is_nil(obj));
148 _root_poa = PortableServer::POA::_narrow(obj);
149 _pman = _root_poa->the_POAManager();
150 _myFactory = new NSTEST_aFactory_i();
151 _myFactoryId = _root_poa->activate_object(_myFactory);
152 _factoryRef = _myFactory->_this();
154 _myFactory->_remove_ref();
158 // ============================================================================
160 * - delete trace classes
162 // ============================================================================
165 NamingServiceTest::tearDown()
168 LocalTraceBufferPool* bp1 = LocalTraceBufferPool::instance();
170 bp1->deleteInstance(bp1);
173 // ============================================================================
175 * Test default constructor: must be followed by a call to init_orb(ORB)
177 // ============================================================================
180 NamingServiceTest::testConstructorDefault()
182 SALOME_NamingService NS;
183 //CPPUNIT_ASSERT_THROW(NS.getIORaddr(),CORBA::Exception);
186 CORBA::String_var root = NS.getIORaddr();
187 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 CORBA::String_var root = NS.getIORaddr();
206 CORBA::Object_var obj = _orb->string_to_object(root);
207 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
209 CosNaming::NamingContext_var rootContext =
210 CosNaming::NamingContext::_narrow(obj);
211 CPPUNIT_ASSERT(!CORBA::is_nil(rootContext));
214 // ============================================================================
216 * Test Register and resolve of a single CORBA object with absolute pathname,
217 * without subdirectories
219 // ============================================================================
222 NamingServiceTest::testRegisterResolveAbsNoPath()
224 _NS.Register(_factoryRef,"/nstest_factory");
225 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
226 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
227 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
228 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
231 // ============================================================================
233 * Test Register and resolve of a single CORBA object with relative pathname,
234 * without subdirectories
236 // ============================================================================
239 NamingServiceTest::testRegisterResolveRelativeNoPath()
241 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
242 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
243 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
244 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
246 _NS.Create_Directory("/myContext");
247 _NS.Change_Directory("/myContext");
249 NSTEST::echo_var anEchoRef = myFactory->createInstance();
250 _NS.Register(anEchoRef,"echo_0");
252 obj = _NS.Resolve("echo_0");
253 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
254 NSTEST::echo_var anEchoRef2 = NSTEST::echo::_narrow(obj);
255 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef2));
256 CPPUNIT_ASSERT(anEchoRef->getId() == anEchoRef2->getId());
258 obj = _NS.Resolve("/myContext/echo_0");
259 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
260 NSTEST::echo_var anEchoRef3 = NSTEST::echo::_narrow(obj);
261 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef3));
262 CPPUNIT_ASSERT(anEchoRef->getId() == anEchoRef3->getId());
265 // ============================================================================
267 * Test Register and resolve of a single CORBA object with absolute pathname,
270 // ============================================================================
273 NamingServiceTest::testRegisterResolveAbsWithPath()
275 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
276 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
277 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
278 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
280 NSTEST::echo_var anEchoRef = myFactory->createInstance();
281 _NS.Register(anEchoRef,"/nstest/echo_0");
283 obj = _NS.Resolve("/nstest/echo_0");
284 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
285 NSTEST::echo_var anEchoRefa = NSTEST::echo::_narrow(obj);
286 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRefa));
287 CPPUNIT_ASSERT(anEchoRef->getId() == anEchoRefa->getId());
289 NSTEST::echo_var anEchoRef1 = myFactory->createInstance();
290 _NS.Register(anEchoRef1,"/nstest2/rep2/rep3/echo_1");
291 CPPUNIT_ASSERT(anEchoRef->getId() != anEchoRef1->getId());
293 obj = _NS.Resolve("/nstest2/rep2/rep3/echo_1");
294 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
295 NSTEST::echo_var anEchoRef1a = NSTEST::echo::_narrow(obj);
296 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef1a));
297 CPPUNIT_ASSERT(anEchoRef1->getId() == anEchoRef1a->getId());
299 NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
300 _NS.Register(anEchoRef2,"/nstest2/1/2/3/4/echo_1");
302 obj = _NS.Resolve("/nstest2/1/2/3/4/echo_1");
303 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
304 NSTEST::echo_var anEchoRef2a = NSTEST::echo::_narrow(obj);
305 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef2a));
306 CPPUNIT_ASSERT(anEchoRef2->getId() == anEchoRef2a->getId());
309 // ============================================================================
311 * Test Register and resolve of a single CORBA object with relative pathname,
313 * Relative Path is changed to the created subdirectory when Register()
315 // ============================================================================
318 NamingServiceTest::testRegisterResolveRelativeWithPath()
320 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
321 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
322 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
323 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
324 _NS.Create_Directory("/myContext");
325 _NS.Change_Directory("/myContext");
327 NSTEST::echo_var anEchoRef = myFactory->createInstance();
328 _NS.Register(anEchoRef,"subdir/echo_0");
330 obj = _NS.Resolve("echo_0");
331 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
332 NSTEST::echo_var anEchoRef2 = NSTEST::echo::_narrow(obj);
333 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef2));
335 obj = _NS.Resolve("/myContext/subdir/echo_0");
336 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
337 NSTEST::echo_var anEchoRef3 = NSTEST::echo::_narrow(obj);
338 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef3));
339 CPPUNIT_ASSERT(anEchoRef->getId() == anEchoRef3->getId());
341 _NS.Change_Directory("/myContext");
342 obj = _NS.Resolve("subdir/echo_0");
343 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
344 NSTEST::echo_var anEchoRef4 = NSTEST::echo::_narrow(obj);
345 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef4));
346 CPPUNIT_ASSERT(anEchoRef->getId() == anEchoRef4->getId());
349 // ============================================================================
351 * Test resolve with a name not known
353 // ============================================================================
356 NamingServiceTest::testResolveBadName()
358 CORBA::Object_var obj = _NS.Resolve("/notRegisteredName");
359 CPPUNIT_ASSERT(CORBA::is_nil(obj));
361 obj = _NS.Resolve("/nstest/notRegisteredName");
362 CPPUNIT_ASSERT(CORBA::is_nil(obj));
364 obj = _NS.Resolve("/unknownPath/notRegisteredName");
365 CPPUNIT_ASSERT(CORBA::is_nil(obj));
367 obj = _NS.Resolve("/anUnknown/ComplicatedPath/notRegisteredName");
368 CPPUNIT_ASSERT(CORBA::is_nil(obj));
371 // ============================================================================
373 * Test resolve with a name not known, with a relative path
375 // ============================================================================
378 NamingServiceTest::testResolveBadNameRelative()
380 _NS.Create_Directory("/myContext");
381 _NS.Change_Directory("/myContext");
383 CORBA::Object_var obj = _NS.Resolve("notRegisteredName");
384 CPPUNIT_ASSERT(CORBA::is_nil(obj));
386 obj = _NS.Resolve("unknownPath/notRegisteredName");
387 CPPUNIT_ASSERT(CORBA::is_nil(obj));
389 obj = _NS.Resolve("anUnknown/ComplicatedPath/notRegisteredName");
390 CPPUNIT_ASSERT(CORBA::is_nil(obj));
393 // ============================================================================
395 * Test register and resolve multiple objects, test resolveFirst.
396 * Register a few objects in /nstestfirst/echo_n where n is the object id.
397 * Resolve all the objects.
398 * ResolveFirst /nstestfirst/echo must give /nstestfirst/echo_i, corresponding
399 * to the first object.
401 // ============================================================================
406 NamingServiceTest::testResolveFirst()
408 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
409 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
410 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
411 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
415 for (int i=0; i<NB_OBJS; i++)
417 NSTEST::echo_var anEchoRef = myFactory->createInstance();
418 ref[i] = anEchoRef->getId();
419 string name = "/nstestfirst/echo_";
421 sprintf(anum,"%d",ref[i]);
423 _NS.Register(anEchoRef,name.c_str());
426 for (int i=0; i<NB_OBJS; i++)
428 string name = "/nstestfirst/echo_";
430 sprintf(anum,"%d",ref[i]);
432 obj = _NS.Resolve(name.c_str());
433 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
434 NSTEST::echo_var anEchoRef = NSTEST::echo::_narrow(obj);
435 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef));
436 CPPUNIT_ASSERT(anEchoRef->getId() == ref[i]);
439 string name = "/nstestfirst/echo";
440 obj = _NS.ResolveFirst(name.c_str());
441 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
442 NSTEST::echo_var anEchoRef = NSTEST::echo::_narrow(obj);
443 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef));
444 CPPUNIT_ASSERT(anEchoRef->getId() == ref[0]);
447 // ============================================================================
449 * Test register and resolve multiple objects, test resolveFirst, relative path
450 * Register a few objects in /nstestfirstrel/echo_n where n is the object id.
451 * Resolve all the objects.
452 * ResolveFirst echo with a relative path /nstestfirstrel must give
453 * /nstestfirst/echo_i, corresponding to the first object.
455 // ============================================================================
458 NamingServiceTest::testResolveFirstRelative()
460 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
461 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
462 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
463 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
467 for (int i=0; i<NB_OBJS; i++)
469 NSTEST::echo_var anEchoRef = myFactory->createInstance();
470 ref[i] = anEchoRef->getId();
471 string name = "/nstestfirstrel/echo_";
473 sprintf(anum,"%d",ref[i]);
475 _NS.Register(anEchoRef,name.c_str());
478 for (int i=0; i<NB_OBJS; i++)
480 _NS.Change_Directory("/nstestfirstrel");
481 string name = "echo_";
483 sprintf(anum,"%d",ref[i]);
485 obj = _NS.Resolve(name.c_str());
486 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
487 NSTEST::echo_var anEchoRef = NSTEST::echo::_narrow(obj);
488 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef));
489 CPPUNIT_ASSERT(anEchoRef->getId() == ref[i]);
492 _NS.Change_Directory("/nstestfirstrel");
493 string name = "echo";
494 obj = _NS.ResolveFirst(name.c_str());
495 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
498 // ============================================================================
500 * Test resolveFirst with unknown name
502 // ============================================================================
505 NamingServiceTest::testResolveFirstUnknown()
507 string name = "/notYeyRegistered";
508 CORBA::Object_var obj= _NS.ResolveFirst(name.c_str());
509 CPPUNIT_ASSERT(CORBA::is_nil(obj));
511 name = "/nstestfirst/notYeyRegistered";
512 obj = _NS.ResolveFirst(name.c_str());
513 CPPUNIT_ASSERT(CORBA::is_nil(obj));
515 name = "/rrr/sss/ttt/notYeyRegistered";
516 obj = _NS.ResolveFirst(name.c_str());
517 CPPUNIT_ASSERT(CORBA::is_nil(obj));
520 // ============================================================================
522 * Test resolveFirst with unknown name, relative Path
524 // ============================================================================
527 NamingServiceTest::testResolveFirstUnknownRelative()
529 _NS.Create_Directory("/myContext");
530 _NS.Change_Directory("/myContext");
532 string name = "RelnotYeyRegistered";
533 CORBA::Object_var obj = _NS.ResolveFirst(name.c_str());
534 CPPUNIT_ASSERT(CORBA::is_nil(obj));
536 name = "Relnstestfirst/notYeyRegistered";
537 obj = _NS.ResolveFirst(name.c_str());
538 CPPUNIT_ASSERT(CORBA::is_nil(obj));
540 name = "Relrrr/sss/ttt/notYeyRegistered";
541 obj = _NS.ResolveFirst(name.c_str());
542 CPPUNIT_ASSERT(CORBA::is_nil(obj));
545 // ============================================================================
547 * Test ResolveComponent works as specified
549 // ============================================================================
552 NamingServiceTest::testResolveComponentOK()
554 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
555 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
556 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
557 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
559 NSTEST::echo_var anEchoRef = myFactory->createInstance();
560 _NS.Register(anEchoRef,
561 "/Containers/theHostName/theContainerName/theComponentName");
563 obj = _NS.ResolveComponent("theHostName",
566 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
567 NSTEST::echo_var anEchoRefa = NSTEST::echo::_narrow(obj);
568 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRefa));
569 CPPUNIT_ASSERT(anEchoRefa->getId() == anEchoRef->getId());
572 NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
573 _NS.Register(anEchoRef2,
574 "/Containers/theHostName/theContainerName_2/theComponentName");
576 obj = _NS.ResolveComponent("theHostName",
580 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
581 NSTEST::echo_var anEchoRefb = NSTEST::echo::_narrow(obj);
582 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRefb));
583 CPPUNIT_ASSERT(anEchoRefb->getId() == anEchoRef2->getId());
586 // ============================================================================
588 * Test ResolveComponent gives nil pointer if hostname is not given (empty)
590 // ============================================================================
593 NamingServiceTest::testResolveComponentEmptyHostname()
595 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
596 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
597 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
598 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
600 NSTEST::echo_var anEchoRef = myFactory->createInstance();
601 _NS.Register(anEchoRef,
602 "/Containers/theHostName/theContainerName/theComponentName");
604 obj = _NS.ResolveComponent("",
607 CPPUNIT_ASSERT(CORBA::is_nil(obj));
610 // ============================================================================
612 * Test ResolveComponent gives nil pointer if hostname is unknown
614 // ============================================================================
617 NamingServiceTest::testResolveComponentUnknownHostname()
619 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
620 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
621 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
622 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
624 NSTEST::echo_var anEchoRef = myFactory->createInstance();
625 _NS.Register(anEchoRef,
626 "/Containers/theHostName/theContainerName/theComponentName");
628 obj = _NS.ResolveComponent("anUnknownHostName",
631 CPPUNIT_ASSERT(CORBA::is_nil(obj));
634 // ============================================================================
636 * Test ResolveComponent when containerName is empty.
637 * check bad hostname gives nil pointer.
638 * If componentName registered on a container from hostname, a component
639 * reference is found (the first one).
640 * Else give nil pointer.
642 // ============================================================================
645 NamingServiceTest::testResolveComponentEmptyContainerName()
647 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
648 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
649 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
650 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
652 NSTEST::echo_var anEchoRef = myFactory->createInstance();
653 _NS.Register(anEchoRef,
654 "/Containers/theHostName/theContainerName/theComponentName");
656 NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
657 _NS.Register(anEchoRef2,
658 "/Containers/theHostName/aContainerName/aComponentName");
660 NSTEST::echo_var anEchoRef3 = myFactory->createInstance();
661 _NS.Register(anEchoRef3,
662 "/Containers/theHostName/otherContainerName/theComponentName");
664 obj = _NS.ResolveComponent("anUnknownHostName",
667 CPPUNIT_ASSERT(CORBA::is_nil(obj));
669 obj = _NS.ResolveComponent("theHostName",
672 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
673 NSTEST::echo_var anEchoRefa = NSTEST::echo::_narrow(obj);
674 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRefa));
675 CPPUNIT_ASSERT(anEchoRefa->getId() == anEchoRef->getId());
678 // ============================================================================
682 // ============================================================================
685 NamingServiceTest::testResolveComponentUnknownContainerName()
687 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
688 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
689 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
690 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
692 NSTEST::echo_var anEchoRef = myFactory->createInstance();
693 _NS.Register(anEchoRef,
694 "/Containers/theHostName/theContainerName/theComponentName");
696 NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
697 _NS.Register(anEchoRef2,
698 "/Containers/theHostName/aContainerName/aComponentName");
700 NSTEST::echo_var anEchoRef3 = myFactory->createInstance();
701 _NS.Register(anEchoRef3,
702 "/Containers/theHostName/otherContainerName/theComponentName");
704 obj = _NS.ResolveComponent("theHostName",
705 "anUnknownContainerName",
707 CPPUNIT_ASSERT(CORBA::is_nil(obj));
710 // ============================================================================
714 // ============================================================================
717 NamingServiceTest::testResolveComponentEmptyComponentName()
719 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
720 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
721 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
722 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
724 NSTEST::echo_var anEchoRef = myFactory->createInstance();
725 _NS.Register(anEchoRef,
726 "/Containers/theHostName/theContainerName/theComponentName");
728 NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
729 _NS.Register(anEchoRef2,
730 "/Containers/theHostName/EmptyContainerName/");
732 obj = _NS.ResolveComponent("theHostName",
733 "EmptyContainerName",
735 CPPUNIT_ASSERT(CORBA::is_nil(obj));
738 // ============================================================================
742 // ============================================================================
745 NamingServiceTest::testResolveComponentUnknownComponentName()
747 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
748 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
749 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
750 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
752 NSTEST::echo_var anEchoRef = myFactory->createInstance();
753 _NS.Register(anEchoRef,
754 "/Containers/theHostName/theContainerName/theComponentName");
756 obj = _NS.ResolveComponent("theHostName",
758 "anUnknownComponentName");
759 CPPUNIT_ASSERT(CORBA::is_nil(obj));
762 // ============================================================================
764 * Test with a false number nbproc.
765 * A positive number not corresponding to a registered component gives nil ref.
766 * A negative number is not taken into account and may give a non nil ref.
768 // ============================================================================
771 NamingServiceTest::testResolveComponentFalseNbproc()
773 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
774 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
775 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
776 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
778 NSTEST::echo_var anEchoRef = myFactory->createInstance();
779 _NS.Register(anEchoRef,
780 "/Containers/theHostName/theContainerName/theComponentName");
782 obj = _NS.ResolveComponent("theHostName",
786 CPPUNIT_ASSERT(CORBA::is_nil(obj));
788 obj = _NS.ResolveComponent("theHostName",
792 CPPUNIT_ASSERT(! CORBA::is_nil(obj));
795 // ============================================================================
799 // ============================================================================
802 NamingServiceTest::testContainerName()
804 string ref0 = "FactoryServer";
805 string ret = _NS.ContainerName("");
806 CPPUNIT_ASSERT(ret == ref0);
808 ref0 = "MyContainerName";
809 ret = _NS.ContainerName(ref0.c_str());
810 CPPUNIT_ASSERT(ret == ref0);
813 // ============================================================================
817 // ============================================================================
820 NamingServiceTest::testContainerNameParams()
822 Engines::MachineParameters params;
823 params.container_name = "";
824 params.hostname = "";
827 params.cpu_clock = 0;
828 params.nb_proc_per_node = 0;
830 params.isMPI = false;
832 string ref0 = "FactoryServer";
833 string ret = _NS.ContainerName(params);
834 CPPUNIT_ASSERT(ret == ref0);
836 ref0 = "MyContainerName";
837 params.container_name = ref0.c_str();
838 ret = _NS.ContainerName(params);
839 CPPUNIT_ASSERT(ret == ref0);
842 // ============================================================================
846 // ============================================================================
849 NamingServiceTest::testBuildContainerNameForNS()
851 string ref0 = "/Containers/theHostName/theContainerName";
852 string ret = _NS.BuildContainerNameForNS("theContainerName","theHostName");
853 CPPUNIT_ASSERT(ret == ref0);
855 ref0 = "/Containers/theHostName/FactoryServer";
856 ret = _NS.BuildContainerNameForNS("","theHostName");
857 CPPUNIT_ASSERT(ret == ref0);
860 // ============================================================================
864 // ============================================================================
867 NamingServiceTest::testBuildContainerNameForNSParams()
869 Engines::MachineParameters params;
870 params.container_name = "";
871 params.hostname = "";
874 params.cpu_clock = 0;
875 params.nb_proc_per_node = 0;
877 params.isMPI = false;
879 params.container_name = "theContainerName";
880 string ref0 = "/Containers/theHostName/theContainerName";
881 string ret = _NS.BuildContainerNameForNS(params,"theHostName");
882 CPPUNIT_ASSERT(ret == ref0);
884 params.container_name = "";
885 ref0 = "/Containers/theHostName/FactoryServer";
886 ret = _NS.BuildContainerNameForNS(params,"theHostName");
887 CPPUNIT_ASSERT(ret == ref0);
890 // ============================================================================
894 // ============================================================================
897 NamingServiceTest::testFind()
899 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
900 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
901 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
902 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
904 NSTEST::echo_var anEchoRef = myFactory->createInstance();
905 _NS.Register(anEchoRef,
906 "/Containers/theHostName/theContainerName/theComponentName");
908 NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
909 _NS.Register(anEchoRef2,
910 "/Containers/theHostName/aContainerName/aComponentName");
912 NSTEST::echo_var anEchoRef3 = myFactory->createInstance();
913 _NS.Register(anEchoRef3,
914 "/Containers/theHostName/otherContainerName/theComponentName");
916 NSTEST::echo_var anEchoRef4 = myFactory->createInstance();
917 _NS.Register(anEchoRef4,
918 "/Containers/anHostName/oneContainerName/theComponentName");
920 _NS.Change_Directory("/Containers");
921 int occ= _NS.Find("theComponentName");
922 CPPUNIT_ASSERT(occ >= 3); // see previous tests
924 _NS.Change_Directory("/Containers");
925 occ= _NS.Find("aComponentName");
926 CPPUNIT_ASSERT(occ == 1);
928 _NS.Change_Directory("/Containers");
929 occ= _NS.Find("UnknownCompnentName");
930 CPPUNIT_ASSERT(occ == 0);
933 // ============================================================================
937 // ============================================================================
940 NamingServiceTest::testCreateDirectory()
942 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
943 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
944 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
945 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
947 bool ret = _NS.Create_Directory("/aaa/bbb/ccc/ddd/eee");
950 _NS.Change_Directory("/aaa/bbb/ccc/ddd/eee");
951 NSTEST::echo_var anEchoRef = myFactory->createInstance();
952 int val = anEchoRef->getId();
953 string name = "echo_";
955 sprintf(anum,"%d",val);
957 _NS.Register(anEchoRef,name.c_str());
959 string dirname = "/aaa/bbb/ccc/ddd/eee/";
961 obj = _NS.Resolve(dirname.c_str());
962 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
963 NSTEST::echo_var anEchoRef2 = NSTEST::echo::_narrow(obj);
964 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef2));
965 CPPUNIT_ASSERT(anEchoRef->getId() == anEchoRef2->getId());
967 ret = _NS.Create_Directory("/aaa/bbb/ccc/ddd/eee");
970 _NS.Change_Directory("/aaa/bbb");
971 ret = _NS.Create_Directory("cccccc/dddddd/eeeeee");
972 _NS.Register(anEchoRef,"echo_abcde");
975 _NS.Change_Directory("/aaa/bbb/cccccc/dddddd/eeeeee");
976 obj = _NS.Resolve("echo_abcde");
977 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
980 // ============================================================================
984 // ============================================================================
987 NamingServiceTest::testChangeDirectory()
989 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
990 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
991 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
992 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
994 NSTEST::echo_var anEchoRef = myFactory->createInstance();
995 _NS.Register(anEchoRef,
996 "/Containers/theHostName/theContainerName/theComponentName");
998 NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
999 _NS.Register(anEchoRef2,
1000 "/Containers/theHostName/aContainerName/aComponentName");
1002 NSTEST::echo_var anEchoRef3 = myFactory->createInstance();
1003 _NS.Register(anEchoRef3,
1004 "/Containers/theHostName/otherContainerName/theComponentName");
1006 NSTEST::echo_var anEchoRef4 = myFactory->createInstance();
1007 _NS.Register(anEchoRef4,
1008 "/Containers/anHostName/oneContainerName/theComponentName");
1010 _NS.Change_Directory("/Containers/theHostName/otherContainerName");
1011 obj = _NS.Resolve("theComponentName");
1012 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
1014 NSTEST::echo_var anEchoRefa = NSTEST::echo::_narrow(obj);
1015 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRefa));
1016 CPPUNIT_ASSERT(anEchoRefa->getId() == anEchoRef3->getId());
1019 // ============================================================================
1023 // ============================================================================
1026 NamingServiceTest::testCurrentDirectory()
1028 string path = "/aaa/bbb/ccc/ddd/eee";
1029 bool ret = _NS.Create_Directory(path.c_str());
1030 CPPUNIT_ASSERT(ret);
1032 _NS.Change_Directory(path.c_str());
1033 char* acurdir = _NS.Current_Directory();
1034 string curdir = acurdir;
1036 CPPUNIT_ASSERT(curdir == path);
1039 // ============================================================================
1043 // ============================================================================
1046 NamingServiceTest::testList()
1048 _NS.Change_Directory("/Containers/theHostName/theContainerName");
1050 _NS.Change_Directory("/Containers");
1054 // ============================================================================
1058 // ============================================================================
1061 NamingServiceTest::testListDirectory()
1063 _NS.Change_Directory("/Containers/theHostName/theContainerName");
1064 _NS.list_directory();
1065 _NS.Change_Directory("/Containers");
1066 _NS.list_directory();
1069 // ============================================================================
1073 // ============================================================================
1076 NamingServiceTest::testListDirectoryRecurs()
1078 _NS.Change_Directory("/Containers/theHostName/theContainerName");
1079 _NS.list_directory_recurs();
1080 _NS.Change_Directory("/Containers");
1081 _NS.list_directory_recurs();
1082 _NS.Change_Directory("/");
1083 _NS.list_directory_recurs();
1087 // ============================================================================
1091 // ============================================================================
1094 NamingServiceTest::testListSubdirs()
1096 _NS.Change_Directory("/Containers/theHostName/theContainerName");
1098 _NS.Change_Directory("/Containers");
1100 _NS.Change_Directory("/");
1103 // ============================================================================
1107 // ============================================================================
1110 NamingServiceTest::testDestroyName()
1112 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
1113 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
1114 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
1115 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
1117 string path = "/Containers/theHostName/theContainerName/theComponentName";
1119 NSTEST::echo_var anEchoRef = myFactory->createInstance();
1120 _NS.Register(anEchoRef, path.c_str());
1122 obj=_NS.Resolve(path.c_str());
1123 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
1125 _NS.Destroy_Name(path.c_str());
1126 obj=_NS.Resolve(path.c_str());
1127 CPPUNIT_ASSERT(CORBA::is_nil(obj));
1130 // ============================================================================
1134 // ============================================================================
1137 NamingServiceTest::testDestroyDirectory()
1139 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
1140 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
1141 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
1142 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
1144 string path = "/Containers/theHostName/theContainerName/theComponentName";
1146 NSTEST::echo_var anEchoRef = myFactory->createInstance();
1147 _NS.Register(anEchoRef, path.c_str());
1149 _NS.Destroy_Directory("/Containers/theHostName/theContainerName");
1150 obj=_NS.Resolve(path.c_str());
1151 CPPUNIT_ASSERT(!CORBA::is_nil(obj)); // directory not empty: not destroyed
1153 _NS.Destroy_Name(path.c_str());
1154 _NS.Destroy_Directory("/Containers/theHostName/theContainerName");
1155 _NS.Change_Directory("/Containers/theHostName");
1159 // ============================================================================
1161 * DestroyFullDirectory is not recursive
1162 * Need Housekeeping of /Containers for further tests !
1164 // ============================================================================
1166 void NamingServiceTest::_destroyDirectoryRecurs(string path)
1168 string current = path;
1170 if (_NS.Change_Directory(path.c_str()))
1172 vector<string> subdirs = _NS.list_subdirs();
1173 for (int i=0; i<subdirs.size(); i++)
1175 string subpath=path + "/" +subdirs[i];
1176 _destroyDirectoryRecurs(subpath);
1178 if (_NS.Change_Directory(path.c_str()))
1180 _NS.Destroy_FullDirectory(path.c_str());
1186 NamingServiceTest::testDestroyFullDirectory()
1188 _NS.Destroy_FullDirectory("/Containers");
1189 CPPUNIT_ASSERT(_NS.Change_Directory("/Containers"));
1190 vector<string> subdirs = _NS.list_subdirs();
1191 CPPUNIT_ASSERT(subdirs.size() >0);
1192 _NS.list_directory_recurs();
1193 string path = "/Containers";
1194 _destroyDirectoryRecurs(path);
1195 CPPUNIT_ASSERT( ! _NS.Change_Directory("/Containers"));
1196 _NS.Change_Directory("/");
1198 _NS.list_directory_recurs();
1201 // ============================================================================
1205 // ============================================================================
1208 NamingServiceTest::testGetIorAddr()
1210 CORBA::String_var root = _NS.getIORaddr();
1211 CORBA::Object_var obj = _orb->string_to_object(root);
1212 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
1215 // ============================================================================
1219 // ============================================================================
1222 // NamingServiceTest::()
1224 // CPPUNIT_ASSERT(0);