Skip to content

Commit f119427

Browse files
committed
squash! unittests: add mtd_flashpage unittests
Correct the test addresses and factorise them in macros. It adds also some fixes to the tests related to alignment and expected erase format of internal flash.
1 parent e5b7865 commit f119427

File tree

1 file changed

+53
-24
lines changed

1 file changed

+53
-24
lines changed

tests/unittests/tests-mtd_flashpage/tests-mtd_flashpage.c

Lines changed: 53 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,24 @@
1919
#include "mtd.h"
2020
#include "mtd_flashpage.h"
2121

22+
#define TEST_ADDRESS1 (uint32_t)flashpage_addr(FLASHPAGE_NUMOF - 1)
23+
#define TEST_ADDRESS2 (uint32_t)flashpage_addr(FLASHPAGE_NUMOF - 2)
24+
2225
static mtd_dev_t _dev = MTD_FLASHPAGE_INIT_VAL(8);
2326
static mtd_dev_t *dev = &_dev;
2427

25-
static void setup_teardown(void)
28+
static void setup(void)
29+
{
30+
int ret = mtd_init(dev);
31+
TEST_ASSERT_EQUAL_INT(0, ret);
32+
mtd_erase(dev, TEST_ADDRESS1, dev->pages_per_sector * dev->page_size);
33+
mtd_erase(dev, TEST_ADDRESS2, dev->pages_per_sector * dev->page_size);
34+
}
35+
36+
static void teardown(void)
2637
{
27-
mtd_erase(dev, (FLASHPAGE_NUMOF - 1) * FLASHPAGE_SIZE, dev->pages_per_sector * dev->page_size);
38+
mtd_erase(dev, TEST_ADDRESS1, dev->pages_per_sector * dev->page_size);
39+
mtd_erase(dev, TEST_ADDRESS2, dev->pages_per_sector * dev->page_size);
2840
}
2941

