Skip to content

Commit

Permalink
FHSS unit tests: Test failed TX allocation
Browse files Browse the repository at this point in the history
  • Loading branch information
Jarkko Paso committed Apr 13, 2018
1 parent b2cff91 commit b28fcaa
Show file tree
Hide file tree
Showing 9 changed files with 106 additions and 7 deletions.
2 changes: 1 addition & 1 deletion source/Service_Libs/fhss/fhss_common.c
Expand Up @@ -287,7 +287,7 @@ int fhss_failed_handle_add(fhss_structure_t *fhss_structure, uint8_t handle, uin
{
fhss_failed_tx_t *failed_tx = ns_dyn_mem_alloc(sizeof(fhss_failed_tx_t));
if (!failed_tx) {
return -2;
return -1;
}
failed_tx->bad_channel = bad_channel;
failed_tx->retries_done = 0;
Expand Down
3 changes: 0 additions & 3 deletions source/Service_Libs/fhss/fhss_ws.c
Expand Up @@ -294,9 +294,6 @@ static int fhss_ws_tx_handle_callback(const fhss_api_t *api, bool is_broadcast_a

static bool fhss_check_bad_channel(fhss_structure_t *fhss_structure, uint8_t handle)
{
if (!fhss_structure) {
return false;
}
fhss_failed_tx_t *failed_tx = fhss_failed_handle_find(fhss_structure, handle);
if (!failed_tx) {
return true;
Expand Down
2 changes: 0 additions & 2 deletions test/nanostack/unittest/service_libs/fhss/test_fhss.c
Expand Up @@ -129,7 +129,6 @@ static fhss_api_t *test_generate_fhss_api(void)
memset(&fhss_channel_stub, 0, sizeof(fhss_channel_stub_def));
FHSS.fhss_api = &fhss_api;
FHSS.bs = &bs;
ns_list_init(&FHSS.fhss_failed_tx_list);
FHSS.callbacks.change_channel = &mac_set_channel;
FHSS.callbacks.read_mac_address = &mac_read_64bit_mac_address;
FHSS.callbacks.read_datarate = &mac_read_phy_datarate;
Expand All @@ -138,7 +137,6 @@ static fhss_api_t *test_generate_fhss_api(void)
FHSS.callbacks.synch_lost_notification = &mac_synch_lost;
FHSS.callbacks.broadcast_notify = &mac_broadcast_notification;
test_set_fhss_default_configs();
ns_list_init(&FHSS.fhss_failed_tx_list);
test_set_platform_api(&FHSS.platform_functions);
fhss_set_callbacks(&FHSS);
return &fhss_api;
Expand Down
Expand Up @@ -90,3 +90,13 @@ TEST(fhss_common, test_fhss_clear_active_event)
{
CHECK(test_fhss_clear_active_event());
}

TEST(fhss_common, test_fhss_failed_handle_add)
{
CHECK(test_fhss_failed_handle_add());
}

TEST(fhss_common, test_fhss_failed_list_free)
{
CHECK(test_fhss_failed_list_free());
}
Expand Up @@ -17,6 +17,9 @@
#include "fhss_platform_stub.h"
#include "fhss_callbacks_stub.h"

#define DEFAULT_BAD_CHANNEL 10
#define DEFAULT_HANDLE 1

static fhss_api_t fhss_api;
static fhss_timer_t fhss_timer;
static fhss_structure_t fhss_structure;
Expand Down Expand Up @@ -314,3 +317,53 @@ bool test_fhss_clear_active_event()
}
return true;
}

bool test_fhss_failed_handle_add()
{
ns_list_init(&fhss_structure.fhss_failed_tx_list);
// Test without memory
if (fhss_failed_handle_add(&fhss_structure, DEFAULT_HANDLE, DEFAULT_BAD_CHANNEL) != -1) {
return false;
}
// Test success
nsdynmemlib_stub.returnCounter = 1;
if (fhss_failed_handle_add(&fhss_structure, DEFAULT_HANDLE, DEFAULT_BAD_CHANNEL) != 0) {
return false;
}
// Test finding using invalid handle
if (fhss_failed_handle_find(&fhss_structure, DEFAULT_HANDLE+1) != NULL) {
return false;
}
// Test finding
if (fhss_failed_handle_find(&fhss_structure, DEFAULT_HANDLE) == NULL) {
return false;
}
// Remove entry using invalid handle
if (fhss_failed_handle_remove(&fhss_structure, 0) != -1) {
return false;
}
// Remove entry
if (fhss_failed_handle_remove(&fhss_structure, DEFAULT_HANDLE) != 0) {
return false;
}

return true;
}

bool test_fhss_failed_list_free()
{
ns_list_init(&fhss_structure.fhss_failed_tx_list);

// Add some entries
uint8_t number_of_entries = 10;
nsdynmemlib_stub.returnCounter = number_of_entries;
for (int i=0; i<number_of_entries; i++) {
if (fhss_failed_handle_add(&fhss_structure, DEFAULT_HANDLE+i, DEFAULT_BAD_CHANNEL+i) != 0) {
return false;
}
}
// Remove entries;
fhss_failed_list_free(&fhss_structure);

return true;
}
Expand Up @@ -25,6 +25,8 @@ bool test_fhss_use_broadcast_queue_cb();
bool test_fhss_read_timestamp_cb();
bool test_fhss_init_callbacks_cb();
bool test_fhss_clear_active_event();
bool test_fhss_failed_handle_add();
bool test_fhss_failed_list_free();

#ifdef __cplusplus
}
Expand Down
37 changes: 36 additions & 1 deletion test/nanostack/unittest/service_libs/fhss_ws/test_fhss_ws.c
Expand Up @@ -141,6 +141,7 @@ static fhss_api_t *test_generate_fhss_api(void)
fhss_common_stub.fhss_struct.ws->is_on_bc_channel = false;
fhss_common_stub.fhss_struct.callbacks.change_channel = &mac_set_channel;
fhss_common_stub.fhss_struct.callbacks.read_mac_address = &mac_read_64bit_mac_address;
fhss_common_stub.fhss_struct.callbacks.read_tx_queue_size = &mac_read_tx_queue_sizes;
fhss_common_stub.fhss_struct.callbacks.tx_poll = &mac_poll_tx_queue;
test_set_platform_api(&fhss_common_stub.fhss_struct.platform_functions);
fhss_ws_set_callbacks(&fhss_common_stub.fhss_struct);
Expand Down Expand Up @@ -306,6 +307,19 @@ bool test_fhss_ws_check_tx_conditions_callback()
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) {
return false;
}
// Test bad channel and failed handle not found
fhss_common_stub.fhss_struct.ws->is_on_bc_channel = false;
fhss_common_stub.fhss_failed_tx.handle = DEFAULT_HANDLE+1;
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) {
return false;
}
// Test when on bad channel
fhss_common_stub.fhss_struct.ws->is_on_bc_channel = false;
fhss_common_stub.fhss_failed_tx.handle = DEFAULT_HANDLE;
fhss_common_stub.fhss_failed_tx.bad_channel = fhss_common_stub.fhss_struct.rx_channel;
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) {
return false;
}

