All random numbers generated via one PRNG seeded in one place.
[invirt/third/libt4.git] / rpc / rpctest.cc
index f8395e9..051e564 100644 (file)
@@ -13,7 +13,7 @@
 
 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;
 
 using std::cout;
@@ -59,7 +59,7 @@ int srv::handle_fast(int & r, const int a) {
 }
 
 int srv::handle_slow(int & r, const int a) {
-    usleep(random() % 500);
+    usleep(std::uniform_int_distribution<useconds_t>(0,500)(global->random_generator));
     r = a + 2;
     return 0;
 }
@@ -122,7 +122,7 @@ static void client1(size_t cl) {
     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);
@@ -134,8 +134,8 @@ 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++){
-        int which = (random() % 2);
-        int arg = (random() % 1000);
+        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();
@@ -157,7 +157,7 @@ static void client2(size_t cl) {
     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)
@@ -255,7 +255,7 @@ static void lossy_test() {
 
     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);
     }
 
@@ -281,7 +281,7 @@ static void failure_test() {
 
     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;
 
@@ -296,7 +296,7 @@ static void failure_test() {
 
     delete client;
 
-    clients[0] = client = new rpcc(dst);
+    clients[0] = client = new rpcc(*dst);
     VERIFY (client->bind() >= 0);
     VERIFY (client->bind() < 0);
 
@@ -324,7 +324,7 @@ static void failure_test() {
     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;
 
@@ -351,7 +351,6 @@ int main(int argc, char *argv[]) {
     bool isclient = false;
     bool isserver = false;
 
-    srandom((uint32_t)getpid());
     port = 20000 + (getpid() % 10000);
 
     int ch = 0;
@@ -382,7 +381,7 @@ int main(int argc, char *argv[]) {
     }
 
     if (debug_level > 0) {
-        DEBUG_LEVEL = debug_level;
+        global->DEBUG_LEVEL = debug_level;
         IF_LEVEL(1) LOG_NONMEMBER << "DEBUG LEVEL: " << debug_level;
     }
 
@@ -395,7 +394,7 @@ int main(int argc, char *argv[]) {
 
     if (isclient) {
         // server's address.
-        dst = "127.0.0.1:" + std::to_string(port);
+        dst = new string("127.0.0.1:" + std::to_string(port));
 
 
         // start the client.  bind it to the server.
@@ -404,7 +403,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++) {
-            clients[i] = new rpcc(dst);
+            clients[i] = new rpcc(*dst);
             VERIFY (clients[i]->bind() == 0);
         }