Skip to content

Commit b652cd3

Browse files
committed
tests/flash_api: Test for flash_mmap API call
Simple tests for flash_mmap API calls. Signed-off-by: Dominik Ermel <dominik.ermel@nordicsemi.no>
1 parent 5fd08b6 commit b652cd3

File tree

2 files changed

+88
-8
lines changed

2 files changed

+88
-8
lines changed

tests/drivers/flash_api/src/main.c

Lines changed: 84 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,16 @@ static struct {
2020
int ret;
2121
/* Some size */
2222
uint64_t size;
23+
/* Device mmap test values */
24+
void *mmap_base;
25+
ssize_t mmap_size;
26+
uint32_t mmap_flags;
2327
} simulated_values = {
2428
.ret = 0,
2529
.size = 0,
2630
};
2731

28-
/*** Device definition atd == API Test Dev ***/
32+
/*** Device definition of API pseudo functions **/
2933
static int some_get_size(const struct device *dev, uint64_t *size)
3034
{
3135
__ASSERT_NO_MSG(dev != NULL);
@@ -42,21 +46,53 @@ static int enotsup_get_size(const struct device *dev, uint64_t *size)
4246
return -ENOTSUP;
4347
}
4448

49+
static int some_mmap(const struct device *dev, void **base, uint64_t *size,
50+
uint32_t flags)
51+
{
52+
__ASSERT_NO_MSG(dev != NULL);
53+
54+
if (flags != simulated_values.mmap_flags) {
55+
return -EINVAL;
56+
}
57+
58+
if (base == NULL || size == NULL) {
59+
return -EINVAL;
60+
}
61+
62+
*base = simulated_values.mmap_base;
63+
*size = simulated_values.mmap_size;
64+
65+
return 0;
66+
}
67+
68+
static int enotsup_mmap(const struct device *dev, void **base, uint64_t *size,
69+
uint32_t flags)
70+
{
71+
ARG_UNUSED(dev);
72+
ARG_UNUSED(base);
73+
ARG_UNUSED(size);
74+
ARG_UNUSED(flags);
75+
76+
return 0;
77+
}
78+
4579
/** Device objects **/
4680
/* The device state, just to make it "ready" device */
4781
static struct device_state some_dev_state = {
4882
.init_res = 0,
4983
.initialized = 1,
5084
};
5185

52-
/* Device with get_size */
53-
static DEVICE_API(flash, size_fun_api) = {
86+
/* Device with implemented api calls */
87+
static DEVICE_API(flash, some_fun_api) = {
5488
.get_size = some_get_size,
89+
.mmap = some_mmap,
5590
};
56-
const static struct device size_fun_dev = {
57-
"get_size",
91+
92+
const static struct device some_fun_dev = {
93+
"some_fun",
5894
NULL,
59-
&size_fun_api,
95+
&some_fun_api,
6096
&some_dev_state,
6197
};
6298

@@ -72,6 +108,7 @@ const static struct device no_fun_dev = {
72108
/* Device with get_size implemented but returning -ENOTSUP */
73109
static DEVICE_API(flash, enotsup_fun_api) = {
74110
.get_size = enotsup_get_size,
111+
.mmap = enotsup_mmap,
75112
};
76113
static struct device enotsup_fun_dev = {
77114
"enotsup",
@@ -85,14 +122,53 @@ ZTEST(flash_api, test_get_size)
85122
uint64_t size = 0;
86123

87124
simulated_values.size = 45;
88-
zassert_ok(flash_get_size(&size_fun_dev, &size), "Expected success");
125+
zassert_ok(flash_get_size(&some_fun_dev, &size), "Expected success");
89126
zassert_equal(size, simulated_values.size, "Size mismatch");
90127
simulated_values.size = 46;
91-
zassert_ok(flash_get_size(&size_fun_dev, &size), "Expected success");
128+
zassert_ok(flash_get_size(&some_fun_dev, &size), "Expected success");
92129
zassert_equal(size, simulated_values.size, "Size mismatch");
93130
zassert_equal(flash_get_size(&no_fun_dev, &size), -ENOSYS);
94131

95132
zassert_equal(flash_get_size(&enotsup_fun_dev, &size), -ENOTSUP);
96133
}
97134

135+
136+
ZTEST(flash_api, test_flash_mmap)
137+
{
138+
void *base = NULL;
139+
uint64_t size = 0;
140+
141+
simulated_values.mmap_size = 40;
142+
/* Just need some pointer */
143+
simulated_values.mmap_base = (void *)&simulated_values;
144+
/* 0 for error tests */
145+
simulated_values.mmap_flags = 0;
146+
147+
zassert_equal(flash_mmap(&some_fun_dev, NULL, NULL, 0), -EINVAL);
148+
zassert_equal(flash_mmap(&some_fun_dev, &base, NULL, 0), -EINVAL);
149+
zassert_equal(flash_mmap(&some_fun_dev, NULL, &size, 0), -EINVAL);
150+
zassert_equal(flash_mmap(&some_fun_dev, &base, &size, FLASH_MMAP_F_READ), -EINVAL);
151+
zassert_equal(flash_mmap(&some_fun_dev, &base, &size, FLASH_MMAP_F_WRITE), -EINVAL);
152+
zassert_equal(flash_mmap(&some_fun_dev, &base, &size,
153+
FLASH_MMAP_F_READ | FLASH_MMAP_F_WRITE), -EINVAL);
154+
155+
simulated_values.mmap_flags = FLASH_MMAP_F_READ;
156+
zassert_equal(flash_mmap(&some_fun_dev, &base, &size, FLASH_MMAP_F_WRITE), -EINVAL);
157+
158+
simulated_values.mmap_flags = FLASH_MMAP_F_WRITE;
159+
zassert_equal(flash_mmap(&some_fun_dev, &base, &size, FLASH_MMAP_F_READ), -EINVAL);
160+
161+
zassert_equal(flash_get_size(&enotsup_fun_dev, &size), -ENOTSUP);
162+
163+
/* After all failures the base and size are expected to be not modified */
164+
zassert_equal(base, NULL);
165+
zassert_equal(size, 0);
166+
167+
simulated_values.mmap_flags = FLASH_MMAP_F_READ;
168+
zassert_ok(flash_mmap(&some_fun_dev, &base, &size, FLASH_MMAP_F_READ));
169+
/* Expected values to be read by API and updated */
170+
zassert_equal(base, simulated_values.mmap_base);
171+
zassert_equal(size, simulated_values.mmap_size);
172+
}
173+
98174
ZTEST_SUITE(flash_api, NULL, NULL, NULL, NULL, NULL);

tests/drivers/flash_api/testcase.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,9 @@ tests:
1717
- driver
1818
- flash
1919
- userspace
20+
platform_allow:
21+
- nrf52840dk/nrf52840
22+
integration_platforms:
23+
- nrf52840dk/nrf52840
2024
extra_configs:
2125
- CONFIG_USERSPACE=y

0 commit comments

Comments
 (0)