27 #include <blackboard/local.h>
28 #include <blackboard/remote.h>
29 #include <blackboard/exceptions.h>
30 #include <blackboard/bbconfig.h>
31 #include <blackboard/interface_listener.h>
33 #include <interfaces/TestInterface.h>
35 #include <interface/interface_info.h>
36 #include <core/exceptions/system.h>
37 #include <netcomm/fawkes/client.h>
38 #include <netcomm/fawkes/server_thread.h>
39 #include <utils/time/time.h>
50 using namespace fawkes;
56 signal_handler(
int signum)
68 int expval = ti_reader->
test_int() + 1;
71 printf(
"Sent with message ID %u\n", msgid);
74 cout <<
"Error, more than one message! flushing." << endl;
83 printf(
"Received message of ID %u, Message improperly detected to be a SetTestStringMessage\n", msg->
id());
87 printf(
"Received message with ID %u (enqueue time: %s)\n", m2->
id(), m2->
time_enqueued()->
str());
92 cout <<
"BUG: caught write denied exception" << endl;
97 cout <<
"Illegal message '" << ti_writer->
msgq_first()->
type() <<
"' type received" << endl;
105 if ( val == expval ) {
108 cout <<
" failure, value is " << ti_reader->
test_int() <<
", expected "
112 printf(
"No message in queue, if network test this means the message was dropped\n");
130 __reader_bb = reader_bb;
131 __writer_bb = writer_bb;
133 bbil_add_data_interface(__reader);
134 bbil_add_message_interface(__writer);
136 __reader_bb->register_listener(
this);
137 __writer_bb->register_listener(
this);
144 __reader_bb->unregister_listener(
this);
145 __writer_bb->unregister_listener(
this);
150 bb_interface_message_received(
Interface *interface,
154 if ( interface == __writer ) {
155 printf(
"%s: Forwarding message\n", bbil_name());
159 __reader->msgq_enqueue(m);
160 message->set_id(m->
id());
165 printf(
"%s: Message received for unknown interface\n", bbil_name());
169 printf(
"%s: Exception when message received\n", bbil_name());
177 bb_interface_data_changed(
Interface *interface)
throw()
180 if ( interface == __reader ) {
183 __writer->copy_values(__reader);
187 printf(
"%s: Data changed for unknown interface", bbil_name());
190 printf(
"%s: Exception when data changed\n", bbil_name());
206 main(
int argc,
char **argv)
208 signal(SIGINT, signal_handler);
221 for (InterfaceInfoList::iterator i = infl->begin(); i != infl->end(); ++i) {
222 const unsigned char *hash = (*i).hash();
223 char phash[__INTERFACE_HASH_SIZE * 2 + 1];
224 memset(phash, 0,
sizeof(phash));
225 for (
unsigned int j = 0; j < __INTERFACE_HASH_SIZE; ++j) {
226 sprintf(&phash[j * 2],
"%02x", hash[j]);
228 printf(
"%s::%s (%s), w:%i r:%u s:%u\n",
229 (*i).type(), (*i).id(), phash, (*i).has_writer(),
230 (*i).num_readers(), (*i).serial());
238 cout <<
"Opening interfaces.. " << flush;
246 cout <<
"failed! Aborting" << endl;
252 cout <<
"Trying to open second writer.. " << flush;
255 rbb->
close(ti_writer_two);
256 cout <<
"BUG: Detection of second writer did NOT work!" << endl;
259 cout <<
"exception caught as expected, detected and prevented second writer!" << endl;
263 cout <<
"Trying to open third writer.. " << flush;
266 cout <<
"No exception as expected, different ID ok!" << endl;
267 rbb->
close(ti_writer_three);
269 cout <<
"BUG: Third writer with different ID detected as another writer!" << endl;
274 <<
"Running data tests ==================================================" << endl;
276 cout <<
"Writing initial value ("
277 << TestInterface::TEST_CONSTANT <<
") into interface as TestInt" << endl;
278 ti_writer->
set_test_int( TestInterface::TEST_CONSTANT );
282 cout <<
"BUG: caught write denied exception" << endl;
286 cout <<
"Giving some time to have value processed" << endl;
289 cout <<
"Reading value from reader interface.. " << flush;
292 if ( val == TestInterface::TEST_CONSTANT ) {
293 cout <<
" success, value is " << ti_reader->
test_int() <<
" as expected" << endl;
295 cout <<
" failure, value is " << ti_reader->
test_int() <<
", expected "
296 << TestInterface::TEST_CONSTANT << endl;
299 cout <<
"Closing interfaces.. " << flush;
301 rbb->
close(ti_reader);
302 rbb->
close(ti_writer);
303 cout <<
"done" << endl;
305 cout <<
"failed" << endl;
309 cout << endl << endl <<
"Starting MESSAGING tests" << endl
310 <<
"Press Ctrl-C to continue with next test" << endl << endl;
315 printf(
"Writer serial: %u shifted: %u\n", ti_writer->
serial(), ti_writer->
serial() << 16);
316 printf(
"Reader serial: %u shifted: %u\n", ti_reader->
serial(), ti_reader->
serial() << 16);
318 test_messaging(ti_reader, ti_writer);
320 rbb->
close(ti_reader);
321 lbb->
close(ti_writer);
323 cout << endl << endl <<
"Starting MESSAGING tests, doing repeater scenario" << endl
324 <<
"Press Ctrl-C to continue with next test" << endl << endl;
348 printf(
"Writer serial: %u shifted: %u\n", ti_writer->
serial(), ti_writer->
serial() << 16);
349 printf(
"Reader serial: %u shifted: %u\n", ti_reader->
serial(), ti_reader->
serial() << 16);
353 test_messaging(ti_reader, ti_writer);
356 lbb->
close(ti_reader);
357 rbb->
close(ti_writer);
358 rep_rbb->
close(rep_reader);
359 lbb->
close(rep_writer);
363 cout <<
"Tests done" << endl;