Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of NSAPITests by
Diff: NSAPITests.cpp
- Revision:
- 7:444bc156318f
- Parent:
- 6:d847da0dbf4f
- Child:
- 8:5a5c498e1fa0
--- 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");