libt2n: (tomj) fixed call of virtual function close() from destructor, fixed return...
[libt2n] / test / reentrant.cpp
index c08df62..7187ffe 100644 (file)
@@ -47,7 +47,7 @@ string testfunc(const string& str)
 
     // call handle, eventually reentrant
     if (global_server)
-        global_server->handle(1000);
+        global_server->handle(10000);
 
     return ret;
 }
@@ -124,8 +124,6 @@ class test_reentrant : public TestFixture
 
     CPPUNIT_TEST_SUITE_END();
 
-    pid_t child_pid;
-
     public:
 
     void setUp()
@@ -136,7 +134,7 @@ class test_reentrant : public TestFixture
 
     void ReentrantServer()
     {
-        switch(child_pid=fork())
+        switch(fork())
         {
             case -1:
             {
@@ -154,17 +152,31 @@ class test_reentrant : public TestFixture
                 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<testfunc_res*>(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<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\n";
+                        }
+                    }
+                } catch (exception &e)
+                {
+                    cerr << "caught exception: " << e.what() << endl;
                 }
 
                 // don't call atexit and stuff
@@ -174,16 +186,29 @@ 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;
             }