Skip to content

Commit 4936c45

Browse files
committed
tests: Update network module tests
Update network module test to handle new message types. The module now has input/output types instead of listening to the trigger channel. Signed-off-by: Jan Tore Guggedal <jantore.guggedal@nordicsemi.no>
1 parent 6a21a87 commit 4936c45

File tree

4 files changed

+71
-163
lines changed

4 files changed

+71
-163
lines changed

app/src/common/message_channel.h

+17-2
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,27 @@ struct payload {
5353
#define MSG_TO_PAYLOAD(_msg) ((struct payload *)_msg)
5454

5555
enum network_status {
56+
/* Output message types */
5657
NETWORK_DISCONNECTED = 0x1,
5758
NETWORK_CONNECTED,
59+
NETWORK_MODEM_RESET_LOOP,
5860
NETWORK_UICC_FAILURE,
59-
NETWORK_DISCONNECT,
61+
NETWORK_LIGHT_SERACH_DONE,
62+
NETWORK_ATTACH_REJECTED,
63+
NETWORK_PSM_PARAMS,
64+
NETWORK_EDRX_PARAMS,
65+
NETWORK_CURRENT_SYSTEM_MODE,
66+
NETWORK_QUALITY_SAMPLE_RESPONSE,
67+
68+
/* Input message types */
6069
NETWORK_CONNECT,
61-
NETWORK_QUALITY_SAMPLE,
70+
NETWORK_DISCONNECT,
71+
NETWORK_SEARCH_STOP,
72+
NETWORK_SEARCH_START,
73+
NETWORK_QUALITY_SAMPLE_REQUEST,
74+
NETWORK_SYSTEM_MODE_SET_LTE_M,
75+
NETWORK_SYSTEM_MODE_SET_NBIOT,
76+
NETWORK_SYSTEM_MODE_QUERY,
6277
};
6378

6479
#define MSG_TO_NETWORK_STATUS(_msg) (*(const enum network_status *)_msg)

app/src/modules/network/network.c

+11-2
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,9 @@ static void lte_lc_evt_handler(const struct lte_lc_evt *const evt)
189189

190190
static void sample_network_quality(void)
191191
{
192-
int ret;
192+
int ret, err;
193193
struct lte_lc_conn_eval_params conn_eval_params;
194+
enum network_status status = NETWORK_QUALITY_SAMPLE_RESPONSE;
194195

195196
ret = lte_lc_conn_eval_params_get(&conn_eval_params);
196197
if (ret == -EOPNOTSUPP) {
@@ -206,6 +207,14 @@ static void sample_network_quality(void)
206207
}
207208

208209
/* No further use of the network quality data is implemented */
210+
211+
/* Send NETWORK_QUALITY_SAMPLE_RESPONSE */
212+
213+
err = zbus_chan_pub(&NETWORK_CHAN, &status, K_SECONDS(1));
214+
if (err) {
215+
LOG_ERR("zbus_chan_pub, error: %d", err);
216+
SEND_FATAL_ERROR();
217+
}
209218
}
210219

211220
static int network_disconnect(void)
@@ -382,7 +391,7 @@ static void state_connected_run(void *obj)
382391
enum network_status status = MSG_TO_NETWORK_STATUS(state_object->msg_buf);
383392

384393
switch (status) {
385-
case NETWORK_QUALITY_SAMPLE:
394+
case NETWORK_QUALITY_SAMPLE_REQUEST:
386395
LOG_DBG("Sampling network quality data");
387396
sample_network_quality();
388397
break;

tests/module/network/CMakeLists.txt

+1-32
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ zephyr_include_directories(${ZEPHYR_BASE}/include/zephyr/)
2222
zephyr_include_directories(${ZEPHYR_BASE}/subsys/testsuite/include)
2323
zephyr_include_directories(../../../app/src/common)
2424

25-
2625
target_link_options(app PRIVATE --whole-archive)
2726
# Options that cannot be passed through Kconfig fragments
2827
target_compile_definitions(app PRIVATE
@@ -32,36 +31,6 @@ target_compile_definitions(app PRIVATE
3231
-DCONFIG_APP_NETWORK_MESSAGE_QUEUE_SIZE=5
3332
-DCONFIG_APP_NETWORK_EXEC_TIME_SECONDS_MAX=1
3433
-DCONFIG_APP_NETWORK_WATCHDOG_TIMEOUT_SECONDS=2
35-
-DCONFIG_APP_NETWORK_SAMPLE_NETWORK_QUALITY
34+
-DCONFIG_APP_NETWORK_SAMPLE_NETWORK_QUALITY=1
3635
-DCONFIG_NET_MGMT_EVENT
3736
)
38-
39-
# generate decoder using zcbor
40-
set(zcbor_command
41-
zcbor code # Invoke code generation
42-
--cddl ${ZEPHYR_BASE}/subsys/net/lib/lwm2m/lwm2m_senml_cbor.cddl
43-
--cddl ${APPLICATION_SOURCE_DIR}/../../../app/src/modules/network/conn_info.cddl
44-
--encode # Generate encoding functions
45-
--decode # Generate decoding functions
46-
--short-names # Attempt to make generated symbol names shorter (at the risk of collision)
47-
-t conn-info-object # Name of the top-level CDDL object
48-
--output-cmake conn_info_object.cmake # The generated cmake file will be placed here
49-
)
50-
execute_process(COMMAND ${zcbor_command}
51-
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
52-
COMMAND_ERROR_IS_FATAL ANY)
53-
54-
# Include the cmake file generated by zcbor. It adds the
55-
# generated code and the necessary zcbor C code files.
56-
include(${CMAKE_CURRENT_BINARY_DIR}/conn_info_object.cmake)
57-
58-
# Ensure that the cmake reconfiguration is triggerred everytime the cddl file changes.
59-
# This ensures that the codec generation is triggered.
60-
set_property(
61-
DIRECTORY
62-
PROPERTY
63-
CMAKE_CONFIGURE_DEPENDS ${APPLICATION_SOURCE_DIR}/../../../app/src/modules/network/conn_info.cddl
64-
)
65-
66-
zephyr_link_libraries(conn_info_object)
67-
target_link_libraries(conn_info_object PRIVATE zephyr_interface)

tests/module/network/src/main.c

+42-127
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@
1515

1616
#include "message_channel.h"
1717

18-
#include "zcbor_decode.h"
19-
#include "conn_info_object_decode.h"
20-
2118
DEFINE_FFF_GLOBALS;
2219

2320
FAKE_VALUE_FUNC(int, date_time_now, int64_t *);
@@ -26,12 +23,13 @@ FAKE_VALUE_FUNC(int, task_wdt_add, uint32_t, task_wdt_callback_t, void *);
2623
FAKE_VALUE_FUNC(int, lte_lc_conn_eval_params_get, struct lte_lc_conn_eval_params *);
2724
FAKE_VALUE_FUNC(int, conn_mgr_all_if_connect, bool);
2825
FAKE_VALUE_FUNC(int, conn_mgr_all_if_up, bool);
26+
FAKE_VALUE_FUNC(int, conn_mgr_all_if_disconnect, bool);
2927
FAKE_VOID_FUNC(net_mgmt_add_event_callback, struct net_mgmt_event_callback *);
3028

3129
LOG_MODULE_REGISTER(network_module_test, 4);
3230

3331
ZBUS_MSG_SUBSCRIBER_DEFINE(test_subscriber);
34-
ZBUS_CHAN_ADD_OBS(PAYLOAD_CHAN, test_subscriber, 0);
32+
ZBUS_CHAN_ADD_OBS(NETWORK_CHAN, test_subscriber, 0);
3533

3634
#define FAKE_TIME_MS 1723099642000
3735
#define FAKE_RSRP_IDX_MAX 97
@@ -56,78 +54,56 @@ static int lte_lc_conn_eval_params_get_custom_fake(struct lte_lc_conn_eval_param
5654
return 0;
5755
}
5856

59-
static int lte_lc_conn_eval_params_get_max_custom_fake(struct lte_lc_conn_eval_params *params)
60-
{
61-
params->energy_estimate = FAKE_ENERGY_ESTIMATE_MAX;
62-
params->rsrp = FAKE_RSRP_IDX_MAX;
63-
64-
return 0;
65-
}
66-
67-
static int lte_lc_conn_eval_params_get_invalid_custom_fake(struct lte_lc_conn_eval_params *params)
68-
{
69-
params->energy_estimate = FAKE_ENERGY_ESTIMATE_MAX;
70-
params->rsrp = FAKE_RSRP_IDX_INVALID;
71-
72-
return 0;
73-
}
74-
75-
static int lte_lc_conn_eval_params_get_min_custom_fake(struct lte_lc_conn_eval_params *params)
76-
{
77-
params->energy_estimate = FAKE_ENERGY_ESTIMATE_MIN;
78-
params->rsrp = FAKE_RSRP_IDX_MIN;
79-
80-
return 0;
81-
}
82-
83-
static void send_time_available(void)
57+
static void send_connected(void)
8458
{
85-
enum time_status time_type = TIME_AVAILABLE;
86-
int err = zbus_chan_pub(&TIME_CHAN, &time_type, K_SECONDS(1));
59+
enum network_status network_status = NETWORK_CONNECTED;
60+
int err = zbus_chan_pub(&NETWORK_CHAN, &network_status, K_SECONDS(1));
8761

8862
TEST_ASSERT_EQUAL(0, err);
8963
}
9064

9165
static void send_trigger(void)
9266
{
93-
enum trigger_type trigger_type = TRIGGER_DATA_SAMPLE;
94-
int err = zbus_chan_pub(&TRIGGER_CHAN, &trigger_type, K_SECONDS(1));
67+
enum network_status status = NETWORK_QUALITY_SAMPLE_REQUEST;
68+
69+
int err = zbus_chan_pub(&NETWORK_CHAN, &status, K_SECONDS(1));
9570

9671
TEST_ASSERT_EQUAL(0, err);
9772
}
9873

99-
static void wait_for_and_decode_payload(struct conn_info_object *conn_info_obj)
74+
static void wait_for_and_decode_payload(enum network_status *output)
10075
{
10176
const struct zbus_channel *chan;
102-
static struct payload payload;
10377
int err;
10478

105-
/* Allow the test thread to sleep so that the DUT's thread is allowed to run. */
106-
k_sleep(K_MSEC(100));
107-
108-
err = zbus_sub_wait_msg(&test_subscriber, &chan, &payload, K_MSEC(1000));
109-
if (err == -ENOMSG) {
110-
LOG_ERR("No payload message received");
111-
TEST_FAIL();
112-
} else if (err) {
113-
LOG_ERR("zbus_sub_wait, error: %d", err);
114-
SEND_FATAL_ERROR();
115-
116-
return;
117-
}
118-
119-
/* check if chan is payload channel */
120-
if (chan != &PAYLOAD_CHAN) {
121-
LOG_ERR("Received message from wrong channel");
122-
TEST_FAIL();
79+
/* Give the test 500 ms to complete */
80+
uint64_t end_time = k_uptime_get() + 1500;
81+
82+
while (k_uptime_get() < end_time) {
83+
err = zbus_sub_wait_msg(&test_subscriber, &chan, output, K_MSEC(1000));
84+
if (err == -ENOMSG) {
85+
LOG_ERR("No payload message received");
86+
TEST_FAIL();
87+
} else if (err) {
88+
LOG_ERR("zbus_sub_wait, error: %d", err);
89+
SEND_FATAL_ERROR();
90+
91+
return;
92+
}
93+
94+
/* check if chan is payload channel */
95+
if (chan != &NETWORK_CHAN) {
96+
LOG_ERR("Received message from wrong channel");
97+
TEST_FAIL();
98+
}
99+
100+
if (*output == NETWORK_QUALITY_SAMPLE_RESPONSE) {
101+
return;
102+
}
123103
}
124104

125-
/* decode payload */
126-
cbor_decode_conn_info_object(payload.buffer, payload.buffer_len, conn_info_obj, NULL);
127-
if (err != ZCBOR_SUCCESS) {
128-
LOG_ERR("Failed to decode payload");
129-
TEST_FAIL();
130-
}
105+
LOG_ERR("Timeout waiting for payload message");
106+
TEST_FAIL();
131107
}
132108

133109
void setUp(void)
@@ -140,26 +116,22 @@ void setUp(void)
140116
RESET_FAKE(conn_mgr_all_if_up);
141117

142118
date_time_now_fake.custom_fake = date_time_now_custom_fake;
143-
send_time_available();
119+
send_connected();
144120
}
145121

146122
void tearDown(void)
147123
{
148124
const struct zbus_channel *chan;
149-
static struct payload received_payload;
150-
int err;
125+
static enum network_status status;
151126

152-
err = zbus_sub_wait_msg(&test_subscriber, &chan, &received_payload, K_MSEC(1000));
153-
if (err == 0) {
154-
LOG_ERR("Unhandled message in payload channel");
155-
TEST_FAIL();
127+
while (zbus_sub_wait_msg(&test_subscriber, &chan, &status, K_MSEC(1000)) == 0) {
128+
LOG_INF("Unhandled message in payload channel: %d", status);
156129
}
157130
}
158131

159-
160132
void test_energy_estimate(void)
161133
{
162-
static struct conn_info_object conn_info_obj = {0};
134+
static enum network_status status;
163135

164136
/* Given */
165137
lte_lc_conn_eval_params_get_fake.custom_fake = lte_lc_conn_eval_params_get_custom_fake;
@@ -168,65 +140,8 @@ void test_energy_estimate(void)
168140
send_trigger();
169141

170142
/* Then */
171-
wait_for_and_decode_payload(&conn_info_obj);
172-
TEST_ASSERT_EQUAL(FAKE_TIME_MS / 1000, conn_info_obj.base_attributes_m.bt);
173-
TEST_ASSERT_EQUAL(FAKE_ENERGY_ESTIMATE, conn_info_obj.energy_estimate_m.vi);
174-
TEST_ASSERT_EQUAL(RSRP_IDX_TO_DBM(FAKE_RSRP_IDX), conn_info_obj.rsrp_m.vi.vi);
175-
}
176-
177-
void test_conn_info_max_values(void)
178-
{
179-
static struct conn_info_object conn_info_obj = {0};
180-
181-
/* Given */
182-
lte_lc_conn_eval_params_get_fake.custom_fake = lte_lc_conn_eval_params_get_max_custom_fake;
183-
184-
/* When */
185-
send_trigger();
186-
187-
/* Then */
188-
wait_for_and_decode_payload(&conn_info_obj);
189-
TEST_ASSERT_EQUAL(FAKE_TIME_MS / 1000, conn_info_obj.base_attributes_m.bt);
190-
TEST_ASSERT_EQUAL(FAKE_ENERGY_ESTIMATE_MAX, conn_info_obj.energy_estimate_m.vi);
191-
TEST_ASSERT_EQUAL(RSRP_IDX_TO_DBM(FAKE_RSRP_IDX_MAX), conn_info_obj.rsrp_m.vi.vi);
192-
}
193-
194-
void test_conn_info_invalid_values(void)
195-
{
196-
static struct conn_info_object conn_info_obj = {0};
197-
198-
/* Given */
199-
lte_lc_conn_eval_params_get_fake.custom_fake =
200-
lte_lc_conn_eval_params_get_invalid_custom_fake;
201-
202-
/* When */
203-
send_trigger();
204-
205-
/* Then */
206-
wait_for_and_decode_payload(&conn_info_obj);
207-
TEST_ASSERT_EQUAL(FAKE_TIME_MS / 1000, conn_info_obj.base_attributes_m.bt);
208-
TEST_ASSERT_EQUAL(FAKE_ENERGY_ESTIMATE_MAX, conn_info_obj.energy_estimate_m.vi);
209-
210-
if (conn_info_obj.rsrp_m.vi_present) {
211-
TEST_FAIL();
212-
}
213-
}
214-
215-
void test_conn_info_min_values(void)
216-
{
217-
static struct conn_info_object conn_info_obj = {0};
218-
219-
/* Given */
220-
lte_lc_conn_eval_params_get_fake.custom_fake = lte_lc_conn_eval_params_get_min_custom_fake;
221-
222-
/* When */
223-
send_trigger();
224-
225-
/* Then */
226-
wait_for_and_decode_payload(&conn_info_obj);
227-
TEST_ASSERT_EQUAL(FAKE_TIME_MS / 1000, conn_info_obj.base_attributes_m.bt);
228-
TEST_ASSERT_EQUAL(FAKE_ENERGY_ESTIMATE_MIN, conn_info_obj.energy_estimate_m.vi);
229-
TEST_ASSERT_EQUAL(RSRP_IDX_TO_DBM(FAKE_RSRP_IDX_MIN), conn_info_obj.rsrp_m.vi.vi);
143+
wait_for_and_decode_payload(&status);
144+
TEST_ASSERT_EQUAL(NETWORK_QUALITY_SAMPLE_RESPONSE, status);
230145
}
231146

232147
void test_no_events_on_zbus_until_watchdog_timeout(void)

0 commit comments

Comments
 (0)