Tests for the NetworkSocketAPI
Dependents: BSDInterfaceTests ESP8266InterfaceTests LWIPInterfaceTests SpwfInterface_NSAPI_Tests ... more
Revision 7:444bc156318f, committed 2016-03-03
- Comitter:
- Brian Daniels
- Date:
- Thu Mar 03 14:19:34 2016 -0600
- Parent:
- 6:d847da0dbf4f
- Child:
- 8:5a5c498e1fa0
- Commit message:
- Adding different packet sizes for socket tests. Also making sure non-blocking recv is non-blocking
Changed in this revision
NSAPITests.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/NSAPITests.cpp Thu Mar 03 13:10:13 2016 -0600 +++ b/NSAPITests.cpp Thu Mar 03 14:19:34 2016 -0600 @@ -4,6 +4,10 @@ #include <stdio.h> #include "string.h" +#define NSAPI_MAX_DATA_SIZE 1000 + +char expected_data[NSAPI_MAX_DATA_SIZE]; +char received_data[NSAPI_MAX_DATA_SIZE]; int nsapi_ni_isConnected_test(NetworkInterface *iface) { @@ -98,26 +102,32 @@ return 0; } -int nsapi_socket_blocking_test(Socket *socket, const char *test_address, uint16_t test_port) +void nsapi_socket_test_setup(char *buffer, int size) { - char expected_data[] = "{{data}}"; - char data[100] = {0}; + int i; + for (i = 0; i < size; i++) { + buffer[i] = '0' + (i % 10); + } +} - int32_t ret = socket->send(expected_data, strlen(expected_data)); +int nsapi_socket_blocking_test_helper(Socket *socket, const char *test_address, uint16_t test_port, uint32_t data_size) +{ + nsapi_socket_test_setup(expected_data, data_size); + + int32_t ret = socket->send(expected_data, data_size); if (ret) { printf("'send' failed during test with code %d\r\n", ret); return -4; } - int32_t bytes_received = socket->recv(data, sizeof(data)); + int32_t bytes_received = socket->recv(received_data, sizeof(received_data)); - if (bytes_received >= (int32_t)strlen(expected_data)) { - if (strstr(data, expected_data) != NULL) { + if (bytes_received >= (int32_t)data_size) { + if (strstr(received_data, expected_data) != NULL) { return 0; } else { printf("'recv' returned incorrect data with length %d\r\n", bytes_received); - printf("data: %c%c%c%c\r\n", data[0], data[1], data[2], data[3]); return -2; } } else if (bytes_received < 0) { @@ -129,14 +139,49 @@ } } -int nsapi_socket_non_blocking_test(Socket *socket, const char *test_address, uint16_t test_port) +int nsapi_socket_blocking_test(Socket *socket, const char *test_address, uint16_t test_port) +{ + int32_t result, i; + int32_t packet_sizes[] = {10, 100, 1000}; + int32_t num_packet_sizes = 3; + + for (i = 0; i < num_packet_sizes; i++) { + result = nsapi_socket_blocking_test_helper(socket, test_address, test_port, packet_sizes[i]); + + if (result) { + printf("nsapi_socket_blocking_test failed with data size %d\r\n", packet_sizes[i]); + break; + } + } + + if (i >= num_packet_sizes) { + return 0; + } else { + return -num_packet_sizes; + } +} + +int nsapi_socket_non_blocking_test_helper(Socket *socket, const char *test_address, uint16_t test_port, uint32_t data_size) { int32_t bytes_received; int result = -1; - char expected_data[] = "{{data}}"; - char data[100] = {0}; + + nsapi_socket_test_setup(expected_data, data_size); + + // First check to make sure `recv` will not block and return 0 for bytes + // received. If the tests do proceed after this test, be sure your `recv` + // respects the `blocking` flag + bytes_received = socket->recv(received_data, NSAPI_MAX_DATA_SIZE, false); - int32_t ret = socket->send(expected_data, strlen(expected_data)); + if (bytes_received > 0) { + printf("'recv' returned data of length %d when no data was expected\r\n", bytes_received); + return -5; + } else if (bytes_received < 0) { + printf("'recv' failed when no data was expected with code %d\r\n", bytes_received); + return -5; + } + + int32_t ret = socket->send(expected_data, data_size); if (ret) { printf("'send' failed during test with code %d\r\n", ret); @@ -145,10 +190,10 @@ // TODO: Create a better way to "wait" for data besides busy-looping for (int i = 0; i < 10000000; i++) { - bytes_received = socket->recv(data, sizeof(data), false); + bytes_received = socket->recv(received_data, data_size, false); - if (bytes_received >= (int32_t)strlen(expected_data)) { - if (strstr(data, expected_data) != NULL) { + if (bytes_received >= (int32_t)data_size) { + if (strstr(received_data, expected_data) != NULL) { result = 0; break; } else { @@ -173,6 +218,28 @@ return result; } +int nsapi_socket_non_blocking_test(Socket *socket, const char *test_address, uint16_t test_port) +{ + int32_t result, i; + int32_t packet_sizes[] = {10, 100, 1000}; + int32_t num_packet_sizes = 3; + + for (i = 0; i < num_packet_sizes; i++) { + result = nsapi_socket_non_blocking_test_helper(socket, test_address, test_port, packet_sizes[i]); + + if (result) { + printf("nsapi_socket_non_blocking_test failed with data size of %d\r\n", packet_sizes[i]); + break; + } + } + + if (i >= num_packet_sizes) { + return 0; + } else { + return -num_packet_sizes; + } +} + int nsapi_socket_close_test(Socket *socket, const char *test_address, uint16_t test_port) { int32_t ret = socket->close(); @@ -220,6 +287,7 @@ { TCPSocket tcp_socket(iface); UDPSocket udp_socket(iface); + int ret = 0; printf("--- Running NetworkInterface Tests ---\r\n\r\n");