#include <sstream>
#include <stdexcept>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-#include <cppunit/extensions/HelperMacros.h>
+#define BOOST_TEST_DYN_LINK
+#include <boost/test/unit_test.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <command_server.hxx>
using namespace std;
-using namespace CppUnit;
using namespace libt2n;
namespace reentrant
using namespace reentrant;
-class test_reentrant : public TestFixture
-{
- CPPUNIT_TEST_SUITE(test_reentrant);
-
- CPPUNIT_TEST(ReentrantServer);
-
- CPPUNIT_TEST_SUITE_END();
-
- public:
+BOOST_AUTO_TEST_SUITE(test_reentrant)
- void setUp()
- { }
-
- void tearDown()
- { }
-
- void ReentrantServer()
+BOOST_AUTO_TEST_CASE(ReentrantServer)
+{
+ switch(fork())
{
- switch(fork())
+ case -1:
{
- case -1:
- {
- CPPUNIT_FAIL("fork error");
- break;
- }
- case 0:
- // child
- {
- // wait till server is up
- sleep(2);
+ BOOST_FAIL("fork error");
+ break;
+ }
+ case 0:
+ // child
+ {
+ // wait till server is up
+ sleep(2);
- // hammer the server
- for (int i = 0; i < fork_count; i++)
- fork();
+ // hammer the server
+ for (int i = 0; i < fork_count; i++)
+ fork();
- try
+ try
+ {
+ for (int i=0; i < requests_per_child; i++)
{
- for (int i=0; i < requests_per_child; i++)
+ socket_client_connection sc("./socket");
+ // sc.set_logging(&cerr,debug);
+ command_client cc(&sc);
+
+ result_container rc;
+ cc.send_command(new testfunc_cmd("hello"),rc);
+
+ testfunc_res *res = dynamic_cast<testfunc_res*>(rc.get_result());
+ if (res)
{
- socket_client_connection sc("./socket");
- // sc.set_logging(&cerr,debug);
- command_client cc(&sc);
-
- result_container rc;
- cc.send_command(new testfunc_cmd("hello"),rc);
-
- testfunc_res *res = dynamic_cast<testfunc_res*>(rc.get_result());
- if (res)
- {
- string ret = res->get_data();
- if (ret != "hello, testfunc() was here")
- std::cout << "ERROR reentrant server testfunc_res failed, res: \"" << ret << "\"\n";
- }
- else
- {
- std::cout << "ERROR result from reentrant server empty (" << rc.get_result() << ")\n";
- }
+ string ret = res->get_data();
+ if (ret != "hello, testfunc() was here")
+ std::cout << "ERROR reentrant server testfunc_res failed, res: \"" << ret << "\"\n";
+ }
+ else
+ {
+ std::cout << "ERROR result from reentrant server empty (" << rc.get_result() << ")\n";
}
- } catch (exception &e)
- {
- cerr << "caught exception: " << e.what() << endl;
- } catch(...)
- {
- std::cerr << "exception in child. ignoring\n";
}
-
- // don't call atexit and stuff
- _exit(0);
+ } catch (exception &e)
+ {
+ cerr << "caught exception: " << e.what() << endl;
+ } catch(...)
+ {
+ std::cerr << "exception in child. ignoring\n";
}
- default:
- // parent
- {
- // don't kill us on broken pipe
- signal(SIGPIPE, SIG_IGN);
+ // don't call atexit and stuff
+ _exit(0);
+ }
- socket_server ss("./socket");
- command_server cs(ss);
+ default:
+ // parent
+ {
+ // don't kill us on broken pipe
+ signal(SIGPIPE, SIG_IGN);
- global_server=&cs;
+ socket_server ss("./socket");
+ command_server cs(ss);
- // Wait until all requests have successed
- int safety_check = 0;
- while (seen_client_requests < all_requests)
- {
- ++safety_check;
- if (safety_check > 10) {
- std::cerr << "reached safety check, aborting.\n";
- break;
- }
+ global_server=&cs;
- long long maxtime=1000000;
- while(maxtime > 0)
- cs.handle(maxtime,&maxtime);
+ // Wait until all requests have successed
+ int safety_check = 0;
+ while (seen_client_requests < all_requests)
+ {
+ ++safety_check;
+ if (safety_check > 10) {
+ std::cerr << "reached safety check, aborting.\n";
+ break;
}
- global_server = NULL;
+ long long maxtime=1000000;
+ while(maxtime > 0)
+ cs.handle(maxtime,&maxtime);
}
- // we are still alive, everything is ok
- CPPUNIT_ASSERT_EQUAL(all_requests, seen_client_requests);
+ global_server = NULL;
}
- }
-
-};
+ // we are still alive, everything is ok
+ BOOST_CHECK_EQUAL(all_requests, seen_client_requests);
+ }
+}
-CPPUNIT_TEST_SUITE_REGISTRATION(test_reentrant);
+BOOST_AUTO_TEST_SUITE_END()