def test_simple(self): """Ensure the policy returns the highest version across a set of packages with the same name.""" pool = Pool([Repository([self.mkl_10_3_0, self.mkl_11_0_0])]) policy = DefaultPolicy() queue = [self.mkl_10_3_0.id, self.mkl_11_0_0.id] candidates = policy.select_preferred_packages(pool, {}, queue) self.assertEqual(list(candidates), [self.mkl_11_0_0.id])
def test_simple(self): """Test we select the most recent version across a list of same packages with same name.""" packages = [self.numpy_1_6_0, self.numpy_1_6_1, self.numpy_1_7_1] repository = Repository(packages) pool = Pool([repository]) policy = DefaultPolicy() selected_ids = policy.select_preferred_packages(pool, {}, [p.id for p in packages]) r_selected_ids = [self.numpy_1_7_1.id] self.assertEqual(r_selected_ids, selected_ids)
def test_simple(self): """Test we select the most recent version across a list of same packages with same name.""" packages = [self.numpy_1_6_0, self.numpy_1_6_1, self.numpy_1_7_1] repository = Repository(packages) pool = Pool([repository]) policy = DefaultPolicy() selected_ids = policy.select_preferred_packages( pool, {}, [p.id for p in packages]) r_selected_ids = [self.numpy_1_7_1.id] self.assertEqual(r_selected_ids, selected_ids)
def test_simple(self): """Ensure the policy returns the highest version across a set of packages with the same name.""" r_candidates = [mkl_10_3_0.id, mkl_11_0_0.id] repository = Repository([mkl_10_3_0, mkl_11_0_0]) pool = Pool() pool.add_repository(repository) policy = DefaultPolicy() candidates = policy.prefered_package_ids(pool, {}, r_candidates) self.assertEqual(list(candidates), [mkl_11_0_0.id])
def test_simple_fulfilled_installed(self): """Ensure the policy returns the installed version first if it fulfills the requirement, even if higher versions are available.""" r_candidates = [mkl_10_3_0.id, mkl_11_0_0.id] repository = Repository([mkl_10_3_0, mkl_11_0_0]) pool = Pool() pool.add_repository(repository) policy = DefaultPolicy() candidates = policy.prefered_package_ids(pool, {mkl_10_3_0.id: mkl_10_3_0}, r_candidates) self.assertEqual(list(candidates), [mkl_10_3_0.id, mkl_11_0_0.id])
def test_cmp_by_priority_prefer_installed_multi_repositories(self): """ Check packages from multiple repositories are sorted accordingt to repository priority. """ numpy_1_6_0 = P("numpy-1.6.0") numpy_1_6_1 = P("numpy-1.6.1") numpy_1_7_0 = P("numpy-1.7.0") i_numpy_1_6_0 = P("numpy-1.6.0") remote_repository = Repository([numpy_1_7_0, numpy_1_6_1, numpy_1_6_0], "remote") installed_repository = Repository([i_numpy_1_6_0], "installed") r_sorted_packages = [ i_numpy_1_6_0, numpy_1_7_0, numpy_1_6_1, numpy_1_6_0 ] pool = Pool([installed_repository, remote_repository]) pool.set_repository_order("installed", "remote") policy = DefaultPolicy() queue = [numpy_1_7_0, i_numpy_1_6_0, numpy_1_6_0, numpy_1_6_1] def _cmp(a, b): return policy.cmp_by_priority_prefer_installed(pool, {}, a, b) self.assertEqual(r_sorted_packages, sorted_with_cmp(queue, cmp=_cmp))
def test_simple_fulfilled_installed(self): """Ensure the policy returns the installed version first if it fulfills the requirement, even if higher versions are available.""" mkl_10_4_0 = P("mkl-10.4.0") remote_repository = Repository([self.mkl_10_3_0, self.mkl_11_0_0]) installed_repository = Repository([mkl_10_4_0]) pool = Pool([installed_repository, remote_repository]) policy = DefaultPolicy() queue = [p.id for p in [mkl_10_4_0, self.mkl_10_3_0, self.mkl_11_0_0]] candidates = policy.select_preferred_packages(pool, {}, queue) self.assertEqual(list(candidates), [self.mkl_11_0_0.id]) candidates = policy.prefered_package_ids(pool, {mkl_10_4_0.id: True}, queue) self.assertEqual(list(candidates), [mkl_10_4_0.id, self.mkl_11_0_0.id])
def __init__(self, pool, installed_repository, policy=None): self.pool = pool self.installed_repository = installed_repository if policy is None: policy = DefaultPolicy() self.policy = policy self._id_to_installed_package = dict( (p.id, p) for p in installed_repository.iter_packages()) self._id_to_updated_package = {}
def test_multiple_providers(self): """ Test we select the most recent version across a list of different packages providing the same package. """ packages = [self.numpy_1_6_0, self.numpy_1_6_1, self.numpy_1_7_1, self.nomkl_numpy_1_6_0, self.nomkl_numpy_1_6_1, self.nomkl_numpy_1_7_1, self.mkl_numpy_1_6_0, self.mkl_numpy_1_6_1, self.mkl_numpy_1_7_1] repository = Repository(packages) pool = Pool([repository]) policy = DefaultPolicy() selected_ids = policy.select_preferred_packages(pool, {}, [p.id for p in packages]) r_selected_ids = [self.numpy_1_7_1.id, self.nomkl_numpy_1_7_1.id, self.mkl_numpy_1_7_1.id] self.assertEqual(r_selected_ids, selected_ids)
def test_installed_first(self): """ Test installed version come first, even before higher version. """ packages = [self.mkl_10_3_0, self.mkl_10_4_0] installed_packages = [P("mkl-10.4.0")] repository = Repository(packages) installed_repository = Repository(installed_packages) pool = Pool([repository, installed_repository]) policy = DefaultPolicy() installed_map = OrderedDict() for p in installed_packages: installed_map[p.id] = p package_queues = policy._compute_prefered_packages_installed_first( pool, installed_map, [p.id for p in packages + installed_packages]) r_package_queues = OrderedDict() r_package_queues[six.u("mkl")] = collections.deque( p.id for p in installed_packages + packages) self.assertEqual(r_package_queues, package_queues)
def test_multiple_providers(self): """Test package queues with different packages providing the same package.""" packages = [self.numpy_1_6_0, self.numpy_1_6_1, self.numpy_1_7_1, self.nomkl_numpy_1_6_0, self.nomkl_numpy_1_6_1, self.nomkl_numpy_1_7_1] repository = Repository(packages) pool = Pool([repository]) policy = DefaultPolicy() package_queues = policy._compute_prefered_packages_installed_first( pool, {}, [p.id for p in packages]) r_package_queues = OrderedDict() r_package_queues[six.u("numpy")] = collections.deque([ self.numpy_1_6_0.id, self.numpy_1_6_1.id, self.numpy_1_7_1.id]) r_package_queues[six.u("nomkl_numpy")] = collections.deque([ self.nomkl_numpy_1_6_0.id, self.nomkl_numpy_1_6_1.id, self.nomkl_numpy_1_7_1.id]) self.assertEqual(r_package_queues, package_queues)
def test_installed_first(self): """ Test installed version come first, even before higher version. """ packages = [self.mkl_10_3_0, self.mkl_10_4_0] installed_packages = [P("mkl-10.4.0")] repository = Repository(packages) installed_repository = Repository(installed_packages) pool = Pool([repository, installed_repository]) policy = DefaultPolicy() installed_map = OrderedDict() for p in installed_packages: installed_map[p.id] = p package_queues = policy._compute_prefered_packages_installed_first( pool, installed_map, [p.id for p in packages + installed_packages]) r_package_queues = OrderedDict() r_package_queues[six.u("mkl")] = collections.deque(p.id for p in installed_packages + packages) self.assertEqual(r_package_queues, package_queues)
def test_multiple_providers(self): """ Test we select the most recent version across a list of different packages providing the same package. """ packages = [ self.numpy_1_6_0, self.numpy_1_6_1, self.numpy_1_7_1, self.nomkl_numpy_1_6_0, self.nomkl_numpy_1_6_1, self.nomkl_numpy_1_7_1, self.mkl_numpy_1_6_0, self.mkl_numpy_1_6_1, self.mkl_numpy_1_7_1 ] repository = Repository(packages) pool = Pool([repository]) policy = DefaultPolicy() selected_ids = policy.select_preferred_packages( pool, {}, [p.id for p in packages]) r_selected_ids = [ self.numpy_1_7_1.id, self.nomkl_numpy_1_7_1.id, self.mkl_numpy_1_7_1.id ] self.assertEqual(r_selected_ids, selected_ids)
def _assert_sort_by_priority(package, r_sorted_packages): remote_repository = Repository(packages) pool = Pool([remote_repository]) policy = DefaultPolicy() # We reverse the list to ensure queue is not originally in the # final order queue = reversed(packages) def _cmp(a, b): return policy.cmp_by_priority_prefer_installed(pool, {}, a, b) self.assertEqual(r_sorted_packages, sorted_with_cmp(queue, cmp=_cmp))
def test_multiple_providers(self): """Test package queues with different packages providing the same package.""" packages = [ self.numpy_1_6_0, self.numpy_1_6_1, self.numpy_1_7_1, self.nomkl_numpy_1_6_0, self.nomkl_numpy_1_6_1, self.nomkl_numpy_1_7_1 ] repository = Repository(packages) pool = Pool([repository]) policy = DefaultPolicy() package_queues = policy._compute_prefered_packages_installed_first( pool, {}, [p.id for p in packages]) r_package_queues = OrderedDict() r_package_queues[six.u("numpy")] = collections.deque( [self.numpy_1_6_0.id, self.numpy_1_6_1.id, self.numpy_1_7_1.id]) r_package_queues[six.u("nomkl_numpy")] = collections.deque([ self.nomkl_numpy_1_6_0.id, self.nomkl_numpy_1_6_1.id, self.nomkl_numpy_1_7_1.id ]) self.assertEqual(r_package_queues, package_queues)
def test_cmp_by_priority_prefer_installed_same_repository_simple(self): """ Check packages from a same repository are sorted by their id. """ numpy_1_6_0 = P("numpy-1.6.0") numpy_1_6_1 = P("numpy-1.6.1") numpy_1_7_0 = P("numpy-1.7.0") remote_repository = Repository([numpy_1_7_0, numpy_1_6_1, numpy_1_6_0], "remote") r_sorted_packages = [numpy_1_7_0, numpy_1_6_1, numpy_1_6_0] pool = Pool([remote_repository]) policy = DefaultPolicy() queue = [numpy_1_7_0, numpy_1_6_0, numpy_1_6_1] def _cmp(a, b): return policy.cmp_by_priority_prefer_installed(pool, {}, a, b) self.assertEqual(r_sorted_packages, sorted_with_cmp(queue, cmp=_cmp))
numpy_1_6_0 = PackageInfo.from_string("numpy-1.6.0; depends (mkl)") numpy_1_6_1 = PackageInfo.from_string("numpy-1.6.1; depends (mkl)") numpy_1_7_0 = PackageInfo.from_string("numpy-1.7.0; depends (mkl)") nomkl_numpy_1_7_0 = PackageInfo.from_string( "nomkl_numpy-1.7.0; depends (numpy == 1.7.0)") scipy_0_10_1 = PackageInfo.from_string( "scipy-0.10.1; depends (numpy >= 1.6.0)") scipy_0_11_0 = PackageInfo.from_string( "scipy-0.11.0; depends (numpy >= 1.6.0)") scipy_0_12_0 = PackageInfo.from_string( "scipy-0.12.0; depends (numpy >= 1.7.0)") policy = DefaultPolicy() def solve(pool, requirement, installed_repository, policy): solver = Solver(pool, installed_repository, policy) return solver.solve(requirement) class TestSimpleScenario(unittest.TestCase): """Scenario with no dependencies.""" @unittest.expectedFailure def test_no_install(self): """Ensure the most up-to-date version is installed when directly installed.""" repo = Repository([mkl_10_1_0, mkl_10_2_0, mkl_10_3_0, mkl_11_0_0]) pool = Pool()