Beispiel #1
0
    def test_local_data_file(self):
        """ Scripts should be allowed to create any temporary files they want
        in their current directory. Parallel executions should each get a
        separate directory."""

        self.prepareFileContents(self.SCRIPT_FILE,
                                 """\
#!/usr/bin/env python

with open('working.txt', 'a') as f:
    f.write('expected text')

with open('working.txt', 'r') as f:
    print f.read()
""",
                                 mode=stat.S_IRWXU)
        expected_output = 'expected text\n'

        worker = Worker()

        worker.run_job(Job(script=self.SCRIPT_FILE, stdout=self.OUT_FILE))
        worker.run_job(Job(script=self.SCRIPT_FILE, stdout=self.OUT_FILE2))

        self.assertFileContents(self.OUT_FILE, expected_output)
        self.assertFileContents(self.OUT_FILE2, expected_output)
Beispiel #2
0
    def test_helper_files(self):
        """ Scripts may need helper files that contain static data or library
        code."""

        self.prepareFileContents(
            self.HELPER_FILE, """\
def greet(name):
    return "Hello, %s" % name
""")
        self.prepareFileContents(self.SCRIPT_FILE,
                                 """\
#!/usr/bin/env python

import helper

print helper.greet('Bob')
""",
                                 mode=stat.S_IRWXU)
        expected_output = 'Hello, Bob\n'

        worker = Worker()

        worker.run_job(
            Job(script=self.SCRIPT_FILE,
                helpers=[self.HELPER_FILE],
                stdout=self.OUT_FILE))

        self.assertFileContents(self.OUT_FILE, expected_output)
Beispiel #3
0
    def test_zero_return(self):
        job = Job('python -c "exit(0)"')
        worker = Worker()

        returncode = worker.run_job(job)

        self.assertEqual(returncode, 0)
Beispiel #4
0
    def test_run_job(self):
        command = """python -c "print('Hello, World!')" """
        job = Job(command, stdout=self.OUT_FILE, stderr=self.ERROR_FILE)
        worker = Worker()

        worker.run_job(job)

        self.assertFileContents(self.OUT_FILE, "Hello, World!\n")
Beispiel #5
0
    def test_resource(self):
        job = Job("""python -c "import os; print os.environ['TEST_VALUE']" """,
                  stdout=self.OUT_FILE)
        expected_text = 'ExpectedText\n'
        worker = Worker("TEST_VALUE=ExpectedText")

        worker.run_job(job)

        self.assertFileContents(self.OUT_FILE, expected_text)
Beispiel #6
0
    def test_stderr(self):
        command = """python -c "import sys; sys.exit('Goodbye, World!')" """
        job = Job(command, stdout=self.OUT_FILE, stderr=self.ERROR_FILE)
        worker = Worker()

        with self.assertRaisesRegexp(
                CalledProcessError,
                'Command.*sys\.exit.* returned non-zero exit status 1'):

            worker.run_job(job)

        self.assertFileContents(self.ERROR_FILE, "Goodbye, World!\n")
Beispiel #7
0
    def test_stderr_logged(self):
        command = """python -c "import sys; sys.exit('Goodbye, World!')" """
        expected_log = "[ERROR] - Goodbye, World!\n"
        logger = MockLogger()
        job = Job(command, stdout=self.OUT_FILE, stderr=self.ERROR_FILE)
        worker = Worker(logger=logger)

        try:
            worker.run_job(job)
        except CalledProcessError:
            pass

        self.assertEqual(logger.getLog(), expected_log)
Beispiel #8
0
    def test_nonzero_return(self):
        job = Job('python -c "exit(1)"')
        expected_error = """Command ' python -c "exit(1)"' returned non-zero exit status 1"""
        worker = Worker()

        exception_message = None
        try:
            worker.run_job(job)

            self.fail("Should have thrown")
        except CalledProcessError as e:
            exception_message = str(e)

        self.assertEquals(exception_message, expected_error)
Beispiel #9
0
    def test_queue_job(self):
        notified_commands = StringIO()
        expected_commands = " python -c pass\n"

        def callback(command):
            notified_commands.write(command + "\n")

        factory = Factory([("", 1)], launch_callback=callback)

        factory.queue_job(Job('python -c pass'))

        factory.wait()

        self.assertEquals(notified_commands.getvalue(), expected_commands)
