All sleep calls via std::this_thread
[invirt/third/libt4.git] / rpc / rpctest.cc
index f7df5fe..0435ab1 100644 (file)
@@ -7,16 +7,20 @@
 #include <getopt.h>
 #include <unistd.h>
 #include <string.h>
 #include <getopt.h>
 #include <unistd.h>
 #include <string.h>
+#include "threaded_log.h"
 
 #define NUM_CL 2
 
 
 #define NUM_CL 2
 
-char log_thread_prefix = 'r';
-
 static rpcs *server;  // server rpc object
 static rpcc *clients[NUM_CL];  // client rpc object
 static rpcs *server;  // server rpc object
 static rpcc *clients[NUM_CL];  // client rpc object
-static string dst; //server's ip address
+static string * dst; //server's ip address
 static in_port_t port;
 
 static in_port_t port;
 
+using std::cout;
+using std::endl;
+using namespace std::chrono;
+using std::vector;
+
 // server-side handlers. they must be methods of some class
 // to simplify rpcs::reg(). a server process can have handlers
 // from multiple classes.
 // server-side handlers. they must be methods of some class
 // to simplify rpcs::reg(). a server process can have handlers
 // from multiple classes.
@@ -55,7 +59,8 @@ int srv::handle_fast(int & r, const int a) {
 }
 
 int srv::handle_slow(int & r, const int a) {
 }
 
 int srv::handle_slow(int & r, const int a) {
-    usleep(random() % 500);
+    int us = std::uniform_int_distribution<>(0,500)(global->random_generator);
+    std::this_thread::sleep_for(microseconds(us));
     r = a + 2;
     return 0;
 }
     r = a + 2;
     return 0;
 }
