tests: lwm2m: Add more tests to LwM2M registry

Add module tests for all data types and most of deprecated
functions as well.

Refactor event wainting to expect_lwm2m_rd_client_event() which
does not care about the index, just the order.

Signed-off-by: Seppo Takalo <seppo.takalo@nordicsemi.no>
This commit is contained in:
Seppo Takalo 2023-06-28 16:42:28 +03:00 committed by Fabio Baltieri
commit e977fde7ee
6 changed files with 441 additions and 191 deletions

View file

@ -26,24 +26,32 @@ static const uint8_t RD_CLIENT_MAX_LOOKUP_ITERATIONS = 100;
FAKE_VOID_FUNC(show_lwm2m_event, enum lwm2m_rd_client_event);
FAKE_VOID_FUNC(show_lwm2m_observe, enum lwm2m_observe_event);
bool check_lwm2m_rd_client_event(uint8_t expected_val, uint8_t arg_index)
static int next_event;
bool expect_lwm2m_rd_client_event(uint8_t expected_val)
{
int max_service_iterations = RD_CLIENT_MAX_LOOKUP_ITERATIONS;
bool match = false;
while (max_service_iterations > 0) {
if (show_lwm2m_event_fake.call_count > arg_index) {
match = show_lwm2m_event_fake.arg0_history[arg_index] == expected_val;
break;
for (int i = next_event; i < show_lwm2m_event_fake.call_count; i++) {
match = show_lwm2m_event_fake.arg0_history[i] == expected_val;
if (match) {
next_event = i + 1;
break;
}
}
if (match) {
break;
}
wait_for_service(1);
max_service_iterations--;
}
if (!match) {
LOG_INF("Expecting %d at %d, events:", expected_val, arg_index);
for (int i = 0; i < show_lwm2m_event_fake.call_count; i++) {
LOG_INF("Expecting event %d, events:", expected_val);
for (int i = next_event; i < show_lwm2m_event_fake.call_count; i++) {
LOG_INF("[%d] = %d", i, show_lwm2m_event_fake.arg0_history[i]);
}
}
@ -51,22 +59,6 @@ bool check_lwm2m_rd_client_event(uint8_t expected_val, uint8_t arg_index)
return match;
}
bool check_lwm2m_observe_event(uint8_t expected_val, uint8_t arg_index)
{
int max_service_iterations = RD_CLIENT_MAX_LOOKUP_ITERATIONS;
while (max_service_iterations > 0) {
if (show_lwm2m_observe_fake.call_count > arg_index) {
return show_lwm2m_observe_fake.arg0_history[arg_index] == expected_val;
}
wait_for_service(1);
max_service_iterations--;
}
return false;
}
static void lwm2m_event_cb(struct lwm2m_ctx *client, enum lwm2m_rd_client_event client_event)
{
ARG_UNUSED(client);
@ -160,6 +152,16 @@ static void my_suite_before(void *data)
RESET_FAKE(show_lwm2m_event);
RESET_FAKE(show_lwm2m_observe);
next_event = 0;
/* Common stubs for all tests */
get_u32_val = CONFIG_LWM2M_ENGINE_DEFAULT_LIFETIME;
lwm2m_get_u32_fake.custom_fake = lwm2m_get_u32_val;
lwm2m_get_bool_fake.custom_fake = lwm2m_get_bool_fake_default;
lwm2m_sprint_ip_addr_fake.custom_fake = lwm2m_sprint_ip_addr_fake_default;
lwm2m_init_message_fake.custom_fake = lwm2m_init_message_fake_default;
coap_header_get_code_fake.custom_fake = coap_header_get_code_fake_created;
coap_packet_append_option_fake.custom_fake = NULL;
}
static void my_suite_after(void *data)
@ -199,21 +201,17 @@ ZTEST(lwm2m_rd_client, test_start_registration_ok)
test_lwm2m_engine_start_service();
wait_for_service(1);
lwm2m_get_bool_fake.custom_fake = lwm2m_get_bool_fake_default;
lwm2m_sprint_ip_addr_fake.custom_fake = lwm2m_sprint_ip_addr_fake_default;
lwm2m_init_message_fake.custom_fake = lwm2m_init_message_fake_default;
coap_header_get_code_fake.custom_fake = coap_header_get_code_fake_created;
coap_find_options_fake.custom_fake = coap_find_options_do_registration_reply_cb_ok;
zassert_true(lwm2m_rd_client_start(&ctx, "Test", 0, lwm2m_event_cb, lwm2m_observe_cb) == 0,
NULL);
zassert(lwm2m_rd_client_ctx() == &ctx, "");
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE, 0),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE),
NULL);
zassert_true(lwm2m_rd_client_is_registred(&ctx), NULL);
coap_header_get_code_fake.custom_fake = coap_header_get_code_fake_deleted;
zassert_true(lwm2m_rd_client_stop(&ctx, lwm2m_event_cb, true) == 0, NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_DISCONNECT, 1), NULL);
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_DISCONNECT), NULL);
zassert_true(!lwm2m_rd_client_is_registred(&ctx), NULL);
}
@ -228,20 +226,15 @@ ZTEST(lwm2m_rd_client, test_register_update_too_small_lifetime_to_default)
test_prepare_pending_message_cb(&message_reply_cb_default);
lwm2m_engine_add_service_fake.custom_fake = lwm2m_engine_add_service_fake_default;
lwm2m_rd_client_init();
test_lwm2m_engine_start_service();
wait_for_service(1);
lwm2m_get_bool_fake.custom_fake = lwm2m_get_bool_fake_default;
lwm2m_sprint_ip_addr_fake.custom_fake = lwm2m_sprint_ip_addr_fake_default;
lwm2m_init_message_fake.custom_fake = lwm2m_init_message_fake_default;
coap_header_get_code_fake.custom_fake = coap_header_get_code_fake_created;
coap_find_options_fake.custom_fake = coap_find_options_do_registration_reply_cb_ok;
zassert_true(lwm2m_rd_client_start(&ctx, "Test", 0, lwm2m_event_cb, lwm2m_observe_cb) == 0,
NULL);
zassert(lwm2m_rd_client_ctx() == &ctx, "");
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE, 0),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE),
NULL);
zassert_equal(lwm2m_set_u32_fake.arg1_val, CONFIG_LWM2M_ENGINE_DEFAULT_LIFETIME);
}
@ -257,19 +250,15 @@ ZTEST(lwm2m_rd_client, test_timeout_resume_registration)
lwm2m_rd_client_init();
test_lwm2m_engine_start_service();
lwm2m_get_bool_fake.custom_fake = lwm2m_get_bool_fake_default;
lwm2m_sprint_ip_addr_fake.custom_fake = lwm2m_sprint_ip_addr_fake_default;
lwm2m_init_message_fake.custom_fake = lwm2m_init_message_fake_default;
coap_header_get_code_fake.custom_fake = coap_header_get_code_fake_created;
coap_find_options_fake.custom_fake = coap_find_options_do_registration_reply_cb_ok;
zassert_true(lwm2m_rd_client_start(&ctx, "Test", 0, lwm2m_event_cb, lwm2m_observe_cb) == 0,
NULL);
zassert(lwm2m_rd_client_ctx() == &ctx, "");
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE, 0),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE),
NULL);
zassert(lwm2m_rd_client_timeout(&ctx) == 0, "");
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE, 1),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE),
NULL);
}
@ -286,13 +275,10 @@ ZTEST(lwm2m_rd_client, test_start_registration_timeout)
test_lwm2m_engine_start_service();
wait_for_service(1);
lwm2m_get_bool_fake.custom_fake = lwm2m_get_bool_fake_default;
lwm2m_sprint_ip_addr_fake.custom_fake = lwm2m_sprint_ip_addr_fake_default;
lwm2m_init_message_fake.custom_fake = lwm2m_init_message_fake_default;
zassert_true(lwm2m_rd_client_start(&ctx, "Test", 0, lwm2m_event_cb, lwm2m_observe_cb) == 0,
NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_DISCONNECT, 0), NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REG_TIMEOUT, 1), NULL);
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_DISCONNECT), NULL);
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REG_TIMEOUT), NULL);
}
ZTEST(lwm2m_rd_client, test_start_registration_fail)
@ -312,7 +298,7 @@ ZTEST(lwm2m_rd_client, test_start_registration_fail)
lwm2m_init_message_fake.custom_fake = lwm2m_init_message_fake_default;
zassert_true(lwm2m_rd_client_start(&ctx, "Test", 0, lwm2m_event_cb, lwm2m_observe_cb) == 0,
NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_FAILURE, 0),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_FAILURE),
NULL);
}
@ -328,18 +314,14 @@ ZTEST(lwm2m_rd_client, test_start_registration_update)
test_lwm2m_engine_start_service();
wait_for_service(1);
lwm2m_get_bool_fake.custom_fake = lwm2m_get_bool_fake_default;
lwm2m_sprint_ip_addr_fake.custom_fake = lwm2m_sprint_ip_addr_fake_default;
lwm2m_init_message_fake.custom_fake = lwm2m_init_message_fake_default;
coap_header_get_code_fake.custom_fake = coap_header_get_code_fake_created;
coap_find_options_fake.custom_fake = coap_find_options_do_registration_reply_cb_ok;
zassert_true(lwm2m_rd_client_start(&ctx, "Test", 0, lwm2m_event_cb, lwm2m_observe_cb) == 0,
NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE, 0),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE),
NULL);
lwm2m_rd_client_update();
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REG_UPDATE_COMPLETE, 2),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REG_UPDATE_COMPLETE),
NULL);
}
@ -355,19 +337,15 @@ ZTEST(lwm2m_rd_client, test_rx_off)
test_lwm2m_engine_start_service();
wait_for_service(1);
lwm2m_get_bool_fake.custom_fake = lwm2m_get_bool_fake_default;
lwm2m_sprint_ip_addr_fake.custom_fake = lwm2m_sprint_ip_addr_fake_default;
lwm2m_init_message_fake.custom_fake = lwm2m_init_message_fake_default;
coap_header_get_code_fake.custom_fake = coap_header_get_code_fake_created;
coap_find_options_fake.custom_fake = coap_find_options_do_registration_reply_cb_ok;
zassert_true(lwm2m_rd_client_start(&ctx, "Test", 0, lwm2m_event_cb, lwm2m_observe_cb) == 0,
NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE, 0),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE),
NULL);
engine_update_tx_time();
k_sleep(K_SECONDS(15));
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_QUEUE_MODE_RX_OFF, 1),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_QUEUE_MODE_RX_OFF),
NULL);
}
@ -383,20 +361,16 @@ ZTEST(lwm2m_rd_client, test_start_registration_update_fail)
test_lwm2m_engine_start_service();
wait_for_service(1);
lwm2m_get_bool_fake.custom_fake = lwm2m_get_bool_fake_default;
lwm2m_sprint_ip_addr_fake.custom_fake = lwm2m_sprint_ip_addr_fake_default;
lwm2m_init_message_fake.custom_fake = lwm2m_init_message_fake_default;
coap_header_get_code_fake.custom_fake = coap_header_get_code_fake_created;
coap_find_options_fake.custom_fake = coap_find_options_do_registration_reply_cb_ok;
zassert_true(lwm2m_rd_client_start(&ctx, "Test", 0, lwm2m_event_cb, lwm2m_observe_cb) == 0,
NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE, 0),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE),
NULL);
RESET_FAKE(coap_header_get_code);
lwm2m_rd_client_update();
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_FAILURE, 2),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_FAILURE),
NULL);
}
@ -412,27 +386,22 @@ ZTEST(lwm2m_rd_client, test_registration_update_timeout)
test_lwm2m_engine_start_service();
wait_for_service(1);
lwm2m_get_bool_fake.custom_fake = lwm2m_get_bool_fake_default;
lwm2m_sprint_ip_addr_fake.custom_fake = lwm2m_sprint_ip_addr_fake_default;
lwm2m_init_message_fake.custom_fake = lwm2m_init_message_fake_default;
coap_header_get_code_fake.custom_fake = coap_header_get_code_fake_created;
coap_find_options_fake.custom_fake = coap_find_options_do_registration_reply_cb_ok;
zassert_true(lwm2m_rd_client_start(&ctx, "Test", 0, lwm2m_event_cb, lwm2m_observe_cb) == 0,
NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE, 0),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE),
NULL);
test_prepare_pending_message_cb(&message_reply_timeout_cb_default);
ctx.sock_fd = 100;
lwm2m_rd_client_update();
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REG_UPDATE, 1));
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REG_TIMEOUT, 2),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REG_UPDATE));
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REG_TIMEOUT),
NULL);
zassert_equal(lwm2m_engine_stop_fake.call_count, 2);
zassert_true(lwm2m_engine_stop_fake.call_count >= 1);
zassert_equal(lwm2m_engine_stop_fake.arg0_val, &ctx);
test_prepare_pending_message_cb(&message_reply_cb_default);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE, 3),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE),
NULL);
}
@ -448,19 +417,15 @@ ZTEST(lwm2m_rd_client, test_deregistration_timeout)
test_lwm2m_engine_start_service();
wait_for_service(1);
lwm2m_get_bool_fake.custom_fake = lwm2m_get_bool_fake_default;
lwm2m_sprint_ip_addr_fake.custom_fake = lwm2m_sprint_ip_addr_fake_default;
lwm2m_init_message_fake.custom_fake = lwm2m_init_message_fake_default;
coap_header_get_code_fake.custom_fake = coap_header_get_code_fake_created;
coap_find_options_fake.custom_fake = coap_find_options_do_registration_reply_cb_ok;
zassert_true(lwm2m_rd_client_start(&ctx, "Test", 0, lwm2m_event_cb, lwm2m_observe_cb) == 0,
NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE, 0),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE),
NULL);
test_prepare_pending_message_cb(&message_reply_timeout_cb_default);
zassert_true(lwm2m_rd_client_stop(&ctx, lwm2m_event_cb, true) == 0, NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_DEREGISTER_FAILURE, 1));
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_DEREGISTER_FAILURE));
}
ZTEST(lwm2m_rd_client, test_error_on_registration_update)
@ -475,20 +440,16 @@ ZTEST(lwm2m_rd_client, test_error_on_registration_update)
test_lwm2m_engine_start_service();
wait_for_service(1);
lwm2m_get_bool_fake.custom_fake = lwm2m_get_bool_fake_default;
lwm2m_sprint_ip_addr_fake.custom_fake = lwm2m_sprint_ip_addr_fake_default;
lwm2m_init_message_fake.custom_fake = lwm2m_init_message_fake_default;
coap_header_get_code_fake.custom_fake = coap_header_get_code_fake_created;
coap_find_options_fake.custom_fake = coap_find_options_do_registration_reply_cb_ok;
coap_packet_append_option_fake.custom_fake = NULL;
zassert_true(lwm2m_rd_client_start(&ctx, "Test", 0, lwm2m_event_cb, lwm2m_observe_cb) == 0,
NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE, 0),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE),
NULL);
coap_packet_append_option_fake.custom_fake = coap_packet_append_option_fake_err;
lwm2m_rd_client_update();
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE, 3),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE),
NULL);
}
@ -502,17 +463,12 @@ ZTEST(lwm2m_rd_client, test_network_error_on_registration)
test_lwm2m_engine_start_service();
wait_for_service(1);
lwm2m_get_bool_fake.custom_fake = lwm2m_get_bool_fake_default;
lwm2m_sprint_ip_addr_fake.custom_fake = lwm2m_sprint_ip_addr_fake_default;
lwm2m_init_message_fake.custom_fake = lwm2m_init_message_fake_default;
coap_header_get_code_fake.custom_fake = coap_header_get_code_fake_created;
coap_find_options_fake.custom_fake = coap_find_options_do_registration_reply_cb_ok;
coap_packet_append_option_fake.custom_fake = coap_packet_append_option_fake_err;
zassert_true(lwm2m_rd_client_start(&ctx, "Test", 0, lwm2m_event_cb, lwm2m_observe_cb) == 0,
NULL);
wait_for_service(100);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_NETWORK_ERROR, 0), NULL);
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_NETWORK_ERROR), NULL);
}
ZTEST(lwm2m_rd_client, test_suspend_resume_registration)
@ -527,32 +483,26 @@ ZTEST(lwm2m_rd_client, test_suspend_resume_registration)
test_lwm2m_engine_start_service();
wait_for_service(1);
get_u32_val = CONFIG_LWM2M_ENGINE_DEFAULT_LIFETIME;
lwm2m_get_u32_fake.custom_fake = lwm2m_get_u32_val;
lwm2m_get_bool_fake.custom_fake = lwm2m_get_bool_fake_default;
lwm2m_sprint_ip_addr_fake.custom_fake = lwm2m_sprint_ip_addr_fake_default;
lwm2m_init_message_fake.custom_fake = lwm2m_init_message_fake_default;
coap_header_get_code_fake.custom_fake = coap_header_get_code_fake_created;
coap_find_options_fake.custom_fake = coap_find_options_do_registration_reply_cb_ok;
zassert_true(lwm2m_rd_client_start(&ctx, "Test", 0, lwm2m_event_cb, lwm2m_observe_cb) == 0,
NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE, 0),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE),
NULL);
zassert_true(!lwm2m_rd_client_is_suspended(&ctx), NULL);
zassert_true(lwm2m_rd_client_pause() == 0, NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_ENGINE_SUSPENDED, 1), NULL);
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_ENGINE_SUSPENDED), NULL);
zassert_true(lwm2m_rd_client_is_suspended(&ctx), NULL);
zassert_true(lwm2m_rd_client_resume() == 0, NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REG_UPDATE_COMPLETE, 3),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REG_UPDATE_COMPLETE),
NULL);
zassert_true(!lwm2m_rd_client_is_suspended(&ctx), NULL);
zassert_true(lwm2m_rd_client_pause() == 0, NULL);
k_sleep(K_SECONDS(CONFIG_LWM2M_ENGINE_DEFAULT_LIFETIME));
zassert_true(lwm2m_rd_client_resume() == 0, NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE, 7),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE),
NULL);
}
@ -564,28 +514,22 @@ ZTEST(lwm2m_rd_client, test_suspend_stop_resume)
test_prepare_pending_message_cb(&message_reply_cb_default);
lwm2m_engine_add_service_fake.custom_fake = lwm2m_engine_add_service_fake_default;
lwm2m_rd_client_init();
test_lwm2m_engine_start_service();
wait_for_service(1);
get_u32_val = CONFIG_LWM2M_ENGINE_DEFAULT_LIFETIME;
lwm2m_get_u32_fake.custom_fake = lwm2m_get_u32_val;
lwm2m_get_bool_fake.custom_fake = lwm2m_get_bool_fake_default;
lwm2m_sprint_ip_addr_fake.custom_fake = lwm2m_sprint_ip_addr_fake_default;
lwm2m_init_message_fake.custom_fake = lwm2m_init_message_fake_default;
coap_header_get_code_fake.custom_fake = coap_header_get_code_fake_created;
coap_find_options_fake.custom_fake = coap_find_options_do_registration_reply_cb_ok;
zassert_true(lwm2m_rd_client_start(&ctx, "Test", 0, lwm2m_event_cb, lwm2m_observe_cb) == 0,
NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE, 0),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE),
NULL);
zassert_true(lwm2m_rd_client_pause() == 0, NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_ENGINE_SUSPENDED, 2), NULL);
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_ENGINE_SUSPENDED), NULL);
zassert_equal(lwm2m_rd_client_stop(&ctx, lwm2m_event_cb, false), 0);
zassert_true(lwm2m_rd_client_resume() == 0, NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_DISCONNECT, 3), NULL);
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_DISCONNECT), NULL);
}
ZTEST(lwm2m_rd_client, test_socket_error)
@ -600,19 +544,16 @@ ZTEST(lwm2m_rd_client, test_socket_error)
test_lwm2m_engine_start_service();
wait_for_service(1);
lwm2m_get_bool_fake.custom_fake = lwm2m_get_bool_fake_default;
lwm2m_sprint_ip_addr_fake.custom_fake = lwm2m_sprint_ip_addr_fake_default;
lwm2m_init_message_fake.custom_fake = lwm2m_init_message_fake_default;
coap_header_get_code_fake.custom_fake = coap_header_get_code_fake_created;
coap_find_options_fake.custom_fake = coap_find_options_do_registration_reply_cb_ok;
zassert_true(lwm2m_rd_client_start(&ctx, "Test", 0, lwm2m_event_cb, lwm2m_observe_cb) == 0,
NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE, 0),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE),
NULL);
ctx.fault_cb(EIO);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REG_UPDATE, 1), NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REG_UPDATE_COMPLETE, 2),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REG_UPDATE), NULL);
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REG_UPDATE_COMPLETE),
NULL);
}
@ -624,26 +565,22 @@ ZTEST(lwm2m_rd_client, test_socket_error_on_stop)
test_prepare_pending_message_cb(&message_reply_cb_default);
lwm2m_engine_add_service_fake.custom_fake = lwm2m_engine_add_service_fake_default;
lwm2m_rd_client_init();
test_lwm2m_engine_start_service();
wait_for_service(1);
lwm2m_get_bool_fake.custom_fake = lwm2m_get_bool_fake_default;
lwm2m_sprint_ip_addr_fake.custom_fake = lwm2m_sprint_ip_addr_fake_default;
lwm2m_init_message_fake.custom_fake = lwm2m_init_message_fake_default;
coap_header_get_code_fake.custom_fake = coap_header_get_code_fake_created;
coap_find_options_fake.custom_fake = coap_find_options_do_registration_reply_cb_ok;
zassert_true(lwm2m_rd_client_start(&ctx, "Test", 0, lwm2m_event_cb, lwm2m_observe_cb) == 0,
NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE, 0),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE),
NULL);
test_prepare_pending_message_cb(NULL);
zassert_equal(lwm2m_rd_client_stop(&ctx, lwm2m_event_cb, true), 0);
k_msleep(1000);
ctx.fault_cb(EIO);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_DEREGISTER_FAILURE, 2),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_DEREGISTER_FAILURE),
NULL);
}
@ -667,29 +604,24 @@ ZTEST(lwm2m_rd_client, test_engine_trigger_bootstrap)
test_prepare_pending_message_cb(&message_reply_cb_default);
lwm2m_engine_add_service_fake.custom_fake = lwm2m_engine_add_service_fake_default;
lwm2m_rd_client_init();
test_lwm2m_engine_start_service();
wait_for_service(1);
lwm2m_get_bool_fake.custom_fake = lwm2m_get_bool_fake_default;
lwm2m_sprint_ip_addr_fake.custom_fake = lwm2m_sprint_ip_addr_fake_default;
lwm2m_init_message_fake.custom_fake = lwm2m_init_message_fake_default;
coap_header_get_code_fake.custom_fake = coap_header_get_code_fake_created;
coap_find_options_fake.custom_fake = coap_find_options_do_registration_reply_cb_ok;
zassert_true(lwm2m_rd_client_start(&ctx, "Test", 0, lwm2m_event_cb, lwm2m_observe_cb) == 0,
NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE, 0),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE),
NULL);
lwm2m_get_bool_fake.custom_fake = lwm2m_get_bool_fake_true;
coap_header_get_code_fake.custom_fake = coap_header_get_code_fake_changed;
zassert_equal(engine_trigger_bootstrap(), 0);
zassert_equal(engine_trigger_bootstrap(), -EPERM);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_BOOTSTRAP_REG_COMPLETE, 2),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_BOOTSTRAP_REG_COMPLETE),
NULL);
engine_bootstrap_finish();
zassert_equal(
check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_BOOTSTRAP_TRANSFER_COMPLETE, 3),
expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_BOOTSTRAP_TRANSFER_COMPLETE),
true);
}
@ -702,7 +634,6 @@ ZTEST(lwm2m_rd_client, test_bootstrap_timeout)
test_prepare_pending_message_cb(&message_reply_timeout_cb_default);
lwm2m_engine_add_service_fake.custom_fake = lwm2m_engine_add_service_fake_default;
lwm2m_rd_client_init();
test_lwm2m_engine_start_service();
wait_for_service(1);
@ -714,7 +645,7 @@ ZTEST(lwm2m_rd_client, test_bootstrap_timeout)
coap_find_options_fake.custom_fake = coap_find_options_do_registration_reply_cb_ok;
zassert_true(lwm2m_rd_client_start(&ctx, "Test", 1, lwm2m_event_cb, lwm2m_observe_cb) == 0,
NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_BOOTSTRAP_REG_FAILURE, 0),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_BOOTSTRAP_REG_FAILURE),
NULL);
}
@ -726,7 +657,6 @@ ZTEST(lwm2m_rd_client, test_bootstrap_fail)
test_prepare_pending_message_cb(&message_reply_cb_default);
lwm2m_engine_add_service_fake.custom_fake = lwm2m_engine_add_service_fake_default;
lwm2m_rd_client_init();
test_lwm2m_engine_start_service();
wait_for_service(1);
@ -738,7 +668,7 @@ ZTEST(lwm2m_rd_client, test_bootstrap_fail)
coap_find_options_fake.custom_fake = coap_find_options_do_registration_reply_cb_ok;
zassert_true(lwm2m_rd_client_start(&ctx, "Test", 1, lwm2m_event_cb, lwm2m_observe_cb) == 0,
NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_BOOTSTRAP_REG_FAILURE, 0),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_BOOTSTRAP_REG_FAILURE),
NULL);
}
@ -752,18 +682,13 @@ ZTEST(lwm2m_rd_client, test_bootstrap_no_srv_fallback_to_register)
test_prepare_pending_message_cb(&message_reply_cb_default);
lwm2m_engine_add_service_fake.custom_fake = lwm2m_engine_add_service_fake_default;
lwm2m_rd_client_init();
test_lwm2m_engine_start_service();
wait_for_service(1);
lwm2m_get_bool_fake.custom_fake = lwm2m_get_bool_fake_default;
lwm2m_sprint_ip_addr_fake.custom_fake = lwm2m_sprint_ip_addr_fake_default;
lwm2m_init_message_fake.custom_fake = lwm2m_init_message_fake_default;
coap_header_get_code_fake.custom_fake = coap_header_get_code_fake_created;
coap_find_options_fake.custom_fake = coap_find_options_do_registration_reply_cb_ok;
zassert_true(lwm2m_rd_client_start(&ctx, "Test", 1, lwm2m_event_cb, lwm2m_observe_cb) == 0,
NULL);
zassert_true(check_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE, 0),
zassert_true(expect_lwm2m_rd_client_event(LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE),
NULL);
}

