From 0b68adbf2115b0a940e756ffe101802fe9cd4c9d Mon Sep 17 00:00:00 2001
From: John Chilton <jmchilton@gmail.com>
Date: Fri, 17 Apr 2015 19:39:50 -0400
Subject: [PATCH] Test for script help.

Not a hugely important test but it does ensure the modules load cleanly and that the scripts all respond to --help with a 0 exit code.
---
 pulsar/scripts/chown_working_directory.py |  4 ++--
 pulsar/scripts/drmaa_kill.py              |  4 ++--
 pulsar/scripts/drmaa_launch.py            |  4 ++--
 pulsar/scripts/mesos_executor.py          | 11 ++++++++---
 pulsar/scripts/mesos_framework.py         |  6 +++---
 test/cli_help_tests.py                    | 22 ++++++++++++++++++++++
 6 files changed, 39 insertions(+), 12 deletions(-)
 create mode 100644 test/cli_help_tests.py

diff --git a/pulsar/scripts/chown_working_directory.py b/pulsar/scripts/chown_working_directory.py
index 56f6bdc9..970e13ed 100644
--- a/pulsar/scripts/chown_working_directory.py
+++ b/pulsar/scripts/chown_working_directory.py
@@ -11,12 +11,12 @@ DESCRIPTION = "Change ownership of a job working directory."
 FORCE_PRODUCTION = False
 
 
-def main():
+def main(argv=None):
     arg_parser = ArgumentParser(description=DESCRIPTION)
     arg_parser.add_argument("--user", required=True)
     arg_parser.add_argument("--job_id")
     arg_parser.add_argument("--job_directory")
-    args = arg_parser.parse_args()
+    args = arg_parser.parse_args(argv)
     user = args.user
     job_id = args.job_id
 
diff --git a/pulsar/scripts/drmaa_kill.py b/pulsar/scripts/drmaa_kill.py
index c21e6736..6401afa2 100644
--- a/pulsar/scripts/drmaa_kill.py
+++ b/pulsar/scripts/drmaa_kill.py
@@ -6,10 +6,10 @@ from pulsar.main import ArgumentParser
 DESCRIPTION = "Kill a job via DRMAA interface."
 
 
-def main():
+def main(argv=None):
     arg_parser = ArgumentParser(description=DESCRIPTION)
     arg_parser.add_argument("--external_id", required=True)
-    args = arg_parser.parse_args()
+    args = arg_parser.parse_args(argv)
     external_id = load(args.external_id)
     session = DrmaaSessionFactory().get()
     external_id = session.kill(external_id)
diff --git a/pulsar/scripts/drmaa_launch.py b/pulsar/scripts/drmaa_launch.py
index 38345ee5..8e2c0889 100644
--- a/pulsar/scripts/drmaa_launch.py
+++ b/pulsar/scripts/drmaa_launch.py
@@ -7,10 +7,10 @@ from pulsar.main import ArgumentParser
 DESCRIPTION = "Submit a DRMAA job."
 
 
-def main():
+def main(argv=None):
     arg_parser = ArgumentParser(description=DESCRIPTION)
     arg_parser.add_argument("--job_attributes", required=True)
-    args = arg_parser.parse_args()
+    args = arg_parser.parse_args(argv)
     job_attributes = load(open(args.job_attributes, "r"))
     session = DrmaaSessionFactory().get()
     external_id = session.run_job(**job_attributes)
diff --git a/pulsar/scripts/mesos_executor.py b/pulsar/scripts/mesos_executor.py
index 4bb710b6..df39ecbd 100644
--- a/pulsar/scripts/mesos_executor.py
+++ b/pulsar/scripts/mesos_executor.py
@@ -68,9 +68,9 @@ class PulsarExecutor(Executor):
         driver.sendFrameworkMessage(message)
 
 
-def run_executor():
+def run_executor(argv=None):
     arg_parser = ArgumentParser(description=DESCRIPTION)
-    arg_parser.parse_args()
+    arg_parser.parse_args(argv)
 
     ensure_mesos_libs()
     log.info("Starting Pulsar executor")
@@ -80,5 +80,10 @@ def run_executor():
         exit_code = 1
     return exit_code
 
+
+def main(argv=None):
+    sys.exit(run_executor(argv))
+
+
 if __name__ == "__main__":
-    sys.exit(run_executor())
+    main()
diff --git a/pulsar/scripts/mesos_framework.py b/pulsar/scripts/mesos_framework.py
index 592b663d..5da99dcc 100644
--- a/pulsar/scripts/mesos_framework.py
+++ b/pulsar/scripts/mesos_framework.py
@@ -11,14 +11,14 @@ from pulsar.main import (
 DESCRIPTION = "Pulsar Mesos Framework Entry Point."
 
 
-def main():
-    ensure_mesos_libs()
+def main(argv=None):
     arg_parser = ArgumentParser(
         description=DESCRIPTION,
     )
     arg_parser.add_argument("--master", default=None, required=True)
     PulsarManagerConfigBuilder.populate_options(arg_parser)
-    args = arg_parser.parse_args()
+    args = arg_parser.parse_args(argv)
+    ensure_mesos_libs()
 
     config_builder = PulsarManagerConfigBuilder(args)
     config_builder.setup_logging()
diff --git a/test/cli_help_tests.py b/test/cli_help_tests.py
new file mode 100644
index 00000000..693535a6
--- /dev/null
+++ b/test/cli_help_tests.py
@@ -0,0 +1,22 @@
+import pulsar.scripts.chown_working_directory
+import pulsar.scripts.drmaa_kill
+import pulsar.scripts.drmaa_launch
+import pulsar.scripts.mesos_executor
+import pulsar.scripts.mesos_framework
+import pulsar.scripts.submit
+
+MODULES = [
+    pulsar.scripts.drmaa_kill,
+    pulsar.scripts.drmaa_launch,
+    pulsar.scripts.mesos_executor,
+    pulsar.scripts.mesos_framework,
+    pulsar.scripts.submit,
+]
+
+
+def test_scripts_have_help():
+    for module in MODULES:
+        try:
+            module.main(["-h"])
+        except SystemExit as e:
+            assert e.code == 0, module
-- 
GitLab