Skip to content

Commit af3937c

Browse files
committed
tests: posix: add testsuite for POSIX_SYSTEM_DATABASE
Add a testsuite for the POSIX_SYSTEM_DATABASE Option Group Signed-off-by: Chris Friedt <cfriedt@tenstorrent.com>
1 parent 07fa00a commit af3937c

File tree

5 files changed

+207
-0
lines changed

5 files changed

+207
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
3+
cmake_minimum_required(VERSION 3.20.0)
4+
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
5+
project(posix_system_database)
6+
7+
target_sources(app PRIVATE
8+
src/main.c
9+
../system_database_r/src/fs.c
10+
)
11+
12+
target_compile_options(app PRIVATE -U_POSIX_C_SOURCE -D_POSIX_C_SOURCE=200809L)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/*
2+
* Copyright (c) 2023 Nordic Semiconductor ASA
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
/ {
8+
ramdisk0 {
9+
compatible = "zephyr,ram-disk";
10+
disk-name = "RAM";
11+
sector-size = <512>;
12+
sector-count = <160>;
13+
};
14+
};

tests/posix/system_database/prj.conf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CONFIG_POSIX_API=y
2+
CONFIG_ZTEST=y
3+
4+
CONFIG_POSIX_AEP_CHOICE_BASE=y
5+
CONFIG_POSIX_SYSTEM_DATABASE=y
6+
CONFIG_FAT_FILESYSTEM_ELM=y
7+
8+
CONFIG_MAIN_STACK_SIZE=4096
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
/*
2+
* Copyright (c) 2024 Tenstorrent AI ULC
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#include <grp.h>
8+
#include <pwd.h>
9+
10+
#include <zephyr/ztest.h>
11+
12+
ZTEST(posix_system_database, test_getpwnam)
13+
{
14+
struct passwd *result;
15+
16+
{
17+
/* degenerate cases */
18+
errno = 0;
19+
zexpect_is_null(getpwnam(NULL));
20+
zexpect_equal(errno, 0);
21+
22+
/* user is not found in /etc/passwd */
23+
errno = 0;
24+
zexpect_is_null(getpwnam("nobody"));
25+
zexpect_equal(errno, 0, "expected errno to be zero, not %d", errno);
26+
}
27+
28+
result = getpwnam("root");
29+
zassert_not_null(result, "getpwnam(\"root\") failed: %d", errno);
30+
zexpect_str_equal(result->pw_name, "root");
31+
zexpect_equal(result->pw_uid, 0);
32+
zexpect_equal(result->pw_gid, 0);
33+
zexpect_str_equal(result->pw_dir, "/root");
34+
zexpect_str_equal(result->pw_shell, "/bin/sh");
35+
36+
result = getpwnam("user");
37+
zassert_not_null(result, "getpwnam(\"user\") failed: %d", errno);
38+
zexpect_str_equal(result->pw_name, "user");
39+
zexpect_equal(result->pw_uid, 1000);
40+
zexpect_equal(result->pw_gid, 1000);
41+
zexpect_str_equal(result->pw_dir, "/home/user");
42+
zexpect_str_equal(result->pw_shell, "/bin/sh");
43+
}
44+
45+
ZTEST(posix_system_database, test_getpwuid)
46+
{
47+
struct passwd *result;
48+
49+
{
50+
/* degenerate cases */
51+
52+
/* user is not found in /etc/passwd */
53+
errno = 0;
54+
zexpect_is_null(getpwuid(1001));
55+
zexpect_equal(errno, 0, "expected errno to be zero, not %d", errno);
56+
}
57+
58+
result = getpwuid(0);
59+
zassert_not_null(result, "getpwuid(0) failed: %d", errno);
60+
zexpect_str_equal(result->pw_name, "root");
61+
zexpect_equal(result->pw_uid, 0);
62+
zexpect_equal(result->pw_gid, 0);
63+
zexpect_str_equal(result->pw_dir, "/root");
64+
zexpect_str_equal(result->pw_shell, "/bin/sh");
65+
66+
result = getpwuid(1000);
67+
zassert_not_null(result, "getpwuid(0) failed: %d", errno);
68+
zexpect_str_equal(result->pw_name, "user");
69+
zexpect_equal(result->pw_uid, 1000);
70+
zexpect_equal(result->pw_gid, 1000);
71+
zexpect_str_equal(result->pw_dir, "/home/user");
72+
zexpect_str_equal(result->pw_shell, "/bin/sh");
73+
}
74+
75+
static const char *const members[] = {
76+
"staff",
77+
"admin",
78+
};
79+
80+
ZTEST(posix_system_database, test_getgrnam)
81+
{
82+
struct group *result;
83+
84+
{
85+
/* degenerate cases */
86+
errno = 0;
87+
zexpect_is_null(getgrnam(NULL));
88+
zexpect_equal(errno, 0, "expected errno to be zero, not %d", errno);
89+
90+
/* group is not found in /etc/group */
91+
errno = 0;
92+
zexpect_is_null(getgrnam("nobody"));
93+
zexpect_equal(errno, 0, "expected errno to be zero, not %d", errno);
94+
}
95+
96+
result = getgrnam("root");
97+
zassert_not_null(result, "getgrnam(\"root\") failed: %d", errno);
98+
zexpect_str_equal(result->gr_name, "root");
99+
zexpect_equal(result->gr_gid, 0);
100+
zexpect_equal(result->gr_mem[0], NULL);
101+
102+
result = getgrnam("user");
103+
zassert_not_null(result, "getgrnam(\"user\") failed: %d", errno);
104+
zexpect_str_equal(result->gr_name, "user");
105+
zexpect_equal(result->gr_gid, 1000);
106+
ARRAY_FOR_EACH(members, i) {
107+
zexpect_str_equal(result->gr_mem[i], members[i],
108+
"members[%d] (%s) does not match gr.gr_mem[%d] (%s)", i,
109+
members[i], i, result->gr_mem[i]);
110+
}
111+
zexpect_equal(result->gr_mem[2], NULL);
112+
}
113+
114+
ZTEST(posix_system_database, test_getgrgid)
115+
{
116+
struct group *result;
117+
118+
{
119+
/* degenerate cases */
120+
121+
/* group is not found in /etc/group */
122+
errno = 0;
123+
zexpect_is_null(getgrgid(1001));
124+
zexpect_equal(errno, 0, "expected errno to be zero, not %d", errno);
125+
}
126+
127+
result = getgrgid(0);
128+
zassert_not_null(result, "getgrgid(0) failed: %d", errno);
129+
zexpect_str_equal(result->gr_name, "root");
130+
zexpect_equal(result->gr_gid, 0);
131+
zexpect_equal(result->gr_mem[0], NULL);
132+
133+
result = getgrgid(1000);
134+
zassert_not_null(result, "getgrgid(1000) failed: %d", errno);
135+
zexpect_str_equal(result->gr_name, "user");
136+
zexpect_equal(result->gr_gid, 1000);
137+
ARRAY_FOR_EACH(members, i) {
138+
zexpect_str_equal(result->gr_mem[i], members[i],
139+
"members[%d] (%s) does not match gr.gr_mem[%d] (%s)", i,
140+
members[i], i, result->gr_mem[i]);
141+
}
142+
zexpect_equal(result->gr_mem[2], NULL);
143+
}
144+
145+
void *setup(void);
146+
void teardown(void *arg);
147+
148+
ZTEST_SUITE(posix_system_database, NULL, setup, NULL, NULL, teardown);
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
common:
2+
filter: not CONFIG_NATIVE_LIBC
3+
tags:
4+
- posix
5+
- posix_system_database
6+
# 1 tier0 platform per supported architecture
7+
platform_key:
8+
- arch
9+
- simulation
10+
min_flash: 64
11+
min_ram: 32
12+
tests:
13+
portability.posix.posix_system_database: {}
14+
portability.posix.posix_system_database.minimal:
15+
extra_configs:
16+
- CONFIG_MINIMAL_LIBC=y
17+
portability.posix.posix_system_database.newlib:
18+
filter: TOOLCHAIN_HAS_NEWLIB == 1
19+
extra_configs:
20+
- CONFIG_NEWLIB_LIBC=y
21+
portability.posix.posix_system_database.picolibc:
22+
tags: picolibc
23+
filter: CONFIG_PICOLIBC_SUPPORTED
24+
extra_configs:
25+
- CONFIG_PICOLIBC=y

0 commit comments

Comments
 (0)