X-Git-Url: http://developer.intra2net.com/git/?p=libt2n;a=blobdiff_plain;f=test%2Fcallback.cpp;h=d3bdfa8e652350867ed4b98a79f0fdf0ea9f72e3;hp=bc951b958fe0d838299ee4bce6ccb5a8cd70636b;hb=19facd8558fe2e32ce843860b40631ebe03ff3cf;hpb=af84dfb53a739a0c8c343d9172f1847fa908906d diff --git a/test/callback.cpp b/test/callback.cpp index bc951b9..d3bdfa8 100644 --- a/test/callback.cpp +++ b/test/callback.cpp @@ -1,9 +1,24 @@ -/*************************************************************************** - * Copyright (C) 2004 by Intra2net AG * - * info@intra2net.com * - * * - ***************************************************************************/ +/* +Copyright (C) 2004 by Intra2net AG +The software in this package is distributed under the GNU General +Public License version 2 (with a special exception described below). + +A copy of GNU General Public License (GPL) is included in this distribution, +in the file COPYING.GPL. + +As a special exception, if other files instantiate templates or use macros +or inline functions from this file, or you compile this file and link it +with other works to produce a work based on this file, this file +does not by itself cause the resulting work to be covered +by the GNU General Public License. + +However the source code for this file must still be made available +in accordance with section (3) of the GNU General Public License. + +This exception does not invalidate any other reasons why a work based +on this file might be covered by the GNU General Public License. +*/ #include #include #include @@ -44,6 +59,8 @@ class test_callback : public TestFixture std::vector callback_done; + pid_t child_pid; + public: void setUp() @@ -54,6 +71,10 @@ class test_callback : public TestFixture void tearDown() { callback_done.clear(); + + // make sure the server-child is dead before the next test runs + kill(child_pid,SIGKILL); + sleep(1); } void callback_func(callback_event_type ev, int conn_id) @@ -67,9 +88,7 @@ class test_callback : public TestFixture void ServerNewConnCallback() { - pid_t pid; - - switch(pid=fork()) + switch(child_pid=fork()) { case -1: { @@ -79,20 +98,26 @@ class test_callback : public TestFixture case 0: // child { - string data; - // wait till server is up - sleep(1); - + try { - socket_client_connection sc("./socket"); + string data; + // wait till server is up + sleep(1); - sc.write("ABC"); + { + socket_client_connection sc("./socket"); - // wait half a sec - sc.fill_buffer(500000); - sc.get_packet(data); + sc.write("ABC"); - // close the connection + // wait half a sec + sc.fill_buffer(500000); + sc.get_packet(data); + + // close the connection + } + } catch(...) + { + std::cerr << "exception in child. ignoring\n"; } // don't call atexit and stuff @@ -128,9 +153,7 @@ class test_callback : public TestFixture void ServerConnClosedCallback() { - pid_t pid; - - switch(pid=fork()) + switch(child_pid=fork()) { case -1: { @@ -140,20 +163,26 @@ class test_callback : public TestFixture case 0: // child { - string data; - // wait till server is up - sleep(1); - + try { - socket_client_connection sc("./socket"); + string data; + // wait till server is up + sleep(1); - sc.write("ABC"); + { + socket_client_connection sc("./socket"); - // wait half a sec - sc.fill_buffer(500000); - sc.get_packet(data); + sc.write("ABC"); - // close the connection + // wait half a sec + sc.fill_buffer(500000); + sc.get_packet(data); + + // close the connection + } + } catch(...) + { + std::cerr << "exception in child. ignoring\n"; } // don't call atexit and stuff @@ -189,9 +218,7 @@ class test_callback : public TestFixture void ServerConnDeletedCallback() { - pid_t pid; - - switch(pid=fork()) + switch(child_pid=fork()) { case -1: { @@ -201,20 +228,26 @@ class test_callback : public TestFixture case 0: // child { - string data; - // wait till server is up - sleep(1); - + try { - socket_client_connection sc("./socket"); + string data; + // wait till server is up + sleep(1); - sc.write("ABC"); + { + socket_client_connection sc("./socket"); - // wait half a sec - sc.fill_buffer(500000); - sc.get_packet(data); + sc.write("ABC"); + + // wait half a sec + sc.fill_buffer(500000); + sc.get_packet(data); - // close the connection + // close the connection + } + } catch(...) + { + std::cerr << "exception in child. ignoring\n"; } // don't call atexit and stuff @@ -253,9 +286,7 @@ class test_callback : public TestFixture void ServerCallbackOrder() { - pid_t pid; - - switch(pid=fork()) + switch(child_pid=fork()) { case -1: { @@ -265,22 +296,28 @@ class test_callback : public TestFixture case 0: // child { - string data; - // wait till server is up - sleep(1); - + try { - socket_client_connection sc("./socket"); + string data; + // wait till server is up + sleep(1); - sc.write("1"); + { + socket_client_connection sc("./socket"); - // wait half a sec - sc.fill_buffer(500000); - sc.get_packet(data); + sc.write("1"); - sc.write("2"); + // wait half a sec + sc.fill_buffer(500000); + sc.get_packet(data); - // close the connection + sc.write("2"); + + // close the connection + } + } catch(...) + { + std::cerr << "exception in child. ignoring\n"; } // don't call atexit and stuff @@ -336,9 +373,7 @@ class test_callback : public TestFixture void ClientConnClosedCallback() { - pid_t pid; - - switch(pid=fork()) + switch(child_pid=fork()) { case -1: { @@ -348,18 +383,25 @@ class test_callback : public TestFixture case 0: // child { - socket_server ss("./socket"); - - // max 3 sec - for (int i=0; i < 3; i++) + try { - ss.fill_buffer(1000000); + socket_server ss("./socket"); - string data; - unsigned int cid; - if(ss.get_packet(data,cid)) - break; + // max 3 sec + for (int i=0; i < 3; i++) + { + ss.fill_buffer(1000000); + + string data; + unsigned int cid; + if(ss.get_packet(data,cid)) + break; + } + } catch(...) + { + std::cerr << "exception in child. ignoring\n"; } + // don't call atexit and stuff _exit(0); } @@ -390,9 +432,7 @@ class test_callback : public TestFixture void ClientConnDeletedCallback() { - pid_t pid; - - switch(pid=fork()) + switch(child_pid=fork()) { case -1: { @@ -402,18 +442,25 @@ class test_callback : public TestFixture case 0: // child { - socket_server ss("./socket"); - - // max 3 sec - for (int i=0; i < 3; i++) + try { - ss.fill_buffer(1000000); + socket_server ss("./socket"); - string data; - unsigned int cid; - if(ss.get_packet(data,cid)) - break; + // max 3 sec + for (int i=0; i < 3; i++) + { + ss.fill_buffer(1000000); + + string data; + unsigned int cid; + if(ss.get_packet(data,cid)) + break; + } + } catch(...) + { + std::cerr << "exception in child. ignoring\n"; } + // don't call atexit and stuff _exit(0); }