summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-07-23 13:27:05 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2009-07-23 13:27:05 +0200
commit05c69924b14d68027a90695a4d8da4ec70c9a886 (patch)
treeec4e39d49ea7758366dd6a8dc325f5965f1ba2af
parenta9e2101d71d1d007bf8dec492bb6743cb58e2537 (diff)
testsuite: fix one bug, one warning; extend README (one TODO added)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--test/README33
-rw-r--r--test/pwd_grp/getgroups.c2
-rw-r--r--test/stdlib/qsort.c10
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);