def test_is_unclaimed(self): # completed work considered claimed self.assertFalse(work_data.is_unclaimed(self.work1)) # not completed, not claimed work self.assertTrue(work_data.is_unclaimed(self.work2)) # claimed but not completed work self.work2['claimed_worker_id'] = 'some_worker' self.work2['claimed_worker_start_time'] = work_data.get_integer_time() self.assertFalse(work_data.is_unclaimed(self.work2)) # work claimed too long ago considered unclaimed now self.work2['claimed_worker_start_time'] = ( work_data.get_integer_time() - work_data.MAX_PROCESSING_TIME - 1) self.assertTrue(work_data.is_unclaimed(self.work2))
def test_try_pick_piece_of_work_already_claimed(self): self.reset_work_pieces() self.work_pieces.work['w10'] = self.work1 self.work2['claimed_worker_id'] = 'other_worker' self.work2['claimed_worker_start_time'] = work_data.get_integer_time() self.work_pieces.work['w20'] = self.work2 self.work_pieces.write_all_to_datastore() work_id = self.work_pieces.try_pick_piece_of_work('worker0') # if work is claimed by another worker then it won't be picked self.assertIsNone(work_id)
def test_try_pick_piece_of_work_already_claimed(self): self.reset_work_pieces() self.work_pieces.work["w10"] = self.work1 self.work2["claimed_worker_id"] = "other_worker" self.work2["claimed_worker_start_time"] = work_data.get_integer_time() self.work_pieces.work["w20"] = self.work2 self.work_pieces.write_all_to_datastore() work_id = self.work_pieces.try_pick_piece_of_work("worker0") # if work is claimed by another worker then it won't be picked self.assertIsNone(work_id)
def test_update_work_as_completed_wrong_claimed_worker(self): self.reset_work_pieces() self.work_pieces.work['w10'] = self.work1 self.work_pieces.work['w20'] = self.work2 self.work2['claimed_worker_id'] = 'other_worker' self.work2['claimed_worker_start_time'] = work_data.get_integer_time() self.work_pieces.write_all_to_datastore() self.assertFalse( self.work_pieces.update_work_as_completed('this_worker', 'w20')) self.reset_work_pieces() self.work_pieces.read_all_from_datastore() self.assertFalse(self.work_pieces.work['w20']['is_completed'])
def test_try_pick_piece_of_work_claimed_long_ago(self): self.reset_work_pieces() self.work_pieces.work['w10'] = self.work1 self.work2['claimed_worker_id'] = 'other_worker' self.work2['claimed_worker_start_time'] = ( work_data.get_integer_time() - work_data.MAX_PROCESSING_TIME * 2) self.work_pieces.work['w20'] = self.work2 self.work_pieces.write_all_to_datastore() work_id = self.work_pieces.try_pick_piece_of_work('worker0') # if work is claimed by another worker, but it happened some time ago # then work will be claimed self.assertEqual('w20', work_id)
def test_update_work_as_completed_wrong_claimed_worker(self): self.reset_work_pieces() self.work_pieces.work["w10"] = self.work1 self.work_pieces.work["w20"] = self.work2 self.work2["claimed_worker_id"] = "other_worker" self.work2["claimed_worker_start_time"] = work_data.get_integer_time() self.work_pieces.write_all_to_datastore() self.assertFalse( self.work_pieces.update_work_as_completed("this_worker", "w20")) self.reset_work_pieces() self.work_pieces.read_all_from_datastore() self.assertFalse(self.work_pieces.work["w20"]["is_completed"])
def test_update_work_as_completed_with_error(self): self.reset_work_pieces() self.work_pieces.work['w10'] = self.work1 self.work_pieces.work['w20'] = self.work2 self.work2['claimed_worker_id'] = 'this_worker' self.work2['claimed_worker_start_time'] = work_data.get_integer_time() self.work_pieces.write_all_to_datastore() self.assertTrue( self.work_pieces.update_work_as_completed( 'this_worker', 'w20', error='err')) self.reset_work_pieces() self.work_pieces.read_all_from_datastore() self.assertTrue(self.work_pieces.work['w20']['is_completed']) self.assertEqual('err', self.work_pieces.work['w20']['error'])
def test_update_work_as_completed_with_error(self): self.reset_work_pieces() self.work_pieces.work["w10"] = self.work1 self.work_pieces.work["w20"] = self.work2 self.work2["claimed_worker_id"] = "this_worker" self.work2["claimed_worker_start_time"] = work_data.get_integer_time() self.work_pieces.write_all_to_datastore() self.assertTrue( self.work_pieces.update_work_as_completed("this_worker", "w20", error="err")) self.reset_work_pieces() self.work_pieces.read_all_from_datastore() self.assertTrue(self.work_pieces.work["w20"]["is_completed"]) self.assertEqual("err", self.work_pieces.work["w20"]["error"])
def test_update_work_as_completed_other_values(self): self.reset_work_pieces() self.work_pieces.work['w10'] = self.work1 self.work_pieces.work['w20'] = self.work2 self.work2['claimed_worker_id'] = 'this_worker' self.work2['claimed_worker_start_time'] = work_data.get_integer_time() self.work_pieces.write_all_to_datastore() self.assertTrue( self.work_pieces.update_work_as_completed( 'this_worker', 'w20', other_values={'a': 123, 'b': 456})) self.reset_work_pieces() self.work_pieces.read_all_from_datastore() self.assertTrue(self.work_pieces.work['w20']['is_completed']) self.assertNotIn('error', self.work_pieces.work['w20']) self.assertEqual(123, self.work_pieces.work['w20']['a']) self.assertEqual(456, self.work_pieces.work['w20']['b'])
def test_update_work_as_completed_other_values(self): self.reset_work_pieces() self.work_pieces.work["w10"] = self.work1 self.work_pieces.work["w20"] = self.work2 self.work2["claimed_worker_id"] = "this_worker" self.work2["claimed_worker_start_time"] = work_data.get_integer_time() self.work_pieces.write_all_to_datastore() self.assertTrue( self.work_pieces.update_work_as_completed("this_worker", "w20", other_values={ "a": 123, "b": 456 })) self.reset_work_pieces() self.work_pieces.read_all_from_datastore() self.assertTrue(self.work_pieces.work["w20"]["is_completed"]) self.assertNotIn("error", self.work_pieces.work["w20"]) self.assertEqual(123, self.work_pieces.work["w20"]["a"]) self.assertEqual(456, self.work_pieces.work["w20"]["b"])