X-Git-Url: http://developer.intra2net.com/git/?p=libt2n;a=blobdiff_plain;f=test%2Freconnect.cpp;h=6474b51c0ee76133e230ec5b3b9bf3bc9dea4de7;hp=9e64a8e3919c6ef0a9e589e345982dea58da32bf;hb=0995cebb9189b872e8d7e58d8b8122fa00cc9061;hpb=4c3662a0b083759056b93c21e747e5551a8ddfcc diff --git a/test/reconnect.cpp b/test/reconnect.cpp index 9e64a8e..6474b51 100644 --- a/test/reconnect.cpp +++ b/test/reconnect.cpp @@ -52,13 +52,19 @@ class test_reconnect : public TestFixture CPPUNIT_TEST_SUITE_END(); + pid_t child_pid; + public: void setUp() { } void tearDown() - { } + { + // make sure the server-child is dead before the next test runs + kill(child_pid,SIGKILL); + sleep(1); + } void send_raw_socket(string hello_string, socket_server* ss, int conn_id) { @@ -71,9 +77,7 @@ class test_reconnect : public TestFixture void simple_reconnect() { - pid_t pid; - - switch(pid=fork()) + switch(child_pid=fork()) { case -1: { @@ -83,30 +87,36 @@ class test_reconnect : public TestFixture case 0: // child { - socket_server ss("./socket"); - - time_t t0 = time(NULL); - - // max 10 sec - while (time(NULL) < t0 + 10 ) + try { - ss.fill_buffer(1000000); + socket_server ss("./socket"); - string data; - unsigned int cid; + time_t t0 = time(NULL); - if(ss.get_packet(data,cid)) + // max 10 sec + while (time(NULL) < t0 + 10 ) { - server_connection* con=ss.get_connection(cid); + ss.fill_buffer(1000000); + + string data; + unsigned int cid; + + if(ss.get_packet(data,cid)) + { + server_connection* con=ss.get_connection(cid); - if (data=="QUIT") - break; + if (data=="QUIT") + break; - if (data=="x") - con->write(string().insert(0,100,'X')); - else - con->write(string().insert(0,100,'Y')); + if (data=="x") + con->write(string().insert(0,100,'X')); + else + con->write(string().insert(0,100,'Y')); + } } + } catch(...) + { + std::cerr << "exception in child. ignoring\n"; } // don't call atexit and stuff @@ -144,9 +154,7 @@ class test_reconnect : public TestFixture void reconnect_with_close() { - pid_t pid; - - switch(pid=fork()) + switch(child_pid=fork()) { case -1: { @@ -156,30 +164,36 @@ class test_reconnect : public TestFixture case 0: // child { - socket_server ss("./socket"); - - time_t t0 = time(NULL); - - // max 10 sec - while (time(NULL) < t0 + 10 ) + try { - ss.fill_buffer(1000000); + socket_server ss("./socket"); - string data; - unsigned int cid; + time_t t0 = time(NULL); - if(ss.get_packet(data,cid)) + // max 10 sec + while (time(NULL) < t0 + 10 ) { - server_connection* con=ss.get_connection(cid); + ss.fill_buffer(1000000); - if (data=="QUIT") - break; + string data; + unsigned int cid; - if (data=="x") - con->write(string().insert(0,100,'X')); - else - con->write(string().insert(0,100,'Y')); + if(ss.get_packet(data,cid)) + { + server_connection* con=ss.get_connection(cid); + + if (data=="QUIT") + break; + + if (data=="x") + con->write(string().insert(0,100,'X')); + else + con->write(string().insert(0,100,'Y')); + } } + } catch(...) + { + std::cerr << "exception in child. ignoring\n"; } // don't call atexit and stuff @@ -222,9 +236,7 @@ class test_reconnect : public TestFixture void reconnect_buffer_complete() { - pid_t pid; - - switch(pid=fork()) + switch(child_pid=fork()) { case -1: { @@ -234,28 +246,34 @@ class test_reconnect : public TestFixture case 0: // child { - socket_server ss("./socket"); - - time_t t0 = time(NULL); - - // max 10 sec - while (time(NULL) < t0 + 10 ) + try { - ss.fill_buffer(1000000); + socket_server ss("./socket"); - string data; - unsigned int cid; + time_t t0 = time(NULL); - if(ss.get_packet(data,cid)) + // max 10 sec + while (time(NULL) < t0 + 10 ) { - server_connection* con=ss.get_connection(cid); + ss.fill_buffer(1000000); + + string data; + unsigned int cid; - if (data=="QUIT") - break; + if(ss.get_packet(data,cid)) + { + server_connection* con=ss.get_connection(cid); + + if (data=="QUIT") + break; - if (data=="x") - con->write(string().insert(0,100,'X')); + if (data=="x") + con->write(string().insert(0,100,'X')); + } } + } catch(...) + { + std::cerr << "exception in child. ignoring\n"; } // don't call atexit and stuff @@ -290,11 +308,9 @@ class test_reconnect : public TestFixture void reconnect_buffer_several_complete() { - pid_t pid; - const int packets=3; - switch(pid=fork()) + switch(child_pid=fork()) { case -1: { @@ -304,31 +320,37 @@ class test_reconnect : public TestFixture case 0: // child { - socket_server ss("./socket"); - - time_t t0 = time(NULL); - - // max 10 sec - while (time(NULL) < t0 + 10 ) + try { - ss.fill_buffer(1000000); + socket_server ss("./socket"); - string data; - unsigned int cid; + time_t t0 = time(NULL); - if(ss.get_packet(data,cid)) + // max 10 sec + while (time(NULL) < t0 + 10 ) { - server_connection* con=ss.get_connection(cid); + ss.fill_buffer(1000000); - if (data=="QUIT") - break; + string data; + unsigned int cid; - if (data=="x") + if(ss.get_packet(data,cid)) { - for (int i=0; iwrite(string().insert(0,100,'X')); + server_connection* con=ss.get_connection(cid); + + if (data=="QUIT") + break; + + if (data=="x") + { + for (int i=0; iwrite(string().insert(0,100,'X')); + } } } + } catch(...) + { + std::cerr << "exception in child. ignoring\n"; } // don't call atexit and stuff @@ -380,9 +402,7 @@ class test_reconnect : public TestFixture void reconnect_buffer_no_incomplete1() { - pid_t pid; - - switch(pid=fork()) + switch(child_pid=fork()) { case -1: { @@ -392,31 +412,37 @@ class test_reconnect : public TestFixture case 0: // child { - socket_server ss("./socket"); - - time_t t0 = time(NULL); - - // max 10 sec - while (time(NULL) < t0 + 10 ) + try { - ss.fill_buffer(1000000); + socket_server ss("./socket"); - string data; - unsigned int cid; + time_t t0 = time(NULL); - if(ss.get_packet(data,cid)) + // max 10 sec + while (time(NULL) < t0 + 10 ) { - server_connection* con=ss.get_connection(cid); + ss.fill_buffer(1000000); - if (data=="QUIT") - break; + string data; + unsigned int cid; - if (data=="x") + if(ss.get_packet(data,cid)) { - con->write(string().insert(0,100,'X')); - send_raw_socket("aaaab",&ss,cid); + server_connection* con=ss.get_connection(cid); + + if (data=="QUIT") + break; + + if (data=="x") + { + con->write(string().insert(0,100,'X')); + send_raw_socket("aaaab",&ss,cid); + } } } + } catch(...) + { + std::cerr << "exception in child. ignoring\n"; } // don't call atexit and stuff @@ -458,9 +484,7 @@ class test_reconnect : public TestFixture void reconnect_buffer_no_incomplete2() { - pid_t pid; - - switch(pid=fork()) + switch(child_pid=fork()) { case -1: { @@ -470,42 +494,48 @@ class test_reconnect : public TestFixture case 0: // child { - socket_server ss("./socket"); - - time_t t0 = time(NULL); - - // max 10 sec - while (time(NULL) < t0 + 10 ) + try { - ss.fill_buffer(1000000); + socket_server ss("./socket"); - string data; - unsigned int cid; + time_t t0 = time(NULL); - if(ss.get_packet(data,cid)) + // max 10 sec + while (time(NULL) < t0 + 10 ) { - server_connection* con=ss.get_connection(cid); + ss.fill_buffer(1000000); - if (data=="QUIT") - break; + string data; + unsigned int cid; - if (data=="x") + if(ss.get_packet(data,cid)) { - con->write(string().insert(0,100,'X')); + server_connection* con=ss.get_connection(cid); - string blob=string().insert(0,100,'Y'); + if (data=="QUIT") + break; - // one byte will be missing... - int size=blob.size()+1; - char sizetransfer[sizeof(int)+1]; - memcpy(sizetransfer,(void*)&size,sizeof(int)); - sizetransfer[sizeof(int)+1]=0; + if (data=="x") + { + con->write(string().insert(0,100,'X')); + + string blob=string().insert(0,100,'Y'); - string packet=string(sizetransfer)+blob; + // one byte will be missing... + int size=blob.size()+1; + char sizetransfer[sizeof(int)+1]; + memcpy(sizetransfer,(void*)&size,sizeof(int)); + sizetransfer[sizeof(int)+1]=0; - send_raw_socket(packet,&ss,cid); + string packet=string(sizetransfer)+blob; + + send_raw_socket(packet,&ss,cid); + } } } + } catch(...) + { + std::cerr << "exception in child. ignoring\n"; } // don't call atexit and stuff