Skip to content

Commit 3b7fa86

Browse files
committed
[nrf fromtree] tests: coap_client: Add testcase for observation
Add test for ongoing observation and cancellation. Signed-off-by: Seppo Takalo <[email protected]> (cherry picked from commit 05a6ba6)
1 parent 0a068ec commit 3b7fa86

File tree

1 file changed

+52
-0
lines changed
  • tests/net/lib/coap_client/src

1 file changed

+52
-0
lines changed

tests/net/lib/coap_client/src/main.c

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,18 @@ static ssize_t z_impl_zsock_recvfrom_custom_fake_duplicate_response(int sock, vo
390390
return ret;
391391
}
392392

393+
static ssize_t z_impl_zsock_recvfrom_custom_fake_observe(int sock, void *buf, size_t max_len,
394+
int flags, struct sockaddr *src_addr,
395+
socklen_t *addrlen)
396+
{
397+
int ret = z_impl_zsock_recvfrom_custom_fake_duplicate_response(sock, buf, max_len, flags,
398+
src_addr, addrlen);
399+
400+
set_next_pending_message_id(get_next_pending_message_id() + 1);
401+
z_impl_zsock_recvfrom_fake.custom_fake = z_impl_zsock_recvfrom_custom_fake_observe;
402+
return ret;
403+
}
404+
393405
extern void net_coap_init(void);
394406

395407
static void *suite_setup(void)
@@ -1046,3 +1058,43 @@ ZTEST(coap_client, test_duplicate_response)
10461058

10471059
zassert_equal(k_sem_take(&sem, K_MSEC(MORE_THAN_EXCHANGE_LIFETIME_MS)), -EAGAIN, "");
10481060
}
1061+
1062+
ZTEST(coap_client, test_observe)
1063+
{
1064+
struct k_sem sem;
1065+
struct sockaddr address = {0};
1066+
struct coap_client_option options = {
1067+
.code = COAP_OPTION_OBSERVE,
1068+
.value[0] = 0,
1069+
.len = 1,
1070+
};
1071+
struct coap_client_request client_request = {
1072+
.method = COAP_METHOD_GET,
1073+
.confirmable = true,
1074+
.path = test_path,
1075+
.fmt = COAP_CONTENT_FORMAT_TEXT_PLAIN,
1076+
.cb = coap_callback,
1077+
.payload = short_payload,
1078+
.len = strlen(short_payload),
1079+
.options = &options,
1080+
.num_options = 1,
1081+
.user_data = &sem,
1082+
};
1083+
1084+
zassert_ok(k_sem_init(&sem, 0, 1));
1085+
z_impl_zsock_recvfrom_fake.custom_fake = z_impl_zsock_recvfrom_custom_fake_observe;
1086+
1087+
k_sleep(K_MSEC(1));
1088+
1089+
zassert_ok(coap_client_req(&client, 0, &address, &client_request, NULL));
1090+
1091+
zassert_ok(k_sem_take(&sem, K_MSEC(MORE_THAN_EXCHANGE_LIFETIME_MS)));
1092+
zassert_ok(k_sem_take(&sem, K_MSEC(MORE_THAN_EXCHANGE_LIFETIME_MS)));
1093+
zassert_ok(k_sem_take(&sem, K_MSEC(MORE_THAN_EXCHANGE_LIFETIME_MS)));
1094+
1095+
coap_client_cancel_requests(&client);
1096+
zassert_ok(k_sem_take(&sem, K_MSEC(MORE_THAN_EXCHANGE_LIFETIME_MS)));
1097+
zassert_equal(last_response_code, -ECANCELED, "");
1098+
1099+
zassert_not_ok(k_sem_take(&sem, K_MSEC(MORE_THAN_EXCHANGE_LIFETIME_MS)));
1100+
}

0 commit comments

Comments
 (0)