Skip to content

Commit b28fcaa

Browse files
author
Jarkko Paso
committed
FHSS unit tests: Test failed TX allocation
1 parent b2cff91 commit b28fcaa

File tree

9 files changed

+106
-7
lines changed

9 files changed

+106
-7
lines changed

source/Service_Libs/fhss/fhss_common.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ int fhss_failed_handle_add(fhss_structure_t *fhss_structure, uint8_t handle, uin
287287
{
288288
fhss_failed_tx_t *failed_tx = ns_dyn_mem_alloc(sizeof(fhss_failed_tx_t));
289289
if (!failed_tx) {
290-
return -2;
290+
return -1;
291291
}
292292
failed_tx->bad_channel = bad_channel;
293293
failed_tx->retries_done = 0;

source/Service_Libs/fhss/fhss_ws.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -294,9 +294,6 @@ static int fhss_ws_tx_handle_callback(const fhss_api_t *api, bool is_broadcast_a
294294

295295
static bool fhss_check_bad_channel(fhss_structure_t *fhss_structure, uint8_t handle)
296296
{
297-
if (!fhss_structure) {
298-
return false;
299-
}
300297
fhss_failed_tx_t *failed_tx = fhss_failed_handle_find(fhss_structure, handle);
301298
if (!failed_tx) {
302299
return true;

test/nanostack/unittest/service_libs/fhss/test_fhss.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,6 @@ static fhss_api_t *test_generate_fhss_api(void)
129129
memset(&fhss_channel_stub, 0, sizeof(fhss_channel_stub_def));
130130
FHSS.fhss_api = &fhss_api;
131131
FHSS.bs = &bs;
132-
ns_list_init(&FHSS.fhss_failed_tx_list);
133132
FHSS.callbacks.change_channel = &mac_set_channel;
134133
FHSS.callbacks.read_mac_address = &mac_read_64bit_mac_address;
135134
FHSS.callbacks.read_datarate = &mac_read_phy_datarate;
@@ -138,7 +137,6 @@ static fhss_api_t *test_generate_fhss_api(void)
138137
FHSS.callbacks.synch_lost_notification = &mac_synch_lost;
139138
FHSS.callbacks.broadcast_notify = &mac_broadcast_notification;
140139
test_set_fhss_default_configs();
141-
ns_list_init(&FHSS.fhss_failed_tx_list);
142140
test_set_platform_api(&FHSS.platform_functions);
143141
fhss_set_callbacks(&FHSS);
144142
return &fhss_api;

test/nanostack/unittest/service_libs/fhss_common/fhsscommontest.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,13 @@ TEST(fhss_common, test_fhss_clear_active_event)
9090
{
9191
CHECK(test_fhss_clear_active_event());
9292
}
93+
94+
TEST(fhss_common, test_fhss_failed_handle_add)
95+
{
96+
CHECK(test_fhss_failed_handle_add());
97+
}
98+
99+
TEST(fhss_common, test_fhss_failed_list_free)
100+
{
101+
CHECK(test_fhss_failed_list_free());
102+
}

test/nanostack/unittest/service_libs/fhss_common/test_fhss_common.c

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
#include "fhss_platform_stub.h"
1818
#include "fhss_callbacks_stub.h"
1919

20+
#define DEFAULT_BAD_CHANNEL 10
21+
#define DEFAULT_HANDLE 1
22+
2023
static fhss_api_t fhss_api;
2124
static fhss_timer_t fhss_timer;
2225
static fhss_structure_t fhss_structure;
@@ -314,3 +317,53 @@ bool test_fhss_clear_active_event()
314317
}
315318
return true;
316319
}
320+
321+
bool test_fhss_failed_handle_add()
322+
{
323+
ns_list_init(&fhss_structure.fhss_failed_tx_list);
324+
// Test without memory
325+
if (fhss_failed_handle_add(&fhss_structure, DEFAULT_HANDLE, DEFAULT_BAD_CHANNEL) != -1) {
326+
return false;
327+
}
328+
// Test success
329+
nsdynmemlib_stub.returnCounter = 1;
330+
if (fhss_failed_handle_add(&fhss_structure, DEFAULT_HANDLE, DEFAULT_BAD_CHANNEL) != 0) {
331+
return false;
332+
}
333+
// Test finding using invalid handle
334+
if (fhss_failed_handle_find(&fhss_structure, DEFAULT_HANDLE+1) != NULL) {
335+
return false;
336+
}
337+
// Test finding
338+
if (fhss_failed_handle_find(&fhss_structure, DEFAULT_HANDLE) == NULL) {
339+
return false;
340+
}
341+
// Remove entry using invalid handle
342+
if (fhss_failed_handle_remove(&fhss_structure, 0) != -1) {
343+
return false;
344+
}
345+
// Remove entry
346+
if (fhss_failed_handle_remove(&fhss_structure, DEFAULT_HANDLE) != 0) {
347+
return false;
348+
}
349+
350+
return true;
351+
}
352+
353+
bool test_fhss_failed_list_free()
354+
{
355+
ns_list_init(&fhss_structure.fhss_failed_tx_list);
356+
357+
// Add some entries
358+
uint8_t number_of_entries = 10;
359+
nsdynmemlib_stub.returnCounter = number_of_entries;
360+
for (int i=0; i<number_of_entries; i++) {
361+
if (fhss_failed_handle_add(&fhss_structure, DEFAULT_HANDLE+i, DEFAULT_BAD_CHANNEL+i) != 0) {
362+
return false;
363+
}
364+
}
365+
// Remove entries;
366+
fhss_failed_list_free(&fhss_structure);
367+
368+
return true;
369+
}

test/nanostack/unittest/service_libs/fhss_common/test_fhss_common.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ bool test_fhss_use_broadcast_queue_cb();
2525
bool test_fhss_read_timestamp_cb();
2626
bool test_fhss_init_callbacks_cb();
2727
bool test_fhss_clear_active_event();
28+
bool test_fhss_failed_handle_add();
29+
bool test_fhss_failed_list_free();
2830

2931
#ifdef __cplusplus
3032
}

test/nanostack/unittest/service_libs/fhss_ws/test_fhss_ws.c

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ static fhss_api_t *test_generate_fhss_api(void)
141141
fhss_common_stub.fhss_struct.ws->is_on_bc_channel = false;
142142
fhss_common_stub.fhss_struct.callbacks.change_channel = &mac_set_channel;
143143
fhss_common_stub.fhss_struct.callbacks.read_mac_address = &mac_read_64bit_mac_address;
144+
fhss_common_stub.fhss_struct.callbacks.read_tx_queue_size = &mac_read_tx_queue_sizes;
144145
fhss_common_stub.fhss_struct.callbacks.tx_poll = &mac_poll_tx_queue;
145146
test_set_platform_api(&fhss_common_stub.fhss_struct.platform_functions);
146147
fhss_ws_set_callbacks(&fhss_common_stub.fhss_struct);
@@ -306,6 +307,19 @@ bool test_fhss_ws_check_tx_conditions_callback()
306307
if (fhss_common_stub.fhss_struct.fhss_api->check_tx_conditions(api, true, DEFAULT_HANDLE, DEFAULT_FRAME_TYPE, DEFAULT_FRAME_LENGTH, DEFAULT_PHY_HEAD_LENGTH, DEFAULT_PHY_TAIL_LENGTH) != true) {
307308
return false;
308309
}
310+
// Test bad channel and failed handle not found
311+
fhss_common_stub.fhss_struct.ws->is_on_bc_channel = false;
312+
fhss_common_stub.fhss_failed_tx.handle = DEFAULT_HANDLE+1;
313+
if (fhss_common_stub.fhss_struct.fhss_api->check_tx_conditions(api, DEFAULT_IS_BC_DEST, DEFAULT_HANDLE, DEFAULT_FRAME_TYPE, DEFAULT_FRAME_LENGTH, DEFAULT_PHY_HEAD_LENGTH, DEFAULT_PHY_TAIL_LENGTH) != true) {
314+
return false;
315+
}
316+
// Test when on bad channel
317+
fhss_common_stub.fhss_struct.ws->is_on_bc_channel = false;
318+
fhss_common_stub.fhss_failed_tx.handle = DEFAULT_HANDLE;
319+
fhss_common_stub.fhss_failed_tx.bad_channel = fhss_common_stub.fhss_struct.rx_channel;
320+
if (fhss_common_stub.fhss_struct.fhss_api->check_tx_conditions(api, DEFAULT_IS_BC_DEST, DEFAULT_HANDLE, DEFAULT_FRAME_TYPE, DEFAULT_FRAME_LENGTH, DEFAULT_PHY_HEAD_LENGTH, DEFAULT_PHY_TAIL_LENGTH) != false) {
321+
return false;
322+
}
309323

310324
return true;
311325
}
@@ -345,11 +359,32 @@ bool test_fhss_ws_data_tx_fail_callback()
345359
if (fhss_common_stub.fhss_struct.fhss_api->data_tx_fail(api, DEFAULT_HANDLE, DEFAULT_FRAME_TYPE) != false) {
346360
return false;
347361
}
348-
// Test when FHSS struct can be found
362+
// Test when FHSS is unsynchronized
349363
enable_fhss_struct();
350364
if (fhss_common_stub.fhss_struct.fhss_api->data_tx_fail(api, DEFAULT_HANDLE, DEFAULT_FRAME_TYPE) != false) {
351365
return false;
352366
}
367+
// Test when not data frame
368+
fhss_common_stub.fhss_struct.fhss_state = FHSS_SYNCHRONIZED;
369+
if (fhss_common_stub.fhss_struct.fhss_api->data_tx_fail(api, DEFAULT_HANDLE, FHSS_SYNCH_FRAME) != false) {
370+
return false;
371+
}
372+
// Test adding new failed entry
373+
fhss_common_stub.fhss_failed_tx.handle = DEFAULT_HANDLE+1;
374+
fhss_common_stub.fhss_failed_tx.retries_done = 0;
375+
if (fhss_common_stub.fhss_struct.fhss_api->data_tx_fail(api, DEFAULT_HANDLE, DEFAULT_FRAME_TYPE) != true) {
376+
return false;
377+
}
378+
// Test when handle failed again
379+
fhss_common_stub.fhss_failed_tx.handle = DEFAULT_HANDLE;
380+
if (fhss_common_stub.fhss_struct.fhss_api->data_tx_fail(api, DEFAULT_HANDLE, DEFAULT_FRAME_TYPE) != true) {
381+
return false;
382+
}
383+
// Test last failure
384+
fhss_common_stub.fhss_failed_tx.retries_done = 3;
385+
if (fhss_common_stub.fhss_struct.fhss_api->data_tx_fail(api, DEFAULT_HANDLE, DEFAULT_FRAME_TYPE) != false) {
386+
return false;
387+
}
353388

354389
return true;
355390
}

test/nanostack/unittest/stub/fhss_common_stub.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,9 @@ int fhss_init_callbacks_cb(const fhss_api_t *api, fhss_callback_t *callbacks)
128128

129129
fhss_failed_tx_t *fhss_failed_handle_find(fhss_structure_t *fhss_structure, uint8_t handle)
130130
{
131+
if (fhss_common_stub.fhss_failed_tx.handle == handle) {
132+
return &fhss_common_stub.fhss_failed_tx;
133+
}
131134
return NULL;
132135
}
133136

test/nanostack/unittest/stub/fhss_common_stub.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ typedef struct {
2727
bool bool_value;
2828
uint32_t uint32_value;
2929
fhss_structure_t fhss_struct;
30+
fhss_failed_tx_t fhss_failed_tx;
3031
void (*callback[2])(const fhss_api_t *fhss_api, uint16_t);
3132
} fhss_common_stub_def;
3233

0 commit comments

Comments
 (0)