From 05c69924b14d68027a90695a4d8da4ec70c9a886 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 23 Jul 2009 13:27:05 +0200 Subject: testsuite: fix one bug, one warning; extend README (one TODO added) Signed-off-by: Denys Vlasenko --- test/README | 33 +++++++++++++++++++++------------ test/pwd_grp/getgroups.c | 2 +- test/stdlib/qsort.c | 10 +++++++++- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/test/README b/test/README index fcb41489b..8fb12d9a7 100644 --- a/test/README +++ b/test/README @@ -9,9 +9,8 @@ This will compile and link the tests make run -This will check for binaries if they are not there it -will call 'compile' target then it will execute all the -tests. +This will check for binaries, if they are not there it +will call 'compile' target, then it will execute all the tests. make check make all @@ -23,7 +22,7 @@ The following make variables may help you in testing: - UCLIBC_ONLY - only run tests against uClibc - GLIBC_ONLY - only run tests against glibc - V / VERBOSE - run tests with a lot of output - - TEST_INSTALLED_UCLIBC - Test installed libraries + - TEST_INSTALLED_UCLIBC - Test installed libraries under /lib and /usr/lib. - TIMEOUTFACTOR=nn - increase test timeout nn times. At least REGEX_OLD + regex/tst-regex2 needs it increased. @@ -31,6 +30,16 @@ The following make variables may help you in testing: So, to just run the uClibc tests, try this: make check UCLIBC_ONLY=1 +If you need to test just a subset of all test, delete subdirectories +you do not need. + +As of 2009-07, build machinery does not track dependencies on uclibc. +If you edit a header and re-run "make compile", it does not re-install it +into ../install_dir. If you delete ../install_dir, "make compile" +rebuilds uclibc as needed and re-installs ../install_dir, +but still does not rebuild testcases. +(You can work around it by "touch */*.c" for now). + ---------------- For: Developer ---------------- @@ -45,12 +54,12 @@ The structure of this test system is: makefiles plus Makefile.in test/subdir/*.c the tests -Each subdir has a Makefile (same for any subdir) that must include in strict order : - - the upper-level Rules.mak file. - - the Makefile.in . - - the upper-level Test.mak file. -Makefile.in may be used to define the TESTS and TESTS_DISABLED variables. If you do not, TESTS -is built automatically based upon all the .c files in the subdir. +Each subdir has a Makefile (same for any subdir) that must include in strict order: + - the upper-level Rules.mak file + - the Makefile.in + - the upper-level Test.mak file +Makefile.in may be used to define the TESTS and TESTS_DISABLED variables. +If you do not, TESTS is built automatically based upon all the .c files in the subdir. TESTS := foo TESTS_DISABLED := bar Each test must use a similar .c name; so the "foo" test needs a "foo.c". @@ -68,8 +77,8 @@ EXTRA_CLEAN := extra files to remove in the clean target EXTRA_DIRS := extra directories to remove in the clean target EXTRA_CFLAGS := -DFOO EXTRA_LDFLAGS := -lpthread -OPTS := -WRAPPER := +OPTS := +WRAPPER := If you want to compare the output of a test with known good output, then just create a local file named "foo.out.good" and the output generated by the test diff --git a/test/pwd_grp/getgroups.c b/test/pwd_grp/getgroups.c index 0c093081a..5769b180b 100644 --- a/test/pwd_grp/getgroups.c +++ b/test/pwd_grp/getgroups.c @@ -53,7 +53,7 @@ static int xgetgroups(gid_t gid, int *n_groups, gid_t ** groups) if (ng < 0) { warn("cannot get supplemental group list"); ++fail; - free(groups); + free(g); } if (!fail) { *n_groups = ng; diff --git a/test/stdlib/qsort.c b/test/stdlib/qsort.c index abc505e2d..74f93315f 100644 --- a/test/stdlib/qsort.c +++ b/test/stdlib/qsort.c @@ -34,7 +34,15 @@ int main(void) printf("[%d] %s\n", i, dirbuf->d_name); } printf("\nCalling qsort()\n"); - qsort(array, numdir, sizeof(struct dirent *), alphasort); + /* Even though some manpages say that alphasort should be + * int alphasort(const void *a, const void *b), + * in reality glibc and uclibc have const struct dirent** + * instead of const void*. + * Therefore we get a warning here unless we use a cast, + * which makes people think that alphasort prototype + * needs to be fixed in uclibc headers. + */ + qsort(array, numdir, sizeof(struct dirent *), (void*) alphasort); for (i = 0; i < numdir; ++i) { dirbuf = array[i]; printf("[%d] %s\n", i, dirbuf->d_name); -- cgit v1.2.3