Revision 66bd7445 test/ganeti.jqueue_unittest.py
b/test/ganeti.jqueue_unittest.py | ||
---|---|---|
565 | 565 |
|
566 | 566 |
self._GenericCheckJob(job) |
567 | 567 |
|
568 |
# Finished jobs can't be processed any further
|
|
569 |
self.assertRaises(errors.ProgrammerError,
|
|
570 |
jqueue._JobProcessor(queue, opexec, job))
|
|
568 |
# Calling the processor on a finished job should be a no-op
|
|
569 |
self.assertTrue(jqueue._JobProcessor(queue, opexec, job)())
|
|
570 |
self.assertRaises(IndexError, queue.GetNextUpdate)
|
|
571 | 571 |
|
572 | 572 |
def testOpcodeError(self): |
573 | 573 |
queue = _FakeQueueForProc() |
... | ... | |
643 | 643 |
|
644 | 644 |
self._GenericCheckJob(job) |
645 | 645 |
|
646 |
# Finished jobs can't be processed any further
|
|
647 |
self.assertRaises(errors.ProgrammerError,
|
|
648 |
jqueue._JobProcessor(queue, opexec, job))
|
|
646 |
# Calling the processor on a finished job should be a no-op
|
|
647 |
self.assertTrue(jqueue._JobProcessor(queue, opexec, job)())
|
|
648 |
self.assertRaises(IndexError, queue.GetNextUpdate)
|
|
649 | 649 |
|
650 | 650 |
def testCancelWhileInQueue(self): |
651 | 651 |
queue = _FakeQueueForProc() |
... | ... | |
665 | 665 |
|
666 | 666 |
self.assertRaises(IndexError, queue.GetNextUpdate) |
667 | 667 |
|
668 |
self.assertFalse(job.start_timestamp) |
|
669 |
self.assertTrue(job.end_timestamp) |
|
668 | 670 |
self.assert_(compat.all(op.status == constants.OP_STATUS_CANCELED |
669 | 671 |
for op in job.ops)) |
670 | 672 |
|
673 |
# Serialize to check for differences |
|
674 |
before_proc = job.Serialize() |
|
675 |
|
|
676 |
# Simulate processor called in workerpool |
|
671 | 677 |
opexec = _FakeExecOpCodeForProc(queue, None, None) |
672 | 678 |
self.assert_(jqueue._JobProcessor(queue, opexec, job)()) |
673 | 679 |
|
... | ... | |
675 | 681 |
self.assertEqual(job.CalcStatus(), constants.JOB_STATUS_CANCELED) |
676 | 682 |
self.assertEqual(job.GetInfo(["status"]), [constants.JOB_STATUS_CANCELED]) |
677 | 683 |
self.assertFalse(job.start_timestamp) |
678 |
self.assert_(job.end_timestamp)
|
|
684 |
self.assertTrue(job.end_timestamp)
|
|
679 | 685 |
self.assertFalse(compat.any(op.start_timestamp or op.end_timestamp |
680 | 686 |
for op in job.ops)) |
681 | 687 |
self.assertEqual(job.GetInfo(["opstatus", "opresult"]), |
682 | 688 |
[[constants.OP_STATUS_CANCELED for _ in job.ops], |
683 | 689 |
["Job canceled by request" for _ in job.ops]]) |
684 | 690 |
|
691 |
# Must not have changed or written |
|
692 |
self.assertEqual(before_proc, job.Serialize()) |
|
693 |
self.assertRaises(IndexError, queue.GetNextUpdate) |
|
694 |
|
|
685 | 695 |
def testCancelWhileWaitlockInQueue(self): |
686 | 696 |
queue = _FakeQueueForProc() |
687 | 697 |
|
... | ... | |
903 | 913 |
|
904 | 914 |
for remaining in reversed(range(len(job.ops) - successcount)): |
905 | 915 |
result = jqueue._JobProcessor(queue, opexec, job)() |
916 |
self.assertEqual(queue.GetNextUpdate(), (job, True)) |
|
917 |
self.assertEqual(queue.GetNextUpdate(), (job, True)) |
|
918 |
self.assertEqual(queue.GetNextUpdate(), (job, True)) |
|
919 |
self.assertRaises(IndexError, queue.GetNextUpdate) |
|
906 | 920 |
|
907 | 921 |
if remaining == 0: |
908 | 922 |
# Last opcode |
... | ... | |
913 | 927 |
|
914 | 928 |
self.assertEqual(job.CalcStatus(), constants.JOB_STATUS_QUEUED) |
915 | 929 |
|
930 |
self.assertRaises(IndexError, queue.GetNextUpdate) |
|
916 | 931 |
self.assertEqual(job.CalcStatus(), constants.JOB_STATUS_SUCCESS) |
917 | 932 |
self.assertEqual(job.GetInfo(["status"]), [constants.JOB_STATUS_SUCCESS]) |
918 | 933 |
self.assertEqual(job.GetInfo(["opresult"]), |
... | ... | |
924 | 939 |
|
925 | 940 |
self._GenericCheckJob(job) |
926 | 941 |
|
927 |
# Finished jobs can't be processed any further
|
|
928 |
self.assertRaises(errors.ProgrammerError,
|
|
929 |
jqueue._JobProcessor(queue, opexec, job))
|
|
942 |
# Calling the processor on a finished job should be a no-op
|
|
943 |
self.assertTrue(jqueue._JobProcessor(queue, opexec, job)())
|
|
944 |
self.assertRaises(IndexError, queue.GetNextUpdate)
|
|
930 | 945 |
|
931 | 946 |
# ... also after being restored |
932 | 947 |
job2 = jqueue._QueuedJob.Restore(queue, job.Serialize()) |
933 |
self.assertRaises(errors.ProgrammerError,
|
|
934 |
jqueue._JobProcessor(queue, opexec, job2))
|
|
948 |
self.assertTrue(jqueue._JobProcessor(queue, opexec, job2)())
|
|
949 |
self.assertRaises(IndexError, queue.GetNextUpdate)
|
|
935 | 950 |
|
936 | 951 |
def testProcessorOnRunningJob(self): |
937 | 952 |
ops = [opcodes.OpTestDummy(result="result", fail=False)] |
... | ... | |
1293 | 1308 |
self.assert_(compat.all(op.start_timestamp and op.end_timestamp |
1294 | 1309 |
for op in job.ops)) |
1295 | 1310 |
|
1296 |
# Finished jobs can't be processed any further
|
|
1297 |
self.assertRaises(errors.ProgrammerError,
|
|
1298 |
jqueue._JobProcessor(self.queue, opexec, job))
|
|
1311 |
# Calling the processor on a finished job should be a no-op
|
|
1312 |
self.assertTrue(jqueue._JobProcessor(self.queue, opexec, job)())
|
|
1313 |
self.assertRaises(IndexError, self.queue.GetNextUpdate)
|
|
1299 | 1314 |
|
1300 | 1315 |
|
1301 | 1316 |
if __name__ == "__main__": |
Also available in: Unified diff