diff --git a/test/selftest.cpp b/test/selftest.cpp index b9053d4..3559e8b 100644 --- a/test/selftest.cpp +++ b/test/selftest.cpp @@ -342,7 +342,6 @@ void tcp_client_4(TCP_UNIT_TEST_SIG_4) r = READ(fd, rbuf, len); DEBUG_TEST("Sent : %s", msg.c_str()); DEBUG_TEST("Received : %s", rbuf); - sleep(WAIT_FOR_TRANSMISSION_TO_COMPLETE); err = CLOSE(fd); sprintf(details, "%s, err=%d, r=%d, w=%d", testname.c_str(), err, r, w); *passed = (w == len && r == len && !err) && !strcmp(rbuf, msg.c_str()); @@ -380,13 +379,14 @@ void tcp_server_4(TCP_UNIT_TEST_SIG_4) *passed = false; return; } - struct sockaddr_in client; socklen_t client_addrlen = sizeof(sockaddr_in); - if((client_fd = ACCEPT(fd, (struct sockaddr *)&client, &client_addrlen)) < 0) - fprintf(stderr,"error accepting connection (%d)\n", err); + if((client_fd = ACCEPT(fd, (struct sockaddr *)&client, &client_addrlen)) < 0) { + perror("accept"); + *passed = false; + return; + } DEBUG_TEST("accepted connection from %s, on port %d", inet_ntoa(client.sin_addr), ntohs(client.sin_port)); - // TODO: Put this test in the general API section struct sockaddr_storage peer_addr; struct sockaddr_in *in4 = (struct sockaddr_in*)&peer_addr; @@ -397,13 +397,10 @@ void tcp_server_4(TCP_UNIT_TEST_SIG_4) *passed = false; return; } - DEBUG_TEST("getpeername() => %s : %d", inet_ntoa(in4->sin_addr), ntohs(in4->sin_port)); - - r = READ(client_fd, rbuf, sizeof rbuf); + r = READ(client_fd, rbuf, len); w = WRITE(client_fd, rbuf, len); - DEBUG_TEST("Received : %s", rbuf); - sleep(WAIT_FOR_TRANSMISSION_TO_COMPLETE); + DEBUG_TEST("Received : %s, r=%d, w=%d", rbuf, r, w); err = CLOSE(fd); err = CLOSE(client_fd); sprintf(details, "%s, err=%d, r=%d, w=%d", testname.c_str(), err, r, w); @@ -440,7 +437,6 @@ void tcp_client_6(TCP_UNIT_TEST_SIG_6) struct sockaddr_storage peer_addr; struct sockaddr_in6 *p6 = (struct sockaddr_in6*)&peer_addr; socklen_t peer_addrlen = sizeof(peer_addr); - if((err = GETPEERNAME(fd, (struct sockaddr*)&peer_addr, &peer_addrlen)) < 0) { perror("getpeername"); *passed = false; @@ -452,7 +448,6 @@ void tcp_client_6(TCP_UNIT_TEST_SIG_6) w = WRITE(fd, msg.c_str(), len); r = READ(fd, rbuf, len); - sleep(WAIT_FOR_TRANSMISSION_TO_COMPLETE); err = CLOSE(fd); sprintf(details, "%s, err=%d, r=%d, w=%d", testname.c_str(), err, r, w); DEBUG_TEST("Sent : %s", msg.c_str()); @@ -492,20 +487,20 @@ void tcp_server_6(TCP_UNIT_TEST_SIG_6) *passed = false; return; } - struct sockaddr_in6 client; socklen_t client_addrlen = sizeof(sockaddr_in6); - if((client_fd = ACCEPT(fd, (struct sockaddr *)&client, &client_addrlen)) < 0) - fprintf(stderr,"error accepting connection (%d)\n", err); + if((client_fd = ACCEPT(fd, (struct sockaddr *)&client, &client_addrlen)) < 0) { + perror("accept"); + *passed = false; + return; + } char ipstr[INET6_ADDRSTRLEN]; inet_ntop(AF_INET6, &client.sin6_addr, ipstr, sizeof ipstr); DEBUG_TEST("accepted connection from %s, on port %d", ipstr, ntohs(client.sin6_port)); - // TODO: Put this test in the general API section struct sockaddr_storage peer_addr; struct sockaddr_in6 *p6 = (struct sockaddr_in6*)&peer_addr; socklen_t peer_addrlen = sizeof(peer_addr); - if((err = GETPEERNAME(client_fd, (struct sockaddr*)&peer_addr, &peer_addrlen)) < 0) { perror("getpeername"); *passed = false; @@ -514,11 +509,9 @@ void tcp_server_6(TCP_UNIT_TEST_SIG_6) char peer_addrstr[INET6_ADDRSTRLEN]; inet_ntop(AF_INET6, &(p6->sin6_addr), peer_addrstr, INET6_ADDRSTRLEN); DEBUG_TEST("getpeername() => %s : %d", peer_addrstr, ntohs(p6->sin6_port)); - r = READ(client_fd, rbuf, sizeof rbuf); w = WRITE(client_fd, rbuf, len); DEBUG_TEST("Received : %s", rbuf); - sleep(WAIT_FOR_TRANSMISSION_TO_COMPLETE); err = CLOSE(fd); err = CLOSE(client_fd); sprintf(details, "%s, err=%d, r=%d, w=%d", testname.c_str(), err, r, w); @@ -573,7 +566,6 @@ void udp_client_4(UDP_UNIT_TEST_SIG_4) // rx r = RECVFROM(fd, rbuf, STR_SIZE, 0, (struct sockaddr *)&saddr, (socklen_t *)&serverlen); if(r == strlen(msg.c_str())) { - sleep(WAIT_FOR_TRANSMISSION_TO_COMPLETE); err = CLOSE(fd); DEBUG_TEST("%s, err=%d, r=%d, w=%d", testname.c_str(), err, r, w); sprintf(details, "%s, err=%d, r=%d, w=%d", testname.c_str(), err, r, w); @@ -631,17 +623,14 @@ void udp_server_4(UDP_UNIT_TEST_SIG_4) long int tx_ti = get_now_ts(); while(1) { sleep(1); - //DEBUG_TEST("sending UDP packet"); if((w = SENDTO(fd, msg.c_str(), len, 0, (struct sockaddr *)remote_addr, sizeof(*remote_addr))) < 0) { DEBUG_ERROR("error sending packet, err=%d", errno); } if(get_now_ts() >= tx_ti + 10000) { - // DEBUG_TEST("get_now_ts()-tx_ti=%d", get_now_ts()-tx_ti); break; } } - sleep(WAIT_FOR_TRANSMISSION_TO_COMPLETE); - //err = CLOSE(fd); + err = CLOSE(fd); DEBUG_TEST("%s, err=%d, r=%d, w=%d", testname.c_str(), err, r, w); sprintf(details, "%s, err=%d, r=%d, w=%d", testname.c_str(), err, r, w); DEBUG_TEST("Sent : %s", msg.c_str()); @@ -1021,8 +1010,8 @@ void tcp_server_sustained_4(TCP_UNIT_TEST_SIG_4) } long int tx_tf = get_now_ts(); DEBUG_TEST("wrote=%d", w); - sleep(WAIT_FOR_TRANSMISSION_TO_COMPLETE); err = CLOSE(fd); + err = CLOSE(client_fd); // Compute time deltas and transfer rates float tx_dt = (tx_tf - tx_ti) / (float)1000; float rx_dt = (rx_tf - rx_ti) / (float)1000; @@ -1110,8 +1099,8 @@ void tcp_server_sustained_6(TCP_UNIT_TEST_SIG_6) } long int tx_tf = get_now_ts(); DEBUG_TEST("wrote=%d", w); - sleep(WAIT_FOR_TRANSMISSION_TO_COMPLETE); err = CLOSE(fd); + err = CLOSE(client_fd); // Compute time deltas and transfer rates float tx_dt = (tx_tf - tx_ti) / (float)1000; float rx_dt = (rx_tf - rx_ti) / (float)1000; @@ -2187,18 +2176,21 @@ void bind_to_localhost_test(int port) int main(int argc , char *argv[]) { - if(argc < 5) { - fprintf(stderr, "usage: selftest to \n"); - fprintf(stderr, "e.g. : selftest test/test.conf alice to bob\n"); + if(argc < 6) { + fprintf(stderr, "usage: selftest to \n"); + fprintf(stderr, "e.g. : selftest 3 test/test.conf alice to bob\n"); return 1; } - std::string from = argv[2]; - std::string to = argv[4]; + int num_repeats = atoi(argv[1]); + std::string path = argv[2]; + std::string from = argv[3]; + std::string to = argv[5]; std::string me = from; std::vector results; std::string remote_echo_ipv4, smode; - std::string nwid, stype, path = argv[1]; + + std::string nwid, stype; std::string ipstr, ipstr6, local_ipstr, local_ipstr6, remote_ipstr, remote_ipstr6; int err = 0; @@ -2284,386 +2276,391 @@ int main(int argc , char *argv[]) sleep(1); */ -// closure test +for(int i=0; i