Added repeat feature to selftest

This commit is contained in:
Joseph Henry
2017-09-12 16:34:34 -07:00
parent ca84110a16
commit bd68e808c1

View File

@@ -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 <selftest.conf> <alice|bob|ted|carol> to <bob|alice|ted|carol>\n");
fprintf(stderr, "e.g. : selftest test/test.conf alice to bob\n");
if(argc < 6) {
fprintf(stderr, "usage: selftest <num_repeats> <selftest.conf> <alice|bob|ted|carol> to <bob|alice|ted|carol>\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<std::string> 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,6 +2276,10 @@ int main(int argc , char *argv[])
sleep(1);
*/
for(int i=0; i<num_repeats; i++)
{
DEBUG_TEST("\n\n\n --- COMPREHENSIVE TEST ITERATION: %d out of %d ---\n\n\n", i, num_repeats);
// closure test
#if defined(__SELFTEST__)
@@ -2322,24 +2318,24 @@ int main(int argc , char *argv[])
#endif // __SELFTEST__
port = start_port;
cnt = 1024*16;
port = start_port+(100*i); // arbitrary
cnt = 1024*3;
op = TEST_OP_N_BYTES;
/*
tcp-ip4-client tcp-ip6-client udp-ip4-client udp-ip6-client
| | | | |
tcp-ip4-server | OK | | OK | |
tcp-ip6-server | | OK | | OK |
udp-ip4-server | OK | | OK | |
udp-ip6-server | | OK | | OK |
int stack_array[100];
stack_array[1] = 0;
return stack_array[argc + 100]; // BOOM
int mybuf[10];
mybuf[11] = 9;
memcpy(mybuf, "what the hell is this", 55);
*/
// set start time here since we aren't waiting for libzt to come online in NATIVETEST mode
#if defined(__NATIVETEST__)
long int selftest_start_time = get_now_ts();
subtest_expected_duration = 0; // initial value, wait for other instance to come online
subtest_expected_duration = 5; // initial value, wait for other instance to come online
#endif
@@ -2665,6 +2661,7 @@ udp-ip6-server | | OK | | OK
for(int i=0;i<results.size(); i++) {
fprintf(stderr, "%s\n", results[i].c_str());
}
}
return err;
}