tests: lwm2m: Add engine tests on security and socket opts
Add tests regarding socket options and various security options. Signed-off-by: Seppo Takalo <seppo.takalo@nordicsemi.no>
This commit is contained in:
parent
40dd0c1fa0
commit
0da806736e
4 changed files with 81 additions and 7 deletions
|
@ -0,0 +1 @@
|
|||
CONFIG_NATIVE_POSIX_SLOWDOWN_TO_REAL_TIME=y
|
|
@ -7,11 +7,15 @@
|
|||
#include <zephyr/fff.h>
|
||||
#include <zephyr/logging/log.h>
|
||||
#include <zephyr/ztest.h>
|
||||
#include <zephyr/net/socket.h>
|
||||
|
||||
#include "lwm2m_engine.h"
|
||||
#include "lwm2m_rd_client.h"
|
||||
|
||||
#include "stubs.h"
|
||||
#if defined(CONFIG_NATIVE_POSIX_SLOWDOWN_TO_REAL_TIME)
|
||||
#include "timer_model.h"
|
||||
#endif
|
||||
|
||||
LOG_MODULE_REGISTER(lwm2m_engine_test);
|
||||
|
||||
|
@ -19,6 +23,7 @@ DEFINE_FFF_GLOBALS;
|
|||
#define FFF_FAKES_LIST(FAKE)
|
||||
|
||||
static uint8_t my_buf[256];
|
||||
static uint16_t my_data_len = 1;
|
||||
static struct lwm2m_message my_msg;
|
||||
static struct lwm2m_engine_obj_field my_obj_field;
|
||||
|
||||
|
@ -31,7 +36,7 @@ static int lwm2m_get_res_buf_custom_fake(const struct lwm2m_obj_path *path, void
|
|||
if (buffer_len)
|
||||
*buffer_len = sizeof(my_buf);
|
||||
if (data_len)
|
||||
*data_len = 1;
|
||||
*data_len = my_data_len;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -62,6 +67,12 @@ static void test_service(struct k_work *work)
|
|||
|
||||
static void setup(void *data)
|
||||
{
|
||||
#if defined(CONFIG_NATIVE_POSIX_SLOWDOWN_TO_REAL_TIME)
|
||||
/* It is enough that some slow-down is happening on sleeps, it does not have to be
|
||||
* real time
|
||||
*/
|
||||
hwtimer_set_rt_ratio(100.0);
|
||||
#endif
|
||||
/* Register resets */
|
||||
DO_FOREACH_FAKE(RESET_FAKE);
|
||||
|
||||
|
@ -95,6 +106,14 @@ ZTEST(lwm2m_engine, test_start_stop)
|
|||
|
||||
ret = lwm2m_engine_start(&ctx);
|
||||
zassert_equal(ret, 0);
|
||||
|
||||
struct lwm2m_ctx **eng_ctx = lwm2m_sock_ctx();
|
||||
int nfds = lwm2m_sock_nfds();
|
||||
|
||||
zassert_not_null(eng_ctx);
|
||||
zassert_true(nfds > 0);
|
||||
zassert_equal(eng_ctx[0], &ctx);
|
||||
|
||||
/* wait for socket receive thread */
|
||||
k_sleep(K_MSEC(1000));
|
||||
ret = lwm2m_engine_stop(&ctx);
|
||||
|
@ -160,6 +179,7 @@ ZTEST(lwm2m_engine, test_no_sa_family)
|
|||
|
||||
ret = lwm2m_engine_start(&ctx);
|
||||
zassert_equal(ret, -EPROTONOSUPPORT);
|
||||
lwm2m_engine_stop(&ctx);
|
||||
}
|
||||
|
||||
ZTEST(lwm2m_engine, test_connect_fail)
|
||||
|
@ -177,6 +197,7 @@ ZTEST(lwm2m_engine, test_connect_fail)
|
|||
z_impl_zsock_connect_fake.return_val = -1;
|
||||
ret = lwm2m_engine_start(&ctx);
|
||||
zassert_equal(ret, -ENETDOWN);
|
||||
lwm2m_engine_stop(&ctx);
|
||||
}
|
||||
|
||||
ZTEST(lwm2m_engine, test_socket_suspend_resume_connection)
|
||||
|
@ -198,6 +219,7 @@ ZTEST(lwm2m_engine, test_socket_suspend_resume_connection)
|
|||
ret = lwm2m_engine_connection_resume(&ctx);
|
||||
zassert_equal(ret, 0);
|
||||
zassert_equal(ctx.connection_suspended, false);
|
||||
lwm2m_engine_stop(&ctx);
|
||||
}
|
||||
|
||||
ZTEST(lwm2m_engine, test_check_notifications)
|
||||
|
@ -360,7 +382,7 @@ ZTEST(lwm2m_engine, test_socket_recv)
|
|||
k_sleep(K_MSEC(1000));
|
||||
ret = lwm2m_engine_stop(&ctx);
|
||||
zassert_equal(ret, 0);
|
||||
zassert_equal(lwm2m_udp_receive_fake.call_count, 1, "udp receive was not called");
|
||||
zassert_true(lwm2m_udp_receive_fake.call_count > 0);
|
||||
}
|
||||
|
||||
ZTEST(lwm2m_engine, test_socket_send)
|
||||
|
@ -392,3 +414,56 @@ ZTEST(lwm2m_engine, test_socket_send)
|
|||
LOG_INF("Count %d", coap_pending_cycle_fake.call_count);
|
||||
zassert_equal(coap_pending_cycle_fake.call_count, 1, "coap_pending_cycle not called");
|
||||
}
|
||||
|
||||
ZTEST(lwm2m_engine, test_security)
|
||||
{
|
||||
struct lwm2m_ctx ctx;
|
||||
char host_name[10] = "my_host";
|
||||
|
||||
(void)memset(&ctx, 0x0, sizeof(ctx));
|
||||
my_data_len = snprintk(my_buf, sizeof(my_buf), "-----BEGIN SOMETHING");
|
||||
|
||||
ctx.remote_addr.sa_family = AF_INET;
|
||||
ctx.sock_fd = -1;
|
||||
ctx.load_credentials = NULL;
|
||||
ctx.desthostname = host_name;
|
||||
ctx.desthostnamelen = strlen(host_name);
|
||||
ctx.hostname_verify = true;
|
||||
ctx.use_dtls = false;
|
||||
|
||||
lwm2m_security_mode_fake.return_val = LWM2M_SECURITY_NOSEC;
|
||||
|
||||
zassert_equal(lwm2m_engine_start(&ctx), 0);
|
||||
zassert_equal(lwm2m_engine_stop(&ctx), 0);
|
||||
|
||||
ctx.use_dtls = true;
|
||||
zassert_equal(lwm2m_engine_start(&ctx), -EINVAL);
|
||||
zassert_equal(lwm2m_engine_stop(&ctx), 0);
|
||||
|
||||
RESET_FAKE(z_impl_zsock_setsockopt);
|
||||
lwm2m_security_mode_fake.return_val = LWM2M_SECURITY_PSK;
|
||||
zassert_equal(lwm2m_engine_start(&ctx), 0);
|
||||
zassert_equal(z_impl_zsock_setsockopt_fake.arg2_history[0], TLS_SEC_TAG_LIST);
|
||||
zassert_equal(z_impl_zsock_setsockopt_fake.arg2_history[1], TLS_HOSTNAME);
|
||||
zassert_equal(z_impl_zsock_setsockopt_fake.arg2_history[2], TLS_PEER_VERIFY);
|
||||
zassert_equal(z_impl_zsock_setsockopt_fake.arg2_history[3], TLS_CIPHERSUITE_LIST);
|
||||
zassert_true(tls_credential_delete_fake.call_count > 3);
|
||||
zassert_true(tls_credential_add_fake.call_count == 2);
|
||||
zassert_equal(tls_credential_add_fake.arg1_history[0], TLS_CREDENTIAL_PSK_ID);
|
||||
zassert_equal(tls_credential_add_fake.arg1_history[1], TLS_CREDENTIAL_PSK);
|
||||
zassert_equal(lwm2m_engine_stop(&ctx), 0);
|
||||
|
||||
RESET_FAKE(z_impl_zsock_setsockopt);
|
||||
RESET_FAKE(tls_credential_add);
|
||||
lwm2m_security_mode_fake.return_val = LWM2M_SECURITY_CERT;
|
||||
ctx.hostname_verify = false;
|
||||
zassert_equal(lwm2m_engine_start(&ctx), 0);
|
||||
zassert_equal(z_impl_zsock_setsockopt_fake.arg2_history[0], TLS_SEC_TAG_LIST);
|
||||
zassert_equal(z_impl_zsock_setsockopt_fake.arg2_history[1], TLS_PEER_VERIFY);
|
||||
zassert_equal(z_impl_zsock_setsockopt_fake.arg2_history[2], TLS_CIPHERSUITE_LIST);
|
||||
zassert_true(tls_credential_add_fake.call_count == 3);
|
||||
zassert_equal(tls_credential_add_fake.arg1_history[0], TLS_CREDENTIAL_SERVER_CERTIFICATE);
|
||||
zassert_equal(tls_credential_add_fake.arg1_history[1], TLS_CREDENTIAL_PRIVATE_KEY);
|
||||
zassert_equal(tls_credential_add_fake.arg1_history[2], TLS_CREDENTIAL_CA_CERTIFICATE);
|
||||
zassert_equal(lwm2m_engine_stop(&ctx), 0);
|
||||
}
|
||||
|
|
|
@ -40,6 +40,7 @@ DEFINE_FAKE_VALUE_FUNC(int, lwm2m_get_bool, const struct lwm2m_obj_path *, bool
|
|||
DEFINE_FAKE_VALUE_FUNC(int, lwm2m_delete_obj_inst, uint16_t, uint16_t);
|
||||
DEFINE_FAKE_VOID_FUNC(lwm2m_clear_block_contexts);
|
||||
DEFINE_FAKE_VALUE_FUNC(int, lwm2m_security_mode, struct lwm2m_ctx *);
|
||||
DEFINE_FAKE_VALUE_FUNC(int, z_impl_zsock_setsockopt, int, int, int, const void *, socklen_t);
|
||||
|
||||
static sys_slist_t obs_obj_path_list = SYS_SLIST_STATIC_INIT(&obs_obj_path_list);
|
||||
sys_slist_t *lwm2m_obs_obj_path_list(void)
|
||||
|
@ -126,11 +127,6 @@ int z_impl_zsock_poll(struct zsock_pollfd *fds, int nfds, int poll_timeout)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int z_impl_zsock_setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int z_impl_zsock_fcntl(int sock, int cmd, int flags)
|
||||
{
|
||||
return 0;
|
||||
|
|
|
@ -55,6 +55,7 @@ DECLARE_FAKE_VALUE_FUNC(int, lwm2m_delete_obj_inst, uint16_t, uint16_t);
|
|||
DECLARE_FAKE_VOID_FUNC(lwm2m_clear_block_contexts);
|
||||
DECLARE_FAKE_VALUE_FUNC(int, z_impl_zsock_connect, int, const struct sockaddr *, socklen_t);
|
||||
DECLARE_FAKE_VALUE_FUNC(int, lwm2m_security_mode, struct lwm2m_ctx *);
|
||||
DECLARE_FAKE_VALUE_FUNC(int, z_impl_zsock_setsockopt, int, int, int, const void *, socklen_t);
|
||||
|
||||
#define DO_FOREACH_FAKE(FUNC) \
|
||||
do { \
|
||||
|
@ -83,6 +84,7 @@ DECLARE_FAKE_VALUE_FUNC(int, lwm2m_security_mode, struct lwm2m_ctx *);
|
|||
FUNC(lwm2m_clear_block_contexts) \
|
||||
FUNC(z_impl_zsock_connect) \
|
||||
FUNC(lwm2m_security_mode) \
|
||||
FUNC(z_impl_zsock_setsockopt) \
|
||||
} while (0)
|
||||
|
||||
#endif /* STUBS_H */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue