Skip to content

Commit 27f9cd1

Browse files
LG-73 CDD API tests using gtest
1 parent f9abd47 commit 27f9cd1

File tree

5 files changed

+500
-0
lines changed

5 files changed

+500
-0
lines changed

test/cdd_tests.cpp

+311
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,311 @@
1+
#include "wpc_test.hpp"
2+
3+
class WpcCddApiTest : public WpcTest
4+
{
5+
public:
6+
static void SetUpTestSuite()
7+
{
8+
ASSERT_NO_FATAL_FAILURE(WpcTest::SetUpTestSuite());
9+
10+
// Stack should be stopped for factory reset, and it's not needed to be
11+
// started for these tests.
12+
const auto res = WPC_stop_stack();
13+
ASSERT_TRUE(APP_RES_OK == res || APP_RES_STACK_ALREADY_STOPPED == res);
14+
ASSERT_EQ(APP_RES_OK, WPC_do_factory_reset());
15+
}
16+
17+
protected:
18+
void SetUp() override
19+
{
20+
ASSERT_EQ(APP_RES_OK, WPC_set_role(APP_ROLE_SINK));
21+
}
22+
23+
void TearDown() override
24+
{
25+
ASSERT_EQ(APP_RES_OK, WPC_do_factory_reset());
26+
}
27+
28+
struct __attribute__((__packed__)) CddScratchpadDataItem
29+
{
30+
uint8_t seq;
31+
uint16_t crc;
32+
uint8_t action;
33+
uint8_t param;
34+
};
35+
36+
#define STACK_PROFILE ISM_24
37+
#if STACK_PROFILE == ISM_24
38+
const static uint16_t CDD_DIAG_INTERVAL_EP = 0xF7FF;
39+
const static uint16_t CDD_APP_CONFIG_EP = 0xF9FF;
40+
const static uint16_t CDD_SCRATCHPAD_DATA_EP = 0xFAFA;
41+
#elif STACK_PROFILE == DECT_NR
42+
const static uint16_t CDD_DIAG_INTERVAL_EP = 0xA029;
43+
const static uint16_t CDD_APP_CONFIG_EP = 0x4004;
44+
const static uint16_t CDD_SCRATCHPAD_DATA_EP = 0x4002;
45+
#endif
46+
};
47+
48+
49+
TEST_F(WpcCddApiTest, testReadingAppConfigAndDiagWithCddApi)
50+
{
51+
const uint8_t TEST_CONFIG[] = { 0x11, 0x22, 0x33, 0x44, 0x55 };
52+
const uint16_t TEST_DIAG_INTERVAL_SECONDS = 600;
53+
const uint8_t EXPECTED_RAW_DIAG_INTERVAL = 12;
54+
55+
ASSERT_EQ(APP_RES_OK,
56+
WPC_set_app_config_data(1, TEST_DIAG_INTERVAL_SECONDS, TEST_CONFIG, sizeof(TEST_CONFIG)));
57+
58+
uint8_t app_config_size = 0;
59+
ASSERT_EQ(APP_RES_OK, WPC_get_app_config_data_size(&app_config_size));
60+
ASSERT_GT(app_config_size, 0);
61+
62+
{
63+
uint8_t payload[UINT8_MAX] = { 0 };
64+
uint8_t payload_size = 0;
65+
ASSERT_EQ(APP_RES_OK, WPC_get_config_data_item(CDD_APP_CONFIG_EP, payload, &payload_size));
66+
ASSERT_EQ(app_config_size, payload_size);
67+
ASSERT_EQ_ARRAY(TEST_CONFIG, payload, sizeof(TEST_CONFIG));
68+
}
69+
70+
{
71+
uint8_t payload[UINT8_MAX] = { 0 };
72+
uint8_t payload_size = 0;
73+
ASSERT_EQ(APP_RES_OK, WPC_get_config_data_item(CDD_DIAG_INTERVAL_EP, payload, &payload_size));
74+
ASSERT_EQ(1, payload_size);
75+
ASSERT_EQ(EXPECTED_RAW_DIAG_INTERVAL, payload[0]);
76+
}
77+
}
78+
79+
TEST_F(WpcCddApiTest, testWritingAppConfigAndDiagWithCddApi)
80+
{
81+
uint8_t app_config_size = 0;
82+
ASSERT_EQ(APP_RES_OK, WPC_get_app_config_data_size(&app_config_size));
83+
ASSERT_GT(app_config_size, 0);
84+
85+
const uint8_t TEST_CONFIG[UINT8_MAX] = { 0xDD, 0xAB, 0xCD, 0x99, 0x42 };
86+
ASSERT_GE(sizeof(TEST_CONFIG), app_config_size);
87+
const uint8_t RAW_DIAG_INTERVAL = 10;
88+
const uint16_t EXPECTED_DIAG_INTERVAL_SECONDS = 120;
89+
90+
const uint8_t PAYLOAD[] = { RAW_DIAG_INTERVAL };
91+
ASSERT_EQ(APP_RES_OK, WPC_set_config_data_item(CDD_DIAG_INTERVAL_EP, PAYLOAD, sizeof(PAYLOAD)));
92+
93+
ASSERT_EQ(APP_RES_OK, WPC_set_config_data_item(CDD_APP_CONFIG_EP, TEST_CONFIG, app_config_size));
94+
95+
uint8_t seq = 0;
96+
uint16_t interval = 0;
97+
uint8_t config[UINT8_MAX] = { 0 };
98+
ASSERT_EQ(APP_RES_OK, WPC_get_app_config_data(&seq, &interval, config, sizeof(config)));
99+
ASSERT_EQ(EXPECTED_DIAG_INTERVAL_SECONDS, interval);
100+
ASSERT_EQ_ARRAY(TEST_CONFIG, config, app_config_size);
101+
}
102+
103+
TEST_F(WpcCddApiTest, testReadingScratchpatTargetWithCddApi)
104+
{
105+
const uint8_t TEST_SEQ = 53;
106+
const uint16_t TEST_CRC = 0xABCD;
107+
const uint8_t TEST_ACTION = 3;
108+
const uint8_t TEST_PARAM = 0x4A;
109+
110+
ASSERT_EQ(APP_RES_OK, WPC_write_target_scratchpad(TEST_SEQ, TEST_CRC, TEST_ACTION, TEST_PARAM));
111+
112+
uint8_t payload[255] = {0};
113+
uint8_t payload_size = 0;
114+
ASSERT_EQ(APP_RES_OK, WPC_get_config_data_item(CDD_SCRATCHPAD_DATA_EP, payload, &payload_size));
115+
ASSERT_EQ(sizeof(CddScratchpadDataItem), payload_size);
116+
CddScratchpadDataItem* scratchpad_data = (CddScratchpadDataItem*) payload;
117+
ASSERT_EQ(TEST_SEQ, scratchpad_data->seq);
118+
ASSERT_EQ(TEST_CRC, scratchpad_data->crc);
119+
ASSERT_EQ(TEST_ACTION, scratchpad_data->action);
120+
ASSERT_EQ(TEST_PARAM, scratchpad_data->param);
121+
}
122+
123+
TEST_F(WpcCddApiTest, testWritingScratchpatTargetWithCddApi)
124+
{
125+
const CddScratchpadDataItem SCRATCHPAD_DATA = {
126+
.seq = 71,
127+
.crc = 0xFEEB,
128+
.action = 3,
129+
.param = 0xC2
130+
};
131+
132+
ASSERT_EQ(APP_RES_OK,
133+
WPC_set_config_data_item(CDD_SCRATCHPAD_DATA_EP,
134+
(uint8_t const*) &SCRATCHPAD_DATA,
135+
sizeof(SCRATCHPAD_DATA)));
136+
137+
uint8_t seq = 0;
138+
uint16_t crc = 0;
139+
uint8_t action = 0;
140+
uint8_t param = 0;
141+
ASSERT_EQ(APP_RES_OK, WPC_read_target_scratchpad(&seq, &crc, &action, &param));
142+
ASSERT_EQ(SCRATCHPAD_DATA.seq, seq);
143+
ASSERT_EQ(SCRATCHPAD_DATA.crc, crc);
144+
ASSERT_EQ(SCRATCHPAD_DATA.action, action);
145+
ASSERT_EQ(SCRATCHPAD_DATA.param, param);
146+
}
147+
148+
TEST_F(WpcCddApiTest, testWritingInvalidScratchpatTargetWithCddApi)
149+
{
150+
const CddScratchpadDataItem SCRATCHPAD_DATA = {
151+
.seq = 71,
152+
.crc = 0xFEEB,
153+
.action = 250, // Invalid value
154+
.param = 0xC2
155+
};
156+
157+
ASSERT_EQ(APP_RES_DATA_ERROR,
158+
WPC_set_config_data_item(CDD_SCRATCHPAD_DATA_EP,
159+
(uint8_t const*) &SCRATCHPAD_DATA,
160+
sizeof(SCRATCHPAD_DATA)));
161+
}
162+
163+
TEST_F(WpcCddApiTest, testWritingInvalidDiagIntervalWithCddApi)
164+
{
165+
const uint8_t TEST_DIAG_INTERVAL[] = { 0xFE };
166+
ASSERT_EQ(APP_RES_DATA_ERROR,
167+
WPC_set_config_data_item(CDD_DIAG_INTERVAL_EP, TEST_DIAG_INTERVAL, 1));
168+
}
169+
170+
TEST_F(WpcCddApiTest, testWritingInvalidScratchpadTargetSizeWithCddApi)
171+
{
172+
const uint8_t TEST_PAYLOAD[10] = { 0 };
173+
ASSERT_EQ(APP_RES_DATA_ERROR,
174+
WPC_set_config_data_item(CDD_SCRATCHPAD_DATA_EP, TEST_PAYLOAD, sizeof(TEST_PAYLOAD)));
175+
}
176+
177+
TEST_F(WpcCddApiTest, testWritingInvalidDiagIntervalSizeWithCddApi)
178+
{
179+
const uint8_t TEST_PAYLOAD[10] = { 0 };
180+
ASSERT_EQ(APP_RES_DATA_ERROR,
181+
WPC_set_config_data_item(CDD_DIAG_INTERVAL_EP, TEST_PAYLOAD, sizeof(TEST_PAYLOAD)));
182+
}
183+
184+
TEST_F(WpcCddApiTest, testWritingInvalidAppConfigDataWithCddApi)
185+
{
186+
// App config data contents can be anything, but the size should be correct
187+
188+
uint8_t app_config_size = 0;
189+
ASSERT_EQ(APP_RES_OK, WPC_get_app_config_data_size(&app_config_size));
190+
ASSERT_GT(app_config_size, 2);
191+
const uint8_t INVALID_APP_CONFIG_SIZE = app_config_size - 1;
192+
193+
const uint8_t PAYLOAD[UINT8_MAX] = { 0 };
194+
ASSERT_EQ(APP_RES_DATA_ERROR, WPC_set_config_data_item(CDD_APP_CONFIG_EP, PAYLOAD, INVALID_APP_CONFIG_SIZE));
195+
}
196+
197+
TEST_F(WpcCddApiTest, settingItemShouldFailOnNonSinkNode)
198+
{
199+
ASSERT_EQ(APP_RES_OK, WPC_set_role(APP_ROLE_HEADNODE));
200+
201+
const uint8_t PAYLOAD[] = { 0xAA, 0xBB };
202+
ASSERT_EQ(APP_RES_NOT_A_SINK, WPC_set_config_data_item(100, PAYLOAD, sizeof(PAYLOAD)));
203+
}
204+
205+
TEST_F(WpcCddApiTest, gettingItemShouldWorkOnNonSinkNode)
206+
{
207+
const uint8_t TEST_PAYLOAD[] = { 0x55, 0x11, 0xFA };
208+
const uint16_t TEST_EP = 0x100;
209+
210+
ASSERT_EQ(APP_RES_OK, WPC_set_config_data_item(TEST_EP, TEST_PAYLOAD, sizeof(TEST_PAYLOAD)));
211+
212+
ASSERT_EQ(APP_RES_OK, WPC_set_role(APP_ROLE_HEADNODE));
213+
214+
uint8_t payload[UINT8_MAX] = { 0 };
215+
uint8_t payload_size = 0;
216+
ASSERT_EQ(APP_RES_OK, WPC_get_config_data_item(TEST_EP, payload, &payload_size));
217+
ASSERT_EQ(sizeof(TEST_PAYLOAD), payload_size);
218+
ASSERT_EQ_ARRAY(TEST_PAYLOAD, payload, payload_size);
219+
}
220+
221+
TEST_F(WpcCddApiTest, testSettingAndDeletingOptionalItem)
222+
{
223+
const uint8_t TEST_PAYLOAD[] = { 0xF1, 0xD0, 0xA9, 0xB4 };
224+
const uint16_t TEST_EP = 0x100;
225+
226+
ASSERT_EQ(APP_RES_OK, WPC_set_config_data_item(TEST_EP, TEST_PAYLOAD, sizeof(TEST_PAYLOAD)));
227+
228+
{
229+
uint8_t payload[UINT8_MAX] = { 0 };
230+
uint8_t payload_size = 0;
231+
ASSERT_EQ(APP_RES_OK, WPC_get_config_data_item(TEST_EP, payload, &payload_size));
232+
ASSERT_EQ(sizeof(TEST_PAYLOAD), payload_size);
233+
ASSERT_EQ_ARRAY(TEST_PAYLOAD, payload, payload_size);
234+
}
235+
236+
ASSERT_EQ(APP_RES_OK, WPC_set_config_data_item(TEST_EP, NULL, 0));
237+
238+
{
239+
uint8_t payload[UINT8_MAX] = { 0 };
240+
uint8_t payload_size = 0;
241+
ASSERT_EQ(APP_RES_INVALID_VALUE, WPC_get_config_data_item(TEST_EP, payload, &payload_size));
242+
}
243+
}
244+
245+
TEST_F(WpcCddApiTest, settingTooLargePayloadShouldFail)
246+
{
247+
const uint8_t TEST_PAYLOAD[250] = { 0 };
248+
ASSERT_EQ(APP_RES_INTERNAL_ERROR, WPC_set_config_data_item(100, TEST_PAYLOAD, sizeof(TEST_PAYLOAD)));
249+
}
250+
251+
TEST_F(WpcCddApiTest, testReplacingOptionalItem)
252+
{
253+
const uint16_t TEST_EP = 0x100;
254+
const uint8_t TEST_PAYLOAD_1[] = { 0xA1, 0xB1, 0xC1, 0xD1 };
255+
const uint8_t TEST_PAYLOAD_2[] = { 0xA0, 0xB0 };
256+
257+
ASSERT_EQ(APP_RES_OK, WPC_set_config_data_item(TEST_EP, TEST_PAYLOAD_1, sizeof(TEST_PAYLOAD_1)));
258+
ASSERT_EQ(APP_RES_OK, WPC_set_config_data_item(TEST_EP, TEST_PAYLOAD_2, sizeof(TEST_PAYLOAD_2)));
259+
260+
uint8_t payload[UINT8_MAX] = { 0 };
261+
uint8_t payload_size = 0;
262+
ASSERT_EQ(APP_RES_OK, WPC_get_config_data_item(TEST_EP, payload, &payload_size));
263+
ASSERT_EQ(sizeof(TEST_PAYLOAD_2), payload_size);
264+
ASSERT_EQ_ARRAY(TEST_PAYLOAD_2, payload, payload_size);
265+
}
266+
267+
TEST_F(WpcCddApiTest, gettingNonExistingEndpointShouldFail)
268+
{
269+
const uint16_t TEST_EP = 0xE999;
270+
271+
uint8_t payload[UINT8_MAX] = { 0 };
272+
uint8_t payload_size = 0;
273+
ASSERT_EQ(APP_RES_INVALID_VALUE, WPC_get_config_data_item(TEST_EP, payload, &payload_size));
274+
}
275+
276+
TEST_F(WpcCddApiTest, factoryResetShouldRemoveOptionalItems)
277+
{
278+
const uint8_t TEST_PAYLOAD[] = { 0xAA, 0xBB };
279+
const uint16_t TEST_EP = 0x100;
280+
281+
ASSERT_EQ(APP_RES_OK, WPC_set_config_data_item(TEST_EP, TEST_PAYLOAD, sizeof(TEST_PAYLOAD)));
282+
283+
ASSERT_EQ(APP_RES_OK, WPC_do_factory_reset());
284+
285+
uint8_t payload[UINT8_MAX] = { 0 };
286+
uint8_t payload_size = 0;
287+
ASSERT_EQ(APP_RES_INVALID_VALUE, WPC_get_config_data_item(TEST_EP, payload, &payload_size));
288+
ASSERT_EQ(0, payload_size);
289+
}
290+
291+
TEST_F(WpcCddApiTest, settingTooManyOptionalItemsShouldFail)
292+
{
293+
const uint16_t MAX_ATTEMPTS = 50;
294+
uint16_t detected_max_item_count = 0;
295+
for (uint16_t ep = 1; ep <= MAX_ATTEMPTS; ep++)
296+
{
297+
const uint8_t TEST_PAYLOAD[] = { 0x43 };
298+
const app_res_e res = WPC_set_config_data_item(ep, TEST_PAYLOAD, sizeof(TEST_PAYLOAD));
299+
if (APP_RES_OK == res) {
300+
detected_max_item_count++;
301+
} else if (APP_RES_OUT_OF_MEMORY == res) {
302+
break;
303+
} else {
304+
FAIL() << "Unexpected error occured";
305+
}
306+
}
307+
308+
ASSERT_LT(detected_max_item_count, MAX_ATTEMPTS);
309+
ASSERT_GT(detected_max_item_count, 0);
310+
}
311+

0 commit comments

Comments
 (0)