selftests/nolibc: add a few tests for some libc functions
authorWilly Tarreau <w@1wt.eu>
Tue, 19 Jul 2022 21:44:38 +0000 (23:44 +0200)
committerPaul E. McKenney <paulmck@kernel.org>
Wed, 31 Aug 2022 12:17:44 +0000 (05:17 -0700)
The test series called "stdlib" covers some libc functions (string,
stdlib etc). By default they are automatically run after "syscall"
but may be requested in argument or in variable NOLIBC_TEST.

Signed-off-by: Willy Tarreau <w@1wt.eu>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
tools/testing/selftests/nolibc/nolibc-test.c

index dc87832..b928f09 100644 (file)
@@ -496,11 +496,46 @@ int run_syscall(int min, int max)
        return ret;
 }
 
+int run_stdlib(int min, int max)
+{
+       int test;
+       int tmp;
+       int ret = 0;
+       void *p1, *p2;
+
+       for (test = min; test >= 0 && test <= max; test++) {
+               int llen = 0; // line length
+
+               /* avoid leaving empty lines below, this will insert holes into
+                * test numbers.
+                */
+               switch (test + __LINE__ + 1) {
+               CASE_TEST(getenv_TERM);        EXPECT_STRNZ(1, getenv("TERM")); break;
+               CASE_TEST(getenv_blah);        EXPECT_STRZR(1, getenv("blah")); break;
+               CASE_TEST(setcmp_blah_blah);   EXPECT_EQ(1, strcmp("blah", "blah"), 0); break;
+               CASE_TEST(setcmp_blah_blah2);  EXPECT_NE(1, strcmp("blah", "blah2"), 0); break;
+               CASE_TEST(setncmp_blah_blah);  EXPECT_EQ(1, strncmp("blah", "blah", 10), 0); break;
+               CASE_TEST(setncmp_blah_blah4); EXPECT_EQ(1, strncmp("blah", "blah4", 4), 0); break;
+               CASE_TEST(setncmp_blah_blah5); EXPECT_NE(1, strncmp("blah", "blah5", 5), 0); break;
+               CASE_TEST(setncmp_blah_blah6); EXPECT_NE(1, strncmp("blah", "blah6", 6), 0); break;
+               CASE_TEST(strchr_foobar_o);    EXPECT_STREQ(1, strchr("foobar", 'o'), "oobar"); break;
+               CASE_TEST(strchr_foobar_z);    EXPECT_STRZR(1, strchr("foobar", 'z')); break;
+               CASE_TEST(strrchr_foobar_o);   EXPECT_STREQ(1, strrchr("foobar", 'o'), "obar"); break;
+               CASE_TEST(strrchr_foobar_z);   EXPECT_STRZR(1, strrchr("foobar", 'z')); break;
+               case __LINE__:
+                       return ret; /* must be last */
+               /* note: do not set any defaults so as to permit holes above */
+               }
+       }
+       return ret;
+}
+
 
 /* This is the definition of known test names, with their functions */
 static struct test test_names[] = {
        /* add new tests here */
        { .name = "syscall",   .func = run_syscall  },
+       { .name = "stdlib",    .func = run_stdlib   },
        { 0 }
 };