Beispiel #10
0
    def test_callback(self):
        self.actual_command = None

        def callback(command):
            self.actual_command = command

        requested_command = 'python -c pass'
        job = Job(requested_command)
        expected_command = ' ' + requested_command
        worker = Worker(launch_callback=callback)

        worker.run_job(job)

        self.assertEqual(self.actual_command, expected_command)
Beispiel #11
0
    def test_callback_with_resource(self):
        self.actual_command = None

        def callback(command):
            self.actual_command = command

        requested_command = 'python -c pass'
        job = Job(requested_command)
        resource = 'MYVAR=23'
        expected_command = resource + ' ' + requested_command
        worker = Worker(resource=resource, launch_callback=callback)

        worker.run_job(job)

        self.assertEqual(self.actual_command, expected_command)
Beispiel #12
0
    def test_temp_folder_deleted(self):
        self.prepareFileContents(self.SCRIPT_FILE,
                                 """\
#!/usr/bin/env python

pass
""",
                                 mode=stat.S_IRWXU)
        job = Job(script=self.SCRIPT_FILE)

        worker = Worker(working_path=self.ALTERNATE_WORKING_PATH)
        worker.run_job(job)

        remaining_files = os.listdir(self.ALTERNATE_WORKING_PATH)

        self.assertEquals(remaining_files, [])
Beispiel #13
0
    def test_script_file(self):
        """ Define a job as a script file to execute. """

        self.prepareFileContents(self.SCRIPT_FILE,
                                 """\
#!/usr/bin/env python

print 'expected text'
""",
                                 mode=stat.S_IRWXU)
        expected_output = 'expected text\n'
        worker = Worker()

        worker.run_job(Job(script=self.SCRIPT_FILE, stdout=self.OUT_FILE))

        self.assertFileContents(self.OUT_FILE, expected_output)
Beispiel #14
0
    def test_script_file_with_resource(self):
        self.prepareFileContents(self.SCRIPT_FILE,
                                 """\
#!/usr/bin/env python

import os

print os.environ['TEST_VALUE']
""",
                                 mode=stat.S_IRWXU)
        expected_output = 'ExpectedText\n'

        worker = Worker("TEST_VALUE=ExpectedText")

        worker.run_job(Job(script=self.SCRIPT_FILE, stdout=self.OUT_FILE))

        self.assertFileContents(self.OUT_FILE, expected_output)
Beispiel #15
0
    def test_script_args(self):
        self.prepareFileContents(self.SCRIPT_FILE,
                                 """\
#!/usr/bin/env python

import sys

print sys.argv[1]
""",
                                 mode=stat.S_IRWXU)
        expected_output = 'expectedText\n'

        worker = Worker()

        worker.run_job(
            Job(script=self.SCRIPT_FILE,
                args=('expectedText', ),
                stdout=self.OUT_FILE))

        self.assertFileContents(self.OUT_FILE, expected_output)
Beispiel #16
0
    def test_working_path_alternate(self):
        expected_path = os.path.join(os.getcwd(), self.ALTERNATE_WORKING_PATH)
        self.prepareFileContents(self.SCRIPT_FILE,
                                 """\
#!/usr/bin/env python

import os

print os.getcwd()
""",
                                 mode=stat.S_IRWXU)
        job = Job(script=self.SCRIPT_FILE, stdout=self.OUT_FILE)

        worker = Worker(working_path=self.ALTERNATE_WORKING_PATH)
        worker.run_job(job)

        with open(self.OUT_FILE, 'rU') as f:
            actual_path = f.read()
        actual_parent = os.path.dirname(actual_path)

        self.assertEquals(actual_parent, expected_path)
Beispiel #17
0
    def test_init(self):
        job = Job("python -c pass", self.OUT_FILE, self.ERROR_FILE)

        self.assertEqual(job.stdout, self.OUT_FILE)
Beispiel #18
0
    def test_run_job_no_redirect(self):
        job = Job('python -c pass')
        worker = Worker()

        worker.run_job(job)
Beispiel #19
0
    def test_repr(self):
        job = Job("python -c pass", self.OUT_FILE, self.ERROR_FILE)

        self.assertEquals(repr(job), "Job('python -c pass')")