class JobGraphTest(ToilTest): def setUp(self): super(JobGraphTest, self).setUp() self.jobStorePath = self._getTestJobStorePath() parser = ArgumentParser() Job.Runner.addToilOptions(parser) options = parser.parse_args(args=[self.jobStorePath]) self.toil = Toil(options) self.assertEquals( self.toil, self.toil.__enter__() ) def tearDown(self): self.toil.__exit__(None, None, None) self.toil._jobStore.destroy() self.assertFalse(os.path.exists(self.jobStorePath)) super(JobGraphTest, self).tearDown() def testJob(self): """ Tests functions of a job. """ command = "by your command" memory = 2^32 disk = 2^32 cores = 1 preemptable = 1 jobStoreID = 100 remainingRetryCount = 5 predecessorNumber = 0 j = JobGraph(command=command, memory=memory, cores=cores, disk=disk, preemptable=preemptable, jobStoreID=jobStoreID, remainingRetryCount=remainingRetryCount, predecessorNumber=predecessorNumber, jobName='testJobGraph', unitName='noName') #Check attributes # self.assertEquals(j.command, command) self.assertEquals(j.memory, memory) self.assertEquals(j.disk, disk) self.assertEquals(j.cores, cores) self.assertEquals(j.preemptable, preemptable) self.assertEquals(j.jobStoreID, jobStoreID) self.assertEquals(j.remainingRetryCount, remainingRetryCount) self.assertEquals(j.predecessorNumber, predecessorNumber) self.assertEquals(j.stack, []) self.assertEquals(j.predecessorsFinished, set()) self.assertEquals(j.logJobStoreFileID, None) #Check equals function j2 = JobGraph(command=command, memory=memory, cores=cores, disk=disk, preemptable=preemptable, jobStoreID=jobStoreID, remainingRetryCount=remainingRetryCount, predecessorNumber=predecessorNumber, jobName='testJobGraph', unitName='noName') self.assertEquals(j, j2) #Change an attribute and check not equal j.predecessorsFinished = {"1", "2"} self.assertNotEquals(j, j2)
class JobWrapperTest(ToilTest): def setUp(self): super(JobWrapperTest, self).setUp() self.jobStorePath = self._getTestJobStorePath() parser = ArgumentParser() Job.Runner.addToilOptions(parser) options = parser.parse_args(args=[self.jobStorePath]) self.toil = Toil(options) self.assertEquals( self.toil, self.toil.__enter__() ) def tearDown(self): self.toil.__exit__(None, None, None) self.toil._jobStore.deleteJobStore() self.assertFalse(os.path.exists(self.jobStorePath)) super(JobWrapperTest, self).tearDown() def testJob(self): """ Tests functions of a job. """ command = "by your command" memory = 2^32 disk = 2^32 cores = 1 preemptable = 1 jobStoreID = 100 remainingRetryCount = 5 predecessorNumber = 0 j = JobWrapper(command, memory, cores, disk, preemptable, jobStoreID, remainingRetryCount, predecessorNumber) #Check attributes # self.assertEquals(j.command, command) self.assertEquals(j.memory, memory) self.assertEquals(j.disk, disk) self.assertEquals(j.cores, cores) self.assertEquals(j.preemptable, preemptable) self.assertEquals(j.jobStoreID, jobStoreID) self.assertEquals(j.remainingRetryCount, remainingRetryCount) self.assertEquals(j.predecessorNumber, predecessorNumber) self.assertEquals(j.stack, []) self.assertEquals(j.predecessorsFinished, set()) self.assertEquals(j.logJobStoreFileID, None) #Check equals function j2 = JobWrapper(command, memory, cores, disk, preemptable, jobStoreID, remainingRetryCount, predecessorNumber) self.assertEquals(j, j2) #Change an attribute and check not equal j.predecessorsFinished = {"1", "2"} self.assertNotEquals(j, j2)
class JobDescriptionTest(ToilTest): def setUp(self): super().setUp() self.jobStorePath = self._getTestJobStorePath() parser = ArgumentParser() Job.Runner.addToilOptions(parser) options = parser.parse_args(args=[self.jobStorePath]) self.toil = Toil(options) self.assertEqual( self.toil, self.toil.__enter__() ) def tearDown(self): self.toil.__exit__(None, None, None) self.toil._jobStore.destroy() self.assertFalse(os.path.exists(self.jobStorePath)) super().tearDown() @travis_test def testJobDescription(self): """ Tests the public interface of a JobDescription. """ command = "by your command" memory = 2^32 disk = 2^32 cores = "1" preemptable = 1 j = JobDescription(command=command, requirements={"memory": memory, "cores": cores, "disk": disk, "preemptable": preemptable}, jobName='testJobGraph', unitName='noName') #Check attributes self.assertEqual(j.command, command) self.assertEqual(j.memory, memory) self.assertEqual(j.disk, disk) self.assertEqual(j.cores, int(cores)) self.assertEqual(j.preemptable, bool(preemptable)) self.assertEqual(type(j.jobStoreID), TemporaryID) self.assertEqual(list(j.successorsAndServiceHosts()), []) self.assertEqual(list(j.allSuccessors()), []) self.assertEqual(list(j.serviceHostIDsInBatches()), []) self.assertEqual(list(j.services), []) self.assertEqual(list(j.nextSuccessors()), []) self.assertEqual(sum((len(level) for level in j.stack)), 0) self.assertEqual(j.predecessorsFinished, set()) self.assertEqual(j.logJobStoreFileID, None) #Check equals function (should be based on object identity and not contents) j2 = JobDescription(command=command, requirements={"memory": memory, "cores": cores, "disk": disk, "preemptable": preemptable}, jobName='testJobGraph', unitName='noName') self.assertNotEqual(j, j2) ###TODO test other functionality @travis_test def testJobDescriptionSequencing(self): j = JobDescription(command='command', requirements={}, jobName='unimportant') j.addChild('child') j.addFollowOn('followOn') # With a command, nothing should be ready to run self.assertEqual(list(j.nextSuccessors()), []) # With command cleared, child should be ready to run j.command = None self.assertEqual(list(j.nextSuccessors()), ['child']) # Without the child, the follow-on should be ready to run j.filterSuccessors(lambda jID: jID != 'child') self.assertEqual(list(j.nextSuccessors()), ['followOn']) # Without the follow-on, we should return None, to be distinct from an # empty list. Nothing left to do! j.filterSuccessors(lambda jID: jID != 'followOn') self.assertEqual(j.nextSuccessors(), None)