1 // Copyright (C) 2007-2012 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
23 #include "NamingServiceTest.hxx"
24 #include "Utils_ORB_INIT.hxx"
25 #include "Utils_SINGLETON.hxx"
26 #include "Basics_Utils.hxx"
27 #include "SALOME_LifeCycleCORBA.hxx"
36 // --- uncomment to have some traces on standard error
37 // (useful only when adding new tests...)
41 #define MYDEVTRACE {std::cerr << __FILE__ << " [" << __LINE__ << "] : ";}
42 #define DEVTRACE(msg) {MYDEVTRACE; std::cerr<<msg<<std::endl<<std::flush;}
49 #define setenv Kernel_Utils::setenv
52 #define TRACEFILE "/tmp/traceUnitTest.log"
54 // ============================================================================
56 * a basic CORBA object implementation for use with namingService tests
58 // ============================================================================
60 NSTEST_echo_i::NSTEST_echo_i()
65 NSTEST_echo_i::NSTEST_echo_i(CORBA::Long num)
70 NSTEST_echo_i::~NSTEST_echo_i()
74 CORBA::Long NSTEST_echo_i::getId()
79 // ============================================================================
81 * a factory of CORBA objects for use with namingService tests
83 // ============================================================================
85 NSTEST_aFactory_i::NSTEST_aFactory_i()
90 NSTEST_aFactory_i::~NSTEST_aFactory_i()
94 NSTEST::echo_ptr NSTEST_aFactory_i::createInstance()
96 NSTEST_echo_i * anEcho = new NSTEST_echo_i(_num);
98 NSTEST::echo_var anEchoRef = anEcho->_this();
99 anEcho->_remove_ref();
100 return anEchoRef._retn();
103 // ============================================================================
106 * - delete preexisting trace classes if any
107 * - set trace on file
108 * Get or initialize the orb
109 * Create a SALOME_NamingService instance
111 // ============================================================================
114 NamingServiceTest::setUp()
116 LocalTraceBufferPool* bp1 = LocalTraceBufferPool::instance();
118 bp1->deleteInstance(bp1);
121 const char *theFileName = TRACEFILE;
123 std::string s = "file:";
127 CPPUNIT_ASSERT(! setenv("SALOME_trace",s.c_str(),1)); // 1: overwrite
129 std::ofstream traceFile;
130 // traceFile.open(theFileName, ios::out | ios::trunc);
131 traceFile.open(theFileName, std::ios::out | std::ios::app);
132 CPPUNIT_ASSERT(traceFile); // file created empty, then closed
135 bp1 = LocalTraceBufferPool::instance();
138 // --- Get or initialize the orb
141 char* _argv[] = {(char*)""};
142 ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance() ;
143 ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting());
144 _orb = init(_argc , _argv ) ;
146 // --- Create a SALOME_NamingService instance
150 // --- Create an NSTEST::factory
152 CORBA::Object_var obj = _orb->resolve_initial_references("RootPOA");
153 ASSERT(!CORBA::is_nil(obj));
154 _root_poa = PortableServer::POA::_narrow(obj);
155 _pman = _root_poa->the_POAManager();
156 _myFactory = new NSTEST_aFactory_i();
157 _myFactoryId = _root_poa->activate_object(_myFactory);
158 _factoryRef = _myFactory->_this();
160 _myFactory->_remove_ref();
164 // ============================================================================
166 * - delete trace classes
168 // ============================================================================
171 NamingServiceTest::tearDown()
174 LocalTraceBufferPool* bp1 = LocalTraceBufferPool::instance();
176 bp1->deleteInstance(bp1);
179 // ============================================================================
181 * Test default constructor: must be followed by a call to init_orb(ORB)
183 // ============================================================================
186 NamingServiceTest::testConstructorDefault()
188 SALOME_NamingService NS;
189 //CPPUNIT_ASSERT_THROW(NS.getIORaddr(),CORBA::Exception);
192 CORBA::String_var root = NS.getIORaddr();
193 CORBA::Object_var obj = _orb->string_to_object(root);
194 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
196 CosNaming::NamingContext_var rootContext =
197 CosNaming::NamingContext::_narrow(obj);
198 CPPUNIT_ASSERT(!CORBA::is_nil(rootContext));
201 // ============================================================================
203 * Test constructor with ORB parameter
205 // ============================================================================
208 NamingServiceTest::testConstructorOrb()
210 SALOME_NamingService NS(_orb);
211 CORBA::String_var root = NS.getIORaddr();
212 CORBA::Object_var obj = _orb->string_to_object(root);
213 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
215 CosNaming::NamingContext_var rootContext =
216 CosNaming::NamingContext::_narrow(obj);
217 CPPUNIT_ASSERT(!CORBA::is_nil(rootContext));
220 // ============================================================================
222 * Test Register and resolve of a single CORBA object with absolute pathname,
223 * without subdirectories
225 // ============================================================================
228 NamingServiceTest::testRegisterResolveAbsNoPath()
230 _NS.Register(_factoryRef,"/nstest_factory");
231 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
232 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
233 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
234 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
237 // ============================================================================
239 * Test Register and resolve of a single CORBA object with relative pathname,
240 * without subdirectories
242 // ============================================================================
245 NamingServiceTest::testRegisterResolveRelativeNoPath()
247 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
248 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
249 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
250 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
252 _NS.Create_Directory("/myContext");
253 _NS.Change_Directory("/myContext");
255 NSTEST::echo_var anEchoRef = myFactory->createInstance();
256 _NS.Register(anEchoRef,"echo_0");
258 obj = _NS.Resolve("echo_0");
259 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
260 NSTEST::echo_var anEchoRef2 = NSTEST::echo::_narrow(obj);
261 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef2));
262 CPPUNIT_ASSERT(anEchoRef->getId() == anEchoRef2->getId());
264 obj = _NS.Resolve("/myContext/echo_0");
265 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
266 NSTEST::echo_var anEchoRef3 = NSTEST::echo::_narrow(obj);
267 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef3));
268 CPPUNIT_ASSERT(anEchoRef->getId() == anEchoRef3->getId());
271 // ============================================================================
273 * Test Register and resolve of a single CORBA object with absolute pathname,
276 // ============================================================================
279 NamingServiceTest::testRegisterResolveAbsWithPath()
281 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
282 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
283 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
284 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
286 NSTEST::echo_var anEchoRef = myFactory->createInstance();
287 _NS.Register(anEchoRef,"/nstest/echo_0");
289 obj = _NS.Resolve("/nstest/echo_0");
290 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
291 NSTEST::echo_var anEchoRefa = NSTEST::echo::_narrow(obj);
292 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRefa));
293 CPPUNIT_ASSERT(anEchoRef->getId() == anEchoRefa->getId());
295 NSTEST::echo_var anEchoRef1 = myFactory->createInstance();
296 _NS.Register(anEchoRef1,"/nstest2/rep2/rep3/echo_1");
297 CPPUNIT_ASSERT(anEchoRef->getId() != anEchoRef1->getId());
299 obj = _NS.Resolve("/nstest2/rep2/rep3/echo_1");
300 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
301 NSTEST::echo_var anEchoRef1a = NSTEST::echo::_narrow(obj);
302 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef1a));
303 CPPUNIT_ASSERT(anEchoRef1->getId() == anEchoRef1a->getId());
305 NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
306 _NS.Register(anEchoRef2,"/nstest2/1/2/3/4/echo_1");
308 obj = _NS.Resolve("/nstest2/1/2/3/4/echo_1");
309 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
310 NSTEST::echo_var anEchoRef2a = NSTEST::echo::_narrow(obj);
311 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef2a));
312 CPPUNIT_ASSERT(anEchoRef2->getId() == anEchoRef2a->getId());
315 // ============================================================================
317 * Test Register and resolve of a single CORBA object with relative pathname,
319 * Relative Path is changed to the created subdirectory when Register()
321 // ============================================================================
324 NamingServiceTest::testRegisterResolveRelativeWithPath()
326 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
327 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
328 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
329 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
330 _NS.Create_Directory("/myContext");
331 _NS.Change_Directory("/myContext");
333 NSTEST::echo_var anEchoRef = myFactory->createInstance();
334 _NS.Register(anEchoRef,"subdir/echo_0");
336 obj = _NS.Resolve("echo_0");
337 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
338 NSTEST::echo_var anEchoRef2 = NSTEST::echo::_narrow(obj);
339 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef2));
341 obj = _NS.Resolve("/myContext/subdir/echo_0");
342 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
343 NSTEST::echo_var anEchoRef3 = NSTEST::echo::_narrow(obj);
344 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef3));
345 CPPUNIT_ASSERT(anEchoRef->getId() == anEchoRef3->getId());
347 _NS.Change_Directory("/myContext");
348 obj = _NS.Resolve("subdir/echo_0");
349 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
350 NSTEST::echo_var anEchoRef4 = NSTEST::echo::_narrow(obj);
351 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef4));
352 CPPUNIT_ASSERT(anEchoRef->getId() == anEchoRef4->getId());
355 // ============================================================================
357 * Test resolve with a name not known
359 // ============================================================================
362 NamingServiceTest::testResolveBadName()
364 CORBA::Object_var obj = _NS.Resolve("/notRegisteredName");
365 CPPUNIT_ASSERT(CORBA::is_nil(obj));
367 obj = _NS.Resolve("/nstest/notRegisteredName");
368 CPPUNIT_ASSERT(CORBA::is_nil(obj));
370 obj = _NS.Resolve("/unknownPath/notRegisteredName");
371 CPPUNIT_ASSERT(CORBA::is_nil(obj));
373 obj = _NS.Resolve("/anUnknown/ComplicatedPath/notRegisteredName");
374 CPPUNIT_ASSERT(CORBA::is_nil(obj));
377 // ============================================================================
379 * Test resolve with a name not known, with a relative path
381 // ============================================================================
384 NamingServiceTest::testResolveBadNameRelative()
386 _NS.Create_Directory("/myContext");
387 _NS.Change_Directory("/myContext");
389 CORBA::Object_var obj = _NS.Resolve("notRegisteredName");
390 CPPUNIT_ASSERT(CORBA::is_nil(obj));
392 obj = _NS.Resolve("unknownPath/notRegisteredName");
393 CPPUNIT_ASSERT(CORBA::is_nil(obj));
395 obj = _NS.Resolve("anUnknown/ComplicatedPath/notRegisteredName");
396 CPPUNIT_ASSERT(CORBA::is_nil(obj));
399 // ============================================================================
401 * Test register and resolve multiple objects, test resolveFirst.
402 * Register a few objects in /nstestfirst/echo_n where n is the object id.
403 * Resolve all the objects.
404 * ResolveFirst /nstestfirst/echo must give /nstestfirst/echo_i, corresponding
405 * to the first object.
407 // ============================================================================
412 NamingServiceTest::testResolveFirst()
414 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
415 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
416 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
417 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
421 for (int i=0; i<NB_OBJS; i++)
423 NSTEST::echo_var anEchoRef = myFactory->createInstance();
424 ref[i] = anEchoRef->getId();
425 std::string name = "/nstestfirst/echo_";
427 sprintf(anum,"%d",ref[i]);
429 _NS.Register(anEchoRef,name.c_str());
432 for (int i=0; i<NB_OBJS; i++)
434 std::string name = "/nstestfirst/echo_";
436 sprintf(anum,"%d",ref[i]);
438 obj = _NS.Resolve(name.c_str());
439 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
440 NSTEST::echo_var anEchoRef = NSTEST::echo::_narrow(obj);
441 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef));
442 CPPUNIT_ASSERT(anEchoRef->getId() == ref[i]);
445 std::string name = "/nstestfirst/echo";
446 obj = _NS.ResolveFirst(name.c_str());
447 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
448 NSTEST::echo_var anEchoRef = NSTEST::echo::_narrow(obj);
449 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef));
450 CPPUNIT_ASSERT(anEchoRef->getId() == ref[0]);
453 // ============================================================================
455 * Test register and resolve multiple objects, test resolveFirst, relative path
456 * Register a few objects in /nstestfirstrel/echo_n where n is the object id.
457 * Resolve all the objects.
458 * ResolveFirst echo with a relative path /nstestfirstrel must give
459 * /nstestfirst/echo_i, corresponding to the first object.
461 // ============================================================================
464 NamingServiceTest::testResolveFirstRelative()
466 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
467 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
468 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
469 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
473 for (int i=0; i<NB_OBJS; i++)
475 NSTEST::echo_var anEchoRef = myFactory->createInstance();
476 ref[i] = anEchoRef->getId();
477 std::string name = "/nstestfirstrel/echo_";
479 sprintf(anum,"%d",ref[i]);
481 _NS.Register(anEchoRef,name.c_str());
484 for (int i=0; i<NB_OBJS; i++)
486 _NS.Change_Directory("/nstestfirstrel");
487 std::string name = "echo_";
489 sprintf(anum,"%d",ref[i]);
491 obj = _NS.Resolve(name.c_str());
492 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
493 NSTEST::echo_var anEchoRef = NSTEST::echo::_narrow(obj);
494 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef));
495 CPPUNIT_ASSERT(anEchoRef->getId() == ref[i]);
498 _NS.Change_Directory("/nstestfirstrel");
499 std::string name = "echo";
500 obj = _NS.ResolveFirst(name.c_str());
501 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
504 // ============================================================================
506 * Test resolveFirst with unknown name
508 // ============================================================================
511 NamingServiceTest::testResolveFirstUnknown()
513 std::string name = "/notYeyRegistered";
514 CORBA::Object_var obj= _NS.ResolveFirst(name.c_str());
515 CPPUNIT_ASSERT(CORBA::is_nil(obj));
517 name = "/nstestfirst/notYeyRegistered";
518 obj = _NS.ResolveFirst(name.c_str());
519 CPPUNIT_ASSERT(CORBA::is_nil(obj));
521 name = "/rrr/sss/ttt/notYeyRegistered";
522 obj = _NS.ResolveFirst(name.c_str());
523 CPPUNIT_ASSERT(CORBA::is_nil(obj));
526 // ============================================================================
528 * Test resolveFirst with unknown name, relative Path
530 // ============================================================================
533 NamingServiceTest::testResolveFirstUnknownRelative()
535 _NS.Create_Directory("/myContext");
536 _NS.Change_Directory("/myContext");
538 std::string name = "RelnotYeyRegistered";
539 CORBA::Object_var obj = _NS.ResolveFirst(name.c_str());
540 CPPUNIT_ASSERT(CORBA::is_nil(obj));
542 name = "Relnstestfirst/notYeyRegistered";
543 obj = _NS.ResolveFirst(name.c_str());
544 CPPUNIT_ASSERT(CORBA::is_nil(obj));
546 name = "Relrrr/sss/ttt/notYeyRegistered";
547 obj = _NS.ResolveFirst(name.c_str());
548 CPPUNIT_ASSERT(CORBA::is_nil(obj));
551 // ============================================================================
553 * Test ResolveComponent works as specified
555 // ============================================================================
558 NamingServiceTest::testResolveComponentOK()
560 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
561 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
562 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
563 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
565 NSTEST::echo_var anEchoRef = myFactory->createInstance();
566 _NS.Register(anEchoRef,
567 "/Containers/theHostName/theContainerName/theComponentName");
569 obj = _NS.ResolveComponent("theHostName",
572 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
573 NSTEST::echo_var anEchoRefa = NSTEST::echo::_narrow(obj);
574 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRefa));
575 CPPUNIT_ASSERT(anEchoRefa->getId() == anEchoRef->getId());
578 NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
579 _NS.Register(anEchoRef2,
580 "/Containers/theHostName/theContainerName_2/theComponentName");
582 obj = _NS.ResolveComponent("theHostName",
586 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
587 NSTEST::echo_var anEchoRefb = NSTEST::echo::_narrow(obj);
588 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRefb));
589 CPPUNIT_ASSERT(anEchoRefb->getId() == anEchoRef2->getId());
592 // ============================================================================
594 * Test ResolveComponent gives nil pointer if hostname is not given (empty)
596 // ============================================================================
599 NamingServiceTest::testResolveComponentEmptyHostname()
601 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
602 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
603 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
604 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
606 NSTEST::echo_var anEchoRef = myFactory->createInstance();
607 _NS.Register(anEchoRef,
608 "/Containers/theHostName/theContainerName/theComponentName");
610 obj = _NS.ResolveComponent("",
613 CPPUNIT_ASSERT(CORBA::is_nil(obj));
616 // ============================================================================
618 * Test ResolveComponent gives nil pointer if hostname is unknown
620 // ============================================================================
623 NamingServiceTest::testResolveComponentUnknownHostname()
625 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
626 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
627 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
628 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
630 NSTEST::echo_var anEchoRef = myFactory->createInstance();
631 _NS.Register(anEchoRef,
632 "/Containers/theHostName/theContainerName/theComponentName");
634 obj = _NS.ResolveComponent("anUnknownHostName",
637 CPPUNIT_ASSERT(CORBA::is_nil(obj));
640 // ============================================================================
642 * Test ResolveComponent when containerName is empty.
643 * check bad hostname gives nil pointer.
644 * If componentName registered on a container from hostname, a component
645 * reference is found (the first one).
646 * Else give nil pointer.
648 // ============================================================================
651 NamingServiceTest::testResolveComponentEmptyContainerName()
653 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
654 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
655 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
656 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
658 NSTEST::echo_var anEchoRef = myFactory->createInstance();
659 _NS.Register(anEchoRef,
660 "/Containers/theHostName/theContainerName/theComponentName");
662 NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
663 _NS.Register(anEchoRef2,
664 "/Containers/theHostName/aContainerName/aComponentName");
666 NSTEST::echo_var anEchoRef3 = myFactory->createInstance();
667 _NS.Register(anEchoRef3,
668 "/Containers/theHostName/otherContainerName/theComponentName");
670 obj = _NS.ResolveComponent("anUnknownHostName",
673 CPPUNIT_ASSERT(CORBA::is_nil(obj));
675 obj = _NS.ResolveComponent("theHostName",
678 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
679 NSTEST::echo_var anEchoRefa = NSTEST::echo::_narrow(obj);
680 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRefa));
681 CPPUNIT_ASSERT(anEchoRefa->getId() == anEchoRef->getId());
684 // ============================================================================
688 // ============================================================================
691 NamingServiceTest::testResolveComponentUnknownContainerName()
693 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
694 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
695 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
696 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
698 NSTEST::echo_var anEchoRef = myFactory->createInstance();
699 _NS.Register(anEchoRef,
700 "/Containers/theHostName/theContainerName/theComponentName");
702 NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
703 _NS.Register(anEchoRef2,
704 "/Containers/theHostName/aContainerName/aComponentName");
706 NSTEST::echo_var anEchoRef3 = myFactory->createInstance();
707 _NS.Register(anEchoRef3,
708 "/Containers/theHostName/otherContainerName/theComponentName");
710 obj = _NS.ResolveComponent("theHostName",
711 "anUnknownContainerName",
713 CPPUNIT_ASSERT(CORBA::is_nil(obj));
716 // ============================================================================
720 // ============================================================================
723 NamingServiceTest::testResolveComponentEmptyComponentName()
725 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
726 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
727 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
728 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
730 NSTEST::echo_var anEchoRef = myFactory->createInstance();
731 _NS.Register(anEchoRef,
732 "/Containers/theHostName/theContainerName/theComponentName");
734 NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
735 _NS.Register(anEchoRef2,
736 "/Containers/theHostName/EmptyContainerName/");
738 obj = _NS.ResolveComponent("theHostName",
739 "EmptyContainerName",
741 CPPUNIT_ASSERT(CORBA::is_nil(obj));
744 // ============================================================================
748 // ============================================================================
751 NamingServiceTest::testResolveComponentUnknownComponentName()
753 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
754 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
755 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
756 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
758 NSTEST::echo_var anEchoRef = myFactory->createInstance();
759 _NS.Register(anEchoRef,
760 "/Containers/theHostName/theContainerName/theComponentName");
762 obj = _NS.ResolveComponent("theHostName",
764 "anUnknownComponentName");
765 CPPUNIT_ASSERT(CORBA::is_nil(obj));
768 // ============================================================================
770 * Test with a false number nbproc.
771 * A positive number not corresponding to a registered component gives nil ref.
772 * A negative number is not taken into account and may give a non nil ref.
774 // ============================================================================
777 NamingServiceTest::testResolveComponentFalseNbproc()
779 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
780 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
781 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
782 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
784 NSTEST::echo_var anEchoRef = myFactory->createInstance();
785 _NS.Register(anEchoRef,
786 "/Containers/theHostName/theContainerName/theComponentName");
788 obj = _NS.ResolveComponent("theHostName",
792 CPPUNIT_ASSERT(CORBA::is_nil(obj));
794 obj = _NS.ResolveComponent("theHostName",
798 CPPUNIT_ASSERT(! CORBA::is_nil(obj));
801 // ============================================================================
805 // ============================================================================
808 NamingServiceTest::testContainerName()
810 std::string ref0 = "FactoryServer";
811 std::string ret = _NS.ContainerName("");
812 CPPUNIT_ASSERT(ret == ref0);
814 ref0 = "MyContainerName";
815 ret = _NS.ContainerName(ref0.c_str());
816 CPPUNIT_ASSERT(ret == ref0);
819 // ============================================================================
823 // ============================================================================
826 NamingServiceTest::testContainerNameParams()
828 Engines::ContainerParameters params;
829 SALOME_LifeCycleCORBA::preSet(params);
831 std::string ref0 = "FactoryServer";
832 std::string ret = _NS.ContainerName(params);
833 CPPUNIT_ASSERT(ret == ref0);
835 ref0 = "MyContainerName";
836 params.container_name = ref0.c_str();
837 ret = _NS.ContainerName(params);
838 CPPUNIT_ASSERT(ret == ref0);
841 // ============================================================================
845 // ============================================================================
848 NamingServiceTest::testBuildContainerNameForNS()
850 std::string ref0 = "/Containers/theHostName/theContainerName";
851 std::string ret = _NS.BuildContainerNameForNS("theContainerName","theHostName");
852 CPPUNIT_ASSERT(ret == ref0);
854 ref0 = "/Containers/theHostName/FactoryServer";
855 ret = _NS.BuildContainerNameForNS("","theHostName");
856 CPPUNIT_ASSERT(ret == ref0);
859 // ============================================================================
863 // ============================================================================
866 NamingServiceTest::testBuildContainerNameForNSParams()
868 Engines::ContainerParameters params;
869 SALOME_LifeCycleCORBA::preSet(params);
871 params.container_name = "theContainerName";
872 std::string ref0 = "/Containers/theHostName/theContainerName";
873 std::string ret = _NS.BuildContainerNameForNS(params,"theHostName");
874 CPPUNIT_ASSERT(ret == ref0);
876 params.container_name = "";
877 ref0 = "/Containers/theHostName/FactoryServer";
878 ret = _NS.BuildContainerNameForNS(params,"theHostName");
879 CPPUNIT_ASSERT(ret == ref0);
882 // ============================================================================
886 // ============================================================================
889 NamingServiceTest::testFind()
891 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
892 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
893 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
894 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
896 NSTEST::echo_var anEchoRef = myFactory->createInstance();
897 _NS.Register(anEchoRef,
898 "/Containers/theHostName/theContainerName/theComponentName");
900 NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
901 _NS.Register(anEchoRef2,
902 "/Containers/theHostName/aContainerName/aComponentName");
904 NSTEST::echo_var anEchoRef3 = myFactory->createInstance();
905 _NS.Register(anEchoRef3,
906 "/Containers/theHostName/otherContainerName/theComponentName");
908 NSTEST::echo_var anEchoRef4 = myFactory->createInstance();
909 _NS.Register(anEchoRef4,
910 "/Containers/anHostName/oneContainerName/theComponentName");
912 _NS.Change_Directory("/Containers");
913 int occ= _NS.Find("theComponentName");
914 CPPUNIT_ASSERT(occ >= 3); // see previous tests
916 _NS.Change_Directory("/Containers");
917 occ= _NS.Find("aComponentName");
918 CPPUNIT_ASSERT(occ == 1);
920 _NS.Change_Directory("/Containers");
921 occ= _NS.Find("UnknownCompnentName");
922 CPPUNIT_ASSERT(occ == 0);
925 // ============================================================================
929 // ============================================================================
932 NamingServiceTest::testCreateDirectory()
934 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
935 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
936 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
937 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
939 bool ret = _NS.Create_Directory("/aaa/bbb/ccc/ddd/eee");
942 _NS.Change_Directory("/aaa/bbb/ccc/ddd/eee");
943 NSTEST::echo_var anEchoRef = myFactory->createInstance();
944 int val = anEchoRef->getId();
945 std::string name = "echo_";
947 sprintf(anum,"%d",val);
949 _NS.Register(anEchoRef,name.c_str());
951 std::string dirname = "/aaa/bbb/ccc/ddd/eee/";
953 obj = _NS.Resolve(dirname.c_str());
954 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
955 NSTEST::echo_var anEchoRef2 = NSTEST::echo::_narrow(obj);
956 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRef2));
957 CPPUNIT_ASSERT(anEchoRef->getId() == anEchoRef2->getId());
959 ret = _NS.Create_Directory("/aaa/bbb/ccc/ddd/eee");
962 _NS.Change_Directory("/aaa/bbb");
963 ret = _NS.Create_Directory("cccccc/dddddd/eeeeee");
964 _NS.Register(anEchoRef,"echo_abcde");
967 _NS.Change_Directory("/aaa/bbb/cccccc/dddddd/eeeeee");
968 obj = _NS.Resolve("echo_abcde");
969 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
972 // ============================================================================
976 // ============================================================================
979 NamingServiceTest::testChangeDirectory()
981 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
982 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
983 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
984 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
986 NSTEST::echo_var anEchoRef = myFactory->createInstance();
987 _NS.Register(anEchoRef,
988 "/Containers/theHostName/theContainerName/theComponentName");
990 NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
991 _NS.Register(anEchoRef2,
992 "/Containers/theHostName/aContainerName/aComponentName");
994 NSTEST::echo_var anEchoRef3 = myFactory->createInstance();
995 _NS.Register(anEchoRef3,
996 "/Containers/theHostName/otherContainerName/theComponentName");
998 NSTEST::echo_var anEchoRef4 = myFactory->createInstance();
999 _NS.Register(anEchoRef4,
1000 "/Containers/anHostName/oneContainerName/theComponentName");
1002 _NS.Change_Directory("/Containers/theHostName/otherContainerName");
1003 obj = _NS.Resolve("theComponentName");
1004 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
1006 NSTEST::echo_var anEchoRefa = NSTEST::echo::_narrow(obj);
1007 CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRefa));
1008 CPPUNIT_ASSERT(anEchoRefa->getId() == anEchoRef3->getId());
1011 // ============================================================================
1015 // ============================================================================
1018 NamingServiceTest::testCurrentDirectory()
1020 std::string path = "/aaa/bbb/ccc/ddd/eee";
1021 bool ret = _NS.Create_Directory(path.c_str());
1022 CPPUNIT_ASSERT(ret);
1024 _NS.Change_Directory(path.c_str());
1025 char* acurdir = _NS.Current_Directory();
1026 std::string curdir = acurdir;
1028 CPPUNIT_ASSERT(curdir == path);
1031 // ============================================================================
1035 // ============================================================================
1038 NamingServiceTest::testList()
1040 _NS.Change_Directory("/Containers/theHostName/theContainerName");
1042 _NS.Change_Directory("/Containers");
1046 // ============================================================================
1050 // ============================================================================
1053 NamingServiceTest::testListDirectory()
1055 _NS.Change_Directory("/Containers/theHostName/theContainerName");
1056 _NS.list_directory();
1057 _NS.Change_Directory("/Containers");
1058 _NS.list_directory();
1061 // ============================================================================
1065 // ============================================================================
1068 NamingServiceTest::testListDirectoryRecurs()
1070 _NS.Change_Directory("/Containers/theHostName/theContainerName");
1071 _NS.list_directory_recurs();
1072 _NS.Change_Directory("/Containers");
1073 _NS.list_directory_recurs();
1074 _NS.Change_Directory("/");
1075 _NS.list_directory_recurs();
1079 // ============================================================================
1083 // ============================================================================
1086 NamingServiceTest::testListSubdirs()
1088 _NS.Change_Directory("/Containers/theHostName/theContainerName");
1090 _NS.Change_Directory("/Containers");
1092 _NS.Change_Directory("/");
1095 // ============================================================================
1099 // ============================================================================
1102 NamingServiceTest::testDestroyName()
1104 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
1105 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
1106 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
1107 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
1109 std::string path = "/Containers/theHostName/theContainerName/theComponentName";
1111 NSTEST::echo_var anEchoRef = myFactory->createInstance();
1112 _NS.Register(anEchoRef, path.c_str());
1114 obj=_NS.Resolve(path.c_str());
1115 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
1117 _NS.Destroy_Name(path.c_str());
1118 obj=_NS.Resolve(path.c_str());
1119 CPPUNIT_ASSERT(CORBA::is_nil(obj));
1122 // ============================================================================
1126 // ============================================================================
1129 NamingServiceTest::testDestroyDirectory()
1131 CORBA::Object_var obj = _NS.Resolve("/nstest_factory");
1132 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
1133 NSTEST::aFactory_var myFactory = NSTEST::aFactory::_narrow(obj);
1134 CPPUNIT_ASSERT(!CORBA::is_nil(myFactory));
1136 std::string path = "/Containers/theHostName/theContainerName/theComponentName";
1138 NSTEST::echo_var anEchoRef = myFactory->createInstance();
1139 _NS.Register(anEchoRef, path.c_str());
1141 _NS.Destroy_Directory("/Containers/theHostName/theContainerName");
1142 obj=_NS.Resolve(path.c_str());
1143 CPPUNIT_ASSERT(!CORBA::is_nil(obj)); // directory not empty: not destroyed
1145 _NS.Destroy_Name(path.c_str());
1146 _NS.Destroy_Directory("/Containers/theHostName/theContainerName");
1147 _NS.Change_Directory("/Containers/theHostName");
1151 // ============================================================================
1153 * DestroyFullDirectory is not recursive
1154 * Need Housekeeping of /Containers for further tests !
1156 // ============================================================================
1158 void NamingServiceTest::_destroyDirectoryRecurs(std::string path)
1160 std::string current = path;
1162 if (_NS.Change_Directory(path.c_str()))
1164 std::vector<std::string> subdirs = _NS.list_subdirs();
1165 for (int i=0; i<subdirs.size(); i++)
1167 std::string subpath=path + "/" +subdirs[i];
1168 _destroyDirectoryRecurs(subpath);
1170 if (_NS.Change_Directory(path.c_str()))
1172 _NS.Destroy_FullDirectory(path.c_str());
1178 NamingServiceTest::testDestroyFullDirectory()
1180 _NS.Destroy_FullDirectory("/Containers");
1181 CPPUNIT_ASSERT(_NS.Change_Directory("/Containers"));
1182 std::vector<std::string> subdirs = _NS.list_subdirs();
1183 CPPUNIT_ASSERT(subdirs.size() >0);
1184 _NS.list_directory_recurs();
1185 std::string path = "/Containers";
1186 _destroyDirectoryRecurs(path);
1187 CPPUNIT_ASSERT( ! _NS.Change_Directory("/Containers"));
1188 _NS.Change_Directory("/");
1190 _NS.list_directory_recurs();
1193 // ============================================================================
1197 // ============================================================================
1200 NamingServiceTest::testGetIorAddr()
1202 CORBA::String_var root = _NS.getIORaddr();
1203 CORBA::Object_var obj = _orb->string_to_object(root);
1204 CPPUNIT_ASSERT(!CORBA::is_nil(obj));
1207 // ============================================================================
1211 // ============================================================================
1214 // NamingServiceTest::()
1216 // CPPUNIT_ASSERT(0);