Skip to content

Commit 1a63360

Browse files
Pancakemkartben
authored andcommitted
tests: posix: common: separate posix threads_ext to standalone test
posix.common contains testsuites that can be separated into smaller groups of tests. This change moves pthread_attr into a singular testsuite at tests/posix/threads/ext app directory. Signed-off-by: Marvin Ouma <[email protected]>
1 parent 5d4353d commit 1a63360

File tree

6 files changed

+190
-110
lines changed

6 files changed

+190
-110
lines changed

tests/posix/common/src/mutex_attr.c

-60
Original file line numberDiff line numberDiff line change
@@ -43,64 +43,4 @@ ZTEST(mutex_attr, test_pthread_mutexattr_destroy)
4343
}
4444
}
4545

46-
ZTEST(mutex_attr, test_pthread_mutexattr_gettype)
47-
{
48-
int type;
49-
pthread_mutexattr_t attr;
50-
51-
/* degenerate cases */
52-
{
53-
if (false) {
54-
/* undefined behaviour */
55-
zassert_equal(EINVAL, pthread_mutexattr_gettype(&attr, &type));
56-
}
57-
zassert_equal(EINVAL, pthread_mutexattr_gettype(NULL, NULL));
58-
zassert_equal(EINVAL, pthread_mutexattr_gettype(NULL, &type));
59-
zassert_equal(EINVAL, pthread_mutexattr_gettype(&attr, NULL));
60-
}
61-
62-
zassert_ok(pthread_mutexattr_init(&attr));
63-
zassert_ok(pthread_mutexattr_gettype(&attr, &type));
64-
zassert_equal(type, PTHREAD_MUTEX_DEFAULT);
65-
zassert_ok(pthread_mutexattr_destroy(&attr));
66-
}
67-
68-
ZTEST(mutex_attr, test_pthread_mutexattr_settype)
69-
{
70-
int type;
71-
pthread_mutexattr_t attr;
72-
73-
/* degenerate cases */
74-
{
75-
if (false) {
76-
/* undefined behaviour */
77-
zassert_equal(EINVAL,
78-
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_DEFAULT));
79-
}
80-
zassert_equal(EINVAL, pthread_mutexattr_settype(NULL, 42));
81-
zassert_equal(EINVAL, pthread_mutexattr_settype(NULL, PTHREAD_MUTEX_NORMAL));
82-
zassert_equal(EINVAL, pthread_mutexattr_settype(&attr, 42));
83-
}
84-
85-
zassert_ok(pthread_mutexattr_init(&attr));
86-
87-
zassert_ok(pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_DEFAULT));
88-
zassert_ok(pthread_mutexattr_gettype(&attr, &type));
89-
zassert_equal(type, PTHREAD_MUTEX_DEFAULT);
90-
91-
zassert_ok(pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_NORMAL));
92-
zassert_ok(pthread_mutexattr_gettype(&attr, &type));
93-
zassert_equal(type, PTHREAD_MUTEX_NORMAL);
94-
95-
zassert_ok(pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE));
96-
zassert_ok(pthread_mutexattr_gettype(&attr, &type));
97-
zassert_equal(type, PTHREAD_MUTEX_RECURSIVE);
98-
99-
zassert_ok(pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK));
100-
zassert_ok(pthread_mutexattr_gettype(&attr, &type));
101-
zassert_equal(type, PTHREAD_MUTEX_ERRORCHECK);
102-
103-
zassert_ok(pthread_mutexattr_destroy(&attr));
104-
}
105-
10646
ZTEST_SUITE(mutex_attr, NULL, NULL, NULL, NULL, NULL);

tests/posix/common/src/pthread_attr.c

-50
Original file line numberDiff line numberDiff line change
@@ -147,56 +147,6 @@ ZTEST(pthread_attr, test_pthread_attr_init_destroy)
147147
/* note: attr is still valid and is destroyed in after() */
148148
}
149149

