Skip to content

Commit f6ac06f

Browse files
author
Jarkko Paso
authored
Fhss ut improvements (ARMmbed#1622)
* FHSS unit tests: Removed unnecessary TODO comment * FHSS unit tests: Test written ufsi field in synch info
1 parent 60a3b0f commit f6ac06f

File tree

5 files changed

+58
-15
lines changed

5 files changed

+58
-15
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ bool test_fhss_use_broadcast_queue_cb()
266266

267267
bool test_fhss_read_timestamp_cb()
268268
{
269-
fhss_platform_stub.uint32_value = 100000;
269+
fhss_platform_stub.timestamp_value = 100000;
270270
nsdynmemlib_stub.returnCounter = 1;
271271
test_set_platform_api(&fhss_timer);
272272
// Allocate instance
@@ -276,7 +276,7 @@ bool test_fhss_read_timestamp_cb()
276276
return false;
277277
}
278278
// Test success
279-
if (fhss_platform_stub.uint32_value != fhss_read_timestamp_cb(&fhss_api)) {
279+
if (fhss_platform_stub.timestamp_value != fhss_read_timestamp_cb(&fhss_api)) {
280280
return false;
281281
}
282282
// Free allocated instance

test/nanostack/unittest/service_libs/fhss_ws/Makefile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ TEST_SRC_FILES = \
1313
test_fhss_ws.c \
1414
../../stub/mbed_trace_stub.c \
1515
../../stub/nsdynmemLIB_stub.c \
16-
../../stub/common_functions_stub.c \
1716
../../stub/channel_list_stub.c \
1817
../../stub/channel_functions_stub.c \
1918
../../stub/fhss_stub.c \

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

Lines changed: 52 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
#include "fhss_callbacks_stub.h"
2929
#include "fhss_platform_stub.h"
3030
#include "channel_functions_stub.h"
31-
#include "common_functions_stub.h"
3231

3332
#define VENDOR_CHANNEL 89
3433
#define DEFAULT_CHANNEL 99
@@ -50,6 +49,22 @@ static fhss_api_t fhss_api;
5049
static fhss_ws_t ws;
5150
static fhss_ws_neighbor_timing_info_t neighbor_info;
5251

52+
uint16_t common_read_16_bit_inverse(const uint8_t data_buf[__static 2])
53+
{
54+
uint16_t temp_16;
55+
temp_16 = *data_buf++;
56+
temp_16 += (uint16_t)(*data_buf++) << 8;
57+
return temp_16;
58+
}
59+
60+
uint8_t *common_write_24_bit_inverse(uint_fast24_t value, uint8_t ptr[__static 3])
61+
{
62+
*ptr++ = value;
63+
*ptr++ = value >> 8;
64+
*ptr++ = value >> 16;
65+
return ptr;
66+
}
67+
5368
static int32_t app_channel_function(const fhss_api_t *api, uint16_t slot, uint8_t eui64[8], uint16_t bsi, uint16_t number_of_channels)
5469
{
5570
return VENDOR_CHANNEL;
@@ -77,6 +92,17 @@ static void enable_fhss_struct(void)
7792
fhss_common_stub.bool_value = true;
7893
}
7994

95+
static bool test_ufsi(uint8_t *ufsi_ptr, uint_fast24_t test_value)
96+
{
97+
uint_fast24_t ufsi = *ufsi_ptr++;
98+
ufsi += (uint_fast24_t)(*ufsi_ptr++) << 8;
99+
ufsi += (uint_fast24_t)(*ufsi_ptr++) << 16;
100+
if (test_value != ufsi) {
101+
return false;
102+
}
103+
return true;
104+
}
105+
80106
static void test_set_platform_api(fhss_timer_t *fhss_timer)
81107
{
82108
fhss_timer->fhss_resolution_divider = 1;
@@ -97,6 +123,7 @@ static fhss_api_t *test_generate_fhss_api(void)
97123
neighbor_info.uc_timing_info.utt_rx_timestamp = 100000;
98124
fhss_common_stub.fhss_struct.fhss_api = &fhss_api;
99125
fhss_common_stub.fhss_struct.ws = &ws;
126+
fhss_common_stub.fhss_struct.ws->uc_slot = 3;
100127
fhss_common_stub.fhss_struct.ws->fhss_configuration.fhss_uc_dwell_interval = 200;
101128
fhss_common_stub.fhss_struct.ws->fhss_configuration.fhss_bc_dwell_interval = 250;
102129
fhss_common_stub.fhss_struct.ws->fhss_configuration.fhss_broadcast_interval = 1000;
@@ -195,7 +222,7 @@ bool test_fhss_ws_tx_handle_callback()
195222
/* Test TR51 channel function
196223
* Dest. slot: | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
197224
* |dest. ufsi| 900ms |
198-
* timestamps: 100000us| 1000000us|
225+
* timestamps: 100000us| 1000000us|
199226
*/
200227
fhss_common_stub.fhss_struct.ws->fhss_configuration.ws_channel_function = WS_TR51CF;
201228
if ((fhss_common_stub.fhss_struct.fhss_api->tx_handle(api, DEFAULT_IS_BC_DEST, dest_address, DEFAULT_FRAME_TYPE, DEFAULT_FRAME_LENGTH, DEFAULT_PHY_HEAD_LENGTH, DEFAULT_PHY_TAIL_LENGTH, DEFAULT_TX_TIME) != 0)
@@ -243,8 +270,6 @@ bool test_fhss_ws_tx_handle_callback()
243270
return false;
244271
}
245272

246-
// TODO: Test own_ceil with decimal number
247-
248273
return true;
249274
}
250275

@@ -340,13 +365,31 @@ bool test_fhss_ws_write_synch_info_callback()
340365
if (fhss_common_stub.fhss_struct.fhss_api->write_synch_info(api, synch_info, sizeof(synch_info), FHSS_SYNCH_FRAME, DEFAULT_TX_TIME) != -1) {
341366
return false;
342367
}
343-
// Test when IE element not found
344-
common_functions_stub.uint16_value = 0;
345-
if (fhss_common_stub.fhss_struct.fhss_api->write_synch_info(api, synch_info, sizeof(synch_info), DEFAULT_FRAME_TYPE, DEFAULT_TX_TIME) != 0) {
368+
fhss_platform_stub.remaining_slots_value = 100000;
369+
fhss_common_stub.uint32_value = 1000000;
370+
/* Test the UFSI field in synch info
371+
* slot: | 0(200ms) | 1(200ms) | 2(200ms) | 3(200ms) |
372+
* | ufsi(597ms) -> 1001599 |
373+
* timestamps: written at 1000000us|TX at 1097000us|
374+
*/
375+
if ((fhss_common_stub.fhss_struct.fhss_api->write_synch_info(api, synch_info, sizeof(synch_info), DEFAULT_FRAME_TYPE, fhss_common_stub.uint32_value + 97000) != 0)
376+
|| (test_ufsi(&synch_info[11], 1001599) != true)) {
346377
return false;
347378
}
348-
// Test when IE element found
349-
common_functions_stub.uint16_value = 0x1505;
379+
// Test when timestamp overflows
380+
fhss_common_stub.uint32_value = 4294960000;
381+
/* Test the UFSI field in synch info
382+
* slot: | 0(200ms) | 1(200ms) | 2(200ms) | 3(200ms) |
383+
* | ufsi(597ms) -> 1001599 |
384+
* timestamps: written at 4294960000us| TX at 89704us|
385+
*/
386+
if ((fhss_common_stub.fhss_struct.fhss_api->write_synch_info(api, synch_info, sizeof(synch_info), DEFAULT_FRAME_TYPE, fhss_common_stub.uint32_value + 97000) != 0)
387+
|| (test_ufsi(&synch_info[11], 1001599) != true)) {
388+
return false;
389+
}
390+
391+
// Test when IE element not found
392+
memset(synch_info, 0, sizeof(synch_info));
350393
if (fhss_common_stub.fhss_struct.fhss_api->write_synch_info(api, synch_info, sizeof(synch_info), DEFAULT_FRAME_TYPE, DEFAULT_TX_TIME) != 0) {
351394
return false;
352395
}

test/nanostack/unittest/stub/fhss_platform_stub.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@ fhss_platform_stub_def fhss_platform_stub;
2525

2626
uint32_t fhss_get_remaining_slots_stub(struct fhss_api *fhss_api)
2727
{
28-
return fhss_platform_stub.uint32_value;
28+
return fhss_platform_stub.remaining_slots_value;
2929
}
3030

3131
uint32_t fhss_get_timestamp_stub(struct fhss_api *fhss_api)
3232
{
33-
return fhss_platform_stub.uint32_value;
33+
return fhss_platform_stub.timestamp_value;
3434
}
3535

3636
int fhss_timer_stop_stub(struct fhss_api *fhss_api)

test/nanostack/unittest/stub/fhss_platform_stub.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ extern "C" {
2323

2424
typedef struct {
2525
bool channel_bool_value;
26-
uint32_t uint32_value;
26+
uint32_t timestamp_value;
27+
uint32_t remaining_slots_value;
2728
uint8_t address[8];
2829
int int_value;
2930
} fhss_platform_stub_def;

0 commit comments

Comments
 (0)