X-Git-Url: http://developer.intra2net.com/git/?p=libt2n;a=blobdiff_plain;f=test%2Freentrant.cpp;h=7187ffe0d97af0b3712a5f536b4e6d90de0b7e2c;hp=bb9420a4db0d118d5f0937d09cb6289a7d6a0f37;hb=56f3994d74dbc36d10bfa83b50b016bf269ac563;hpb=3b2543e7dfd705d6e624560dd5a681898c0f242c diff --git a/test/reentrant.cpp b/test/reentrant.cpp index bb9420a..7187ffe 100644 --- a/test/reentrant.cpp +++ b/test/reentrant.cpp @@ -38,7 +38,7 @@ using namespace libt2n; namespace { -command_server *global_server; +command_server *global_server = NULL; string testfunc(const string& str) { @@ -46,7 +46,8 @@ string testfunc(const string& str) ret=str+", testfunc() was here"; // call handle, eventually reentrant - global_server->handle(1000); + if (global_server) + global_server->handle(10000); return ret; } @@ -123,8 +124,6 @@ class test_reentrant : public TestFixture CPPUNIT_TEST_SUITE_END(); - pid_t child_pid; - public: void setUp() @@ -135,7 +134,7 @@ class test_reentrant : public TestFixture void ReentrantServer() { - switch(child_pid=fork()) + switch(fork()) { case -1: { @@ -146,24 +145,38 @@ class test_reentrant : public TestFixture // child { // wait till server is up - sleep(1); + sleep(3); // we want 8 identical childs hammering the server fork(); fork(); fork(); - for (int i=0; i < 100; i++) + try { - socket_client_connection sc("./socket"); - command_client cc(&sc); - - result_container rc; - cc.send_command(new testfunc_cmd("hello"),rc); - - string ret=dynamic_cast(rc.get_result())->get_data(); - - CPPUNIT_ASSERT_EQUAL(string("hello, testfunc() was here"),ret); + for (int i=0; i < 100; i++) + { + socket_client_connection sc("./socket"); + command_client cc(&sc); + + result_container rc; + cc.send_command(new testfunc_cmd("hello"),rc); + + testfunc_res *res = dynamic_cast(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\n"; + } + } + } catch (exception &e) + { + cerr << "caught exception: " << e.what() << endl; } // don't call atexit and stuff @@ -173,15 +186,30 @@ class test_reentrant : public TestFixture default: // parent { + // don't kill us on broken pipe + signal(SIGPIPE, SIG_IGN); + socket_server ss("./socket"); command_server cs(ss); global_server=&cs; // max 10 sec - long long maxtime=5000000; + long long maxtime=1000000; while(maxtime > 0) cs.handle(maxtime,&maxtime); + + // max 10 sec + maxtime=1000000; + while(maxtime > 0) + cs.handle(maxtime,&maxtime); + + // max 10 sec + maxtime=1000000; + while(maxtime > 0) + cs.handle(maxtime,&maxtime); + + global_server = NULL; } // we are still alive, everything is ok