Skip to content

Commit eb1f8c8

Browse files
committed
tests: posix: semaphore: refactor test_semaphore
Localize a few public variables and refactor the test and functions so that they are reusable. Signed-off-by: Yong Cong Sin <[email protected]>
1 parent 23788b8 commit eb1f8c8

File tree

1 file changed

+39
-29
lines changed

1 file changed

+39
-29
lines changed

tests/posix/common/src/semaphore.c

Lines changed: 39 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,15 @@
1313
#include <zephyr/sys/util.h>
1414
#include <zephyr/ztest.h>
1515

16-
static sem_t sema;
17-
static void *dummy_sem;
18-
1916
static void *child_func(void *p1)
2017
{
21-
zassert_equal(sem_post(&sema), 0, "sem_post failed");
18+
sem_t *sem = (sem_t *)p1;
19+
20+
zassert_equal(sem_post(sem), 0, "sem_post failed");
2221
return NULL;
2322
}
2423

25-
ZTEST(posix_apis, test_semaphore)
24+
static void semaphore_test(sem_t *sem)
2625
{
2726
pthread_t thread1, thread2;
2827
int val, ret;
@@ -31,28 +30,23 @@ ZTEST(posix_apis, test_semaphore)
3130
/* TESTPOINT: Check if sema value is less than
3231
* CONFIG_SEM_VALUE_MAX
3332
*/
34-
zassert_equal(sem_init(&sema, 0, (CONFIG_SEM_VALUE_MAX + 1)), -1,
33+
zassert_equal(sem_init(sem, 0, (CONFIG_SEM_VALUE_MAX + 1)), -1,
3534
"value larger than %d\n", CONFIG_SEM_VALUE_MAX);
3635
zassert_equal(errno, EINVAL);
3736

38-
zassert_equal(sem_init(&sema, 0, 0), 0, "sem_init failed");
39-
40-
/* TESTPOINT: Call sem_post with invalid kobject */
41-
zassert_equal(sem_post(dummy_sem), -1, "sem_post of"
42-
" invalid semaphore object didn't fail");
43-
zassert_equal(errno, EINVAL);
37+
zassert_equal(sem_init(sem, 0, 0), 0, "sem_init failed");
4438

4539
/* TESTPOINT: Check if semaphore value is as set */
46-
zassert_equal(sem_getvalue(&sema, &val), 0);
40+
zassert_equal(sem_getvalue(sem, &val), 0);
4741
zassert_equal(val, 0);
4842

4943
/* TESTPOINT: Check if sema is acquired when it
5044
* is not available
5145
*/
52-
zassert_equal(sem_trywait(&sema), -1);
46+
zassert_equal(sem_trywait(sem), -1);
5347
zassert_equal(errno, EAGAIN);
5448

55-
ret = pthread_create(&thread1, NULL, child_func, NULL);
49+
ret = pthread_create(&thread1, NULL, child_func, sem);
5650
zassert_equal(ret, 0, "Thread creation failed");
5751

5852
zassert_equal(clock_gettime(CLOCK_REALTIME, &abstime), 0,
@@ -63,38 +57,54 @@ ZTEST(posix_apis, test_semaphore)
6357
/* TESPOINT: Wait for 5 seconds and acquire sema given
6458
* by thread1
6559
*/
66-
zassert_equal(sem_timedwait(&sema, &abstime), 0);
60+
zassert_equal(sem_timedwait(sem, &abstime), 0);
6761

6862
/* TESTPOINT: Semaphore is already acquired, check if
6963
* no semaphore is available
7064
*/
71-
zassert_equal(sem_timedwait(&sema, &abstime), -1);
65+
zassert_equal(sem_timedwait(sem, &abstime), -1);
7266
zassert_equal(errno, ETIMEDOUT);
7367

74-
/* TESTPOINT: sem_destroy with invalid kobject */
75-
zassert_equal(sem_destroy(dummy_sem), -1, "invalid"
76-
" semaphore is destroyed");
77-
zassert_equal(errno, EINVAL);
78-
79-
zassert_equal(sem_destroy(&sema), 0, "semaphore is not destroyed");
68+
zassert_equal(sem_destroy(sem), 0, "semaphore is not destroyed");
8069

8170
/* TESTPOINT: Initialize sema with 1 */
82-
zassert_equal(sem_init(&sema, 0, 1), 0, "sem_init failed");
83-
zassert_equal(sem_getvalue(&sema, &val), 0);
71+
zassert_equal(sem_init(sem, 0, 1), 0, "sem_init failed");
72+
zassert_equal(sem_getvalue(sem, &val), 0);
8473
zassert_equal(val, 1);
8574

86-
zassert_equal(sem_destroy(&sema), -1, "acquired semaphore"
75+
zassert_equal(sem_destroy(sem), -1, "acquired semaphore"
8776
" is destroyed");
8877
zassert_equal(errno, EBUSY);
8978

9079
/* TESTPOINT: take semaphore which is initialized with 1 */
91-
zassert_equal(sem_trywait(&sema), 0);
80+
zassert_equal(sem_trywait(sem), 0);
9281

93-
zassert_equal(pthread_create(&thread2, NULL, child_func, NULL), 0,
82+
zassert_equal(pthread_create(&thread2, NULL, child_func, sem), 0,
9483
"Thread creation failed");
9584

9685
/* TESTPOINT: Wait and acquire semaphore till thread2 gives */
97-
zassert_equal(sem_wait(&sema), 0, "sem_wait failed");
86+
zassert_equal(sem_wait(sem), 0, "sem_wait failed");
87+
88+
/* Make sure the threads are terminated */
89+
zassert_ok(pthread_join(thread1, NULL));
90+
zassert_ok(pthread_join(thread2, NULL));
91+
}
92+
93+
ZTEST(posix_apis, test_semaphore)
94+
{
95+
sem_t sema;
96+
97+
/* TESTPOINT: Call sem_post with invalid kobject */
98+
zassert_equal(sem_post(NULL), -1, "sem_post of"
99+
" invalid semaphore object didn't fail");
100+
zassert_equal(errno, EINVAL);
101+
102+
/* TESTPOINT: sem_destroy with invalid kobject */
103+
zassert_equal(sem_destroy(NULL), -1, "invalid"
104+
" semaphore is destroyed");
105+
zassert_equal(errno, EINVAL);
106+
107+
semaphore_test(&sema);
98108
}
99109

100110
unsigned int nsem_get_ref_count(sem_t *sem);

0 commit comments

Comments
 (0)