From 2744428b39c7f253d6629335b9cb4122e224e177 Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Sat, 21 Feb 2015 22:28:33 -0500 Subject: [PATCH] Bulletproof the test suite and examples; version bump the cabal file. The examples in the man page used the "<<<" syntax which is specific to bash. Now "echo 'foo' | hath ..." is used, and that should work in any shell. The shelltest suite was updated to use the same. The two ShellTests(Net) modules were also updated to run the shelltests with an empty environment. This allowed the --color=never argument to be removed from the tests themselves, since $GREP_OPTIONS can't be populated. --- doc/man1/hath.1 | 20 ++++++++++---------- hath.cabal | 2 +- test/ShellTests.hs | 18 ++++++++++++++++-- test/ShellTestsNet.hs | 18 ++++++++++++++++-- test/shell-net/manpage-reversed.test | 2 +- test/shell/manpage-barriers.test | 6 +++--- test/shell/manpage-diffed.test | 2 +- test/shell/manpage-duped.test | 2 +- test/shell/manpage-listed.test | 2 +- test/shell/manpage-reduced.test | 2 +- test/shell/manpage-regexed.test | 2 +- test/shell/match-class-c.test | 2 +- 12 files changed, 53 insertions(+), 25 deletions(-) diff --git a/doc/man1/hath.1 b/doc/man1/hath.1 index 207e870..6e4ef37 100644 --- a/doc/man1/hath.1 +++ b/doc/man1/hath.1 @@ -40,7 +40,7 @@ This computes a (Perl-compatible) regular expression matching the input CIDR blocks. It's the default mode of operation. .P .nf -.I $ hath <<< \(dq10.0.0.0/29 10.0.0.8/29\(dq +.I $ echo \(dq10.0.0.0/29 10.0.0.8/29\(dq | hath ((10)\.(0)\.(0)\.(15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0)) .fi .IP \(bu 2 @@ -51,7 +51,7 @@ eliminates redundant blocks. The output should be equivalent to the input, though. .P .nf -.I $ hath reduced <<< \(dq10.0.0.0/24 10.0.1.0/24\(dq +.I $ echo \(dq10.0.0.0/24 10.0.1.0/24\(dq | hath reduced 10.0.0.0/23 .fi .IP \(bu 2 @@ -62,7 +62,7 @@ shows the ones that would get combined into larger blocks or are simply redundant. .P .nf -.I $ hath duped <<< \(dq10.0.0.0/24 10.0.1.0/24\(dq +.I $ echo \(dq10.0.0.0/24 10.0.1.0/24\(dq | hath duped 10.0.0.0/24 10.0.1.0/24 .fi @@ -73,7 +73,7 @@ Shows what would change if you used reduce. Uses diff-like notation. .P .nf -.I $ hath diffed <<< \(dq10.0.0.0/24 10.0.1.0/24\(dq +.I $ echo \(dq10.0.0.0/24 10.0.1.0/24\(dq | hath diffed -10.0.0.0/24 -10.0.1.0/24 +10.0.0.0/23 @@ -84,7 +84,7 @@ notation. List the IP addresses contained within the given CIDRs. .P .nf -.I $ hath listed <<< 192.168.0.240/29 +.I $ echo 192.168.0.240/29 | hath listed 192.168.0.240 192.168.0.241 192.168.0.242 @@ -101,7 +101,7 @@ Perform reverse DNS (PTR) lookups on the IP addresses contained within the given CIDRs. .P .nf -.I $ hath reversed <<< 198.41.0.4/30 +.I $ echo 198.41.0.4/30 | hath reversed 198.41.0.4: a.root-servers.net. 198.41.0.5: 198.41.0.6: rs.internic.net. @@ -114,7 +114,7 @@ runtime on the command line; for example, the following will perform 25 lookups in parallel: .P .nf -.I $ hath reversed +RTS -N25 <<< 198.41.0.4/24 +.I $ echo 198.41.0.4/24 | hath reversed +RTS -N25 198.41.0.4: a.root-servers.net. 198.41.0.5: 198.41.0.6: rs.internic.net. @@ -133,7 +133,7 @@ address, and this messes up e.g. \fIgrep -o\fR. Without \fB\-\-barriers\fR, you can match things you shouldn't: .nf -.I $ echo 127.0.0.100 | grep -P $(hath <<< 127.0.0.1/32) +.I $ echo 127.0.0.100 | grep -P $(echo 127.0.0.1/32 | hath) 127.0.0.100 .fi @@ -141,7 +141,7 @@ Without \fB\-\-barriers\fR, you can match things you shouldn't: Using \fB\-\-barriers\fR can prevent this: .nf -.I $ echo 127.0.0.100 | grep -P $(hath -b <<< 127.0.0.1/32) +.I $ echo 127.0.0.100 | grep -P $(echo 127.0.0.1/32 | hath -b) .I $ echo $? 1 .fi @@ -151,6 +151,6 @@ But, this may also cause the regex to match something that isn't an IP address: .nf -.I $ echo x127.0.0.1x | grep -Po $(hath -b <<< 127.0.0.1/32) +.I $ echo x127.0.0.1x | grep -Po $(echo 127.0.0.1/32 | hath -b) x127.0.0.1x .fi diff --git a/hath.cabal b/hath.cabal index 4d5b6b8..9c3e831 100644 --- a/hath.cabal +++ b/hath.cabal @@ -1,5 +1,5 @@ name: hath -version: 0.2.2 +version: 0.2.3 cabal-version: >= 1.8 author: Michael Orlitzky maintainer: Michael Orlitzky diff --git a/test/ShellTests.hs b/test/ShellTests.hs index 1e884d5..6a55da0 100644 --- a/test/ShellTests.hs +++ b/test/ShellTests.hs @@ -1,10 +1,24 @@ module Main where -import System.Process ( system ) +import System.Process ( + CreateProcess( env ), + createProcess, + shell, + waitForProcess ) import System.Exit ( exitWith ) main :: IO () main = do - result <- system "shelltest test/shell/*.test" + -- Get a CreateProcess object corresponding to our shell command. + let createproc = shell "shelltest test/shell/*.test" + + -- But clear its environment before running the command. + let empty_env_createproc = createproc { env = Just [] } + + -- Ignore stdin/stdout/stderr... + (_,_,_,hproc) <- createProcess empty_env_createproc + + -- Now run the ProcessHandle and exit with its result. + result <- waitForProcess hproc exitWith result diff --git a/test/ShellTestsNet.hs b/test/ShellTestsNet.hs index 7e3a95e..74acd73 100644 --- a/test/ShellTestsNet.hs +++ b/test/ShellTestsNet.hs @@ -1,10 +1,24 @@ module Main where -import System.Process ( system ) +import System.Process ( + CreateProcess( env ), + createProcess, + shell, + waitForProcess ) import System.Exit ( exitWith ) main :: IO () main = do - result <- system "shelltest test/shell-net/*.test" + -- Get a CreateProcess object corresponding to our shell command. + let createproc = shell "shelltest test/shell-net/*.test" + + -- But clear its environment before running the command. + let empty_env_createproc = createproc { env = Just [] } + + -- Ignore stdin/stdout/stderr... + (_,_,_,hproc) <- createProcess empty_env_createproc + + -- Now run the ProcessHandle and exit with its result. + result <- waitForProcess hproc exitWith result diff --git a/test/shell-net/manpage-reversed.test b/test/shell-net/manpage-reversed.test index 00573fb..f1bb686 100644 --- a/test/shell-net/manpage-reversed.test +++ b/test/shell-net/manpage-reversed.test @@ -1,5 +1,5 @@ # Test the regexed example from the man page. -dist/build/hath/hath reversed <<< "198.41.0.4/30" +echo 198.41.0.4/30 | dist/build/hath/hath reversed >>> 198.41.0.4: a.root-servers.net. 198.41.0.5: diff --git a/test/shell/manpage-barriers.test b/test/shell/manpage-barriers.test index d50564b..9ff3d52 100644 --- a/test/shell/manpage-barriers.test +++ b/test/shell/manpage-barriers.test @@ -1,18 +1,18 @@ # Test the --barriers examples from the manpage. # The first one matches a line it probably shouldn't. -grep -P --color=never $(dist/build/hath/hath <<< 127.0.0.1/32) <<< 127.0.0.100 +echo 127.0.0.100 | grep -P $(echo 127.0.0.1/32 | dist/build/hath/hath) >>> 127.0.0.100 >>>= 0 # This one uses --barriers, and doesn't match that same line. -grep -P $(dist/build/hath/hath -b <<< 127.0.0.1/32) <<< 127.0.0.100 +echo 127.0.0.100 | grep -P $(echo 127.0.0.1/32 | dist/build/hath/hath -b) >>> >>>= 1 # But, using barriers makes the regexp match something it shouldn't. -grep -Po --color=never $(dist/build/hath/hath -b <<< 127.0.0.1/32) <<< x127.0.0.1x +echo x127.0.0.1x | grep -Po $(echo 127.0.0.1/32 | dist/build/hath/hath -b) >>> x127.0.0.1x >>>= 0 diff --git a/test/shell/manpage-diffed.test b/test/shell/manpage-diffed.test index 5cd4f67..599e751 100644 --- a/test/shell/manpage-diffed.test +++ b/test/shell/manpage-diffed.test @@ -1,5 +1,5 @@ # Test the regexed example from the man page. -dist/build/hath/hath diffed <<< "10.0.0.0/24 10.0.1.0/24" +echo "10.0.0.0/24 10.0.1.0/24" | dist/build/hath/hath diffed >>> -10.0.0.0/24 -10.0.1.0/24 diff --git a/test/shell/manpage-duped.test b/test/shell/manpage-duped.test index f2c8bde..3e0c13f 100644 --- a/test/shell/manpage-duped.test +++ b/test/shell/manpage-duped.test @@ -1,5 +1,5 @@ # Test the regexed example from the man page. -dist/build/hath/hath duped <<< "10.0.0.0/24 10.0.1.0/24" +echo "10.0.0.0/24 10.0.1.0/24" | dist/build/hath/hath duped >>> 10.0.0.0/24 10.0.1.0/24 diff --git a/test/shell/manpage-listed.test b/test/shell/manpage-listed.test index e9909bf..292d79a 100644 --- a/test/shell/manpage-listed.test +++ b/test/shell/manpage-listed.test @@ -1,5 +1,5 @@ # Test the regexed example from the man page. -dist/build/hath/hath listed <<< "192.168.0.240/29" +echo 192.168.0.240/29 | dist/build/hath/hath listed >>> 192.168.0.240 192.168.0.241 diff --git a/test/shell/manpage-reduced.test b/test/shell/manpage-reduced.test index 10a2f0c..296c613 100644 --- a/test/shell/manpage-reduced.test +++ b/test/shell/manpage-reduced.test @@ -1,5 +1,5 @@ # Test the reduced example from the man page. -dist/build/hath/hath reduced <<< "10.0.0.0/24 10.0.1.0/24" +echo "10.0.0.0/24 10.0.1.0/24" | dist/build/hath/hath reduced >>> 10.0.0.0/23 >>>= 0 diff --git a/test/shell/manpage-regexed.test b/test/shell/manpage-regexed.test index 4961eac..351e5c6 100644 --- a/test/shell/manpage-regexed.test +++ b/test/shell/manpage-regexed.test @@ -1,5 +1,5 @@ # Test the regexed example from the man page. -dist/build/hath/hath <<< "10.0.0.0/29 10.0.0.8/29" +echo "10.0.0.0/29 10.0.0.8/29" | dist/build/hath/hath >>> ((10)\.(0)\.(0)\.(15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0)) >>>= 0 diff --git a/test/shell/match-class-c.test b/test/shell/match-class-c.test index 0e0bef8..b08fb63 100644 --- a/test/shell/match-class-c.test +++ b/test/shell/match-class-c.test @@ -1,6 +1,6 @@ # We should match every address in this class C. # (input/output generated with `hath listed`) -grep -Po --color=never $(dist/build/hath/hath <<< "192.168.0.0/24") +grep -Po $(echo 192.168.0.0/24 | dist/build/hath/hath) <<< 192.168.0.0 192.168.0.1 -- 2.43.2