From 53bcd4803997906549f39447b427a505ba8e1b9d Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Tue, 28 Jan 2014 15:02:58 -0500 Subject: [PATCH] Fix the "no feed hosts" check and add a shelltest for the behavior. Bump to 0.0.7. --- htsn.cabal | 41 ++++++++++++++++++++++++- src/Main.hs | 22 +++++++------ test/ShellTests.hs | 10 ++++++ test/shell/command-line-feed-hosts.test | 9 ++++++ 4 files changed, 72 insertions(+), 10 deletions(-) create mode 100644 test/ShellTests.hs create mode 100644 test/shell/command-line-feed-hosts.test diff --git a/htsn.cabal b/htsn.cabal index 4f2f31a..4380400 100644 --- a/htsn.cabal +++ b/htsn.cabal @@ -1,5 +1,5 @@ name: htsn -version: 0.0.6 +version: 0.0.7 cabal-version: >= 1.8 author: Michael Orlitzky maintainer: Michael Orlitzky @@ -11,6 +11,7 @@ extra-source-files: doc/htsnrc.example doc/man1/htsn.1 doc/init.openrc + test/shell/*.test test/xml/*.xml synopsis: Parse XML files from The Sports Network feed. @@ -291,6 +292,44 @@ test-suite testsuite -O2 +-- These won't work without shelltestrunner installed in your +-- $PATH. Maybe there is some way to tell Cabal that. +test-suite shelltests + type: exitcode-stdio-1.0 + hs-source-dirs: src test + main-is: ShellTests.hs + build-depends: + base == 4.*, + cmdargs >= 0.10.6, + configurator == 0.2.*, + directory == 1.2.*, + filepath == 1.3.*, + hdaemonize == 0.4.*, + hslogger == 1.2.*, + htsn-common == 0.0.1, + hxt == 9.3.*, + MissingH == 1.2.*, + network == 2.4.*, + process == 1.1.*, + tasty == 0.7.*, + tasty-hunit == 0.4.*, + unix == 2.6.* + + -- It's not entirely clear to me why I have to reproduce all of this. + ghc-options: + -Wall + -fwarn-hi-shadowing + -fwarn-missing-signatures + -fwarn-name-shadowing + -fwarn-orphans + -fwarn-type-defaults + -fwarn-tabs + -fwarn-incomplete-record-updates + -fwarn-monomorphism-restriction + -fwarn-unused-do-bind + -O2 + + source-repository head type: git location: http://michael.orlitzky.com/git/htsn.git diff --git a/src/Main.hs b/src/Main.hs index 6dfbfb7..aebf5c5 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -297,15 +297,7 @@ main = do let cfg = (def :: Configuration) `merge_optional` opt_config init_logging (log_level cfg) (log_file cfg) (syslog cfg) - -- Check the optional config for missing required options. This is - -- necessary because if the user specifies an empty list of - -- hostnames in e.g. the config file, we want to bail rather than - -- fall back on the default list (which was merged from a default - -- Configuration above). - when (null $ get_feed_hosts (OC.feed_hosts opt_config)) $ do - report_error "No feed hosts supplied." - exitWith (ExitFailure exit_no_feed_hosts) - + -- Check the optional config for missing required options. when (isNothing (OC.password opt_config)) $ do report_error "No password supplied." exitWith (ExitFailure exit_no_password) @@ -314,6 +306,18 @@ main = do report_error "No username supplied." exitWith (ExitFailure exit_no_username) + -- This should be impossible. We had a choice to make: since the + -- command-line feed_hosts are usually not supplied, we don't want + -- to take the empty list supplied on the command-line and use + -- that. But that means that we need to do the same thing if the + -- user supplies an empty list in the config file. That "same thing" + -- is to use the default list. So, this should never be empty, + -- because if the optional config has no feed hosts, we use the + -- default list. + when (null $ get_feed_hosts (feed_hosts cfg)) $ do + report_error "No feed hosts supplied." + exitWith (ExitFailure exit_no_feed_hosts) + when (daemonize cfg) $ do -- Old PID files can be left around after an unclean shutdown. We -- only care if we're running as a daemon. diff --git a/test/ShellTests.hs b/test/ShellTests.hs new file mode 100644 index 0000000..65a10cc --- /dev/null +++ b/test/ShellTests.hs @@ -0,0 +1,10 @@ +module Main +where + +import System.Cmd ( system ) +import System.Exit ( exitWith ) + +main :: IO () +main = do + result <- system "shelltest test/shell/*.test" + exitWith result diff --git a/test/shell/command-line-feed-hosts.test b/test/shell/command-line-feed-hosts.test new file mode 100644 index 0000000..27b9ebf --- /dev/null +++ b/test/shell/command-line-feed-hosts.test @@ -0,0 +1,9 @@ +# +# If a feed host is supplied on the command-line, it should override +# the default list. Since htsn attempts to run forever, we sleep for a +# second after starting it and then kill it ($! is its pid). +# +dist/build/htsn/htsn -u foo --password bar localhost & sleep 1; kill $! +>>> /Connecting to localhost./ +>>>2 /ERROR: connect: does not exist \(Connection refused\)/ +>>>=0 -- 2.43.2