Skip to content

Commit 5ab1a5e

Browse files
committed
Add OD load test-case
Test load behaviour when OD entries change in size.
1 parent 845798b commit 5ab1a5e

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

test/test_od.cpp

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,57 @@ TEST_F (OdTest, StoreThenLoadOD)
239239
EXPECT_EQ (0x12345678u, value);
240240
}
241241

242+
TEST_F (OdTest, StoreThenLoadNewOD)
243+
{
244+
uint32_t value2000_01;
245+
uint32_t value2000_02;
246+
char str2001[16];
247+
char expect_str2001[sizeof(str2001)] = {0};
248+
const co_entry_t OD2000_1[] = {
249+
{0x00, OD_RO, DTYPE_UNSIGNED8, 8, 0x02, NULL},
250+
{0x01, OD_RW, DTYPE_UNSIGNED32, 32, 0, &value2000_01},
251+
{0x02, OD_RW, DTYPE_UNSIGNED16, 16, 0, &value2000_02},
252+
};
253+
co_entry_t OD2001_1[] = {
254+
{0, OD_RW, DTYPE_VISIBLE_STRING, 8 * sizeof (str2001), 0, str2001},
255+
};
256+
const co_obj_t OD1[] = {
257+
{0x2000, OTYPE_RECORD, 2, OD2000_1, NULL},
258+
{0x2001, OTYPE_VAR, 0, OD2001_1, NULL},
259+
{0, OTYPE_NULL, 0, NULL, NULL},
260+
};
261+
const co_entry_t OD2000_2[12] = {
262+
{0x00, OD_RO, DTYPE_UNSIGNED8, 8, 0x02, NULL},
263+
{0x01, OD_RW, DTYPE_UNSIGNED16, 16, 0, &value2000_01}, // Grows
264+
{0x02, OD_RW, DTYPE_UNSIGNED32, 32, 0, &value2000_02}, // Shrinks
265+
};
266+
co_entry_t OD2001_2[] = {
267+
// Shrinks, should discard data
268+
{0, OD_RW, DTYPE_VISIBLE_STRING, 8 * (sizeof (str2001) - 1), 0, str2001},
269+
};
270+
const co_obj_t OD2[] = {
271+
{0x2000, OTYPE_RECORD, 2, OD2000_2, NULL},
272+
{0x2001, OTYPE_VAR, 0, OD2001_2, NULL},
273+
{0, OTYPE_NULL, 0, NULL, NULL},
274+
};
275+
276+
net.od = OD1;
277+
value2000_01 = 0xFFFFFFFF;
278+
value2000_02 = 0xFFFF;
279+
memset (str2001, 0xFF, sizeof(str2001));
280+
co_od_store (&net, CO_STORE_APP, 0x2000, 0x2FFF);
281+
282+
value2000_01 = 0xAAAAAAAA;
283+
value2000_02 = 0x55555555;
284+
memset (str2001, 0xAA, sizeof(str2001));
285+
286+
net.od = OD2;
287+
co_od_reset (&net, CO_STORE_APP, 0x2000, 0x2FFF);
288+
EXPECT_EQ (0xAAAAFFFFu, value2000_01);
289+
EXPECT_EQ (0x0000FFFFu, value2000_02);
290+
EXPECT_EQ (0, memcmp (expect_str2001, str2001, sizeof(str2001) - 1));
291+
}
292+
242293
TEST_F (OdTest, OD1010)
243294
{
244295
const co_obj_t * obj1010 = find_obj (0x1010);

0 commit comments

Comments
 (0)