class WorkUnitProviderTest(unittest.TestCase): def setUp(self): self.taskid = "id" self.file1 = "file1" self.file2 = "file2" self.file3 = "file3" self.file4 = "file4" self.test_files = [self.file1, self.file2] directory_manager = TestDirectoryManager() progress_manager = InMemoryProgressManager(directory_manager) builder = TestWorkUnitBuilder() self.undertest = WorkUnitProvider(self.taskid, directory_manager, progress_manager, builder) self.directory_manager = directory_manager self.progress_manager = progress_manager self.directory_manager.set_listing(self.taskid, self.test_files) def test_create_workload_acquires_lock(self): self.directory_manager.set_listing(self.taskid, self.test_files) workunit1 = self.undertest.get_workunit() assert_that(self.progress_manager.owns_lock(workunit1.get_filename()), equal_to(True)) def test_create_workload_fresh_directory(self): workunit1 = self.undertest.get_workunit() assert_that(workunit1.get_filename(), is_in(self.test_files)) self.progress_manager.record_done(workunit1.get_filename()) workunit2 = self.undertest.get_workunit() assert_that(workunit2.get_filename(), is_in(self.test_files)) assert_that(workunit2.get_filename(), is_not(equal_to(workunit1.get_filename()))) self.progress_manager.record_done(workunit2.get_filename()) self.assertRaises(NoAvailableWorkException, self.undertest.get_workunit) def test_create_workload_one_file_already_done(self): self.progress_manager.done.add(self.file1) workunit = self.undertest.get_workunit() assert_that(workunit.get_filename(), equal_to(self.file2)) self.progress_manager.record_done(self.file2) self.assertRaises(NoAvailableWorkException, self.undertest.get_workunit) def test_create_workload_locked_files(self): self.progress_manager.add_external_lock(self.file2) workunit = self.undertest.get_workunit() assert_that(workunit.get_filename(), equal_to(self.file1)) self.progress_manager.record_done(self.file1) self.assertRaises(NoAvailableWorkException, self.undertest.get_workunit) def test_items_in_ignore_list_ignored(self): workunit = self.undertest.get_workunit(ignore_list=[self.file1]) assert_that(workunit.get_filename(), equal_to(self.file2)) self.progress_manager.record_done(self.file2) self.assertRaises(NoAvailableWorkException, self.undertest.get_workunit, ignore_list=[self.file1]) def test_file_found_to_be_done_not_checked_again(self): test_files = [self.file1, self.file2, self.file3, self.file4] self.directory_manager.set_listing(self.taskid, test_files) self.progress_manager.lock(self.file2) self.progress_manager.record_done(self.file2) self.progress_manager.unlock(self.file2) # We don't yet know file1 is done. assert_that( self.undertest.get_potential_files([]), contains_inanyorder(self.file1, self.file2, self.file3, self.file4)) assert_that(self.undertest.get_workunit().get_filename(), equal_to(self.file1)) # We have not yet discovered file2 is done because we found file 1 # right away. However, we should remember we already returned file1. assert_that(self.undertest.get_potential_files([]), contains_inanyorder(self.file2, self.file3, self.file4)) # Here we should discover file2 is done and skip over it assert_that(self.undertest.get_workunit().get_filename(), equal_to(self.file3)) # So the next time we know not to check file2 again assert_that(self.undertest.get_potential_files([]), contains_inanyorder(self.file4))
class WorkUnitProviderTest(unittest.TestCase): def setUp(self): self.taskid = "id" self.file1 = "file1" self.file2 = "file2" self.file3 = "file3" self.file4 = "file4" self.test_files = [self.file1, self.file2] directory_manager = TestDirectoryManager() progress_manager = InMemoryProgressManager(directory_manager) builder = TestWorkUnitBuilder() self.undertest = WorkUnitProvider(self.taskid, directory_manager, progress_manager, builder) self.directory_manager = directory_manager self.progress_manager = progress_manager self.directory_manager.set_listing(self.taskid, self.test_files) def test_create_workload_acquires_lock(self): self.directory_manager.set_listing(self.taskid, self.test_files) workunit1 = self.undertest.get_workunit() assert_that(self.progress_manager.owns_lock(workunit1.get_filename()), equal_to(True)) def test_create_workload_fresh_directory(self): workunit1 = self.undertest.get_workunit() assert_that(workunit1.get_filename(), is_in(self.test_files)) self.progress_manager.record_done(workunit1.get_filename()) workunit2 = self.undertest.get_workunit() assert_that(workunit2.get_filename(), is_in(self.test_files)) assert_that(workunit2.get_filename(), is_not(equal_to(workunit1.get_filename()))) self.progress_manager.record_done(workunit2.get_filename()) self.assertRaises(NoAvailableWorkException, self.undertest.get_workunit) def test_create_workload_one_file_already_done(self): self.progress_manager.done.add(self.file1) workunit = self.undertest.get_workunit() assert_that(workunit.get_filename(), equal_to(self.file2)) self.progress_manager.record_done(self.file2) self.assertRaises(NoAvailableWorkException, self.undertest.get_workunit) def test_create_workload_locked_files(self): self.progress_manager.add_external_lock(self.file2) workunit = self.undertest.get_workunit() assert_that(workunit.get_filename(), equal_to(self.file1)) self.progress_manager.record_done(self.file1) self.assertRaises(NoAvailableWorkException, self.undertest.get_workunit) def test_items_in_ignore_list_ignored(self): workunit = self.undertest.get_workunit(ignore_list=[self.file1]) assert_that(workunit.get_filename(), equal_to(self.file2)) self.progress_manager.record_done(self.file2) self.assertRaises(NoAvailableWorkException, self.undertest.get_workunit, ignore_list=[self.file1]) def test_file_found_to_be_done_not_checked_again(self): test_files = [self.file1, self.file2, self.file3, self.file4] self.directory_manager.set_listing(self.taskid, test_files) self.progress_manager.lock(self.file2) self.progress_manager.record_done(self.file2) self.progress_manager.unlock(self.file2) # We don't yet know file1 is done. assert_that(self.undertest.get_potential_files([]), contains_inanyorder(self.file1, self.file2, self.file3, self.file4)) assert_that(self.undertest.get_workunit().get_filename(), equal_to(self.file1)) # We have not yet discovered file2 is done because we found file 1 # right away. However, we should remember we already returned file1. assert_that(self.undertest.get_potential_files([]), contains_inanyorder(self.file2, self.file3, self.file4)) # Here we should discover file2 is done and skip over it assert_that(self.undertest.get_workunit().get_filename(), equal_to(self.file3)) # So the next time we know not to check file2 again assert_that(self.undertest.get_potential_files([]), contains_inanyorder(self.file4))