class WorkloadManagementTest(unittest.TestCase): def setUp(self): self.progress_manager = InMemoryProgressManager( Mock(spec=LocalDirectoryWorkingContext)) self.workunit_provider = Mock(spec=WorkUnitProvider) self.workunit1 = MagicMock(spec=WorkUnit) self.file1 = "file1" self.workunit1.get_filename.return_value = self.file1 self.workunit2 = MagicMock(spec=WorkUnit) self.file2 = "file2" self.workunit2.get_filename.return_value = self.file2 workunits = [self.workunit1, self.workunit2] def get_workunit(index): workunit = workunits[index] self.progress_manager.lock(workunit.get_filename()) return workunit self.workunit_provider.get_workunit.side_effect = ( get_workunit(index) for index in range(2)) image_manager = Mock(spec=ImageManager) self.undertest = ValidationModel(self.workunit_provider, image_manager, None) self.undertest.start_work() def test_workunits_on_demand(self): assert_that(self.undertest.get_current_workunit(), equal_to(self.workunit1)) assert_that(self.workunit_provider.get_workunit.call_count, equal_to(1)) self.undertest.next_workunit() assert_that(self.undertest.get_current_workunit(), equal_to(self.workunit2)) assert_that(self.workunit_provider.get_workunit.call_count, equal_to(2)) def test_shift_locks(self): assert_that(self.undertest.get_current_workunit(), equal_to(self.workunit1)) assert_that(self.progress_manager.owns_lock(self.file1), equal_to(True)) assert_that(self.progress_manager.owns_lock(self.file2), equal_to(False)) self.undertest.next_workunit() assert_that(self.undertest.get_current_workunit(), equal_to(self.workunit2)) # Note we don't give up lock just by going to next workunit. It is # released once it is done processing. assert_that(self.progress_manager.owns_lock(self.file1), equal_to(True)) assert_that(self.progress_manager.owns_lock(self.file2), equal_to(True))
class WorkloadManagementTest(unittest.TestCase): def setUp(self): self.progress_manager = InMemoryProgressManager(Mock(spec=LocalDirectoryWorkingContext)) self.workunit_provider = Mock(spec=WorkUnitProvider) self.workunit1 = MagicMock(spec=WorkUnit) self.file1 = "file1" self.workunit1.get_filename.return_value = self.file1 self.workunit2 = MagicMock(spec=WorkUnit) self.file2 = "file2" self.workunit2.get_filename.return_value = self.file2 workunits = [self.workunit1, self.workunit2] def get_workunit(index): workunit = workunits[index] self.progress_manager.lock(workunit.get_filename()) return workunit self.workunit_provider.get_workunit.side_effect = (get_workunit(index) for index in xrange(2)) image_manager = Mock(spec=ImageManager) self.undertest = ValidationModel(self.workunit_provider, image_manager, None) self.undertest.start_work() def test_workunits_on_demand(self): assert_that(self.undertest.get_current_workunit(), equal_to(self.workunit1)) assert_that(self.workunit_provider.get_workunit.call_count, equal_to(1)) self.undertest.next_workunit() assert_that(self.undertest.get_current_workunit(), equal_to(self.workunit2)) assert_that(self.workunit_provider.get_workunit.call_count, equal_to(2)) def test_shift_locks(self): assert_that(self.undertest.get_current_workunit(), equal_to(self.workunit1)) assert_that(self.progress_manager.owns_lock(self.file1), equal_to(True)) assert_that(self.progress_manager.owns_lock(self.file2), equal_to(False)) self.undertest.next_workunit() assert_that(self.undertest.get_current_workunit(), equal_to(self.workunit2)) # Note we don't give up lock just by going to next workunit. It is # released once it is done processing. assert_that(self.progress_manager.owns_lock(self.file1), equal_to(True)) assert_that(self.progress_manager.owns_lock(self.file2), equal_to(True))
class InMemoryProgressManagerTest(unittest.TestCase): def setUp(self): self.file1 = "file1" self.file2 = "file2" directory_manager = Mock(spec=LocalDirectoryWorkingContext) self.undertest = InMemoryProgressManager(directory_manager) def test_done(self): assert_that(self.undertest.is_done(self.file1), equal_to(False)) assert_that(self.undertest.is_done(self.file2), equal_to(False)) self.undertest.lock(self.file2) self.undertest.record_done(self.file2) self.undertest.unlock(self.file2) assert_that(self.undertest.is_done(self.file1), equal_to(False)) assert_that(self.undertest.is_done(self.file2), equal_to(True)) self.undertest.lock(self.file1) self.undertest.record_done(self.file1) self.undertest.unlock(self.file1) assert_that(self.undertest.is_done(self.file1), equal_to(True)) assert_that(self.undertest.is_done(self.file2), equal_to(True)) def test_processed_indices(self): assert_that(self.undertest.get_processed_indices(self.file1), has_length(0)) self.undertest.lock(self.file1) self.undertest.record_index(self.file1, 1) assert_that(self.undertest.get_processed_indices(self.file1), contains_inanyorder(1)) self.undertest.record_index(self.file1, 2) assert_that(self.undertest.get_processed_indices(self.file1), contains_inanyorder(1, 2)) assert_that(self.undertest.get_processed_indices(self.file2), has_length(0)) def test_locking(self): assert_that(self.undertest.owns_lock(self.file1), equal_to(False)) assert_that(self.undertest.owns_lock(self.file2), equal_to(False)) self.undertest.lock(self.file1) assert_that(self.undertest.owns_lock(self.file1), equal_to(True)) assert_that(self.undertest.owns_lock(self.file2), equal_to(False)) self.assertRaises(RequiresLockException, self.undertest.record_done, self.file2) self.assertRaises(RequiresLockException, self.undertest.record_index, self.file2, 1) def test_external_locks(self): self.undertest.add_external_lock(self.file1) assert_that(self.undertest.owns_lock(self.file1), equal_to(False)) self.assertRaises(FileLockedException, self.undertest.lock, self.file1) self.assertRaises(FileLockedException, self.undertest.unlock, self.file1) self.undertest.lock(self.file2) assert_that(self.undertest.owns_lock(self.file2), equal_to(True))