Пример #1
0
 def setUp(self):
     self.unique_job_id += 1
     cmd = ["ls", "-la"]
     self.job = Job(self.unique_job_id, cmd)
Пример #2
0
class TestJob(unittest.TestCase):

    unique_job_id = 0
    job = None

    def setUp(self):
        self.unique_job_id += 1
        cmd = ["ls", "-la"]
        self.job = Job(self.unique_job_id, cmd)

    def test__hash__(self):
        self.assertEqual(self.unique_job_id, self.job.__hash__())

    def test___init__(self):
        # only check name is correctly set if no name specified.
        self.assertEqual(self.job.name, "localq-" + str(self.unique_job_id))

    def test___str__(self):
        expected = str(self.job.jobid) + "-" + str(self.job.name)
        self.assertEqual(expected, self.job.__str__())

    def test_info(self):
        expected = "\t".join(
            [str(self.job.jobid),
             str(self.job.priority()),
             str(self.job.status()),
             str(self.job.num_cores),
             str(self.job.start_time),
             str(self.job.end_time),
             str(self.job.name),
             str(" ".join(self.job.cmd))]
        )
        self.assertEqual(expected, self.job.info())

    def test_kill(self):
        self.job.proc = MagicMock()
        self.job.kill()
        self.job.proc.terminate.assert_called_with()
        assert self.job._status == Status.CANCELLED

        self.job.proc.kill = MagicMock(side_effect=OSError("foo"))
        self.job.kill()
        self.job.proc.terminate.assert_called_with()
        assert self.job._status == Status.CANCELLED


    def test_priority(self):
        self.assertEqual(-1 * self.unique_job_id, self.job.priority())

    def test_run(self):
        with patch.object(subprocess, "Popen", return_value="Fake process"):
            # Should just run without trouble.
            self.job.run()
            assert self.job.proc == "Fake process"
        # if an exception is thrown, make sure it's handled.
        with patch.object(subprocess, "Popen", side_effect=OSError("foo")):
            self.job.run()
            assert self.job.proc == None
            assert self.job._failed_to_start

    def test_status(self):
        with patch.object(Job, "update_status", return_value=None) as mock_update_status:
            actual_status = self.job.status()
            mock_update_status.assert_called_with()
            assert self.job._status == actual_status

    def test_update_status(self):
        mock_proc = MagicMock(returncode=None)
        self.job.proc = mock_proc

        self.job._status = Status.CANCELLED
        self.job.update_status()
        assert self.job._status == Status.CANCELLED

        self.job._status = Status.RUNNING
        mock_proc = MagicMock(returncode=None)
        self.job.proc = mock_proc
        self.job.update_status()
        assert self.job._status == Status.RUNNING

        self.job._status = Status.RUNNING
        mock_proc = MagicMock(returncode=-1)
        self.job.proc = mock_proc
        self.job.update_status()
        assert self.job._status == Status.CANCELLED

        self.job._status = Status.RUNNING
        mock_proc = MagicMock(returncode=1)
        self.job.proc = mock_proc
        self.job.update_status()
        assert self.job._status == Status.FAILED

        self.job.proc = False
        self.job.update_status()
        assert self.job._status == Status.PENDING

        self.job._failed_to_start = True
        self.job.update_status()
        assert self.job._status == Status.FAILED


    if __name__ == '__main__':
        unittest.main()