ACE+TAO-7_0_8
[ACE_TAO.git] / ACE / tests / Service_Config_Stream_DLL.cpp
blobc33e875e931b572d033452d575450981ff52ed64
1 #include "Service_Config_Stream_DLL.h"
2 #include "ace/Service_Repository.h"
3 #include "ace/Service_Types.h"
7 int
8 Test_Task::open (void *)
10 ACE_DEBUG ((LM_DEBUG,
11 ACE_TEXT ("opening %s\n"),
12 this->name () ? this->name () : ACE_TEXT ("task")));
13 return 0;
16 int
17 Test_Task::close (u_long)
19 ACE_DEBUG ((LM_DEBUG,
20 ACE_TEXT ("closing %s\n"),
21 this->name () ? this->name () : ACE_TEXT ("task")));
22 return 0;
25 int
26 Test_Task::init (int, ACE_TCHAR *[])
28 ACE_DEBUG ((LM_DEBUG,
29 ACE_TEXT ("initializing %s\n"),
30 this->name () ? this->name () : ACE_TEXT ("task")));
32 return 0;
35 int
36 Test_Task::fini ()
38 ACE_DEBUG ((LM_DEBUG,
39 ACE_TEXT ("finalizing %s\n"),
40 this->name () ? this->name () : ACE_TEXT ("task")));
41 return 0;
44 // Factories used to control configuration.
46 ACE_FACTORY_DECLARE (Service_Config_Stream_DLL, Test_Task)
47 ACE_FACTORY_DEFINE (Service_Config_Stream_DLL, Test_Task)
49 // Dynamically linked functions used to control configuration.
51 extern "C" Service_Config_Stream_DLL_Export MT_Stream *make_stream (void);
52 extern "C" Service_Config_Stream_DLL_Export MT_Module *make_da (void);
53 extern "C" Service_Config_Stream_DLL_Export MT_Module *make_ea (void);
54 extern "C" Service_Config_Stream_DLL_Export MT_Module *make_mr (void);
55 extern "C" Service_Config_Stream_DLL_Export MT_Module *make_close (void);
57 MT_Stream *
58 make_stream (void)
60 return new MT_Stream;
63 MT_Module *
64 make_da (void)
66 return new MT_Module (ACE_TEXT ("Device_Adapter"),
67 new Test_Task, new Test_Task);
70 MT_Module *
71 make_ea (void)
73 return new MT_Module (ACE_TEXT ("Event_Analyzer"),
74 new Test_Task, new Test_Task);
77 MT_Module *
78 make_mr (void)
80 return new MT_Module (ACE_TEXT ("Multicast_Router"),
81 new Test_Task, new Test_Task);
84 MT_Module *
85 make_close (void)
87 return new MT_Module (ACE_TEXT ("Close_Test_Module"),
88 new Test_Task, new Test_Task);
92 // Task to verify the order and operation of the stream assembly
93 // Command line args give the stream name (to look it up) and the names
94 // of the tasks that should be there, from head to tail.
96 ACE_FACTORY_DECLARE (Service_Config_Stream_DLL, Stream_Order_Test)
97 ACE_FACTORY_DEFINE (Service_Config_Stream_DLL, Stream_Order_Test)
99 int
100 Stream_Order_Test::init (int argc, ACE_TCHAR *argv[])
102 if (argc < 1)
103 ACE_ERROR_RETURN ((LM_ERROR,
104 ACE_TEXT ("Stream_Order_Test needs at least 1 arg\n")),
105 -1);
106 const ACE_Service_Type *st = 0;
107 if (ACE_Service_Repository::instance ()->find (argv[0], &st, false) == -1)
108 ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("Cannot find %s\n"), argv[0]), -1);
109 const ACE_Service_Type_Impl *st_impl = st->type ();
110 MT_Stream *str = reinterpret_cast<MT_Stream *>(st_impl->object ());
111 MT_Module *m = 0;
112 if (-1 == str->top (m))
113 ACE_ERROR_RETURN ((LM_ERROR,
114 ACE_TEXT ("Cannot get module %p\n"),
115 ACE_TEXT ("top")),
116 -1);
117 // Walk down the stream and compare module names. Note we start from the
118 // top, i.e., the last module pushed.
119 bool error = false;
120 for (int i = 1; i < argc; ++i)
122 if (m == 0)
124 ACE_ERROR ((LM_ERROR,
125 ACE_TEXT ("Ran out of modules at layer %d\n"),
126 i));
127 continue;
129 if (ACE_OS::strcmp (argv[i], m->name ()) != 0)
131 ACE_ERROR ((LM_ERROR,
132 ACE_TEXT ("Layer %d: expected module %s, found %s\n"),
134 argv[i], m->name ()));
135 error = true;
137 else
138 ACE_DEBUG ((LM_DEBUG,
139 ACE_TEXT ("Layer %d: found module %s, correct\n"),
141 m->name ()));
142 m = m->next ();
144 return error ? -1 : 0;