3042
static void test_mtd_init(void)
@@ -36,75 +48,92 @@ static void test_mtd_init(void)
3648
static void test_mtd_erase(void)
3749
{
3850
/* Erase last sector */
39-
int ret = mtd_erase(dev, (FLASHPAGE_NUMOF - 1) * FLASHPAGE_SIZE, FLASHPAGE_SIZE);
51+
int ret = mtd_erase(dev, TEST_ADDRESS1, FLASHPAGE_SIZE);
4052
TEST_ASSERT_EQUAL_INT(0, ret);
4153

4254
/* Erase with wrong size (less than sector size) */
43-
ret = mtd_erase(dev, (FLASHPAGE_NUMOF - 1) * FLASHPAGE_SIZE, dev->page_size);
55+
ret = mtd_erase(dev, TEST_ADDRESS1, dev->page_size);
4456
TEST_ASSERT_EQUAL_INT(-EOVERFLOW, ret);
4557

4658
/* Unaligned erase */
47-
ret = mtd_erase(dev, (FLASHPAGE_NUMOF - 1) * FLASHPAGE_SIZE + dev->page_size, dev->page_size);
59+
ret = mtd_erase(dev, TEST_ADDRESS1 + dev->page_size, dev->page_size);
4860
TEST_ASSERT_EQUAL_INT(-EOVERFLOW, ret);
4961

5062
/* Erase 2 last sectors */
51-
ret = mtd_erase(dev, (FLASHPAGE_NUMOF - 2) * FLASHPAGE_SIZE,
63+
ret = mtd_erase(dev, TEST_ADDRESS2,
5264
FLASHPAGE_SIZE * 2);
5365
TEST_ASSERT_EQUAL_INT(0, ret);
5466

5567
/* Erase out of memory area */
56-
ret = mtd_erase(dev, (FLASHPAGE_NUMOF - 1) * FLASHPAGE_SIZE,
68+
ret = mtd_erase(dev, TEST_ADDRESS1,
5769
FLASHPAGE_SIZE * 2);
5870
TEST_ASSERT_EQUAL_INT(-EOVERFLOW, ret);
5971
}
6072

6173
static void test_mtd_write_erase(void)
6274
{
63-
const char buf[] = "ABCDEFGHIJK";
75+
const char buf[] = "ABCDEFGHIJKLMNO";
76+
77+
/* stm32l0x and stm32l1x erase its flash with 0's */
78+
#if defined(CPU_FAM_STM32L0) || defined(CPU_FAM_STM32L1)
79+
uint8_t buf_empty[] = {0, 0, 0};
80+
#else
6481
uint8_t buf_empty[] = {0xff, 0xff, 0xff};
82+
#endif
6583
char buf_read[sizeof(buf) + sizeof(buf_empty)];
6684
memset(buf_read, 0, sizeof(buf_read));
6785

68-
int ret = mtd_write(dev, buf, (FLASHPAGE_NUMOF - 1) * FLASHPAGE_SIZE, sizeof(buf));
86+
int ret = mtd_write(dev, buf, TEST_ADDRESS1, sizeof(buf));
6987
TEST_ASSERT_EQUAL_INT(sizeof(buf), ret);
7088

71-
ret = mtd_erase(dev, (FLASHPAGE_NUMOF - 1) * FLASHPAGE_SIZE, dev->pages_per_sector * dev->page_size);
89+
ret = mtd_erase(dev, TEST_ADDRESS1, dev->pages_per_sector * dev->page_size);
7290
TEST_ASSERT_EQUAL_INT(0, ret);
7391

7492
uint8_t expected[sizeof(buf_read)];
93+
#if defined(CPU_FAM_STM32L0) || defined(CPU_FAM_STM32L1)
7594
memset(expected, 0, sizeof(expected));
76-
ret = mtd_read(dev, buf_read, (FLASHPAGE_NUMOF - 1) * FLASHPAGE_SIZE, sizeof(buf_read));
95+
#else
96+
memset(expected, 0xff, sizeof(expected));
97+
#endif
98+
ret = mtd_read(dev, buf_read, TEST_ADDRESS1, sizeof(buf_read));
7799
TEST_ASSERT_EQUAL_INT(sizeof(buf_read), ret);
78100
TEST_ASSERT_EQUAL_INT(0, memcmp(expected, buf_read, sizeof(buf_read)));
79101
}
80102

81103
static void test_mtd_write_read(void)
82104
{
83-
const char buf[] = "ABCDEFG";
84-
uint8_t buf_empty[] = {0, 0, 0, 0};
105+
const char buf[] __attribute__ ((aligned (FLASHPAGE_RAW_ALIGNMENT))) = "ABCDEFGHIJKLMNO";
106+
107+
/* stm32l0x and stm32l1x erase its flash with 0's */
108+
#if defined(CPU_FAM_STM32L0) || defined(CPU_FAM_STM32L1)
109+
uint8_t buf_empty[] = {0, 0, 0};
110+
#else
111+
uint8_t buf_empty[] = {0xff, 0xff, 0xff};
112+
#endif
85113
char buf_read[sizeof(buf) + sizeof(buf_empty)];
86114
memset(buf_read, 0, sizeof(buf_read));
87115

88116
/* Basic write / read */
89-
int ret = mtd_write(dev, buf, (FLASHPAGE_NUMOF - 1) * FLASHPAGE_SIZE, sizeof(buf));
117+
int ret = mtd_write(dev, buf, TEST_ADDRESS1, sizeof(buf));
90118
TEST_ASSERT_EQUAL_INT(sizeof(buf), ret);
91119

92-
ret = mtd_read(dev, buf_read, (FLASHPAGE_NUMOF - 1) * FLASHPAGE_SIZE, sizeof(buf_read));
120+
ret = mtd_read(dev, buf_read, TEST_ADDRESS1, sizeof(buf_read));
93121
TEST_ASSERT_EQUAL_INT(sizeof(buf_read), ret);
94122
TEST_ASSERT_EQUAL_INT(0, memcmp(buf, buf_read, sizeof(buf)));
95123
TEST_ASSERT_EQUAL_INT(0, memcmp(buf_empty, buf_read + sizeof(buf), sizeof(buf_empty)));
96124

97-
ret = mtd_erase(dev, (FLASHPAGE_NUMOF - 1) * FLASHPAGE_SIZE, dev->pages_per_sector * dev->page_size);
125+
ret = mtd_erase(dev, TEST_ADDRESS1, dev->pages_per_sector * dev->page_size);
98126
TEST_ASSERT_EQUAL_INT(0, ret);
99127

100128
/* Unaligned write / read */
101-
ret = mtd_write(dev, buf, (FLASHPAGE_NUMOF - 1) * FLASHPAGE_SIZE + sizeof(buf_empty), sizeof(buf));
102-
TEST_ASSERT_EQUAL_INT(sizeof(buf), ret);
103-
104-
ret = mtd_read(dev, buf_read, (FLASHPAGE_NUMOF - 1) * FLASHPAGE_SIZE, sizeof(buf_read));
105-
TEST_ASSERT_EQUAL_INT(sizeof(buf_read), ret);
106-
TEST_ASSERT_EQUAL_INT(0, memcmp(buf_empty, buf_read, sizeof(buf_empty)));
107-
TEST_ASSERT_EQUAL_INT(0, memcmp(buf, buf_read + sizeof(buf_empty), sizeof(buf)));
129+
ret = mtd_write(dev, buf, TEST_ADDRESS1 + sizeof(buf_empty), sizeof(buf));
130+
TEST_ASSERT_EQUAL_INT(-EINVAL, ret);
131+
132+
/* Only Cortex-M0 doesn't allow unaligned reads */
133+
#if defined(CPU_ARCH_CORTEX_M0)
134+
ret = mtd_read(dev, buf_read, TEST_ADDRESS1 + sizeof(buf_empty), sizeof(buf_read));
135+
TEST_ASSERT_EQUAL_INT(-EINVAL, ret);
136+
#endif
108137
}
109138

110139
Test *tests_mtd_flashpage_tests(void)
@@ -116,7 +145,7 @@ Test *tests_mtd_flashpage_tests(void)
116145
new_TestFixture(test_mtd_write_read),
117146
};
118147

119-
EMB_UNIT_TESTCALLER(mtd_flashpage_tests, setup_teardown, setup_teardown, fixtures);
148+
EMB_UNIT_TESTCALLER(mtd_flashpage_tests, setup, teardown, fixtures);
120149

121150
return (Test *)&mtd_flashpage_tests;
122151
}

0 commit comments

Comments
 (0)