View file

@ -127,7 +127,6 @@ static void service_work_fn(struct k_work *work)
}
if (next && next < k_uptime_get()) {
printk("Event!\n");
next = 0;
service(NULL);
}

View file

@ -0,0 +1,7 @@
# Copyright (c) 2023 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0
config TEST_DEPRECATED
bool "Test also deprecated functions"
source "Kconfig.zephyr"

View file

@ -11,6 +11,6 @@ CONFIG_LWM2M_SECURITY_KEY_SIZE=32
CONFIG_LWM2M_IPSO_SUPPORT=y
CONFIG_LWM2M_IPSO_TEMP_SENSOR=y
CONFIG_LWM2M_IPSO_TEMP_SENSOR_VERSION_1_1=y
CONFIG_LWM2M_IPSO_TEMP_SENSOR_INSTANCE_COUNT=1
CONFIG_LWM2M_IPSO_TEMP_SENSOR_INSTANCE_COUNT=4
CONFIG_LWM2M_CONN_MON_OBJ_SUPPORT=y
CONFIG_LWM2M_CONNMON_OBJECT_VERSION_1_2=y

View file

@ -9,6 +9,8 @@
#include "lwm2m_engine.h"
#include "lwm2m_util.h"
#define TEST_OBJ_ID 32768
static uint32_t callback_checker;
static char pre_write_cb_buf[10];
@ -124,60 +126,91 @@ ZTEST(lwm2m_registry, test_unknown_res)
zassert_equal(ret, 0);
}
/* Different objects employ different resources, test some of those*/
ZTEST(lwm2m_registry, test_connmon)
ZTEST(lwm2m_registry, test_get_res_inst)
{
int ret;
uint16_t u16_buf = 0;
uint32_t u32_buf = 0;
int16_t s16_buf = 0;
int32_t s32_buf = 0;
zassert_is_null(lwm2m_engine_get_res_inst(&LWM2M_OBJ(3)));
zassert_is_null(lwm2m_engine_get_res_inst(&LWM2M_OBJ(3, 0)));
zassert_is_null(lwm2m_engine_get_res_inst(&LWM2M_OBJ(3, 0, 11)));
zassert_not_null(lwm2m_engine_get_res_inst(&LWM2M_OBJ(3, 0, 11, 0)));
}
uint16_t u16_getbuf = 0;
uint32_t u32_getbuf = 0;
int16_t s16_getbuf = 0;
int32_t s32_getbuf = 0;
ZTEST(lwm2m_registry, test_get_set)
{
bool b = true;
uint8_t opaque[] = {0xde, 0xad, 0xbe, 0xff, 0, 0};
char string[] = "Hello";
uint8_t u8 = 8;
int8_t s8 = -8;
uint16_t u16 = 16;
int16_t s16 = -16;
uint32_t u32 = 32;
int32_t s32 = -32;
int64_t s64 = -64;
time_t t = 1687949519;
double d = 3.1415;
double d2;
struct lwm2m_objlnk objl = {.obj_id = 1, .obj_inst = 2};
uint16_t l = sizeof(opaque);
ret = lwm2m_set_res_buf(&LWM2M_OBJ(4, 0, 9), &u16_buf, sizeof(u16_buf),
sizeof(u16_buf), 0);
zassert_equal(ret, 0);
ret = lwm2m_set_res_buf(&LWM2M_OBJ(4, 0, 8), &u32_buf, sizeof(u32_buf),
sizeof(u32_buf), 0);
zassert_equal(ret, 0);
ret = lwm2m_set_res_buf(&LWM2M_OBJ(4, 0, 2), &s16_buf, sizeof(s16_buf),
sizeof(s16_buf), 0);
zassert_equal(ret, 0);
ret = lwm2m_set_res_buf(&LWM2M_OBJ(4, 0, 11), &s32_buf, sizeof(s32_buf),
sizeof(s32_buf), 0);
zassert_equal(ret, 0);
zassert_equal(lwm2m_set_bool(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_BOOL), b), 0);
zassert_equal(lwm2m_set_opaque(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_OPAQUE), opaque, l), 0);
zassert_equal(lwm2m_set_string(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_STRING), string), 0);
zassert_equal(lwm2m_set_u8(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_U8), u8), 0);
zassert_equal(lwm2m_set_s8(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_S8), s8), 0);
zassert_equal(lwm2m_set_u16(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_U16), u16), 0);
zassert_equal(lwm2m_set_s16(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_S16), s16), 0);
zassert_equal(lwm2m_set_u32(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_U32), u32), 0);
zassert_equal(lwm2m_set_s32(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_S32), s32), 0);
zassert_equal(lwm2m_set_s64(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_S64), s64), 0);
zassert_equal(lwm2m_set_time(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_TIME), t), 0);
zassert_equal(lwm2m_set_f64(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_FLOAT), d), 0);
zassert_equal(lwm2m_set_objlnk(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_OBJLNK), &objl), 0);
ret = lwm2m_set_u16(&LWM2M_OBJ(4, 0, 9), 0x5A5A);
zassert_equal(ret, 0);
ret = lwm2m_set_u32(&LWM2M_OBJ(4, 0, 8), 0xDEADBEEF);
zassert_equal(ret, 0);
ret = lwm2m_set_s16(&LWM2M_OBJ(4, 0, 2), -5);
zassert_equal(ret, 0);
ret = lwm2m_set_s32(&LWM2M_OBJ(4, 0, 11), 0xCC00CC00);
zassert_equal(ret, 0);
zassert_equal(lwm2m_get_bool(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_BOOL), &b), 0);
zassert_equal(lwm2m_get_opaque(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_OPAQUE), &opaque, l), 0);
zassert_equal(lwm2m_get_string(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_STRING), &string, l), 0);
zassert_equal(lwm2m_get_u8(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_U8), &u8), 0);
zassert_equal(lwm2m_get_s8(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_S8), &s8), 0);
zassert_equal(lwm2m_get_u16(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_U16), &u16), 0);
zassert_equal(lwm2m_get_s16(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_S16), &s16), 0);
zassert_equal(lwm2m_get_u32(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_U32), &u32), 0);
zassert_equal(lwm2m_get_s32(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_S32), &s32), 0);
zassert_equal(lwm2m_get_s64(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_S64), &s64), 0);
zassert_equal(lwm2m_get_time(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_TIME), &t), 0);
zassert_equal(lwm2m_get_f64(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_FLOAT), &d2), 0);
zassert_equal(lwm2m_get_objlnk(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_OBJLNK), &objl), 0);
zassert_equal(u16_buf, 0x5A5A);
zassert_equal(u32_buf, 0xDEADBEEF);
zassert_equal(s16_buf, -5);
zassert_equal(s32_buf, 0xCC00CC00);
zassert_equal(b, true);
zassert_equal(memcmp(opaque, &(uint8_t[6]) {0xde, 0xad, 0xbe, 0xff, 0, 0}, l), 0);
zassert_equal(strcmp(string, "Hello"), 0);
zassert_equal(u8, 8);
zassert_equal(s8, -8);
zassert_equal(u16, 16);
zassert_equal(s16, -16);
zassert_equal(u32, 32);
zassert_equal(s32, -32);
zassert_equal(s64, -64);
zassert_equal(t, 1687949519);
zassert_equal(d, d2);
zassert_equal(
memcmp(&objl, &(struct lwm2m_objlnk){.obj_id = 1, .obj_inst = 2}, sizeof(objl)), 0);
ret = lwm2m_get_u16(&LWM2M_OBJ(4, 0, 9), &u16_getbuf);
zassert_equal(ret, 0);
ret = lwm2m_get_u32(&LWM2M_OBJ(4, 0, 8), &u32_getbuf);
zassert_equal(ret, 0);
ret = lwm2m_get_s16(&LWM2M_OBJ(4, 0, 2), &s16_getbuf);
zassert_equal(ret, 0);
ret = lwm2m_get_s32(&LWM2M_OBJ(4, 0, 11), &s32_getbuf);
zassert_equal(ret, 0);
zassert_equal(lwm2m_set_res_data_len(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_STRING), 0), 0);
char buf[10];
zassert_equal(u16_buf, u16_getbuf);
zassert_equal(u32_buf, u32_getbuf);
zassert_equal(s16_buf, s16_getbuf);
zassert_equal(s32_buf, s32_getbuf);
zassert_equal(
lwm2m_get_string(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_STRING), buf, sizeof(buf)), 0);
zassert_equal(strlen(buf), 0);
}
ZTEST(lwm2m_registry, test_missing_u64)
{
/* This data type is missing, so use S64 resource instead */
uint64_t u64 = 123;
zassert_equal(lwm2m_set_u64(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_S64), u64), 0);
zassert_equal(lwm2m_get_u64(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_S64), &u64), 0);
zassert_equal(u64, 123);
}
ZTEST(lwm2m_registry, test_temp_sensor)
@ -352,6 +385,158 @@ ZTEST(lwm2m_registry, test_strings)
zassert_equal(ret, -ENOMEM);
}
#if CONFIG_TEST_DEPRECATED
/* Don't test deprecated functions on Twister builds */
ZTEST(lwm2m_registry, test_deprecated_functions)
{
bool b = true;
uint8_t opaque[] = {0xde, 0xad, 0xbe, 0xff, 0, 0};
char string[] = "Hello";
uint8_t u8 = 8;
int8_t s8 = -8;
uint16_t u16 = 16;
int16_t s16 = -16;
uint32_t u32 = 32;
int32_t s32 = -32;
int64_t s64 = -64;
time_t t = 1687949519;
double d = 3.1415;
double d2;
struct lwm2m_objlnk objl = {.obj_id = 1, .obj_inst = 2};
uint16_t l = sizeof(opaque);
zassert_equal(lwm2m_engine_set_bool("32768/0/" STRINGIFY(LWM2M_RES_TYPE_BOOL), b), 0);
zassert_equal(
lwm2m_engine_set_opaque("32768/0/" STRINGIFY(LWM2M_RES_TYPE_OPAQUE), opaque, l), 0);
zassert_equal(lwm2m_engine_set_string("32768/0/" STRINGIFY(LWM2M_RES_TYPE_STRING), string),
0);
zassert_equal(lwm2m_engine_set_u8("32768/0/" STRINGIFY(LWM2M_RES_TYPE_U8), u8), 0);
zassert_equal(lwm2m_engine_set_s8("32768/0/" STRINGIFY(LWM2M_RES_TYPE_S8), s8), 0);
zassert_equal(lwm2m_engine_set_u16("32768/0/" STRINGIFY(LWM2M_RES_TYPE_U16), u16), 0);
zassert_equal(lwm2m_engine_set_s16("32768/0/" STRINGIFY(LWM2M_RES_TYPE_S16), s16), 0);
zassert_equal(lwm2m_engine_set_u32("32768/0/" STRINGIFY(LWM2M_RES_TYPE_U32), u32), 0);
zassert_equal(lwm2m_engine_set_s32("32768/0/" STRINGIFY(LWM2M_RES_TYPE_S32), s32), 0);
zassert_equal(lwm2m_engine_set_s64("32768/0/" STRINGIFY(LWM2M_RES_TYPE_S64), s64), 0);
zassert_equal(lwm2m_engine_set_time("32768/0/" STRINGIFY(LWM2M_RES_TYPE_TIME), t), 0);
zassert_equal(lwm2m_engine_set_float("32768/0/" STRINGIFY(LWM2M_RES_TYPE_FLOAT), &d), 0);
zassert_equal(lwm2m_engine_set_objlnk("32768/0/" STRINGIFY(LWM2M_RES_TYPE_OBJLNK), &objl),
0);
zassert_equal(lwm2m_engine_get_bool("32768/0/" STRINGIFY(LWM2M_RES_TYPE_BOOL), &b), 0);
zassert_equal(lwm2m_engine_get_opaque(
"32768/0/" STRINGIFY(LWM2M_RES_TYPE_OPAQUE), &opaque, l), 0);
zassert_equal(lwm2m_engine_get_string(
"32768/0/" STRINGIFY(LWM2M_RES_TYPE_STRING), &string, l), 0);
zassert_equal(lwm2m_engine_get_u8("32768/0/" STRINGIFY(LWM2M_RES_TYPE_U8), &u8), 0);
zassert_equal(lwm2m_engine_get_s8("32768/0/" STRINGIFY(LWM2M_RES_TYPE_S8), &s8), 0);
zassert_equal(lwm2m_engine_get_u16("32768/0/" STRINGIFY(LWM2M_RES_TYPE_U16), &u16), 0);
zassert_equal(lwm2m_engine_get_s16("32768/0/" STRINGIFY(LWM2M_RES_TYPE_S16), &s16), 0);
zassert_equal(lwm2m_engine_get_u32("32768/0/" STRINGIFY(LWM2M_RES_TYPE_U32), &u32), 0);
zassert_equal(lwm2m_engine_get_s32("32768/0/" STRINGIFY(LWM2M_RES_TYPE_S32), &s32), 0);
zassert_equal(lwm2m_engine_get_s64("32768/0/" STRINGIFY(LWM2M_RES_TYPE_S64), &s64), 0);
zassert_equal(lwm2m_engine_get_time("32768/0/" STRINGIFY(LWM2M_RES_TYPE_TIME), &t), 0);
zassert_equal(lwm2m_engine_get_float("32768/0/" STRINGIFY(LWM2M_RES_TYPE_FLOAT), &d2), 0);
zassert_equal(lwm2m_engine_get_objlnk("32768/0/" STRINGIFY(LWM2M_RES_TYPE_OBJLNK), &objl),
0);
zassert_equal(b, true);
zassert_equal(memcmp(opaque, &(uint8_t[6]) {0xde, 0xad, 0xbe, 0xff, 0, 0}, l), 0);
zassert_equal(strcmp(string, "Hello"), 0);
zassert_equal(u8, 8);
zassert_equal(s8, -8);
zassert_equal(u16, 16);
zassert_equal(s16, -16);
zassert_equal(u32, 32);
zassert_equal(s32, -32);
zassert_equal(s64, -64);
zassert_equal(t, 1687949519);
zassert_equal(d, d2);
zassert_equal(
memcmp(&objl, &(struct lwm2m_objlnk){.obj_id = 1, .obj_inst = 2}, sizeof(objl)), 0);
uint64_t u64 = 0xc0ffee;
zassert_equal(lwm2m_engine_set_u64("32768/0/" STRINGIFY(LWM2M_RES_TYPE_S64), u64), 0);
zassert_equal(lwm2m_engine_get_u64("32768/0/" STRINGIFY(LWM2M_RES_TYPE_S64), &u64), 0);
zassert_equal(u64, 0xc0ffee);
zassert_equal(lwm2m_engine_create_obj_inst("32768/1"), -ENOMEM);
zassert_equal(lwm2m_engine_delete_obj_inst("32768/1"), -ENOENT);
void *o_ptr;
uint16_t o_len;
lwm2m_get_res_buf(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_OPAQUE), &o_ptr, &o_len, NULL, NULL);
zassert_equal(lwm2m_engine_set_res_buf(
"32768/0/" STRINGIFY(LWM2M_RES_TYPE_OPAQUE), opaque, sizeof(opaque), 6, 0), 0);
void *p;
uint16_t len;
zassert_equal(lwm2m_engine_get_res_buf(
"32768/0/" STRINGIFY(LWM2M_RES_TYPE_OPAQUE), &p, NULL, &len, NULL), 0);
zassert_true(p == opaque);
zassert_equal(len, 6);
zassert_equal(lwm2m_engine_set_res_data(
"32768/0/" STRINGIFY(LWM2M_RES_TYPE_OPAQUE), string, sizeof(string), 0), 0);
lwm2m_engine_get_res_data("32768/0/" STRINGIFY(LWM2M_RES_TYPE_OPAQUE), &p, &len, NULL);
zassert_true(p == string);
zassert_equal(len, sizeof(string));
zassert_equal(lwm2m_engine_set_res_data_len("32768/0/" STRINGIFY(LWM2M_RES_TYPE_OPAQUE), 0),
0);
lwm2m_set_res_buf(&LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_OPAQUE), o_ptr, o_len, 0, 0);
}
#endif
ZTEST(lwm2m_registry, test_lock_unlock)
{
/* Should be recursive mutex and should not block */
lwm2m_registry_lock();
lwm2m_registry_lock();
lwm2m_registry_unlock();
lwm2m_registry_unlock();
}
ZTEST(lwm2m_registry, test_resource_wrappers)
{
zassert_not_null(lwm2m_engine_obj_list());
zassert_not_null(lwm2m_engine_obj_inst_list());
}
ZTEST(lwm2m_registry, test_unregister_obj)
{
struct lwm2m_obj_path none = {0};
struct lwm2m_engine_obj *obj;
zassert_is_null(lwm2m_engine_get_obj(&none));
obj = lwm2m_engine_get_obj(&LWM2M_OBJ(1));
zassert_not_null(obj);
lwm2m_unregister_obj(obj);
zassert_is_null(lwm2m_engine_get_obj(&LWM2M_OBJ(1)));
}
ZTEST(lwm2m_registry, test_next_engine_obj_inst)
{
zassert_equal(lwm2m_create_object_inst(&LWM2M_OBJ(3303, 0)), 0);
zassert_equal(lwm2m_create_object_inst(&LWM2M_OBJ(3303, 1)), 0);
struct lwm2m_engine_obj_inst *oi = lwm2m_engine_get_obj_inst(&LWM2M_OBJ(3303, 1));
zassert_not_null(oi);
zassert_not_null(next_engine_obj_inst(3303, 0));
zassert_equal(oi, next_engine_obj_inst(3303, 0));
zassert_is_null(next_engine_obj_inst(3303, 1));
zassert_equal(lwm2m_delete_object_inst(&LWM2M_OBJ(3303, 0)), 0);
zassert_equal(lwm2m_delete_object_inst(&LWM2M_OBJ(3303, 1)), 0);
zassert_is_null(lwm2m_engine_get_obj_inst(&LWM2M_OBJ(3303, 1)));
}
ZTEST(lwm2m_registry, test_null_strings)
{
int ret;
@ -385,3 +570,28 @@ ZTEST(lwm2m_registry, test_null_strings)
zassert_equal(ret, 0);
zassert_equal(strlen(buf), 0);
}
ZTEST(lwm2m_registry, test_obj_version)
{
zassert_false(lwm2m_engine_shall_report_obj_version(lwm2m_engine_get_obj(&LWM2M_OBJ(0))));
zassert_false(
lwm2m_engine_shall_report_obj_version(lwm2m_engine_get_obj(&LWM2M_OBJ(32768))));
zassert_true(lwm2m_engine_shall_report_obj_version(lwm2m_engine_get_obj(&LWM2M_OBJ(3303))));
}
ZTEST(lwm2m_registry, test_resource_cache)
{
struct lwm2m_obj_path path = LWM2M_OBJ(32768, 0, LWM2M_RES_TYPE_BOOL);
struct lwm2m_time_series_elem e;
/* Resource cache is turned off */
zassert_equal(lwm2m_engine_data_cache_init(), 0);
zassert_is_null(lwm2m_cache_entry_get_by_object(&path));
zassert_equal(lwm2m_enable_cache(&path, &e, 1), -ENOTSUP);
/* deprecated */
/* zassert_equal(lwm2m_engine_enable_cache("32768/0/1", &e, 1), -ENOTSUP); */
zassert_false(lwm2m_cache_write(NULL, NULL));
zassert_false(lwm2m_cache_read(NULL, NULL));
zassert_equal(lwm2m_cache_size(NULL), 0);
}

