26 #include <blackboard/bbconfig.h>
27 #include <blackboard/exceptions.h>
28 #include <blackboard/interface_listener.h>
29 #include <blackboard/local.h>
30 #include <blackboard/remote.h>
31 #include <core/exceptions/system.h>
32 #include <interface/interface_info.h>
33 #include <interfaces/TestInterface.h>
34 #include <netcomm/fawkes/client.h>
35 #include <netcomm/fawkes/server_thread.h>
36 #include <utils/time/time.h>
51 signal_handler(
int signum)
62 int expval = ti_reader->
test_int() + 1;
65 printf(
"Sent with message ID %u\n", msgid);
68 cout <<
"Error, more than one message! flushing." << endl;
78 "Received message of ID %u, Message improperly detected to be a SetTestStringMessage\n",
84 printf(
"Received message with ID %u (enqueue time: %s)\n",
91 cout <<
"BUG: caught write denied exception" << endl;
96 cout <<
"Illegal message '" << ti_writer->
msgq_first()->
type() <<
"' type received" << endl;
107 cout <<
" failure, value is " << ti_reader->
test_int() <<
", expected " << expval << endl;
110 printf(
"No message in queue, if network test this means the message was dropped\n");
128 reader_bb_ = reader_bb;
129 writer_bb_ = writer_bb;
131 bbil_add_data_interface(reader_);
132 bbil_add_message_interface(writer_);
134 reader_bb_->register_listener(
this);
135 writer_bb_->register_listener(
this);
141 reader_bb_->unregister_listener(
this);
142 writer_bb_->unregister_listener(
this);
146 bb_interface_message_received(
Interface *interface,
Message *message)
throw()
149 if (interface == writer_) {
150 printf(
"%s: Forwarding message\n", bbil_name());
154 reader_->msgq_enqueue(m);
155 message->set_id(m->
id());
160 printf(
"%s: Message received for unknown interface\n", bbil_name());
164 printf(
"%s: Exception when message received\n", bbil_name());
171 bb_interface_data_changed(
Interface *interface)
throw()
174 if (interface == reader_) {
177 writer_->copy_values(reader_);
181 printf(
"%s: Data changed for unknown interface", bbil_name());
184 printf(
"%s: Exception when data changed\n", bbil_name());
198 main(
int argc,
char **argv)
200 signal(SIGINT, signal_handler);
213 for (InterfaceInfoList::iterator i = infl->begin(); i != infl->end(); ++i) {
214 const unsigned char *hash = (*i).hash();
215 char phash[INTERFACE_HASH_SIZE_ * 2 + 1];
216 memset(phash, 0,
sizeof(phash));
217 for (
unsigned int j = 0; j < INTERFACE_HASH_SIZE_; ++j) {
218 sprintf(&phash[j * 2],
"%02x", hash[j]);
220 printf(
"%s::%s (%s), w:%i r:%u s:%u\n",
234 cout <<
"Opening interfaces.. " << flush;
241 cout <<
"failed! Aborting" << endl;
247 cout <<
"Trying to open second writer.. " << flush;
250 rbb->
close(ti_writer_two);
251 cout <<
"BUG: Detection of second writer did NOT work!" << endl;
254 cout <<
"exception caught as expected, detected and prevented second writer!" << endl;
258 cout <<
"Trying to open third writer.. " << flush;
261 cout <<
"No exception as expected, different ID ok!" << endl;
262 rbb->
close(ti_writer_three);
264 cout <<
"BUG: Third writer with different ID detected as another writer!" << endl;
270 <<
"Running data tests ==================================================" << endl;
272 cout <<
"Writing initial value (" << TestInterface::TEST_CONSTANT <<
") into interface as TestInt"
278 cout <<
"BUG: caught write denied exception" << endl;
282 cout <<
"Giving some time to have value processed" << endl;
285 cout <<
"Reading value from reader interface.. " << flush;
288 if (val == TestInterface::TEST_CONSTANT) {
289 cout <<
" success, value is " << ti_reader->
test_int() <<
" as expected" << endl;
291 cout <<
" failure, value is " << ti_reader->
test_int() <<
", expected "
292 << TestInterface::TEST_CONSTANT << endl;
295 cout <<
"Closing interfaces.. " << flush;
297 rbb->
close(ti_reader);
298 rbb->
close(ti_writer);
299 cout <<
"done" << endl;
301 cout <<
"failed" << endl;
307 <<
"Starting MESSAGING tests" << endl
308 <<
"Press Ctrl-C to continue with next test" << endl
314 printf(
"Writer serial: %u shifted: %u\n", ti_writer->
serial(), ti_writer->
serial() << 16);
315 printf(
"Reader serial: %u shifted: %u\n", ti_reader->
serial(), ti_reader->
serial() << 16);
317 test_messaging(ti_reader, ti_writer);
319 rbb->
close(ti_reader);
320 lbb->
close(ti_writer);
324 <<
"Starting MESSAGING tests, doing repeater scenario" << endl
325 <<
"Press Ctrl-C to continue with next test" << endl
350 printf(
"Writer serial: %u shifted: %u\n", ti_writer->
serial(), ti_writer->
serial() << 16);
351 printf(
"Reader serial: %u shifted: %u\n", ti_reader->
serial(), ti_reader->
serial() << 16);
355 test_messaging(ti_reader, ti_writer);
358 lbb->
close(ti_reader);
359 rbb->
close(ti_writer);
360 rep_rbb->
close(rep_reader);
361 lbb->
close(rep_writer);
365 cout <<
"Tests done" << endl;