00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include <blackboard/internal/memory_manager.h>
00028 #include <blackboard/local.h>
00029 #include <blackboard/exceptions.h>
00030 #include <blackboard/bbconfig.h>
00031
00032 #include <interfaces/TestInterface.h>
00033
00034 #include <core/exceptions/system.h>
00035
00036 #include <signal.h>
00037 #include <cstdlib>
00038 #include <cstdio>
00039
00040 #include <iostream>
00041 #include <vector>
00042
00043 using namespace std;
00044 using namespace fawkes;
00045
00046
00047 bool quit = false;
00048
00049 void
00050 signal_handler(int signum)
00051 {
00052 quit = true;
00053 }
00054
00055
00056 #define NUM_CHUNKS 5
00057
00058 int
00059 main(int argc, char **argv)
00060 {
00061
00062 signal(SIGINT, signal_handler);
00063
00064 LocalBlackBoard *lbb = new LocalBlackBoard(BLACKBOARD_MEMSIZE);
00065
00066 BlackBoard *bb = lbb;
00067 const BlackBoardMemoryManager *mm = lbb->memory_manager();
00068
00069 TestInterface *ti_writer;
00070 TestInterface *ti_reader;
00071
00072 try {
00073 cout << "Opening interfaces.. " << flush;
00074 ti_writer = bb->open_for_writing<TestInterface>("SomeID");
00075 ti_reader = bb->open_for_reading<TestInterface>("SomeID");
00076 cout << "success, " <<
00077 "writer hash=" << ti_writer->hash_printable() <<
00078 " reader hash=" << ti_reader->hash_printable() << endl;
00079 } catch (Exception &e) {
00080 cout << "failed! Aborting" << endl;
00081 e.print_trace();
00082 exit(1);
00083 }
00084
00085 try {
00086 cout << "Trying to open second writer.. " << flush;
00087 TestInterface *ti_writer_two;
00088 ti_writer_two = bb->open_for_writing<TestInterface>("SomeID");
00089 cout << "BUG: Detection of second writer did NOT work!" << endl;
00090 exit(2);
00091 } catch (BlackBoardWriterActiveException &e) {
00092 cout << "exception caught as expected, detected and prevented second writer!" << endl;
00093 }
00094
00095 cout << "Printing some meminfo ===============================================" << endl;
00096 cout << "Free chunks:" << endl;
00097 mm->print_free_chunks_info();
00098 cout << "Allocated chunks:" << endl;
00099 mm->print_allocated_chunks_info();
00100 mm->print_performance_info();
00101 cout << "End of meminfo ======================================================" << endl;
00102
00103 try {
00104 cout << "Trying to open third writer.. " << flush;
00105 TestInterface *ti_writer_three;
00106 ti_writer_three = bb->open_for_writing<TestInterface>("AnotherID");
00107 cout << "No exception as expected, different ID ok!" << endl;
00108 bb->close(ti_writer_three);
00109 } catch (BlackBoardWriterActiveException &e) {
00110 cout << "BUG: Third writer with different ID detected as another writer!" << endl;
00111 exit(3);
00112 }
00113
00114 cout << endl << endl
00115 << "Running data tests ==================================================" << endl;
00116
00117 cout << "Writing initial value ("
00118 << TestInterface::TEST_CONSTANT << ") into interface as TestInt" << endl;
00119 ti_writer->set_test_int( TestInterface::TEST_CONSTANT );
00120 try {
00121 ti_writer->write();
00122 } catch (InterfaceWriteDeniedException &e) {
00123 cout << "BUG: caught write denied exception" << endl;
00124 e.print_trace();
00125 }
00126
00127 cout << "Reading value from reader interface.. " << flush;
00128 ti_reader->read();
00129 int val = ti_reader->test_int();
00130 if ( val == TestInterface::TEST_CONSTANT ) {
00131 cout << " success, value is " << ti_reader->test_int() << " as expected" << endl;
00132 } else {
00133 cout << " failure, value is " << ti_reader->test_int() << ", expected "
00134 << TestInterface::TEST_CONSTANT << endl;
00135 }
00136
00137
00138 cout << "Iterating over reader interface.." << endl;
00139 InterfaceFieldIterator fi;
00140 for ( fi = ti_reader->fields(); fi != ti_reader->fields_end(); ++fi) {
00141 printf("Name: %20s Type: %10s Value: %s\n", fi.get_name(), fi.get_typename(), fi.get_value_string());
00142 }
00143 cout << "done" << endl;
00144
00145 cout << "Harnessing interface by excessive reading and writing, use Ctrl-C to interrupt" << endl
00146 << "If you do not see any output everything is fine" << endl;
00147 while ( ! quit ) {
00148 int expval = ti_reader->test_int() + 1;
00149
00150
00151 ti_writer->set_test_int( expval );
00152 try {
00153 ti_writer->write();
00154 } catch (InterfaceWriteDeniedException &e) {
00155 cout << "BUG: caught write denied exception" << endl;
00156 e.print_trace();
00157 }
00158
00159
00160 ti_reader->read();
00161 int val = ti_reader->test_int();
00162 if ( val == expval ) {
00163
00164 } else {
00165 cout << " failure, value is " << ti_reader->test_int() << ", expected "
00166 << expval << endl;
00167 }
00168
00169 usleep(10);
00170 }
00171
00172 cout << "Tests done" << endl;
00173
00174 bb->close(ti_reader);
00175 bb->close(ti_writer);
00176
00177 delete bb;
00178 }
00179
00180
00181