tests: coap_client: Add test for duplicate response
Add test where we receive same UDP packet twice. Signed-off-by: Seppo Takalo <seppo.takalo@nordicsemi.no>
This commit is contained in:
parent
ca67f51170
commit
83bc1fcb46
2 changed files with 56 additions and 1 deletions
|
@ -26,7 +26,7 @@ add_compile_definitions(CONFIG_COAP_CLIENT_MESSAGE_HEADER_SIZE=48)
|
||||||
add_compile_definitions(CONFIG_COAP_CLIENT_STACK_SIZE=1024)
|
add_compile_definitions(CONFIG_COAP_CLIENT_STACK_SIZE=1024)
|
||||||
add_compile_definitions(CONFIG_COAP_CLIENT_THREAD_PRIORITY=10)
|
add_compile_definitions(CONFIG_COAP_CLIENT_THREAD_PRIORITY=10)
|
||||||
add_compile_definitions(CONFIG_COAP_LOG_LEVEL=4)
|
add_compile_definitions(CONFIG_COAP_LOG_LEVEL=4)
|
||||||
add_compile_definitions(CONFIG_COAP_INIT_ACK_TIMEOUT_MS=10)
|
add_compile_definitions(CONFIG_COAP_INIT_ACK_TIMEOUT_MS=100)
|
||||||
add_compile_definitions(CONFIG_COAP_CLIENT_MAX_REQUESTS=2)
|
add_compile_definitions(CONFIG_COAP_CLIENT_MAX_REQUESTS=2)
|
||||||
add_compile_definitions(CONFIG_COAP_CLIENT_MAX_INSTANCES=2)
|
add_compile_definitions(CONFIG_COAP_CLIENT_MAX_INSTANCES=2)
|
||||||
add_compile_definitions(CONFIG_COAP_MAX_RETRANSMIT=4)
|
add_compile_definitions(CONFIG_COAP_MAX_RETRANSMIT=4)
|
||||||
|
|
|
@ -335,6 +335,30 @@ static ssize_t z_impl_zsock_recvfrom_custom_fake_echo_next_req(int sock, void *b
|
||||||
return sizeof(ack_data);
|
return sizeof(ack_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ssize_t z_impl_zsock_recvfrom_custom_fake_duplicate_response(int sock, void *buf,
|
||||||
|
size_t max_len, int flags,
|
||||||
|
struct sockaddr *src_addr,
|
||||||
|
socklen_t *addrlen)
|
||||||
|
{
|
||||||
|
uint8_t token[TOKEN_OFFSET + COAP_TOKEN_MAX_LEN];
|
||||||
|
|
||||||
|
uint16_t last_message_id = get_next_pending_message_id();
|
||||||
|
|
||||||
|
restore_token(token);
|
||||||
|
|
||||||
|
set_next_pending_message_id(last_message_id);
|
||||||
|
set_next_pending_message_id(last_message_id);
|
||||||
|
store_token(token);
|
||||||
|
store_token(token);
|
||||||
|
|
||||||
|
int ret = z_impl_zsock_recvfrom_custom_fake(sock, buf, max_len, flags, src_addr, addrlen);
|
||||||
|
|
||||||
|
set_socket_events(sock, ZSOCK_POLLIN);
|
||||||
|
z_impl_zsock_recvfrom_fake.custom_fake = z_impl_zsock_recvfrom_custom_fake;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
extern void net_coap_init(void);
|
extern void net_coap_init(void);
|
||||||
|
|
||||||
static void *suite_setup(void)
|
static void *suite_setup(void)
|
||||||
|
@ -829,3 +853,34 @@ ZTEST(coap_client, test_poll_err_after_response)
|
||||||
set_socket_events(client.fd, ZSOCK_POLLERR);
|
set_socket_events(client.fd, ZSOCK_POLLERR);
|
||||||
zassert_not_ok(k_sem_take(&sem1, K_MSEC(MORE_THAN_EXCHANGE_LIFETIME_MS)));
|
zassert_not_ok(k_sem_take(&sem1, K_MSEC(MORE_THAN_EXCHANGE_LIFETIME_MS)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ZTEST(coap_client, test_duplicate_response)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
struct k_sem sem;
|
||||||
|
struct sockaddr address = {0};
|
||||||
|
struct coap_client_request client_request = {
|
||||||
|
.method = COAP_METHOD_GET,
|
||||||
|
.confirmable = true,
|
||||||
|
.path = test_path,
|
||||||
|
.fmt = COAP_CONTENT_FORMAT_TEXT_PLAIN,
|
||||||
|
.cb = coap_callback,
|
||||||
|
.payload = short_payload,
|
||||||
|
.len = strlen(short_payload),
|
||||||
|
.user_data = &sem,
|
||||||
|
};
|
||||||
|
|
||||||
|
zassert_ok(k_sem_init(&sem, 0, 2));
|
||||||
|
z_impl_zsock_recvfrom_fake.custom_fake =
|
||||||
|
z_impl_zsock_recvfrom_custom_fake_duplicate_response;
|
||||||
|
|
||||||
|
k_sleep(K_MSEC(1));
|
||||||
|
LOG_INF("Send request");
|
||||||
|
ret = coap_client_req(&client, 0, &address, &client_request, NULL);
|
||||||
|
zassert_true(ret >= 0, "Sending request failed, %d", ret);
|
||||||
|
|
||||||
|
zassert_ok(k_sem_take(&sem, K_MSEC(MORE_THAN_EXCHANGE_LIFETIME_MS)));
|
||||||
|
zassert_equal(last_response_code, COAP_RESPONSE_CODE_OK, "Unexpected response");
|
||||||
|
|
||||||
|
zassert_equal(k_sem_take(&sem, K_MSEC(MORE_THAN_EXCHANGE_LIFETIME_MS)), -EAGAIN, "");
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue