diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/ChangeLog | 8 | ||||
-rw-r--r-- | test/Makefile.am | 35 | ||||
-rw-r--r-- | test/filefuncs.awk | 25 | ||||
-rw-r--r-- | test/filefuncs.ok | 0 | ||||
-rw-r--r-- | test/fork.awk | 33 | ||||
-rw-r--r-- | test/fork.ok | 0 | ||||
-rw-r--r-- | test/fork2.awk | 35 | ||||
-rw-r--r-- | test/fork2.ok | 0 | ||||
-rw-r--r-- | test/ordchr.awk | 5 | ||||
-rw-r--r-- | test/ordchr.ok | 1 |
10 files changed, 139 insertions, 3 deletions
diff --git a/test/ChangeLog b/test/ChangeLog index 236288e2..5993ca23 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,11 @@ +2012-04-07 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * Makefile.am (check): Add new shlib-tests target. + (SHLIB_TESTS): Add tests ordchr, ordchr2, fork, fork2, readfile and + filefuncs. + * ordchr.awk, ordchr.ok, fork.awk, fork.ok, fork2.awk, fork2.ok, + filefuncs.awk, filefuncs.ok: New files. + 2012-04-01 Andrew J. Schorr <aschorr@telemetry-investments.com> * Makefile.am (valgrind-scan): Update to match modern valgrind output. diff --git a/test/Makefile.am b/test/Makefile.am index afd98299..854a8f7c 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -201,6 +201,8 @@ EXTRA_DIST = \ fieldwdth.awk \ fieldwdth.in \ fieldwdth.ok \ + filefuncs.awk \ + filefuncs.ok \ fldchg.awk \ fldchg.in \ fldchg.ok \ @@ -230,6 +232,8 @@ EXTRA_DIST = \ fnmisc.ok \ fnparydl.awk \ fnparydl.ok \ + fork.awk \ + fork2.awk \ fpat1.awk \ fpat1.in \ fpat1.ok \ @@ -522,6 +526,8 @@ EXTRA_DIST = \ opasnidx.ok \ opasnslf.awk \ opasnslf.ok \ + ordchr.awk \ + ordchr.ok \ out1.ok \ out2.ok \ out3.ok \ @@ -846,6 +852,8 @@ LOCALE_CHARSET_TESTS = \ asort asorti fmttest fnarydel fnparydl lc_num1 mbfw1 \ mbprintf1 mbprintf2 mbprintf3 rebt8b2 rtlenmb sort1 sprintfc +SHLIB_TESTS = ordchr ordchr2 fork fork2 readfile filefuncs + # List of the tests which should be run with --lint option: NEED_LINT = \ defref fmtspcl lintwarn noeffect nofmtch shadow \ @@ -870,8 +878,10 @@ PGAWKPROG = ../pgawk$(EXEEXT) # # This can also be done in individual tests where we wish to # check things specifically not in the C locale. -AWK = LC_ALL=$${GAWKLOCALE:-C} LANG=$${GAWKLOCALE:-C} $(AWKPROG) -PGAWK = LC_ALL=$${GAWKLOCALE:-C} LANG=$${GAWKLOCALE:-C} $(PGAWKPROG) +# +# And we set AWKLIBPATH to find the extension libraries we built. +AWK = LC_ALL=$${GAWKLOCALE:-C} LANG=$${GAWKLOCALE:-C} AWKLIBPATH=../extension/.libs $(AWKPROG) +PGAWK = LC_ALL=$${GAWKLOCALE:-C} LANG=$${GAWKLOCALE:-C} AWKLIBPATH=../extension/.libs $(PGAWKPROG) # Message stuff is to make it a little easier to follow. # Make the pass-fail last and dependent on others to avoid @@ -882,7 +892,8 @@ check: msg \ unix-msg-start unix-tests unix-msg-end \ extend-msg-start gawk-extensions extend-msg-end \ machine-msg-start machine-tests machine-msg-end \ - charset-msg-start charset-tests charset-msg-end + charset-msg-start charset-tests charset-msg-end \ + shlib-msg-start shlib-tests shlib-msg-end @$(MAKE) pass-fail basic: $(BASIC_TESTS) @@ -899,6 +910,8 @@ inet: inetmesg $(INET_TESTS) machine-tests: $(MACHINE_TESTS) +shlib-tests: $(SHLIB_TESTS) + msg:: @echo '' @echo 'Any output from "cmp" is bad news, although some differences' @@ -939,6 +952,12 @@ charset-msg-start: charset-msg-end: @echo "======== Done with tests that can vary based on character set or locale support ========" +shlib-msg-start: + @echo "======== Starting shared library tests ========" + +shlib-msg-end: + @echo "======== Done with shared library tests ========" + lc_num1: @echo $@ @@ -1444,6 +1463,16 @@ rri1:: AWKPATH=$(srcdir) $(AWK) -f $@.awk < $(srcdir)/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) $(srcdir)/$@.ok _$@ && rm -f _$@ +ordchr2:: + @echo $@ + @$(AWK) -l ordchr 'BEGIN {print chr(ord("A"))}' >_$@ 2>&1 + @-$(CMP) $(srcdir)/ordchr.ok _$@ && rm -f _$@ + +readfile:: + @echo $@ + @$(AWK) -l readfile 'BEGIN {printf "%s", readfile("Makefile")}' 2>&1 \ + | $(CMP) Makefile - + # Targets generated for other tests: include Maketests diff --git a/test/filefuncs.awk b/test/filefuncs.awk new file mode 100644 index 00000000..aa532741 --- /dev/null +++ b/test/filefuncs.awk @@ -0,0 +1,25 @@ +@load "filefuncs" + +BEGIN { + if (chdir("..") < 0) { + printf "Error: chdir failed with ERRNO %s\n", ERRNO + exit 1 + } + + if (stat(ARGV[0], st) < 0) { + printf "Error: stat(%s) failed with ERRNO %s\n", ARGV[0], ERRNO + exit 1 + } + + nf = split("name dev ino mode nlink uid gid size blocks atime mtime ctime pmode type", f) + + for (i = 1; i <= nf; i++) { + if (!(f[i] in st)) { + printf "stat value for %s is missing\n",f[i] + rc = 1 + } + else + delete st[f[i]] + } + exit rc+0 +} diff --git a/test/filefuncs.ok b/test/filefuncs.ok new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/test/filefuncs.ok diff --git a/test/fork.awk b/test/fork.awk new file mode 100644 index 00000000..0b29f9ff --- /dev/null +++ b/test/fork.awk @@ -0,0 +1,33 @@ +@load "fork" + +BEGIN { + fn = ("fork.tmp." PROCINFO["pid"]) + switch (pid = fork()) { + case -1: + printf "Error: fork failed with ERRNO %s\n", ERRNO + exit 1 + case 0: + # child + printf "pid %s ppid %s\n", PROCINFO["pid"], PROCINFO["ppid"] > fn + exit 0 + default: + # parent + erc = 1 + if ((rc = wait()) < 0) + printf "Error: wait failed with ERRNO %s\n", ERRNO + else if (rc != pid) + printf "Error: wait returned %s instead of child pid %s\n", rc, pid + else if ((getline x < fn) != 1) + printf "Error: getline failed on temp file %s\n", fn + else { + expected = ("pid " pid " ppid " PROCINFO["pid"]) + if (x != expected) + printf "Error: child data (%s) != expected (%s)\n", x, expected + else if ((rc = system("rm " fn)) != 0) + printf "Error removing temp file %s with ERRNO %s\n", fn, ERRNO + else + erc = 0 + } + exit erc + } +} diff --git a/test/fork.ok b/test/fork.ok new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/test/fork.ok diff --git a/test/fork2.awk b/test/fork2.awk new file mode 100644 index 00000000..bd364286 --- /dev/null +++ b/test/fork2.awk @@ -0,0 +1,35 @@ +@load "fork" + +BEGIN { + # avoid instantiating PROCINFO prior to the fork + switch (pid = fork()) { + case -1: + printf "Error: fork failed with ERRNO %s\n", ERRNO + exit 1 + case 0: + # child + fn = ("fork.tmp." PROCINFO["pid"]) + printf "pid %s ppid %s\n", PROCINFO["pid"], PROCINFO["ppid"] > fn + exit 0 + default: + # parent + erc = 1 + fn = ("fork.tmp." pid) + if ((rc = wait()) < 0) + printf "Error: wait failed with ERRNO %s\n", ERRNO + else if (rc != pid) + printf "Error: wait returned %s instead of child pid %s\n", rc, pid + else if ((getline x < fn) != 1) + printf "Error: getline failed on temp file %s\n", fn + else { + expected = ("pid " pid " ppid " PROCINFO["pid"]) + if (x != expected) + printf "Error: child data (%s) != expected (%s)\n", x, expected + else if ((rc = system("rm " fn)) != 0) + printf "Error removing temp file %s with ERRNO %s\n", fn, ERRNO + else + erc = 0 + } + exit erc + } +} diff --git a/test/fork2.ok b/test/fork2.ok new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/test/fork2.ok diff --git a/test/ordchr.awk b/test/ordchr.awk new file mode 100644 index 00000000..abb793a0 --- /dev/null +++ b/test/ordchr.awk @@ -0,0 +1,5 @@ +@load "ordchr" + +BEGIN { + print chr(ord("A")) +} diff --git a/test/ordchr.ok b/test/ordchr.ok new file mode 100644 index 00000000..f70f10e4 --- /dev/null +++ b/test/ordchr.ok @@ -0,0 +1 @@ +A |