return true;
}
Expand Down Expand Up @@ -345,11 +359,32 @@ bool test_fhss_ws_data_tx_fail_callback()
if (fhss_common_stub.fhss_struct.fhss_api->data_tx_fail(api, DEFAULT_HANDLE, DEFAULT_FRAME_TYPE) != false) {
return false;
}
// Test when FHSS struct can be found
// Test when FHSS is unsynchronized
enable_fhss_struct();
if (fhss_common_stub.fhss_struct.fhss_api->data_tx_fail(api, DEFAULT_HANDLE, DEFAULT_FRAME_TYPE) != false) {
return false;
}
// Test when not data frame
fhss_common_stub.fhss_struct.fhss_state = FHSS_SYNCHRONIZED;
if (fhss_common_stub.fhss_struct.fhss_api->data_tx_fail(api, DEFAULT_HANDLE, FHSS_SYNCH_FRAME) != false) {
return false;
}
// Test adding new failed entry
fhss_common_stub.fhss_failed_tx.handle = DEFAULT_HANDLE+1;
fhss_common_stub.fhss_failed_tx.retries_done = 0;
if (fhss_common_stub.fhss_struct.fhss_api->data_tx_fail(api, DEFAULT_HANDLE, DEFAULT_FRAME_TYPE) != true) {
return false;
}
// Test when handle failed again
fhss_common_stub.fhss_failed_tx.handle = DEFAULT_HANDLE;
if (fhss_common_stub.fhss_struct.fhss_api->data_tx_fail(api, DEFAULT_HANDLE, DEFAULT_FRAME_TYPE) != true) {
return false;
}
// Test last failure
fhss_common_stub.fhss_failed_tx.retries_done = 3;
if (fhss_common_stub.fhss_struct.fhss_api->data_tx_fail(api, DEFAULT_HANDLE, DEFAULT_FRAME_TYPE) != false) {
return false;
}

return true;
}
Expand Down
3 changes: 3 additions & 0 deletions test/nanostack/unittest/stub/fhss_common_stub.c
Expand Up @@ -128,6 +128,9 @@ int fhss_init_callbacks_cb(const fhss_api_t *api, fhss_callback_t *callbacks)

fhss_failed_tx_t *fhss_failed_handle_find(fhss_structure_t *fhss_structure, uint8_t handle)
{
if (fhss_common_stub.fhss_failed_tx.handle == handle) {
return &fhss_common_stub.fhss_failed_tx;
}
return NULL;
}

Expand Down
1 change: 1 addition & 0 deletions test/nanostack/unittest/stub/fhss_common_stub.h
Expand Up @@ -27,6 +27,7 @@ typedef struct {
bool bool_value;
uint32_t uint32_value;
fhss_structure_t fhss_struct;
fhss_failed_tx_t fhss_failed_tx;
void (*callback[2])(const fhss_api_t *fhss_api, uint16_t);
} fhss_common_stub_def;

Expand Down

0 comments on commit b28fcaa

Please sign in to comment.