Correct test `socket_sigio`

A call to

    `TCPSocket::recv(void *data, nsapi_size_t size)`

returns, following the mbed documentation, the number of received bytes on
success, and a negative error code on failure.

So in case of success, the return value depends on both the value of parameter
`size` but also on the amount of data already available. This means, that the
value returned can be lower than or equal to the `size` of the `data` buffer
passed as argument to the call.

Therefore, in the cases of `test_tcp_hello_world()` & `find_substring()`
(i.e. test `socket_sigio`), the calls to `TCPSocket::recv()` might return from
one byte up to `sizeof(buffer) - 1` (i.e. 511) bytes for each single call,
while the tests expect to receive the whole response string with a single call.

This commit applies a fix to this situation by implementing a receive loop
which exits once there is no data anymore available to be read from the socket.
pull/6056/head
Wolfgang Betz 2017-11-21 08:45:06 +01:00 committed by adbridge
parent 8d517f7e46
commit b812918f90
1 changed files with 9 additions and 8 deletions

View File

@ -67,16 +67,17 @@ bool find_substring(const char *first, const char *last, const char *s_first, co
void get_data(TCPSocket* sock){
bool result = false;
// Server will respond with HTTP GET's success code
const int ret = sock->recv(buffer, sizeof(buffer) - 1);
if(ret <= 0)
return;
buffer[ret] = '\0';
int len = 0;
int ret;
while((ret = sock->recv(buffer+len, sizeof(buffer) - 1 - len)) > 0) {
len += ret;
}
buffer[len] = '\0';
// Find 200 OK HTTP status in reply
bool found_200_ok = find_substring(buffer, buffer + ret, HTTP_OK_STR, HTTP_OK_STR + strlen(HTTP_OK_STR));
bool found_200_ok = find_substring(buffer, buffer + len, HTTP_OK_STR, HTTP_OK_STR + strlen(HTTP_OK_STR));
// Find "Hello World!" string in reply
bool found_hello = find_substring(buffer, buffer + ret, HTTP_HELLO_STR, HTTP_HELLO_STR + strlen(HTTP_HELLO_STR));
bool found_hello = find_substring(buffer, buffer + len, HTTP_HELLO_STR, HTTP_HELLO_STR + strlen(HTTP_HELLO_STR));
TEST_ASSERT_TRUE(found_200_ok);
TEST_ASSERT_TRUE(found_hello);
@ -85,7 +86,7 @@ void get_data(TCPSocket* sock){
TEST_ASSERT_EQUAL(result, true);
printf("HTTP: Received %d chars from server\r\n", ret);
printf("HTTP: Received %d chars from server\r\n", len);
printf("HTTP: Received 200 OK status ... %s\r\n", found_200_ok ? "[OK]" : "[FAIL]");
printf("HTTP: Received '%s' status ... %s\r\n", HTTP_HELLO_STR, found_hello ? "[OK]" : "[FAIL]");
printf("HTTP: Received message:\r\n");