150-
ZTEST(pthread_attr, test_pthread_attr_getguardsize)
151-
{
152-
size_t guardsize;
153-
154-
/* degenerate cases */
155-
{
156-
if (false) {
157-
/* undefined behaviour */
158-
zassert_equal(pthread_attr_getguardsize(NULL, NULL), EINVAL);
159-
zassert_equal(pthread_attr_getguardsize(NULL, &guardsize), EINVAL);
160-
zassert_equal(pthread_attr_getguardsize(&uninit_attr, &guardsize), EINVAL);
161-
}
162-
zassert_equal(pthread_attr_getguardsize(&attr, NULL), EINVAL);
163-
}
164-
165-
guardsize = BIOS_FOOD;
166-
zassert_ok(pthread_attr_getguardsize(&attr, &guardsize));
167-
zassert_not_equal(guardsize, BIOS_FOOD);
168-
}
169-
170-
ZTEST(pthread_attr, test_pthread_attr_setguardsize)
171-
{
172-
size_t guardsize = CONFIG_POSIX_PTHREAD_ATTR_GUARDSIZE_DEFAULT;
173-
size_t sizes[] = {0, BIT_MASK(CONFIG_POSIX_PTHREAD_ATTR_GUARDSIZE_BITS / 2),
174-
BIT_MASK(CONFIG_POSIX_PTHREAD_ATTR_GUARDSIZE_BITS)};
175-
176-
/* valid value */
177-
zassert_ok(pthread_attr_getguardsize(&attr, &guardsize));
178-
179-
/* degenerate cases */
180-
{
181-
if (false) {
182-
/* undefined behaviour */
183-
zassert_equal(pthread_attr_setguardsize(NULL, SIZE_MAX), EINVAL);
184-
zassert_equal(pthread_attr_setguardsize(NULL, guardsize), EINVAL);
185-
zassert_equal(pthread_attr_setguardsize((pthread_attr_t *)&uninit_attr,
186-
guardsize),
187-
EINVAL);
188-
}
189-
zassert_equal(pthread_attr_setguardsize(&attr, SIZE_MAX), EINVAL);
190-
}
191-
192-
ARRAY_FOR_EACH(sizes, i) {
193-
zassert_ok(pthread_attr_setguardsize(&attr, sizes[i]));
194-
guardsize = ~sizes[i];
195-
zassert_ok(pthread_attr_getguardsize(&attr, &guardsize));
196-
zassert_equal(guardsize, sizes[i]);
197-
}
198-
}
199-
200150
ZTEST(pthread_attr, test_pthread_attr_getschedparam)
201151
{
202152
struct sched_param param = {
+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
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_threads_ext)
6+
7+
target_sources(app PRIVATE src/main.c)
8+
9+
target_compile_options(app PRIVATE -U_POSIX_C_SOURCE -D_POSIX_C_SOURCE=200809L)

tests/posix/threads_ext/prj.conf

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
CONFIG_POSIX_API=y
2+
3+
CONFIG_ZTEST=y
4+
CONFIG_POSIX_AEP_CHOICE_BASE=y
5+
CONFIG_POSIX_THREADS_EXT=y

tests/posix/threads_ext/src/main.c

+151
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
/*
2+
* Copyright (c) 2024, Meta
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#include <pthread.h>
8+
9+
#include <zephyr/sys/util.h>
10+
#include <zephyr/ztest.h>
11+
12+
#define BIOS_FOOD 0xB105F00D
13+
#define SCHED_INVALID 4242
14+
#define INVALID_DETACHSTATE 7373
15+
16+
static bool attr_valid;
17+
static pthread_attr_t attr;
18+
static const pthread_attr_t uninit_attr;
19+
20+
ZTEST(posix_threads_ext, test_pthread_attr_getguardsize)
21+
{
22+
size_t guardsize;
23+
24+
/* degenerate cases */
25+
{
26+
if (false) {
27+
/* undefined behaviour */
28+
zassert_equal(pthread_attr_getguardsize(NULL, NULL), EINVAL);
29+
zassert_equal(pthread_attr_getguardsize(NULL, &guardsize), EINVAL);
30+
zassert_equal(pthread_attr_getguardsize(&uninit_attr, &guardsize), EINVAL);
31+
}
32+
zassert_equal(pthread_attr_getguardsize(&attr, NULL), EINVAL);
33+
}
34+
35+
guardsize = BIOS_FOOD;
36+
zassert_ok(pthread_attr_getguardsize(&attr, &guardsize));
37+
zassert_not_equal(guardsize, BIOS_FOOD);
38+
}
39+
40+
ZTEST(posix_threads_ext, test_pthread_attr_setguardsize)
41+
{
42+
size_t guardsize = CONFIG_POSIX_PTHREAD_ATTR_GUARDSIZE_DEFAULT;
43+
size_t sizes[] = {0, BIT_MASK(CONFIG_POSIX_PTHREAD_ATTR_GUARDSIZE_BITS / 2),
44+
BIT_MASK(CONFIG_POSIX_PTHREAD_ATTR_GUARDSIZE_BITS)};
45+
46+
/* valid value */
47+
zassert_ok(pthread_attr_getguardsize(&attr, &guardsize));
48+
49+
/* degenerate cases */
50+
{
51+
if (false) {
52+
/* undefined behaviour */
53+
zassert_equal(pthread_attr_setguardsize(NULL, SIZE_MAX), EINVAL);
54+
zassert_equal(pthread_attr_setguardsize(NULL, guardsize), EINVAL);
55+
zassert_equal(pthread_attr_setguardsize((pthread_attr_t *)&uninit_attr,
56+
guardsize),
57+
EINVAL);
58+
}
59+
zassert_equal(pthread_attr_setguardsize(&attr, SIZE_MAX), EINVAL);
60+
}
61+
62+
ARRAY_FOR_EACH(sizes, i) {
63+
zassert_ok(pthread_attr_setguardsize(&attr, sizes[i]));
64+
guardsize = ~sizes[i];
65+
zassert_ok(pthread_attr_getguardsize(&attr, &guardsize));
66+
zassert_equal(guardsize, sizes[i]);
67+
}
68+
}
69+
70+
ZTEST(posix_threads_ext, test_pthread_mutexattr_gettype)
71+
{
72+
int type;
73+
pthread_mutexattr_t attr;
74+
75+
/* degenerate cases */
76+
{
77+
if (false) {
78+
/* undefined behaviour */
79+
zassert_equal(EINVAL, pthread_mutexattr_gettype(&attr, &type));
80+
}
81+
zassert_equal(EINVAL, pthread_mutexattr_gettype(NULL, NULL));
82+
zassert_equal(EINVAL, pthread_mutexattr_gettype(NULL, &type));
83+
zassert_equal(EINVAL, pthread_mutexattr_gettype(&attr, NULL));
84+
}
85+
86+
zassert_ok(pthread_mutexattr_init(&attr));
87+
zassert_ok(pthread_mutexattr_gettype(&attr, &type));
88+
zassert_equal(type, PTHREAD_MUTEX_DEFAULT);
89+
zassert_ok(pthread_mutexattr_destroy(&attr));
90+
}
91+
92+
ZTEST(posix_threads_ext, test_pthread_mutexattr_settype)
93+
{
94+
int type;
95+
pthread_mutexattr_t attr;
96+
97+
/* degenerate cases */
98+
{
99+
if (false) {
100+
/* undefined behaviour */
101+
zassert_equal(EINVAL,
102+
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_DEFAULT));
103+
}
104+
zassert_equal(EINVAL, pthread_mutexattr_settype(NULL, 42));
105+
zassert_equal(EINVAL, pthread_mutexattr_settype(NULL, PTHREAD_MUTEX_NORMAL));
106+
zassert_equal(EINVAL, pthread_mutexattr_settype(&attr, 42));
107+
}
108+
109+
zassert_ok(pthread_mutexattr_init(&attr));
110+
111+
zassert_ok(pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_DEFAULT));
112+
zassert_ok(pthread_mutexattr_gettype(&attr, &type));
113+
zassert_equal(type, PTHREAD_MUTEX_DEFAULT);
114+
115+
zassert_ok(pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_NORMAL));
116+
zassert_ok(pthread_mutexattr_gettype(&attr, &type));
117+
zassert_equal(type, PTHREAD_MUTEX_NORMAL);
118+
119+
zassert_ok(pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE));
120+
zassert_ok(pthread_mutexattr_gettype(&attr, &type));
121+
zassert_equal(type, PTHREAD_MUTEX_RECURSIVE);
122+
123+
zassert_ok(pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK));
124+
zassert_ok(pthread_mutexattr_gettype(&attr, &type));
125+
zassert_equal(type, PTHREAD_MUTEX_ERRORCHECK);
126+
127+
zassert_ok(pthread_mutexattr_destroy(&attr));
128+
}
129+
130+
static void before(void *arg)
131+
{
132+
ARG_UNUSED(arg);
133+
134+
zassert_ok(pthread_attr_init(&attr));
135+
/* TODO: pthread_attr_init() should be sufficient to initialize a thread by itself */
136+
/* zassert_ok(pthread_attr_setstack(&attr, &static_thread_stack, STATIC_THREAD_STACK_SIZE));
137+
*/
138+
attr_valid = true;
139+
}
140+
141+
static void after(void *arg)
142+
{
143+
ARG_UNUSED(arg);
144+
145+
if (attr_valid) {
146+
(void)pthread_attr_destroy(&attr);
147+
attr_valid = false;
148+
}
149+
}
150+
151+
ZTEST_SUITE(posix_threads_ext, NULL, NULL, before, after, NULL);

tests/posix/threads_ext/testcase.yaml

+25
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+
- threads_ext
6+
# 1 tier0 platform per supported architecture
7+
platform_key:
8+
- arch
9+
- simulation
10+
tests:
11+
portability.posix.threads_ext:
12+
min_flash: 64
13+
min_ram: 32
14+
portability.posix.threads_ext.minimal:
15+
extra_configs:
16+
- CONFIG_MINIMAL_LIBC=y
17+
portability.posix.threads_ext.newlib:
18+
filter: TOOLCHAIN_HAS_NEWLIB == 1
19+
extra_configs:
20+
- CONFIG_NEWLIB_LIBC=y
21+
portability.posix.threads_ext.picolibc:
22+
tags: picolibc
23+
filter: CONFIG_PICOLIBC_SUPPORTED
24+
extra_configs:
25+
- CONFIG_PICOLIBC=y

0 commit comments

Comments
 (0)