Update to selftest

This commit is contained in:
Joseph Henry
2017-06-09 10:30:57 -07:00
parent 9bd63e114b
commit 8ea81f5fbb

View File

@@ -85,8 +85,8 @@ Basic RX/TX connect()/accept() Functionality:
[OK] sustained server ipv4 - accept and echo messages [OK] sustained server ipv4 - accept and echo messages
[ ?] sustained client ipv6 - connect and rx/tx many messages [ ?] sustained client ipv6 - connect and rx/tx many messages
[ ?] sustained server ipv6 - accept and echo messages [ ?] sustained server ipv6 - accept and echo messages
[ ] comprehensive client ipv4 - test all ipv4/6 client simple/sustained modes [OK] comprehensive client ipv4 - test all ipv4/6 client simple/sustained modes
[ ] comprehensive server ipv6 - test all ipv4/6 server simple/sustained modes [OK] comprehensive server ipv6 - test all ipv4/6 server simple/sustained modes
Performance: Performance:
@@ -146,14 +146,8 @@ int ipv4_tcp_client_test(struct sockaddr_in *addr, int port)
if((err = zts_connect(sockfd, (const struct sockaddr *)addr, sizeof(addr))) < 0) { if((err = zts_connect(sockfd, (const struct sockaddr *)addr, sizeof(addr))) < 0) {
printf("error connecting to remote host (%d)\n", err); printf("error connecting to remote host (%d)\n", err);
} }
//printf("WRITE!\n");
w = zts_write(sockfd, str, len); w = zts_write(sockfd, str, len);
//printf("READ!\n");
r = zts_read(sockfd, rbuf, len); r = zts_read(sockfd, rbuf, len);
//printf("CLOSE!\n");
err = zts_close(sockfd); err = zts_close(sockfd);
return (w == len && r == len && !err) && !strcmp(rbuf, str) ? PASSED : FAILED; return (w == len && r == len && !err) && !strcmp(rbuf, str) ? PASSED : FAILED;
} }
@@ -201,14 +195,9 @@ int ipv4_tcp_server_test(struct sockaddr_in *addr, int port)
if((accfd = zts_accept(sockfd, (struct sockaddr *)&addr, (socklen_t *)sizeof(addr))) < 0) { if((accfd = zts_accept(sockfd, (struct sockaddr *)&addr, (socklen_t *)sizeof(addr))) < 0) {
printf("error accepting connection (%d)\n", err); printf("error accepting connection (%d)\n", err);
} }
//printf("READ!\n");
r = zts_read(accfd, rbuf, sizeof rbuf); r = zts_read(accfd, rbuf, sizeof rbuf);
//printf("WRITE!\n");
w = zts_write(accfd, rbuf, len); w = zts_write(accfd, rbuf, len);
//printf("CLOSE sockfd!\n");
zts_close(sockfd); zts_close(sockfd);
//printf("CLOSE accfd!\n");
zts_close(accfd); zts_close(accfd);
return (w == len && r == len && !err) && !strcmp(rbuf, str) ? PASSED : FAILED; return (w == len && r == len && !err) && !strcmp(rbuf, str) ? PASSED : FAILED;
} }
@@ -728,22 +717,26 @@ zts_close()
* delay = delay between each operation * delay = delay between each operation
* *
*/ */
int do_test(std::string path, std::string nwid, int type, int protocol, int mode, std::string ipstr, int port, int operation, int n_count, int delay) int do_test(char *name, std::string path, std::string nwid, int type, int protocol, int mode, std::string ipstr, int port, int operation, int n_count, int delay)
{ {
struct hostent *server; struct hostent *server;
struct sockaddr_in6 addr6; struct sockaddr_in6 addr6;
struct sockaddr_in addr; struct sockaddr_in addr;
printf("\npath = %s\n", path.c_str()); printf("\n\nNEXT TEST parameters:\n");
printf("nwid = %s\n", nwid.c_str()); printf("\tname = %s\n", name);
printf("type = %d\n", type); printf("\tpath = %s\n", path.c_str());
printf("protocol = %d\n", protocol); printf("\tnwid = %s\n", nwid.c_str());
printf("mode = %d\n", mode); printf("\ttype = %d\n", type);
printf("ipstr = %s\n", ipstr.c_str()); printf("\tprotocol = %d\n", protocol);
printf("port = %d\n", port); printf("\tmode = %d\n", mode);
printf("operation = %d\n", operation); printf("\tipstr = %s\n", ipstr.c_str());
printf("n_count = %d\n", n_count); printf("\tport = %d\n", port);
printf("delay = %d\n\n", delay); printf("\toperation = %d\n", operation);
printf("\tn_count = %d\n", n_count);
printf("\tdelay = %d\n\n", delay);
int err = 0;
/****************************************************************************/ /****************************************************************************/
/* SIMPLE */ /* SIMPLE */
@@ -762,7 +755,7 @@ int do_test(std::string path, std::string nwid, int type, int protocol, int mode
addr.sin_family = AF_INET; addr.sin_family = AF_INET;
addr.sin_port = htons(port); addr.sin_port = htons(port);
//printf(" running (%d) test as ipv=%d\n", mode, protocol); //printf(" running (%d) test as ipv=%d\n", mode, protocol);
return ipv4_tcp_client_test(&addr, port); err = ipv4_tcp_client_test(&addr, port);
} }
// IPv6 // IPv6
if(protocol == 6) { if(protocol == 6) {
@@ -773,7 +766,7 @@ int do_test(std::string path, std::string nwid, int type, int protocol, int mode
memmove((char *) &addr6.sin6_addr.s6_addr, (char *) server->h_addr, server->h_length); memmove((char *) &addr6.sin6_addr.s6_addr, (char *) server->h_addr, server->h_length);
addr6.sin6_port = htons(port); addr6.sin6_port = htons(port);
//printf(" running (%d) test as ipv=%d\n", mode, protocol); //printf(" running (%d) test as ipv=%d\n", mode, protocol);
return ipv6_tcp_client_test(&addr6, port); err = ipv6_tcp_client_test(&addr6, port);
} }
} }
@@ -787,7 +780,7 @@ int do_test(std::string path, std::string nwid, int type, int protocol, int mode
// addr.sin_addr.s_addr = htons(INADDR_ANY); // addr.sin_addr.s_addr = htons(INADDR_ANY);
addr.sin_family = AF_INET; addr.sin_family = AF_INET;
//printf(" running (%d) test as ipv=%d\n", mode, protocol); //printf(" running (%d) test as ipv=%d\n", mode, protocol);
return ipv4_tcp_server_test(&addr, port); err = ipv4_tcp_server_test(&addr, port);
} }
// IPv6 // IPv6
if(protocol == 6) { if(protocol == 6) {
@@ -797,7 +790,7 @@ int do_test(std::string path, std::string nwid, int type, int protocol, int mode
addr6.sin6_family = AF_INET6; addr6.sin6_family = AF_INET6;
memmove((char *) &addr6.sin6_addr.s6_addr, (char *) server->h_addr, server->h_length); memmove((char *) &addr6.sin6_addr.s6_addr, (char *) server->h_addr, server->h_length);
addr6.sin6_port = htons(port); addr6.sin6_port = htons(port);
return ipv6_tcp_server_test(&addr6, port); err = ipv6_tcp_server_test(&addr6, port);
} }
} }
} }
@@ -822,7 +815,7 @@ int do_test(std::string path, std::string nwid, int type, int protocol, int mode
addr.sin_addr.s_addr = inet_addr(ipstr.c_str()); addr.sin_addr.s_addr = inet_addr(ipstr.c_str());
addr.sin_family = AF_INET; addr.sin_family = AF_INET;
//printf(" running (%d) test as ipv=%d\n", mode, protocol); //printf(" running (%d) test as ipv=%d\n", mode, protocol);
return ipv4_tcp_client_sustained_test(&addr, port, operation, n_count, delay); err = ipv4_tcp_client_sustained_test(&addr, port, operation, n_count, delay);
} }
// IPv6 // IPv6
if(protocol == 6) { if(protocol == 6) {
@@ -832,7 +825,7 @@ int do_test(std::string path, std::string nwid, int type, int protocol, int mode
addr6.sin6_family = AF_INET6; addr6.sin6_family = AF_INET6;
memmove((char *) &addr6.sin6_addr.s6_addr, (char *) server->h_addr, server->h_length); memmove((char *) &addr6.sin6_addr.s6_addr, (char *) server->h_addr, server->h_length);
addr6.sin6_port = htons(port); addr6.sin6_port = htons(port);
return ipv6_tcp_client_sustained_test(&addr6, port, operation, n_count, delay); err = ipv6_tcp_client_sustained_test(&addr6, port, operation, n_count, delay);
} }
} }
@@ -846,7 +839,7 @@ int do_test(std::string path, std::string nwid, int type, int protocol, int mode
// addr.sin_addr.s_addr = htons(INADDR_ANY); // addr.sin_addr.s_addr = htons(INADDR_ANY);
addr.sin_family = AF_INET; addr.sin_family = AF_INET;
//printf(" running (%d) test as ipv=%d\n", mode, protocol); //printf(" running (%d) test as ipv=%d\n", mode, protocol);
return ipv4_tcp_server_sustained_test(&addr, port, operation, n_count, delay); err = ipv4_tcp_server_sustained_test(&addr, port, operation, n_count, delay);
} }
// IPv6 // IPv6
if(protocol == 6) { if(protocol == 6) {
@@ -858,11 +851,15 @@ int do_test(std::string path, std::string nwid, int type, int protocol, int mode
addr6.sin6_addr = in6addr_any; addr6.sin6_addr = in6addr_any;
//memmove((char *) &addr6.sin6_addr.s6_addr, (char *) server->h_addr, server->h_length); //memmove((char *) &addr6.sin6_addr.s6_addr, (char *) server->h_addr, server->h_length);
//printf(" running (%d) test as ipv=%d\n", mode, protocol); //printf(" running (%d) test as ipv=%d\n", mode, protocol);
return ipv6_tcp_server_sustained_test(&addr6, port, operation, n_count, delay); err = ipv6_tcp_server_sustained_test(&addr6, port, operation, n_count, delay);
} }
} }
} }
return 0; if(err == PASSED)
printf("PASSED\n");
else
printf("FAILED\n");
return err;
} }
@@ -905,10 +902,11 @@ int main(int argc , char *argv[])
// load addresses/path, perform comprehensive test // load addresses/path, perform comprehensive test
if(path.find(".conf") != std::string::npos) if(path.find(".conf") != std::string::npos)
{ {
printf("\nTest config file contents:\n");
loadTestConfigFile(path); loadTestConfigFile(path);
nwid = testConf["nwid"]; nwid = testConf["nwid"];
path = testConf["local_path"]; path = testConf["local_path"];
stype = "comprehensive"; stype = testConf["test"];
local_ipstr = testConf["local_ipv4"]; local_ipstr = testConf["local_ipv4"];
local_ipstr6 = testConf["local_ipv6"]; local_ipstr6 = testConf["local_ipv6"];
remote_ipstr = testConf["remote_ipv4"]; remote_ipstr = testConf["remote_ipv4"];
@@ -944,7 +942,7 @@ int main(int argc , char *argv[])
fprintf(stderr, "path = %s\n", path.c_str()); fprintf(stderr, "path = %s\n", path.c_str());
fprintf(stderr, "nwid = %s\n", nwid.c_str()); fprintf(stderr, "nwid = %s\n", nwid.c_str());
fprintf(stderr, "type = %s\n", stype.c_str()); fprintf(stderr, "type = %s\n\n", stype.c_str());
printf("waiting for libzt to come online\n"); printf("waiting for libzt to come online\n");
@@ -985,11 +983,7 @@ int main(int argc , char *argv[])
port = atoi(argv[7]); port = atoi(argv[7]);
// Perform test // Perform test
if((err = do_test(path, nwid, type, protocol, mode, ipstr, port, operation, n_count, delay)) == PASSED) return do_test(argv[5], path, nwid, type, protocol, mode, ipstr, port, operation, n_count, delay);
fprintf(stderr, "PASSED\n");
else
fprintf(stderr, "FAILED\n");
return err;
} }
// SUSTAINED // SUSTAINED
@@ -1019,11 +1013,7 @@ int main(int argc , char *argv[])
operation = TEST_OP_N_SECONDS; operation = TEST_OP_N_SECONDS;
// Perform test // Perform test
if((err = do_test(path, nwid, type, protocol, mode, ipstr, port, operation, n_count, delay)) == PASSED) return do_test(argv[5], path, nwid, type, protocol, mode, ipstr, port, operation, n_count, delay);
fprintf(stderr, "PASSED\n");
else
fprintf(stderr, "FAILED\n");
return err;
} }
/****************************************************************************/ /****************************************************************************/
@@ -1044,94 +1034,80 @@ int main(int argc , char *argv[])
* Additionally, the test will use the preset paremeters below for the test: * Additionally, the test will use the preset paremeters below for the test:
*/ */
// Establish initial IPV4 connection between Alice and Bob
delay = 0; delay = 0;
n_count = 10; n_count = 10;
type = TEST_TYPE_SIMPLE;
operation = TEST_OP_N_TIMES; operation = TEST_OP_N_TIMES;
protocol = 4;
if(mode == TEST_MODE_SERVER) { if(mode == TEST_MODE_SERVER) {
printf("starting comprehensive test as SERVER\n");
port = local_port; port = local_port;
ipstr = local_ipstr; ipstr = local_ipstr;
} }
else if(mode == TEST_MODE_CLIENT) { else if(mode == TEST_MODE_CLIENT) {
printf("starting comprehensive test as CLIENT (waiting, giving server time to start)\n");
sleep(10); // give the server some time to come online before beginning test sleep(10); // give the server some time to come online before beginning test
port = remote_port; port = remote_port;
ipstr = remote_ipstr; ipstr = remote_ipstr;
} }
// IPV4 (first test) // IPV4 (first test)
err += do_test("ipv4", path, nwid, TEST_TYPE_SIMPLE, 4, mode, ipstr, port, operation, n_count, delay);
do_test(path, nwid, type, protocol, mode, ipstr, port, operation, n_count, delay); // Perform sustained transfer
err += do_test("ipv4_sustained", path, nwid, TEST_TYPE_SUSTAINED, 4, mode, ipstr, port, operation, n_count, delay);
// swtich modes (client/server) // swtich modes (client/server)
if(mode == TEST_MODE_SERVER) { if(mode == TEST_MODE_SERVER) {
printf("\nswitching from SERVER to CLIENT mode\n");
port = remote_port; port = remote_port;
ipstr = remote_ipstr; ipstr = remote_ipstr;
mode = TEST_MODE_CLIENT; mode = TEST_MODE_CLIENT;
} }
else if(mode == TEST_MODE_CLIENT) { else if(mode == TEST_MODE_CLIENT) {
printf("switching from CLIENT to SERVER mode\n");
port = local_port; port = local_port;
ipstr = local_ipstr; ipstr = local_ipstr;
mode = TEST_MODE_SERVER; mode = TEST_MODE_SERVER;
} }
// IPV4 (second test) // IPV4 (second test)
do_test(path, nwid, type, protocol, mode, ipstr, port, operation, n_count, delay); err += do_test("ipv4", path, nwid, TEST_TYPE_SIMPLE, 4, mode, ipstr, port, operation, n_count, delay);
sleep(3);
// IPV6 // IPV6
printf("performing COMPREHENSIVE ipv6 test\n");
/* Each host must operate as the counterpart to the other, thus, each mode /* Each host must operate as the counterpart to the other, thus, each mode
* will call the same test helper functions in different orders * will call the same test helper functions in different orders
* Additionally, the test will use the preset paremeters below for the test: * Additionally, the test will use the preset paremeters below for the test:
*/ */
delay = 0;
n_count = 10;
type = TEST_TYPE_SIMPLE;
operation = TEST_OP_N_TIMES;
protocol = 6;
if(mode == TEST_MODE_SERVER) { if(mode == TEST_MODE_SERVER) {
printf("starting comprehensive test as SERVER\n");
port = local_port6; port = local_port6;
ipstr6 = local_ipstr6; ipstr6 = local_ipstr6;
} }
else if(mode == TEST_MODE_CLIENT) { else if(mode == TEST_MODE_CLIENT) {
printf("starting comprehensive test as CLIENT (waiting, giving server time to start)\n");
sleep(10); // give the server some time to come online before beginning test sleep(10); // give the server some time to come online before beginning test
port = remote_port6; port = remote_port6;
ipstr6 = remote_ipstr6; ipstr6 = remote_ipstr6;
} }
// IPV4 (first test) // IPV4 (first test)
err += do_test("ipv6", path, nwid, TEST_TYPE_SIMPLE, 6, mode, ipstr6, port, operation, n_count, delay);
do_test(path, nwid, type, protocol, mode, ipstr6, port, operation, n_count, delay); // Perform sustained transfer
err += do_test("ipv6_sustained", path, nwid, TEST_TYPE_SUSTAINED, 6, mode, ipstr, port, operation, n_count, delay);
// swtich modes (client/server) // swtich modes (client/server)
if(mode == TEST_MODE_SERVER) { if(mode == TEST_MODE_SERVER) {
printf("\nswitching from SERVER to CLIENT mode\n");
port = remote_port6; port = remote_port6;
ipstr6 = remote_ipstr6; ipstr6 = remote_ipstr6;
mode = TEST_MODE_CLIENT; mode = TEST_MODE_CLIENT;
} }
else if(mode == TEST_MODE_CLIENT) { else if(mode == TEST_MODE_CLIENT) {
printf("switching from CLIENT to SERVER mode\n");
port = local_port6; port = local_port6;
ipstr6 = local_ipstr6; ipstr6 = local_ipstr6;
mode = TEST_MODE_SERVER; mode = TEST_MODE_SERVER;
} }
// IPV4 (second test) // IPV4 (second test)
do_test(path, nwid, type, protocol, mode, ipstr6, port, operation, n_count, delay); err += do_test("ipv6", path, nwid, TEST_TYPE_SIMPLE, 6, mode, ipstr6, port, operation, n_count, delay);
sleep(3);
return err;
} }