View file

@ -0,0 +1,109 @@
/*
* Copyright (c) 2023 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <stdint.h>
#include <zephyr/init.h>
#include "lwm2m_object.h"
#include "lwm2m_engine.h"
#define TEST_OBJ_ID 32768
bool b;
uint8_t opaque[32];
char string[32];
uint8_t u8;
int8_t s8;
uint16_t u16;
int16_t s16;
uint32_t u32;
int32_t s32;
uint64_t u64;
int64_t s64;
time_t t;
double d;
struct lwm2m_objlnk objl;
static struct lwm2m_engine_obj test_obj;
/* Use LWM2M_RES_TYPE_* also as a resource ID, so that
* resource ID of U8 type is LWM2M_RES_TYPE_U8
*/
static struct lwm2m_engine_obj_field fields[] = {
OBJ_FIELD(LWM2M_RES_TYPE_OPAQUE, RW, OPAQUE),
OBJ_FIELD(LWM2M_RES_TYPE_STRING, RW, STRING),
OBJ_FIELD(LWM2M_RES_TYPE_U32, RW, U32),
OBJ_FIELD(LWM2M_RES_TYPE_U16, RW, U16),
OBJ_FIELD(LWM2M_RES_TYPE_U8, RW, U8),
OBJ_FIELD(LWM2M_RES_TYPE_S64, RW, S64),
OBJ_FIELD(LWM2M_RES_TYPE_S32, RW, S32),
OBJ_FIELD(LWM2M_RES_TYPE_S16, RW, S16),
OBJ_FIELD(LWM2M_RES_TYPE_S8, RW, S8),
OBJ_FIELD(LWM2M_RES_TYPE_BOOL, RW, BOOL),
OBJ_FIELD(LWM2M_RES_TYPE_TIME, RW, TIME),
OBJ_FIELD(LWM2M_RES_TYPE_FLOAT, RW, FLOAT),
OBJ_FIELD(LWM2M_RES_TYPE_OBJLNK, RW, OBJLNK)
};
#define RESOURCE_COUNT LWM2M_RES_TYPE_OBJLNK
static struct lwm2m_engine_obj_inst inst;
static struct lwm2m_engine_res res[RESOURCE_COUNT];
static struct lwm2m_engine_res_inst res_inst[RESOURCE_COUNT];
static struct lwm2m_engine_obj_inst *obj_create(uint16_t obj_inst_id)
{
int i = 0, j = 0;
static bool created;
if (created || obj_inst_id != 0) {
return NULL;
}
created = true;
(void)memset(res, 0, sizeof(res));
init_res_instance(res_inst, ARRAY_SIZE(res_inst));
/* initialize instance resource data */
INIT_OBJ_RES_DATA_LEN(LWM2M_RES_TYPE_OPAQUE, res, i, res_inst, j, opaque, sizeof(opaque),
0);
INIT_OBJ_RES_DATA_LEN(LWM2M_RES_TYPE_STRING, res, i, res_inst, j, string, sizeof(string),
0);
INIT_OBJ_RES_DATA(LWM2M_RES_TYPE_U32, res, i, res_inst, j, &u32, sizeof(u32));
INIT_OBJ_RES_DATA(LWM2M_RES_TYPE_U16, res, i, res_inst, j, &u16, sizeof(u16));
INIT_OBJ_RES_DATA(LWM2M_RES_TYPE_U8, res, i, res_inst, j, &u8, sizeof(u8));
INIT_OBJ_RES_DATA(LWM2M_RES_TYPE_S64, res, i, res_inst, j, &s64, sizeof(s64));
INIT_OBJ_RES_DATA(LWM2M_RES_TYPE_S32, res, i, res_inst, j, &s32, sizeof(s32));
INIT_OBJ_RES_DATA(LWM2M_RES_TYPE_S16, res, i, res_inst, j, &s16, sizeof(s16));
INIT_OBJ_RES_DATA(LWM2M_RES_TYPE_S8, res, i, res_inst, j, &s8, sizeof(s8));
INIT_OBJ_RES_DATA(LWM2M_RES_TYPE_TIME, res, i, res_inst, j, &t, sizeof(t));
INIT_OBJ_RES_DATA(LWM2M_RES_TYPE_BOOL, res, i, res_inst, j, &b, sizeof(b));
INIT_OBJ_RES_DATA(LWM2M_RES_TYPE_FLOAT, res, i, res_inst, j, &d, sizeof(d));
INIT_OBJ_RES_DATA(LWM2M_RES_TYPE_OBJLNK, res, i, res_inst, j, &objl, sizeof(objl));
inst.resources = res;
inst.resource_count = i;
return &inst;
}
static int obj_init(void)
{
struct lwm2m_engine_obj_inst *obj_inst = NULL;
test_obj.obj_id = TEST_OBJ_ID;
test_obj.version_major = 1;
test_obj.version_minor = 0;
test_obj.is_core = false;
test_obj.fields = fields;
test_obj.field_count = ARRAY_SIZE(fields);
test_obj.max_instance_count = 1;
test_obj.create_cb = obj_create;
lwm2m_register_obj(&test_obj);
/* auto create the first instance */
return lwm2m_create_obj_inst(TEST_OBJ_ID, 0, &obj_inst);
}
SYS_INIT(obj_init, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT);