Merge pull request #1710 from likema/cfg-assign-not-null-str
[ACE_TAO.git] / TAO / tests / Portable_Interceptors / Collocated / Dynamic / Collocated_Test.cpp
blob0ed916d376cb8d52c373a43a0eac52ed6b8c5196
1 #include "Server_Task.h"
2 #include "Client_Task.h"
3 #include "Echo_Collocated_ORBInitializer.h"
4 #include "interceptors.h"
5 #include "tao/ORBInitializer_Registry.h"
6 #include "ace/Get_Opt.h"
7 #include "ace/Argv_Type_Converter.h"
8 #include "ace/SString.h"
9 #include "ace/Manual_Event.h"
11 const ACE_TCHAR *output = ACE_TEXT("test.ior");
12 const ACE_TCHAR *input = ACE_TEXT("file://test.ior");
13 ACE_CString server_orb;
14 ACE_CString client_orb;
15 int
16 parse_args (int argc, ACE_TCHAR *argv[])
18 ACE_Get_Opt get_opts (argc, argv, ACE_TEXT("k:o"));
19 int c;
21 while ((c = get_opts ()) != -1)
22 switch (c)
24 case 'o':
25 output = get_opts.opt_arg ();
26 break;
27 case 'k':
28 input = get_opts.opt_arg ();
29 break;
30 case '?':
31 default:
32 // This is a hack but that is okay!
33 return 0;
35 // Indicates successful parsing of the command line
36 return 0;
39 int
40 ACE_TMAIN(int argc, ACE_TCHAR *argv[])
42 if (parse_args (argc,
43 argv) == -1)
44 return -1;
46 server_orb.set ("server_orb");
47 client_orb.set ("client_orb");
49 try
51 PortableInterceptor::ORBInitializer_ptr temp_initializer =
52 PortableInterceptor::ORBInitializer::_nil ();
54 ACE_NEW_RETURN (temp_initializer,
55 Echo_Collocated_ORBInitializer,
56 -1); // No exceptions yet!
57 PortableInterceptor::ORBInitializer_var orb_initializer =
58 temp_initializer;
60 PortableInterceptor::register_orb_initializer (orb_initializer.in ());
62 ACE_Argv_Type_Converter satc (argc, argv);
63 CORBA::ORB_var sorb =
64 CORBA::ORB_init (satc.get_argc (),
65 satc.get_TCHAR_argv (),
66 server_orb.c_str ());
68 ACE_Manual_Event me;
69 Server_Task server_task (output,
70 sorb.in (),
71 me,
72 ACE_Thread_Manager::instance ());
74 if (server_task.activate (THR_NEW_LWP | THR_JOINABLE,
76 1) == -1)
78 ACE_ERROR ((LM_ERROR, "Error activating server task\n"));
81 // Wait for the server thread to do some processing
82 me.wait ();
84 ACE_Argv_Type_Converter catc (argc, argv);
85 CORBA::ORB_var corb =
86 CORBA::ORB_init (catc.get_argc (),
87 catc.get_TCHAR_argv (),
88 client_orb.c_str ());
90 Client_Task client_task (input,
91 corb.in (),
92 ACE_Thread_Manager::instance ());
94 if (client_task.activate (THR_NEW_LWP | THR_JOINABLE,
96 1) == -1)
98 ACE_ERROR ((LM_ERROR, "Error activating client task\n"));
101 ACE_Thread_Manager::instance ()->wait ();
103 sorb->destroy ();
105 CORBA::ULong number_called =
106 Echo_Server_Request_Interceptor::server_interceptor_check_;
108 if (number_called != 10)
110 ACE_ERROR ((LM_ERROR,
111 "(%P|%t) ERROR: Server Side Interceptors not"
112 " called properly, called %d times, expected 10\n",
113 number_called));
116 if (Echo_Client_Request_Interceptor::client_interceptor_check_ != 10)
117 ACE_ERROR ((LM_ERROR,
118 "(%P|%t) ERROR:Client Interceptors not called"
119 " properly\n"));
121 corb->destroy ();
123 catch (const CORBA::Exception&)
125 // Ignore exceptions..
127 return 0;