@@ -79,7 +84,7 @@ static void startserver() {
 static void testmarshall() {
     marshall m;
     rpc_protocol::request_header rh{1,2,3,4,5};
 static void testmarshall() {
     marshall m;
     rpc_protocol::request_header rh{1,2,3,4,5};
-    m.pack_header(rh);
+    m.write_header(rh);
     VERIFY(((string)m).size()==rpc_protocol::RPC_HEADER_SZ);
     int i = 12345;
     unsigned long long l = 1223344455L;
     VERIFY(((string)m).size()==rpc_protocol::RPC_HEADER_SZ);
     int i = 12345;
     unsigned long long l = 1223344455L;
@@ -97,7 +102,7 @@ static void testmarshall() {
 
     unmarshall un(b, true);
     rpc_protocol::request_header rh1;
 
     unmarshall un(b, true);
     rpc_protocol::request_header rh1;
-    un.unpack_header(rh1);
+    un.read_header(rh1);
     VERIFY(memcmp(&rh,&rh1,sizeof(rh))==0);
     int i1;
     unsigned long long l1;
     VERIFY(memcmp(&rh,&rh1,sizeof(rh))==0);
     int i1;
     unsigned long long l1;
@@ -118,7 +123,7 @@ static void client1(size_t cl) {
     size_t which_cl = cl % NUM_CL;
 
     for(int i = 0; i < 100; i++){
     size_t which_cl = cl % NUM_CL;
 
     for(int i = 0; i < 100; i++){
-        unsigned long arg = (random() % 2000);
+        auto arg = std::uniform_int_distribution<unsigned long>(0,2000)(global->random_generator);
         string rep;
         int ret = clients[which_cl]->call(srv_protocol::bigrep, rep, arg);
         VERIFY(ret == 0);
         string rep;
         int ret = clients[which_cl]->call(srv_protocol::bigrep, rep, arg);
         VERIFY(ret == 0);
@@ -130,9 +135,9 @@ static void client1(size_t cl) {
     // test rpc replies coming back not in the order of
     // the original calls -- i.e. does xid reply dispatch work.
     for(int i = 0; i < 100; i++){
     // test rpc replies coming back not in the order of
     // the original calls -- i.e. does xid reply dispatch work.
     for(int i = 0; i < 100; i++){
-        int which = (random() % 2);
-        int arg = (random() % 1000);
-        int rep;
+        bool which = std::bernoulli_distribution()(global->random_generator);
+        int arg = std::uniform_int_distribution<>(0,1000)(global->random_generator);
+        int rep = -1;
 
         auto start = steady_clock::now();
 
 
         auto start = steady_clock::now();
 
@@ -153,7 +158,7 @@ static void client2(size_t cl) {
     time(&t1);
 
     while(time(0) - t1 < 10){
     time(&t1);
 
     while(time(0) - t1 < 10){
-        unsigned long arg = (random() % 2000);
+        auto arg = std::uniform_int_distribution<unsigned long>(0,2000)(global->random_generator);
         string rep;
         int ret = clients[which_cl]->call(srv_protocol::bigrep, rep, arg);
         if ((unsigned long)rep.size()!=arg)
         string rep;
         int ret = clients[which_cl]->call(srv_protocol::bigrep, rep, arg);
         if ((unsigned long)rep.size()!=arg)
@@ -251,7 +256,7 @@ static void lossy_test() {
 
     for (int i = 0; i < NUM_CL; i++) {
         delete clients[i];
 
     for (int i = 0; i < NUM_CL; i++) {
         delete clients[i];
-        clients[i] = new rpcc(dst);
+        clients[i] = new rpcc(*dst);
         VERIFY(clients[i]->bind()==0);
     }
 
         VERIFY(clients[i]->bind()==0);
     }
 
@@ -277,7 +282,7 @@ static void failure_test() {
 
     delete server;
 
 
     delete server;
 
-    client1 = new rpcc(dst);
+    client1 = new rpcc(*dst);
     VERIFY (client1->bind(milliseconds(3000)) < 0);
     cout << "   -- create new client and try to bind to failed server .. failed ok" << endl;
 
     VERIFY (client1->bind(milliseconds(3000)) < 0);
     cout << "   -- create new client and try to bind to failed server .. failed ok" << endl;
 
@@ -292,7 +297,7 @@ static void failure_test() {
 
     delete client;
 
 
     delete client;
 
-    clients[0] = client = new rpcc(dst);
+    clients[0] = client = new rpcc(*dst);
     VERIFY (client->bind() >= 0);
     VERIFY (client->bind() < 0);
 
     VERIFY (client->bind() >= 0);
     VERIFY (client->bind() < 0);
 
@@ -320,7 +325,7 @@ static void failure_test() {
     delete client;
 
     startserver();
     delete client;
 
     startserver();
-    clients[0] = client = new rpcc(dst);
+    clients[0] = client = new rpcc(*dst);
     VERIFY (client->bind() >= 0);
     cout << "   -- delete existing rpc client and server, create replacements.. ok" << endl;
 
     VERIFY (client->bind() >= 0);
     cout << "   -- delete existing rpc client and server, create replacements.. ok" << endl;
 
@@ -338,6 +343,7 @@ static void failure_test() {
 }
 
 int main(int argc, char *argv[]) {
 }
 
 int main(int argc, char *argv[]) {
+    global = new t4_state('r');
 
     setvbuf(stdout, NULL, _IONBF, 0);
     setvbuf(stderr, NULL, _IONBF, 0);
 
     setvbuf(stdout, NULL, _IONBF, 0);
     setvbuf(stderr, NULL, _IONBF, 0);
@@ -346,7 +352,6 @@ int main(int argc, char *argv[]) {
     bool isclient = false;
     bool isserver = false;
 
     bool isclient = false;
     bool isserver = false;
 
-    srandom((uint32_t)getpid());
     port = 20000 + (getpid() % 10000);
 
     int ch = 0;
     port = 20000 + (getpid() % 10000);
 
     int ch = 0;
@@ -377,8 +382,8 @@ int main(int argc, char *argv[]) {
     }
 
     if (debug_level > 0) {
     }
 
     if (debug_level > 0) {
-        DEBUG_LEVEL = debug_level;
-        IF_LEVEL(1) LOG_NONMEMBER("DEBUG LEVEL: " << debug_level);
+        global->DEBUG_LEVEL = debug_level;
+        IF_LEVEL(1) LOG_NONMEMBER << "DEBUG LEVEL: " << debug_level;
     }
 
     testmarshall();
     }
 
     testmarshall();
@@ -390,7 +395,7 @@ int main(int argc, char *argv[]) {
 
     if (isclient) {
         // server's address.
 
     if (isclient) {
         // server's address.
-        dst = "127.0.0.1:" + to_string(port);
+        dst = new string("127.0.0.1:" + std::to_string(port));
 
 
         // start the client.  bind it to the server.
 
 
         // start the client.  bind it to the server.
@@ -399,7 +404,7 @@ int main(int argc, char *argv[]) {
         // be only one rpcc per process. you probably need one
         // rpcc per server.
         for (int i = 0; i < NUM_CL; i++) {
         // be only one rpcc per process. you probably need one
         // rpcc per server.
         for (int i = 0; i < NUM_CL; i++) {
-            clients[i] = new rpcc(dst);
+            clients[i] = new rpcc(*dst);
             VERIFY (clients[i]->bind() == 0);
         }
 
             VERIFY (clients[i]->bind() == 0);
         }
 
@@ -416,5 +421,5 @@ int main(int argc, char *argv[]) {
     }
 
     while (1)
     }
 
     while (1)
-        usleep(100000);
+        std::this_thread::sleep_for(milliseconds(100));
 }
 }