Salome HOME
Revert "Synchronize adm files"
[modules/kernel.git] / src / NamingService / Test / NamingServiceTest.cxx
1 // Copyright (C) 2007-2014  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
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, or (at your option) any later version.
10 //
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.
15 //
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
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22
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"
28
29 #include <iostream>
30 #include <fstream>
31 #include <string>
32 #include <cstdlib>
33 #include <cstdio>
34
35
36 // --- uncomment to have some traces on standard error
37 //     (useful only when adding new tests...)
38 //#define _DEVDEBUG_
39
40 #ifdef _DEVDEBUG_
41 #define MYDEVTRACE {std::cerr << __FILE__ << " [" << __LINE__ << "] : ";}
42 #define DEVTRACE(msg) {MYDEVTRACE; std::cerr<<msg<<std::endl<<std::flush;}
43 #else
44 #define MYDEVTRACE
45 #define DEVTRACE(msg)
46 #endif
47
48 #ifdef WIN32
49 #define setenv Kernel_Utils::setenv
50 #endif 
51
52 #define TRACEFILE "/tmp/traceUnitTest.log"
53
54 // ============================================================================
55 /*!
56  * a basic CORBA object implementation for use with namingService tests
57  */
58 // ============================================================================
59
60 NSTEST_echo_i::NSTEST_echo_i()
61 {
62   _num=-1;
63 }
64
65 NSTEST_echo_i::NSTEST_echo_i(CORBA::Long num)
66 {
67   _num=num;
68 }
69
70 NSTEST_echo_i::~NSTEST_echo_i()
71 {
72 }
73
74 CORBA::Long NSTEST_echo_i::getId()
75 {
76   return _num;
77 }
78
79 // ============================================================================
80 /*!
81  * a factory of CORBA objects for use with namingService tests
82  */
83 // ============================================================================
84
85 NSTEST_aFactory_i::NSTEST_aFactory_i()
86 {
87   _num=0;
88 }
89
90 NSTEST_aFactory_i::~NSTEST_aFactory_i()
91 {
92 }
93
94 NSTEST::echo_ptr NSTEST_aFactory_i::createInstance()
95 {
96   NSTEST_echo_i * anEcho = new NSTEST_echo_i(_num);
97   _num++;
98   NSTEST::echo_var anEchoRef = anEcho->_this();
99   anEcho->_remove_ref();
100   return anEchoRef._retn();
101 }
102
103 // ============================================================================
104 /*!
105  * Set Trace mecanism
106  * - delete preexisting trace classes if any
107  * - set trace on file
108  * Get or initialize the orb
109  * Create a SALOME_NamingService instance
110  */
111 // ============================================================================
112
113 void 
114 NamingServiceTest::setUp()
115 {
116   LocalTraceBufferPool* bp1 = LocalTraceBufferPool::instance();
117   CPPUNIT_ASSERT(bp1);
118   bp1->deleteInstance(bp1);
119
120   // --- trace on file
121   const char *theFileName = TRACEFILE;
122
123   std::string s = "file:";
124   s += theFileName;
125   //s="local";
126   //s="with_logger";
127   CPPUNIT_ASSERT(! setenv("SALOME_trace",s.c_str(),1)); // 1: overwrite
128
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
133   traceFile.close();
134
135   bp1 = LocalTraceBufferPool::instance();
136   CPPUNIT_ASSERT(bp1);
137
138   // --- Get or initialize the orb
139
140   int _argc = 1;
141   char* _argv[] = {(char*)""};
142   ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance() ;
143   ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting());
144   _orb = init(_argc , _argv ) ;
145
146   // --- Create a SALOME_NamingService instance
147
148   _NS.init_orb(_orb) ;
149
150   // --- Create an NSTEST::factory
151
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();
159   _pman->activate();
160   _myFactory->_remove_ref();
161   
162 }
163
164 // ============================================================================
165 /*!
166  *  - delete trace classes
167  */
168 // ============================================================================
169
170 void 
171 NamingServiceTest::tearDown()
172 {
173
174   LocalTraceBufferPool* bp1 = LocalTraceBufferPool::instance();
175   CPPUNIT_ASSERT(bp1);
176   bp1->deleteInstance(bp1);
177 }
178
179 // ============================================================================
180 /*!
181  *  Test default constructor: must be followed by a call to init_orb(ORB)
182  */
183 // ============================================================================
184
185 void
186 NamingServiceTest::testConstructorDefault()
187 {
188   SALOME_NamingService  NS;
189   //CPPUNIT_ASSERT_THROW(NS.getIORaddr(),CORBA::Exception);
190   NS.init_orb(_orb);
191
192   CORBA::String_var root = NS.getIORaddr();
193   CORBA::Object_var obj = _orb->string_to_object(root);
194   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
195
196   CosNaming::NamingContext_var rootContext =
197     CosNaming::NamingContext::_narrow(obj);
198   CPPUNIT_ASSERT(!CORBA::is_nil(rootContext));
199 }
200
201 // ============================================================================
202 /*!
203  *  Test constructor with ORB parameter
204  */
205 // ============================================================================
206
207 void
208 NamingServiceTest::testConstructorOrb()
209 {
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));
214
215   CosNaming::NamingContext_var rootContext =
216     CosNaming::NamingContext::_narrow(obj);
217   CPPUNIT_ASSERT(!CORBA::is_nil(rootContext));
218 }
219
220 // ============================================================================
221 /*!
222  * Test Register and resolve of a single CORBA object with absolute pathname,
223  * without subdirectories
224  */
225 // ============================================================================
226
227 void
228 NamingServiceTest::testRegisterResolveAbsNoPath()
229 {
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));
235 }
236
237 // ============================================================================
238 /*!
239  * Test Register and resolve of a single CORBA object with relative pathname,
240  * without subdirectories
241  */
242 // ============================================================================
243
244 void
245 NamingServiceTest::testRegisterResolveRelativeNoPath()
246 {
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));
251
252   _NS.Create_Directory("/myContext");
253   _NS.Change_Directory("/myContext");
254
255   NSTEST::echo_var anEchoRef = myFactory->createInstance();
256   _NS.Register(anEchoRef,"echo_0");
257
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());
263
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());
269 }
270
271 // ============================================================================
272 /*!
273  * Test Register and resolve of a single CORBA object with absolute pathname,
274  * in a subdirectory
275  */
276 // ============================================================================
277
278 void
279 NamingServiceTest::testRegisterResolveAbsWithPath()
280 {
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));
285
286   NSTEST::echo_var anEchoRef = myFactory->createInstance();
287   _NS.Register(anEchoRef,"/nstest/echo_0");
288
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());
294
295   NSTEST::echo_var anEchoRef1 = myFactory->createInstance();
296   _NS.Register(anEchoRef1,"/nstest2/rep2/rep3/echo_1");
297   CPPUNIT_ASSERT(anEchoRef->getId() != anEchoRef1->getId());
298
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());
304
305   NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
306   _NS.Register(anEchoRef2,"/nstest2/1/2/3/4/echo_1");
307
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());
313 }
314
315 // ============================================================================
316 /*!
317  * Test Register and resolve of a single CORBA object with relative pathname,
318  * in a subdirectory.
319  * Relative Path is changed to the created subdirectory when Register()
320  */
321 // ============================================================================
322
323 void
324 NamingServiceTest::testRegisterResolveRelativeWithPath()
325 {
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");
332
333   NSTEST::echo_var anEchoRef = myFactory->createInstance();
334   _NS.Register(anEchoRef,"subdir/echo_0");
335
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));
340
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());
346
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());
353 }
354
355 // ============================================================================
356 /*!
357  * Test resolve with a name not known
358  */
359 // ============================================================================
360
361 void
362 NamingServiceTest::testResolveBadName()
363 {
364   CORBA::Object_var obj = _NS.Resolve("/notRegisteredName");
365   CPPUNIT_ASSERT(CORBA::is_nil(obj));
366
367   obj = _NS.Resolve("/nstest/notRegisteredName");
368   CPPUNIT_ASSERT(CORBA::is_nil(obj));
369
370   obj = _NS.Resolve("/unknownPath/notRegisteredName");
371   CPPUNIT_ASSERT(CORBA::is_nil(obj));
372
373   obj = _NS.Resolve("/anUnknown/ComplicatedPath/notRegisteredName");
374   CPPUNIT_ASSERT(CORBA::is_nil(obj));
375 }
376
377 // ============================================================================
378 /*!
379  * Test resolve with a name not known, with a relative path
380  */
381 // ============================================================================
382
383 void
384 NamingServiceTest::testResolveBadNameRelative()
385 {
386   _NS.Create_Directory("/myContext");
387   _NS.Change_Directory("/myContext");
388
389   CORBA::Object_var obj = _NS.Resolve("notRegisteredName");
390   CPPUNIT_ASSERT(CORBA::is_nil(obj));
391
392   obj = _NS.Resolve("unknownPath/notRegisteredName");
393   CPPUNIT_ASSERT(CORBA::is_nil(obj));
394
395   obj = _NS.Resolve("anUnknown/ComplicatedPath/notRegisteredName");
396   CPPUNIT_ASSERT(CORBA::is_nil(obj));
397 }
398
399 // ============================================================================
400 /*!
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.
406  */
407 // ============================================================================
408
409 #define NB_OBJS 10
410
411 void
412 NamingServiceTest::testResolveFirst()
413 {
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));
418
419   int ref[NB_OBJS];
420
421   for (int i=0; i<NB_OBJS; i++)
422     {
423       NSTEST::echo_var anEchoRef = myFactory->createInstance();
424       ref[i] = anEchoRef->getId();
425       std::string name = "/nstestfirst/echo_";
426       char anum[10];
427       sprintf(anum,"%d",ref[i]);
428       name += anum;
429       _NS.Register(anEchoRef,name.c_str());
430     }
431
432   for (int i=0; i<NB_OBJS; i++)
433     {
434       std::string name = "/nstestfirst/echo_";
435       char anum[10];
436       sprintf(anum,"%d",ref[i]);
437       name += anum;
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]);
443     }
444
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]);
451 }
452
453 // ============================================================================
454 /*!
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.
460  */
461 // ============================================================================
462
463 void
464 NamingServiceTest::testResolveFirstRelative()
465 {
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));
470
471   int ref[NB_OBJS];
472
473   for (int i=0; i<NB_OBJS; i++)
474     {
475       NSTEST::echo_var anEchoRef = myFactory->createInstance();
476       ref[i] = anEchoRef->getId();
477       std::string name = "/nstestfirstrel/echo_";
478       char anum[10];
479       sprintf(anum,"%d",ref[i]);
480       name += anum;
481       _NS.Register(anEchoRef,name.c_str());
482     }
483
484   for (int i=0; i<NB_OBJS; i++)
485     {
486       _NS.Change_Directory("/nstestfirstrel");
487       std::string name = "echo_";
488       char anum[10];
489       sprintf(anum,"%d",ref[i]);
490       name += anum;
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]);
496     }
497
498   _NS.Change_Directory("/nstestfirstrel");
499   std::string name = "echo";
500   obj = _NS.ResolveFirst(name.c_str());
501   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
502 }
503
504 // ============================================================================
505 /*!
506  * Test resolveFirst with unknown name
507  */
508 // ============================================================================
509
510 void
511 NamingServiceTest::testResolveFirstUnknown()
512 {
513   std::string name = "/notYeyRegistered";
514   CORBA::Object_var obj= _NS.ResolveFirst(name.c_str());
515   CPPUNIT_ASSERT(CORBA::is_nil(obj));
516
517   name = "/nstestfirst/notYeyRegistered";
518   obj = _NS.ResolveFirst(name.c_str());
519   CPPUNIT_ASSERT(CORBA::is_nil(obj));
520
521   name = "/rrr/sss/ttt/notYeyRegistered";
522   obj = _NS.ResolveFirst(name.c_str());
523   CPPUNIT_ASSERT(CORBA::is_nil(obj));
524 }
525
526 // ============================================================================
527 /*!
528  * Test resolveFirst with unknown name, relative Path
529  */
530 // ============================================================================
531
532 void
533 NamingServiceTest::testResolveFirstUnknownRelative()
534 {
535   _NS.Create_Directory("/myContext");
536   _NS.Change_Directory("/myContext");
537
538   std::string name = "RelnotYeyRegistered";
539   CORBA::Object_var obj = _NS.ResolveFirst(name.c_str());
540   CPPUNIT_ASSERT(CORBA::is_nil(obj));
541
542   name = "Relnstestfirst/notYeyRegistered";
543   obj = _NS.ResolveFirst(name.c_str());
544   CPPUNIT_ASSERT(CORBA::is_nil(obj));
545
546   name = "Relrrr/sss/ttt/notYeyRegistered";
547   obj = _NS.ResolveFirst(name.c_str());
548   CPPUNIT_ASSERT(CORBA::is_nil(obj));
549 }
550
551 // ============================================================================
552 /*!
553  * Test ResolveComponent works as specified
554  */
555 // ============================================================================
556
557 void
558 NamingServiceTest::testResolveComponentOK()
559 {
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));
564
565   NSTEST::echo_var anEchoRef = myFactory->createInstance();
566   _NS.Register(anEchoRef,
567                "/Containers/theHostName/theContainerName/theComponentName");
568
569   obj = _NS.ResolveComponent("theHostName",
570                              "theContainerName",
571                              "theComponentName");
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());
576
577
578   NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
579   _NS.Register(anEchoRef2,
580                "/Containers/theHostName/theContainerName_2/theComponentName");
581
582   obj = _NS.ResolveComponent("theHostName",
583                              "theContainerName",
584                              "theComponentName",
585                              2);
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());
590 }
591
592 // ============================================================================
593 /*!
594  * Test ResolveComponent gives nil pointer if hostname is not given (empty)
595  */
596 // ============================================================================
597
598 void
599 NamingServiceTest::testResolveComponentEmptyHostname()
600 {
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));
605
606   NSTEST::echo_var anEchoRef = myFactory->createInstance();
607   _NS.Register(anEchoRef,
608                "/Containers/theHostName/theContainerName/theComponentName");
609
610   obj = _NS.ResolveComponent("",
611                              "theContainerName",
612                              "theComponentName");
613   CPPUNIT_ASSERT(CORBA::is_nil(obj));
614 }
615
616 // ============================================================================
617 /*!
618  * Test ResolveComponent gives nil pointer if hostname is unknown
619  */
620 // ============================================================================
621
622 void
623 NamingServiceTest::testResolveComponentUnknownHostname()
624 {
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));
629
630   NSTEST::echo_var anEchoRef = myFactory->createInstance();
631   _NS.Register(anEchoRef,
632                "/Containers/theHostName/theContainerName/theComponentName");
633
634   obj = _NS.ResolveComponent("anUnknownHostName",
635                              "theContainerName",
636                              "theComponentName");
637   CPPUNIT_ASSERT(CORBA::is_nil(obj));
638 }
639
640 // ============================================================================
641 /*!
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.
647  */
648 // ============================================================================
649
650 void
651 NamingServiceTest::testResolveComponentEmptyContainerName()
652 {
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));
657
658   NSTEST::echo_var anEchoRef = myFactory->createInstance();
659   _NS.Register(anEchoRef,
660                "/Containers/theHostName/theContainerName/theComponentName");
661
662   NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
663   _NS.Register(anEchoRef2,
664                "/Containers/theHostName/aContainerName/aComponentName");
665
666   NSTEST::echo_var anEchoRef3 = myFactory->createInstance();
667   _NS.Register(anEchoRef3,
668                "/Containers/theHostName/otherContainerName/theComponentName");
669
670   obj = _NS.ResolveComponent("anUnknownHostName",
671                              "",
672                              "theComponentName");
673   CPPUNIT_ASSERT(CORBA::is_nil(obj));
674
675   obj = _NS.ResolveComponent("theHostName",
676                              "",
677                              "theComponentName");
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());
682 }
683
684 // ============================================================================
685 /*!
686  * Test 
687  */
688 // ============================================================================
689
690 void
691 NamingServiceTest::testResolveComponentUnknownContainerName()
692 {
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));
697
698   NSTEST::echo_var anEchoRef = myFactory->createInstance();
699   _NS.Register(anEchoRef,
700                "/Containers/theHostName/theContainerName/theComponentName");
701
702   NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
703   _NS.Register(anEchoRef2,
704                "/Containers/theHostName/aContainerName/aComponentName");
705
706   NSTEST::echo_var anEchoRef3 = myFactory->createInstance();
707   _NS.Register(anEchoRef3,
708                "/Containers/theHostName/otherContainerName/theComponentName");
709
710   obj = _NS.ResolveComponent("theHostName",
711                              "anUnknownContainerName",
712                              "theComponentName");
713   CPPUNIT_ASSERT(CORBA::is_nil(obj));
714 }
715
716 // ============================================================================
717 /*!
718  * Test 
719  */
720 // ============================================================================
721
722 void
723 NamingServiceTest::testResolveComponentEmptyComponentName()
724 {
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));
729
730   NSTEST::echo_var anEchoRef = myFactory->createInstance();
731   _NS.Register(anEchoRef,
732                "/Containers/theHostName/theContainerName/theComponentName");
733
734   NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
735   _NS.Register(anEchoRef2,
736                "/Containers/theHostName/EmptyContainerName/");
737
738   obj = _NS.ResolveComponent("theHostName",
739                              "EmptyContainerName",
740                              "");
741   CPPUNIT_ASSERT(CORBA::is_nil(obj));
742 }
743
744 // ============================================================================
745 /*!
746  * Test 
747  */
748 // ============================================================================
749
750 void
751 NamingServiceTest::testResolveComponentUnknownComponentName()
752 {
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));
757
758   NSTEST::echo_var anEchoRef = myFactory->createInstance();
759   _NS.Register(anEchoRef,
760                "/Containers/theHostName/theContainerName/theComponentName");
761
762   obj = _NS.ResolveComponent("theHostName",
763                              "theContainerName",
764                              "anUnknownComponentName");
765   CPPUNIT_ASSERT(CORBA::is_nil(obj));
766 }
767
768 // ============================================================================
769 /*!
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.
773  */
774 // ============================================================================
775
776 void
777 NamingServiceTest::testResolveComponentFalseNbproc()
778 {
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));
783
784   NSTEST::echo_var anEchoRef = myFactory->createInstance();
785   _NS.Register(anEchoRef,
786                "/Containers/theHostName/theContainerName/theComponentName");
787
788   obj = _NS.ResolveComponent("theHostName",
789                              "theContainerName",
790                              "theComponentName",
791                              25);
792   CPPUNIT_ASSERT(CORBA::is_nil(obj));
793
794   obj = _NS.ResolveComponent("theHostName",
795                              "theContainerName",
796                              "theComponentName",
797                              -25);
798   CPPUNIT_ASSERT(! CORBA::is_nil(obj));
799 }
800
801 // ============================================================================
802 /*!
803  * Test 
804  */
805 // ============================================================================
806
807 void
808 NamingServiceTest::testContainerName()
809 {
810   std::string ref0 = "FactoryServer";
811   std::string ret = _NS.ContainerName("");
812   CPPUNIT_ASSERT(ret == ref0);
813
814   ref0 = "MyContainerName";
815   ret = _NS.ContainerName(ref0.c_str());
816   CPPUNIT_ASSERT(ret == ref0);
817 }
818
819 // ============================================================================
820 /*!
821  * Test 
822  */
823 // ============================================================================
824
825 void
826 NamingServiceTest::testContainerNameParams()
827 {
828   Engines::ContainerParameters params;
829   SALOME_LifeCycleCORBA::preSet(params);
830
831   std::string ref0 = "FactoryServer";
832   std::string ret = _NS.ContainerName(params);
833   CPPUNIT_ASSERT(ret == ref0);
834
835   ref0 = "MyContainerName";
836   params.container_name = ref0.c_str();
837   ret = _NS.ContainerName(params);
838   CPPUNIT_ASSERT(ret == ref0);
839 }
840
841 // ============================================================================
842 /*!
843  * Test 
844  */
845 // ============================================================================
846
847 void
848 NamingServiceTest::testBuildContainerNameForNS()
849 {
850   std::string ref0 = "/Containers/theHostName/theContainerName";
851   std::string ret = _NS.BuildContainerNameForNS("theContainerName","theHostName");
852   CPPUNIT_ASSERT(ret == ref0);
853
854   ref0 = "/Containers/theHostName/FactoryServer";
855   ret = _NS.BuildContainerNameForNS("","theHostName");
856   CPPUNIT_ASSERT(ret == ref0);
857 }
858
859 // ============================================================================
860 /*!
861  * Test 
862  */
863 // ============================================================================
864
865 void
866 NamingServiceTest::testBuildContainerNameForNSParams()
867 {
868   Engines::ContainerParameters params;
869   SALOME_LifeCycleCORBA::preSet(params);
870
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);
875
876   params.container_name = "";
877   ref0 = "/Containers/theHostName/FactoryServer";
878   ret = _NS.BuildContainerNameForNS(params,"theHostName");
879   CPPUNIT_ASSERT(ret == ref0);
880 }
881
882 // ============================================================================
883 /*!
884  * Test 
885  */
886 // ============================================================================
887
888 void
889 NamingServiceTest::testFind()
890 {
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));
895
896   NSTEST::echo_var anEchoRef = myFactory->createInstance();
897   _NS.Register(anEchoRef,
898                "/Containers/theHostName/theContainerName/theComponentName");
899
900   NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
901   _NS.Register(anEchoRef2,
902                "/Containers/theHostName/aContainerName/aComponentName");
903
904   NSTEST::echo_var anEchoRef3 = myFactory->createInstance();
905   _NS.Register(anEchoRef3,
906                "/Containers/theHostName/otherContainerName/theComponentName");
907
908   NSTEST::echo_var anEchoRef4 = myFactory->createInstance();
909   _NS.Register(anEchoRef4,
910                "/Containers/anHostName/oneContainerName/theComponentName");
911
912   _NS.Change_Directory("/Containers");
913   int occ= _NS.Find("theComponentName");
914   CPPUNIT_ASSERT(occ >= 3); // see previous tests
915
916   _NS.Change_Directory("/Containers");
917   occ= _NS.Find("aComponentName");
918   CPPUNIT_ASSERT(occ == 1);
919
920   _NS.Change_Directory("/Containers");
921   occ= _NS.Find("UnknownCompnentName");
922   CPPUNIT_ASSERT(occ == 0);
923 }
924
925 // ============================================================================
926 /*!
927  * Test 
928  */
929 // ============================================================================
930
931 void
932 NamingServiceTest::testCreateDirectory()
933 {
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));
938
939   bool ret = _NS.Create_Directory("/aaa/bbb/ccc/ddd/eee");
940   CPPUNIT_ASSERT(ret);
941
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_";
946   char anum[10];
947   sprintf(anum,"%d",val);
948   name += anum;
949   _NS.Register(anEchoRef,name.c_str());
950
951   std::string dirname = "/aaa/bbb/ccc/ddd/eee/";
952   dirname += name;
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());
958
959   ret = _NS.Create_Directory("/aaa/bbb/ccc/ddd/eee");
960   CPPUNIT_ASSERT(ret);
961
962   _NS.Change_Directory("/aaa/bbb");
963   ret = _NS.Create_Directory("cccccc/dddddd/eeeeee");
964   _NS.Register(anEchoRef,"echo_abcde");
965
966   CPPUNIT_ASSERT(ret);
967   _NS.Change_Directory("/aaa/bbb/cccccc/dddddd/eeeeee");
968   obj = _NS.Resolve("echo_abcde");
969   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
970 }
971
972 // ============================================================================
973 /*!
974  * Test 
975  */
976 // ============================================================================
977
978 void
979 NamingServiceTest::testChangeDirectory()
980 {
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));
985
986   NSTEST::echo_var anEchoRef = myFactory->createInstance();
987   _NS.Register(anEchoRef,
988                "/Containers/theHostName/theContainerName/theComponentName");
989
990   NSTEST::echo_var anEchoRef2 = myFactory->createInstance();
991   _NS.Register(anEchoRef2,
992                "/Containers/theHostName/aContainerName/aComponentName");
993
994   NSTEST::echo_var anEchoRef3 = myFactory->createInstance();
995   _NS.Register(anEchoRef3,
996                "/Containers/theHostName/otherContainerName/theComponentName");
997
998   NSTEST::echo_var anEchoRef4 = myFactory->createInstance();
999   _NS.Register(anEchoRef4,
1000                "/Containers/anHostName/oneContainerName/theComponentName");
1001   
1002   _NS.Change_Directory("/Containers/theHostName/otherContainerName");
1003   obj = _NS.Resolve("theComponentName");
1004   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
1005   
1006   NSTEST::echo_var anEchoRefa = NSTEST::echo::_narrow(obj);
1007   CPPUNIT_ASSERT(!CORBA::is_nil(anEchoRefa));
1008   CPPUNIT_ASSERT(anEchoRefa->getId() == anEchoRef3->getId());
1009 }
1010
1011 // ============================================================================
1012 /*!
1013  * Test 
1014  */
1015 // ============================================================================
1016
1017 void
1018 NamingServiceTest::testCurrentDirectory()
1019 {
1020   std::string path = "/aaa/bbb/ccc/ddd/eee";
1021   bool ret = _NS.Create_Directory(path.c_str());
1022   CPPUNIT_ASSERT(ret);
1023
1024   _NS.Change_Directory(path.c_str());
1025   char* acurdir = _NS.Current_Directory();
1026   std::string curdir = acurdir;
1027   free(acurdir);
1028   CPPUNIT_ASSERT(curdir == path);
1029 }
1030
1031 // ============================================================================
1032 /*!
1033  * Test 
1034  */
1035 // ============================================================================
1036
1037 void
1038 NamingServiceTest::testList()
1039 {
1040   _NS.Change_Directory("/Containers/theHostName/theContainerName");
1041   _NS.list();
1042   _NS.Change_Directory("/Containers");
1043   _NS.list();
1044 }
1045
1046 // ============================================================================
1047 /*!
1048  * Test 
1049  */
1050 // ============================================================================
1051
1052 void
1053 NamingServiceTest::testListDirectory()
1054 {
1055   _NS.Change_Directory("/Containers/theHostName/theContainerName");
1056   _NS.list_directory();
1057   _NS.Change_Directory("/Containers");
1058   _NS.list_directory();
1059 }
1060
1061 // ============================================================================
1062 /*!
1063  * Test 
1064  */
1065 // ============================================================================
1066
1067 void
1068 NamingServiceTest::testListDirectoryRecurs()
1069 {
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();
1076 }
1077
1078
1079 // ============================================================================
1080 /*!
1081  * Test 
1082  */
1083 // ============================================================================
1084
1085 void
1086 NamingServiceTest::testListSubdirs()
1087 {
1088   _NS.Change_Directory("/Containers/theHostName/theContainerName");
1089   _NS.list_subdirs();
1090   _NS.Change_Directory("/Containers");
1091   _NS.list_subdirs();
1092   _NS.Change_Directory("/");
1093   _NS.list_subdirs();
1094 }
1095 // ============================================================================
1096 /*!
1097  * Test 
1098  */
1099 // ============================================================================
1100
1101 void
1102 NamingServiceTest::testDestroyName()
1103 {
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));
1108
1109   std::string path = "/Containers/theHostName/theContainerName/theComponentName";
1110
1111   NSTEST::echo_var anEchoRef = myFactory->createInstance();
1112   _NS.Register(anEchoRef, path.c_str());
1113
1114   obj=_NS.Resolve(path.c_str());
1115   CPPUNIT_ASSERT(!CORBA::is_nil(obj));
1116
1117   _NS.Destroy_Name(path.c_str());
1118   obj=_NS.Resolve(path.c_str());
1119   CPPUNIT_ASSERT(CORBA::is_nil(obj));
1120 }
1121
1122 // ============================================================================
1123 /*!
1124  * Test 
1125  */
1126 // ============================================================================
1127
1128 void
1129 NamingServiceTest::testDestroyDirectory()
1130 {
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));
1135
1136   std::string path = "/Containers/theHostName/theContainerName/theComponentName";
1137
1138   NSTEST::echo_var anEchoRef = myFactory->createInstance();
1139   _NS.Register(anEchoRef, path.c_str());
1140
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
1144
1145   _NS.Destroy_Name(path.c_str());
1146   _NS.Destroy_Directory("/Containers/theHostName/theContainerName");
1147   _NS.Change_Directory("/Containers/theHostName");
1148   _NS.list_subdirs();
1149 }
1150
1151 // ============================================================================
1152 /*!
1153  * DestroyFullDirectory is not recursive
1154  * Need Housekeeping of /Containers for further tests !
1155  */
1156 // ============================================================================
1157
1158 void NamingServiceTest::_destroyDirectoryRecurs(std::string path)
1159 {
1160   std::string current = path;
1161   SCRUTE(path);
1162   if (_NS.Change_Directory(path.c_str()))
1163     {
1164       std::vector<std::string> subdirs = _NS.list_subdirs();
1165       for (int i=0; i<subdirs.size(); i++)
1166         {
1167           std::string subpath=path + "/" +subdirs[i];
1168           _destroyDirectoryRecurs(subpath);
1169         }
1170       if (_NS.Change_Directory(path.c_str()))
1171         {
1172           _NS.Destroy_FullDirectory(path.c_str());
1173         }
1174     }
1175 }
1176
1177 void
1178 NamingServiceTest::testDestroyFullDirectory()
1179 {
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("/");
1189   _NS.list_subdirs();
1190   _NS.list_directory_recurs();
1191 }
1192
1193 // ============================================================================
1194 /*!
1195  * Test 
1196  */
1197 // ============================================================================
1198
1199 void
1200 NamingServiceTest::testGetIorAddr()
1201 {
1202   CORBA::String_var root = _NS.getIORaddr();
1203   CORBA::Object_var obj = _orb->string_to_object(root);
1204   CPPUNIT_ASSERT(!CORBA::is_nil(obj)); 
1205 }
1206
1207 // ============================================================================
1208 /*!
1209  * Test 
1210  */
1211 // ============================================================================
1212
1213 // void
1214 // NamingServiceTest::()
1215 // {
1216 //   CPPUNIT_ASSERT(0);
1217 // }
1218