tests: posix: common: separate posix c_lib_ext to standalone test

posix.common contains testsuites that can be separated into smaller
groups of tests. This change moves fnmatch, getopt and getentropy
into a singular testsuite at tests/posix/c_lib_ext app directory.

Signed-off-by: Marvin Ouma <pancakesdeath@protonmail.com>
This commit is contained in:
Marvin Ouma 2024-11-15 14:46:49 +03:00 committed by Benjamin Cabé
commit 3977703ebb
12 changed files with 88 additions and 161 deletions

View file

@ -1,10 +1,12 @@
# Copyright (c) 2024 Google LLC
#
# SPDX-License-Identifier: Apache-2.0
cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(getentropy)
project(posix_c_lib_ext)
FILE(GLOB app_sources src/*.c)
target_sources(app PRIVATE ${app_sources})
target_include_directories(app PRIVATE ${ZEPHYR_BASE}/lib/posix/options/getopt)
target_compile_options(app PRIVATE -U_POSIX_C_SOURCE -D_POSIX_C_SOURCE=200809L)

View file

@ -1,3 +1,5 @@
CONFIG_ENTROPY_GENERATOR=y
CONFIG_POSIX_C_LIB_EXT=y
CONFIG_ZTEST=y
CONFIG_POSIX_C_LIB_EXT=y
CONFIG_GETOPT_LONG=y
CONFIG_ENTROPY_GENERATOR=y

View file

@ -4,15 +4,14 @@
* SPDX-License-Identifier: Apache-2.0
*/
#include <fnmatch.h>
#include <zephyr/posix/fnmatch.h>
#include <zephyr/ztest.h>
/*
* Adapted from
* https://git.musl-libc.org/cgit/libc-testsuite/tree/fnmatch.c
*/
ZTEST(fnmatch, test_fnmatch)
ZTEST(posix_c_lib_ext, test_fnmatch)
{
/* Note: commented out lines indicate known problems to be addressed in #55186 */
@ -82,5 +81,3 @@ ZTEST(fnmatch, test_fnmatch)
zassert_ok(fnmatch("a*b", "a.b", FNM_PATHNAME | FNM_PERIOD));
zassert_ok(fnmatch("a[.]b", "a.b", FNM_PATHNAME | FNM_PERIOD));
}
ZTEST_SUITE(fnmatch, NULL, NULL, NULL, NULL, NULL);

View file

@ -4,13 +4,12 @@
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/posix/unistd.h>
#include <zephyr/ztest.h>
#include <zephyr/posix/unistd.h>
ZTEST(getentropy_test_suite, test_getentropy_too_large)
ZTEST(posix_c_lib_ext, test_getentropy_too_large)
{
uint8_t buf[256 + 1] = { 0 };
uint8_t buf[256 + 1] = {0};
int ret;
ret = getentropy(buf, sizeof(buf));
@ -18,7 +17,7 @@ ZTEST(getentropy_test_suite, test_getentropy_too_large)
zassert_equal(errno, EIO);
}
ZTEST(getentropy_test_suite, test_getentropy_null_buffer)
ZTEST(posix_c_lib_ext, test_getentropy_null_buffer)
{
int ret;
@ -27,18 +26,18 @@ ZTEST(getentropy_test_suite, test_getentropy_null_buffer)
zassert_equal(errno, EFAULT);
}
ZTEST(getentropy_test_suite, test_getentropy_max_size)
ZTEST(posix_c_lib_ext, test_getentropy_max_size)
{
uint8_t buf[256] = { 0 };
uint8_t buf[256] = {0};
int ret;
ret = getentropy(buf, sizeof(buf));
zassert_equal(ret, 0);
}
ZTEST(getentropy_test_suite, test_getentropy)
ZTEST(posix_c_lib_ext, test_getentropy)
{
uint8_t zero[16] = { 0 };
uint8_t zero[16] = {0};
uint8_t buf1[16];
uint8_t buf2[16];
int ret;
@ -53,5 +52,3 @@ ZTEST(getentropy_test_suite, test_getentropy)
zassert_true(memcmp(buf2, zero, sizeof(zero)) != 0);
zassert_true(memcmp(buf1, buf2, sizeof(buf1)) != 0);
}
ZTEST_SUITE(getentropy_test_suite, NULL, NULL, NULL, NULL, NULL);

View file

@ -9,27 +9,17 @@
*
*/
#include <zephyr/kernel.h>
#include <zephyr/ztest.h>
#include <string.h>
#include <zephyr/posix/unistd.h>
#include <getopt.h>
#include <string.h>
ZTEST_SUITE(getopt_test_suite, NULL, NULL, NULL, NULL, NULL);
#include <zephyr/kernel.h>
#include <zephyr/posix/unistd.h>
#include <zephyr/ztest.h>
ZTEST(getopt_test_suite, test_getopt_basic)
ZTEST(posix_c_lib_ext, test_getopt_basic)
{
static const char *const nargv[] = {
"cmd_name",
"-b",
"-a",
"-h",
"-c",
"-l",
"-h",
"-a",
"-i",
"-w",
"cmd_name", "-b", "-a", "-h", "-c", "-l", "-h", "-a", "-i", "-w",
};
static const char *accepted_opt = "abchw";
static const char *expected = "bahc?ha?w";
@ -63,7 +53,7 @@ enum getopt_idx {
GETOPT_IDX_OPTARG
};
ZTEST(getopt_test_suite, test_getopt)
ZTEST(posix_c_lib_ext, test_getopt)
{
struct getopt_state *state;
static const char *test_opts = "ac:";
@ -96,8 +86,7 @@ ZTEST(getopt_test_suite, test_getopt)
zassert_equal(0, strcmp(argv[GETOPT_IDX_OPTARG], state->optarg),
"unexpected optarg result");
/* Non thread safe usage: */
zassert_equal(0, strcmp(argv[GETOPT_IDX_OPTARG], optarg),
"unexpected optarg result");
zassert_equal(0, strcmp(argv[GETOPT_IDX_OPTARG], optarg), "unexpected optarg result");
}
enum getopt_long_idx {
@ -107,7 +96,7 @@ enum getopt_long_idx {
GETOPT_LONG_IDX_OPTARG
};
ZTEST(getopt_test_suite, test_getopt_long)
ZTEST(posix_c_lib_ext, test_getopt_long)
{
/* Below test is based on example
* https://www.gnu.org/software/libc/manual/html_node/Getopt-Long-Option-Example.html
@ -120,16 +109,16 @@ ZTEST(getopt_test_suite, test_getopt_long)
int c;
struct option long_options[] = {
/* These options set a flag. */
{"verbose", no_argument, &verbose_flag, 1},
{"brief", no_argument, &verbose_flag, 0},
{"verbose", no_argument, &verbose_flag, 1},
{"brief", no_argument, &verbose_flag, 0},
/* These options dont set a flag.
* We distinguish them by their indices.
*/
{"add", no_argument, 0, 'a'},
{"create", required_argument, 0, 'c'},
{"delete", required_argument, 0, 'd'},
{"long", required_argument, 0, 'e'},
{0, 0, 0, 0}
{"add", no_argument, 0, 'a'},
{"create", required_argument, 0, 'c'},
{"delete", required_argument, 0, 'd'},
{"long", required_argument, 0, 'e'},
{0, 0, 0, 0},
};
static const char *accepted_opt = "ac:d:e:";
@ -170,64 +159,51 @@ ZTEST(getopt_test_suite, test_getopt_long)
/* Get state of the current thread */
getopt_init();
argv = (char **)argv1;
c = getopt_long(argc1, argv, accepted_opt,
long_options, &option_index);
c = getopt_long(argc1, argv, accepted_opt, long_options, &option_index);
zassert_equal(verbose_flag, 1, "verbose flag expected");
c = getopt_long(argc1, argv, accepted_opt, long_options, &option_index);
state = getopt_state_get();
zassert_equal('c', c, "unexpected option");
zassert_equal(0, strcmp(state->optarg, argv[GETOPT_LONG_IDX_OPTARG]),
"unexpected optarg");
c = getopt_long(argc1, argv, accepted_opt,
long_options, &option_index);
zassert_equal(0, strcmp(state->optarg, argv[GETOPT_LONG_IDX_OPTARG]), "unexpected optarg");
c = getopt_long(argc1, argv, accepted_opt, long_options, &option_index);
zassert_equal(-1, c, "getopt_long shall return -1");
/* Test scenario 2 */
argv = (char **)argv2;
getopt_init();
c = getopt_long(argc2, argv, accepted_opt,
long_options, &option_index);
c = getopt_long(argc2, argv, accepted_opt, long_options, &option_index);
zassert_equal(verbose_flag, 0, "verbose flag expected");
c = getopt_long(argc2, argv, accepted_opt,
long_options, &option_index);
c = getopt_long(argc2, argv, accepted_opt, long_options, &option_index);
zassert_equal('d', c, "unexpected option");
state = getopt_state_get();
zassert_equal(0, strcmp(state->optarg, argv[GETOPT_LONG_IDX_OPTARG]),
"unexpected optarg");
c = getopt_long(argc2, argv, accepted_opt,
long_options, &option_index);
zassert_equal(0, strcmp(state->optarg, argv[GETOPT_LONG_IDX_OPTARG]), "unexpected optarg");
c = getopt_long(argc2, argv, accepted_opt, long_options, &option_index);
zassert_equal(-1, c, "getopt_long shall return -1");
/* Test scenario 3 */
argv = (char **)argv3;
getopt_init();
c = getopt_long(argc3, argv, accepted_opt,
long_options, &option_index);
c = getopt_long(argc3, argv, accepted_opt, long_options, &option_index);
zassert_equal(verbose_flag, 0, "verbose flag expected");
c = getopt_long(argc3, argv, accepted_opt,
long_options, &option_index);
c = getopt_long(argc3, argv, accepted_opt, long_options, &option_index);
zassert_equal('a', c, "unexpected option");
c = getopt_long(argc3, argv, accepted_opt,
long_options, &option_index);
c = getopt_long(argc3, argv, accepted_opt, long_options, &option_index);
zassert_equal(-1, c, "getopt_long shall return -1");
/* Test scenario 4 */
argv = (char **)argv4;
getopt_init();
c = getopt_long(argc4, argv, accepted_opt,
long_options, &option_index);
c = getopt_long(argc4, argv, accepted_opt, long_options, &option_index);
zassert_equal(verbose_flag, 0, "verbose flag expected");
c = getopt_long(argc4, argv, accepted_opt,
long_options, &option_index);
c = getopt_long(argc4, argv, accepted_opt, long_options, &option_index);
/* Function was called with option '-l'. It is expected it will be
* NOT evaluated to '--long' which has flag 'e'.
*/
zassert_not_equal('e', c, "unexpected option match");
c = getopt_long(argc4, argv, accepted_opt,
long_options, &option_index);
c = getopt_long(argc4, argv, accepted_opt, long_options, &option_index);
}
ZTEST(getopt_test_suite, test_getopt_long_only)
ZTEST(posix_c_lib_ext, test_getopt_long_only)
{
/* Below test is based on example
* https://www.gnu.org/software/libc/manual/html_node/Getopt-Long-Option-Example.html
@ -240,16 +216,16 @@ ZTEST(getopt_test_suite, test_getopt_long_only)
int c;
struct option long_options[] = {
/* These options set a flag. */
{"verbose", no_argument, &verbose_flag, 1},
{"brief", no_argument, &verbose_flag, 0},
{"verbose", no_argument, &verbose_flag, 1},
{"brief", no_argument, &verbose_flag, 0},
/* These options dont set a flag.
* We distinguish them by their indices.
*/
{"add", no_argument, 0, 'a'},
{"create", required_argument, 0, 'c'},
{"delete", required_argument, 0, 'd'},
{"long", required_argument, 0, 'e'},
{0, 0, 0, 0}
{"add", no_argument, 0, 'a'},
{"create", required_argument, 0, 'c'},
{"delete", required_argument, 0, 'd'},
{"long", required_argument, 0, 'e'},
{0, 0, 0, 0},
};
static const char *accepted_opt = "ac:d:e:";
@ -289,62 +265,48 @@ ZTEST(getopt_test_suite, test_getopt_long_only)
/* Test scenario 1 */
argv = (char **)argv1;
getopt_init();
c = getopt_long_only(argc1, argv, accepted_opt,
long_options, &option_index);
c = getopt_long_only(argc1, argv, accepted_opt, long_options, &option_index);
zassert_equal(verbose_flag, 1, "verbose flag expected");
c = getopt_long_only(argc1, argv, accepted_opt,
long_options, &option_index);
c = getopt_long_only(argc1, argv, accepted_opt, long_options, &option_index);
state = getopt_state_get();
zassert_equal('c', c, "unexpected option");
zassert_equal(0, strcmp(state->optarg, argv[GETOPT_LONG_IDX_OPTARG]),
"unexpected optarg");
c = getopt_long_only(argc1, argv, accepted_opt,
long_options, &option_index);
zassert_equal(0, strcmp(state->optarg, argv[GETOPT_LONG_IDX_OPTARG]), "unexpected optarg");
c = getopt_long_only(argc1, argv, accepted_opt, long_options, &option_index);
zassert_equal(-1, c, "getopt_long_only shall return -1");
/* Test scenario 2 */
argv = (char **)argv2;
getopt_init();
state = getopt_state_get();
c = getopt_long_only(argc2, argv, accepted_opt,
long_options, &option_index);
c = getopt_long_only(argc2, argv, accepted_opt, long_options, &option_index);
zassert_equal(verbose_flag, 0, "verbose flag expected");
c = getopt_long_only(argc2, argv, accepted_opt,
long_options, &option_index);
c = getopt_long_only(argc2, argv, accepted_opt, long_options, &option_index);
state = getopt_state_get();
zassert_equal('d', c, "unexpected option");
zassert_equal(0, strcmp(state->optarg, argv[GETOPT_LONG_IDX_OPTARG]),
"unexpected optarg");
c = getopt_long_only(argc2, argv, accepted_opt,
long_options, &option_index);
zassert_equal(0, strcmp(state->optarg, argv[GETOPT_LONG_IDX_OPTARG]), "unexpected optarg");
c = getopt_long_only(argc2, argv, accepted_opt, long_options, &option_index);
zassert_equal(-1, c, "getopt_long_only shall return -1");
/* Test scenario 3 */
argv = (char **)argv3;
getopt_init();
c = getopt_long_only(argc3, argv, accepted_opt,
long_options, &option_index);
c = getopt_long_only(argc3, argv, accepted_opt, long_options, &option_index);
zassert_equal(verbose_flag, 0, "verbose flag expected");
c = getopt_long_only(argc3, argv, accepted_opt,
long_options, &option_index);
c = getopt_long_only(argc3, argv, accepted_opt, long_options, &option_index);
zassert_equal('a', c, "unexpected option");
c = getopt_long_only(argc3, argv, accepted_opt,
long_options, &option_index);
c = getopt_long_only(argc3, argv, accepted_opt, long_options, &option_index);
zassert_equal(-1, c, "getopt_long_only shall return -1");
/* Test scenario 4 */
argv = (char **)argv4;
getopt_init();
c = getopt_long_only(argc4, argv, accepted_opt,
long_options, &option_index);
c = getopt_long_only(argc4, argv, accepted_opt, long_options, &option_index);
zassert_equal(verbose_flag, 0, "verbose flag expected");
c = getopt_long_only(argc4, argv, accepted_opt,
long_options, &option_index);
c = getopt_long_only(argc4, argv, accepted_opt, long_options, &option_index);
/* Function was called with option '-l'. It is expected it will be
* evaluated to '--long' which has flag 'e'.
*/
zassert_equal('e', c, "unexpected option");
c = getopt_long_only(argc4, argv, accepted_opt,
long_options, &option_index);
c = getopt_long_only(argc4, argv, accepted_opt, long_options, &option_index);
}

View file

@ -0,0 +1,9 @@
/*
* Copyright (c) 2024 Marvin Ouma <pancakesdeath@protonmail.com>
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/ztest.h>
ZTEST_SUITE(posix_c_lib_ext, NULL, NULL, NULL, NULL, NULL);

View file

@ -3,32 +3,34 @@ common:
not CONFIG_NATIVE_LIBC
tags:
- posix
- getentropy
- c_lib_ext
# 1 tier0 platform per supported architecture
platform_key:
- arch
- simulation
min_flash: 64
min_ram: 32
tests:
portability.posix.getentropy:
portability.posix.c_lib_ext:
extra_configs:
- CONFIG_COMMON_LIBC_MALLOC_ARENA_SIZE=256
portability.posix.getentropy.armclang_std_libc:
portability.posix.c_lib_ext.armclang_std_libc:
toolchain_allow: armclang
extra_configs:
- CONFIG_ARMCLANG_STD_LIBC=y
portability.posix.getentropy.arcmwdtlib:
portability.posix.c_lib_ext.arcmwdtlib:
toolchain_allow: arcmwdt
extra_configs:
- CONFIG_ARCMWDT_LIBC=y
portability.posix.getentropy.minimal:
portability.posix.c_lib_ext.minimal:
extra_configs:
- CONFIG_MINIMAL_LIBC=y
- CONFIG_COMMON_LIBC_MALLOC_ARENA_SIZE=256
portability.posix.getentropy.newlib:
portability.posix.c_lib_ext.newlib:
filter: TOOLCHAIN_HAS_NEWLIB == 1
extra_configs:
- CONFIG_NEWLIB_LIBC=y
portability.posix.getentropy.picolibc:
portability.posix.c_lib_ext.picolibc:
tags: picolibc
filter: CONFIG_PICOLIBC_SUPPORTED
extra_configs:

View file

@ -1,8 +0,0 @@
# SPDX-License-Identifier: Apache-2.0
cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(getopt)
FILE(GLOB app_sources src/*.c)
target_sources(app PRIVATE ${app_sources})

View file

@ -1 +0,0 @@
CONFIG_NEWLIB_LIBC_MIN_REQUIRED_HEAP_SIZE=1024

View file

@ -1 +0,0 @@
CONFIG_NEWLIB_LIBC_MIN_REQUIRED_HEAP_SIZE=4096

View file

@ -1,5 +0,0 @@
CONFIG_POSIX_C_LIB_EXT=y
CONFIG_GETOPT_LONG=y
CONFIG_LOG=n
CONFIG_ZTEST=y
CONFIG_TEST_LOGGING_DEFAULTS=n

View file

@ -1,29 +0,0 @@
common:
filter: not CONFIG_NATIVE_LIBC
tags:
- posix
- getopt
# 1 tier0 platform per supported architecture
platform_key:
- arch
- simulation
min_flash: 64
min_ram: 32
tests:
portability.posix.getopt: {}
portability.posix.getopt.minimal:
extra_configs:
- CONFIG_MINIMAL_LIBC=y
portability.posix.getopt.newlib:
filter: TOOLCHAIN_HAS_NEWLIB == 1
extra_configs:
- CONFIG_NEWLIB_LIBC=y
portability.posix.getopt.picolibc:
tags: picolibc
filter: CONFIG_PICOLIBC_SUPPORTED
extra_configs:
- CONFIG_PICOLIBC=y
portability.posix.getopt.logger:
extra_configs:
- CONFIG_LOG=y
build_only: true