예제 #1
0
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))
예제 #2
0
파일: test_workload.py 프로젝트: OSSOS/MOP
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))