def test_softlink_with_broken_entry(self): self.maxDiff = None # Given path = VTK_EGG_DEFERRED_SOFTLINK expected_files = [ os.path.join('EGG-INFO', 'PKG-INFO'), os.path.join('EGG-INFO', 'inst', 'targets.dat'), os.path.join('EGG-INFO', 'inst', 'files_to_install.txt'), os.path.join('EGG-INFO', 'usr', 'lib', 'vtk-5.10', 'libvtkViews.so.5.10.1'), os.path.join('EGG-INFO', 'usr', 'lib', 'vtk-5.10', 'libvtkViews.so.5.10'), os.path.join('EGG-INFO', 'usr', 'lib', 'vtk-5.10', 'libvtkViews.so'), os.path.join('EGG-INFO', 'spec', 'lib-provide'), os.path.join('EGG-INFO', 'spec', 'depend'), os.path.join('EGG-INFO', 'spec', 'lib-depend'), os.path.join('EGG-INFO', 'spec', 'summary'), ] with mkdtemp() as d: existing_link = os.path.join(d, 'EGG-INFO/usr/lib/vtk-5.10/libvtkViews.so') create_broken_symlink(existing_link) # When with ZipFile(path) as zp: zp.extractall(d) files = list_files(d) # Then assertCountEqual(self, files, expected_files) path = os.path.join(d, "EGG-INFO/usr/lib/vtk-5.10/libvtkViews.so") self.assertTrue(os.path.islink(path))
def test_whats_new_no_new_epd(self): # Given r_output = textwrap.dedent("""\ Name installed available ============================================================ scipy 0.12.0-1 0.13.0-1 numpy 1.7.1-1 1.7.1-2 """) installed_entries = [ dummy_installed_package_factory("numpy", "1.7.1", 1), dummy_installed_package_factory("scipy", "0.12.0", 1) ] remote_entries = [ dummy_repository_package_factory("numpy", "1.7.1", 2), dummy_repository_package_factory("scipy", "0.13.0", 1) ] remote, installed = create_repositories(remote_entries, installed_entries) # When with mock_print() as m: whats_new(remote, installed) # Then # FIXME: we splitlines and compared wo caring about order, as # the actual line order depends on dict ordering from # EggCollection.query_installed. assertCountEqual(self, m.value.splitlines(), r_output.splitlines())
def test_endist_metadata_simple(self): # Given source = os.path.join(self.prefix, os.path.basename(NOSE_1_2_1)) shutil.copy(NOSE_1_2_1, source) target = os.path.join(self.prefix, "babar-1.2.1-2.egg") endist = os.path.join(self.prefix, "endist.dat") with open(endist, "w") as fp: data = textwrap.dedent("""\ packages = ["foo"] name = "babar" """) fp.write(data) # When with chdir(self.prefix): repack(source, 2, "rh5-64") # Then self.assertTrue(os.path.exists(target)) with ZipFile(target) as zp: info = info_from_z(zp) assertCountEqual(self, info["packages"], ["foo"]) assertCountEqual(self, info["name"], "babar")
def test_softlink_with_broken_entry(self): self.maxDiff = None # Given path = VTK_EGG_DEFERRED_SOFTLINK expected_files = [ os.path.join('EGG-INFO', 'PKG-INFO'), os.path.join('EGG-INFO', 'inst', 'targets.dat'), os.path.join('EGG-INFO', 'inst', 'files_to_install.txt'), os.path.join('EGG-INFO', 'usr', 'lib', 'vtk-5.10', 'libvtkViews.so.5.10.1'), os.path.join('EGG-INFO', 'usr', 'lib', 'vtk-5.10', 'libvtkViews.so.5.10'), os.path.join('EGG-INFO', 'usr', 'lib', 'vtk-5.10', 'libvtkViews.so'), os.path.join('EGG-INFO', 'spec', 'lib-provide'), os.path.join('EGG-INFO', 'spec', 'depend'), os.path.join('EGG-INFO', 'spec', 'lib-depend'), os.path.join('EGG-INFO', 'spec', 'summary'), ] with mkdtemp() as d: existing_link = os.path.join( d, 'EGG-INFO/usr/lib/vtk-5.10/libvtkViews.so') create_broken_symlink(existing_link) # When with ZipFile(path) as zp: zp.extractall(d) files = list_files(d) # Then assertCountEqual(self, files, expected_files) path = os.path.join(d, "EGG-INFO/usr/lib/vtk-5.10/libvtkViews.so") self.assertTrue(os.path.islink(path))
def test_complete(self): # Given repository_info = BroodRepositoryInfo( "https://acme.com", "acme/looney") repository = Repository([ P("MKL 10.3-1", repository_info), P("numpy 1.8.1-1; depends (MKL == 10.3-1)", repository_info), ]) r_entries = [ { "name": "MKL", "require": {}, "version": "10.3-1", "version_normalized": "10.3.0.0-patch1", }, { "name": "numpy", "require": { "MKL": "10.3.0.0-patch1", }, "version": "1.8.1-1", "version_normalized": "1.8.1.0-patch1", } ] # When entries = list(repository_to_composer_json_dict(repository)) # Then assertCountEqual(self, entries, r_entries)
def test_endist_metadata_simple(self): # Given source = os.path.join(self.prefix, os.path.basename(NOSE_1_2_1)) shutil.copy(NOSE_1_2_1, source) target = os.path.join(self.prefix, "babar-1.2.1-2.egg") endist = os.path.join(self.prefix, "endist.dat") with open(endist, "w") as fp: data = textwrap.dedent("""\ packages = ["foo"] name = "babar" """) fp.write(data) # When with chdir(self.prefix): repack(source, 2, "rh5-64") # Then self.assertTrue(os.path.exists(target)) with ZipFile(target) as zp: info = info_from_z(zp) assertCountEqual(self, info["packages"], ["foo"]) assertCountEqual(self, info["name"], "babar")
def test_whats_new_no_new_epd(self): # Given r_output = textwrap.dedent("""\ Name installed available ============================================================ scipy 0.12.0-1 0.13.0-1 numpy 1.7.1-1 1.7.1-2 """) installed_entries = [ dummy_installed_package_factory("numpy", "1.7.1", 1), dummy_installed_package_factory("scipy", "0.12.0", 1) ] remote_entries = [ dummy_repository_package_factory("numpy", "1.7.1", 2), dummy_repository_package_factory("scipy", "0.13.0", 1) ] remote, installed = create_repositories(remote_entries, installed_entries) # When with mock_print() as m: whats_new(remote, installed) # Then # FIXME: we splitlines and compared wo caring about order, as # the actual line order depends on dict ordering from # EggCollection.query_installed. assertCountEqual(self, m.value.splitlines(), r_output.splitlines())
def test_keys(self): # Given env = ControlledEnv() # When env["key1"] = "value1" env["key2"] = "value2" # Then assertCountEqual(self, env.keys(), list(os.environ.keys()) + ["key1", "key2"])
def test_repair_empty_dir(self): # Given egg_path = DUMMY_EGG self._install_egg_empty_egg_info_dir(egg_path) # When fixer = EggInfoDirFixer(egg_path, prefix=self.prefix) fixer.repair() # Then assertCountEqual(self, os.listdir(fixer.egg_info_dir), ["PKG-INFO", "egginst.json", "_info.json"])
def test_no_dependencies(self): # Given parser = PrettyPackageStringParser(V) package_string = "numpy 1.8.0-1" # When name, version, constraints = parser.parse(package_string) # Then self.assertEqual(name, "numpy") self.assertEqual(version, V("1.8.0-1")) assertCountEqual(self, constraints, set())
def test_repair_empty_dir(self): # Given egg_path = DUMMY_EGG self._install_egg_empty_egg_info_dir(egg_path) # When fixer = EggInfoDirFixer(egg_path, prefix=self.prefix) fixer.repair() # Then assertCountEqual(self, os.listdir(fixer.egg_info_dir), ["PKG-INFO", "egginst.json", "_info.json"])
def test_softlink(self): # Given path = ZIP_WITH_SOFTLINK # When/Then with mkdtemp() as d: with ZipFile(path) as zp: zp.extractall(d) paths = list_files(d) assertCountEqual(self, paths, [os.path.join("lib", "foo.so.1.3"), os.path.join("lib", "foo.so")]) self.assertTrue(os.path.islink(os.path.join(d, "lib", "foo.so")))
def test_simple_webservice(self): # Given store_location = "" body = _index_provider(store_location) # When packages = list(parse_index(json.loads(body), store_location)) # Then self.assertTrue(len(packages) > 0) assertCountEqual(self, [p.name for p in packages], ["numpy", "scipy"]) assertCountEqual(self, [p.full_version for p in packages], ["1.8.0-1", "0.14.0-1"])
def test_simple_webservice(self): # Given store_location = "" body = _index_provider(store_location) # When packages = list(parse_index(json.loads(body), store_location)) # Then self.assertTrue(len(packages) > 0) assertCountEqual(self, [p.name for p in packages], ["numpy", "scipy"]) assertCountEqual(self, [p.full_version for p in packages], ["1.8.0-1", "0.14.0-1"])
def test_what_provides_simple(self): # Given index_path = os.path.join(DATA_DIR, "numpy_index.json") repository = repository_from_index(index_path) requirement = Requirement._from_string("numpy >= 1.8.0") # When pool = Pool([repository]) candidates = pool.what_provides(requirement) versions = [candidate.full_version for candidate in candidates] # Then assertCountEqual(self, versions, ["1.8.0-1", "1.8.0-2", "1.8.0-3", "1.8.1-1"])
def test_simple_webservice(self): # Given store_url = "https://acme.com" repository_info = OldstyleRepositoryInfo(store_url) body = _index_provider(repository_info) # When packages = list(parse_index(json.loads(body), store_url)) # Then self.assertTrue(len(packages) > 0) assertCountEqual(self, [p.name for p in packages], ["numpy", "scipy"]) assertCountEqual(self, [p.full_version for p in packages], ["1.8.0-1", "0.14.0-1"])
def test_repair_file(self): # Given egg_path = DUMMY_EGG self._install_egg_file_egg_info_dir(egg_path) # When fixer = EggInfoDirFixer(egg_path, prefix=self.prefix) old_egg_info_file_md5 = compute_md5(fixer.egg_info_dir) fixer.repair() # Then assertCountEqual(self, os.listdir(fixer.egg_info_dir), ["PKG-INFO", "egginst.json", "_info.json"]) self.assertEqual(compute_md5(os.path.join(fixer.egg_info_dir, "PKG-INFO")), old_egg_info_file_md5)
def test_softlink(self): # Given path = ZIP_WITH_SOFTLINK # When/Then with mkdtemp() as d: with ZipFile(path) as zp: zp.extractall(d) paths = list_files(d) assertCountEqual(self, paths, [ os.path.join("lib", "foo.so.1.3"), os.path.join("lib", "foo.so") ]) self.assertTrue(os.path.islink(os.path.join(d, "lib", "foo.so")))
def test_repair_file(self): # Given egg_path = DUMMY_EGG self._install_egg_file_egg_info_dir(egg_path) # When fixer = EggInfoDirFixer(egg_path, prefix=self.prefix) old_egg_info_file_md5 = compute_md5(fixer.egg_info_dir) fixer.repair() # Then assertCountEqual(self, os.listdir(fixer.egg_info_dir), ["PKG-INFO", "egginst.json", "_info.json"]) self.assertEqual(compute_md5(os.path.join(fixer.egg_info_dir, "PKG-INFO")), old_egg_info_file_md5)
def test_find_packages_invalid_versions(self): # Given entries = [ dummy_installed_package_factory("numpy", "1.6.1", 1), dummy_installed_package_factory("numpy", "1.8k", 2), ] repository = Repository() for entry in entries: repository.add_package(entry) # When packages = repository.find_packages("numpy") # Then self.assertEqual(len(packages), 2) assertCountEqual(self, packages, entries)
def test_find_packages_invalid_versions(self): # Given entries = [ dummy_installed_package_factory("numpy", "1.6.1", 1), dummy_installed_package_factory("numpy", "1.8k", 2), ] repository = Repository() for entry in entries: repository.add_package(entry) # When packages = repository.find_packages("numpy") # Then self.assertEqual(len(packages), 2) assertCountEqual(self, packages, entries)
def test_sorted_packages_invalid(self): # Given entries = [ dummy_installed_package_factory("numpy", "1.6.1", 1), dummy_installed_package_factory("numpy", "1.8k", 2), ] repository = Repository() for entry in entries: repository.add_package(entry) # When packages = repository.find_sorted_packages("numpy") # Then self.assertEqual(len(packages), 2) assertCountEqual(self, [p.version for p in packages], [EnpkgVersion.from_string(v) for v in ("1.6.1-1", "1.8k-2")])
def test_sorted_packages_invalid(self): # Given entries = [ dummy_installed_package_factory("numpy", "1.6.1", 1), dummy_installed_package_factory("numpy", "1.8k", 2), ] repository = Repository() for entry in entries: repository.add_package(entry) # When packages = repository.find_sorted_packages("numpy") # Then self.assertEqual(len(packages), 2) assertCountEqual( self, [p.version for p in packages], [EnpkgVersion.from_string(v) for v in ("1.6.1-1", "1.8k-2")])
def test_delete_simple(self): # Given eggs = ["flake8-2.0.0-2.egg", "nose-1.3.0-1.egg", "nose-1.2.1-1.egg"] repository = Repository() for egg in eggs: path = os.path.join(_EGGINST_COMMON_DATA, egg) package = RepositoryPackageMetadata.from_egg(path) repository.add_package(package) path = os.path.join(_EGGINST_COMMON_DATA, "nose-1.3.0-1.egg") to_remove = PackageMetadata.from_egg(path) # When repository.delete_package(to_remove) # Then assertCountEqual(self, [p.key for p in repository.iter_packages()], ["flake8-2.0.0-2.egg", "nose-1.2.1-1.egg"])
def test_delete_simple(self): # Given eggs = ["flake8-2.0.0-2.egg", "nose-1.3.0-1.egg", "nose-1.2.1-1.egg"] repository = Repository() for egg in eggs: path = os.path.join(_EGGINST_COMMON_DATA, egg) package = RepositoryPackageMetadata.from_egg(path) repository.add_package(package) path = os.path.join(_EGGINST_COMMON_DATA, "nose-1.3.0-1.egg") to_remove = PackageMetadata.from_egg(path) # When repository.delete_package(to_remove) # Then assertCountEqual(self, [p.key for p in repository.iter_packages()], ["flake8-2.0.0-2.egg", "nose-1.2.1-1.egg"])
def test_update(self): # Given def repository_factory_from_egg(filenames): repository = Repository() for filename in filenames: path = os.path.join(_EGGINST_COMMON_DATA, filename) package = RemotePackageMetadata.from_egg(path) repository.add_package(package) return repository egg_set1 = ( "dummy-1.0.1-1.egg", "dummy_with_appinst-1.0.0-1.egg", "dummy_with_entry_points-1.0.0-1.egg", "dummy_with_proxy-1.3.40-3.egg", ) egg_set2 = ( "dummy_with_proxy_scripts-1.0.0-1.egg", "dummy_with_proxy_softlink-1.0.0-1.egg", "nose-1.2.1-1.egg", "nose-1.3.0-1.egg", "nose-1.3.0-2.egg", ) repository = Repository() repository1 = repository_factory_from_egg(egg_set1) repository2 = repository_factory_from_egg(egg_set2) # When repository.update(repository1) # Then assertCountEqual(self, iter(repository), iter(repository1)) # When repository.update(repository2) # Then assertCountEqual( self, iter(repository), itertools.chain(iter(repository1), iter(repository2)) )
def test_simple(self): # Given path = NOSE_1_3_0 r_paths = [ os.path.join("EGG-INFO", "entry_points.txt"), os.path.join("EGG-INFO", "PKG-INFO"), os.path.join("EGG-INFO", "spec", "depend"), os.path.join("EGG-INFO", "spec", "summary"), os.path.join("EGG-INFO", "usr", "share", "man", "man1", "nosetests.1"), ] # When with mkdtemp() as d: with ZipFile(path) as zp: zp.extractall(d) paths = list_files(d) # Then assertCountEqual(self, paths, r_paths)
def test_update_check_epd(self): # Given remote_entries = [dummy_repository_package_factory("EPD", "7.3", 1)] installed_entries = [dummy_installed_package_factory("EPD", "7.2", 1)] remote_repository, installed_repository = \ self._create_repositories(remote_entries, installed_entries) # When updates, EPD_update = updates_check(remote_repository, installed_repository) # Then self.assertEqual(updates, []) self.assertEqual(len(EPD_update), 1) epd_update0 = EPD_update[0] assertCountEqual(self, epd_update0.keys(), ["current", "update"]) self.assertEqual(epd_update0["current"].version, V("7.2-1")) self.assertEqual(epd_update0["update"].version, V("7.3-1"))
def test_update_check_epd(self): # Given remote_entries = [dummy_repository_package_factory("EPD", "7.3", 1)] installed_entries = [dummy_installed_package_factory("EPD", "7.2", 1)] remote_repository, installed_repository = \ self._create_repositories(remote_entries, installed_entries) # When updates, EPD_update = updates_check(remote_repository, installed_repository) # Then self.assertEqual(updates, []) self.assertEqual(len(EPD_update), 1) epd_update0 = EPD_update[0] assertCountEqual(self, epd_update0.keys(), ["current", "update"]) self.assertEqual(epd_update0["current"].version, V("7.2-1")) self.assertEqual(epd_update0["update"].version, V("7.3-1"))
def test_simple(self): # Given path = NOSE_1_3_0 r_paths = [ os.path.join("EGG-INFO", "entry_points.txt"), os.path.join("EGG-INFO", "PKG-INFO"), os.path.join("EGG-INFO", "spec", "depend"), os.path.join("EGG-INFO", "spec", "summary"), os.path.join("EGG-INFO", "usr", "share", "man", "man1", "nosetests.1"), ] # When with mkdtemp() as d: with ZipFile(path) as zp: zp.extractall(d) paths = list_files(d) # Then assertCountEqual(self, paths, r_paths)
def test_repair_dry_run(self): # Given broken_as_file_egg = DUMMY_EGG self._install_egg_file_egg_info_dir(broken_as_file_egg) broken_as_empty_dir = DUMMY_EGG_WITH_ENTRY_POINTS self._install_egg_empty_egg_info_dir(broken_as_empty_dir) non_broken_egg = DUMMY_EGG_WITH_APPINST self._install_egg(non_broken_egg) # When repair(self.prefix, True) # Then self.assertTrue(os.path.isfile(self._egg_info_path(broken_as_file_egg))) assertCountEqual(self, os.listdir(self._egg_info_path(broken_as_empty_dir)), []) assertCountEqual(self, os.listdir(self._egg_info_path(non_broken_egg)), ["PKG-INFO"])
def test_repair_dry_run(self): # Given broken_as_file_egg = DUMMY_EGG self._install_egg_file_egg_info_dir(broken_as_file_egg) broken_as_empty_dir = DUMMY_EGG_WITH_ENTRY_POINTS self._install_egg_empty_egg_info_dir(broken_as_empty_dir) non_broken_egg = DUMMY_EGG_WITH_APPINST self._install_egg(non_broken_egg) # When repair(self.prefix, True) # Then self.assertTrue(os.path.isfile(self._egg_info_path(broken_as_file_egg))) assertCountEqual(self, os.listdir(self._egg_info_path(broken_as_empty_dir)), []) assertCountEqual(self, os.listdir(self._egg_info_path(non_broken_egg)), ["PKG-INFO"])
def test_update_check_new_available(self): # Given remote_entries = [ dummy_repository_package_factory("dummy", "1.2.0", 1), dummy_repository_package_factory("dummy", "0.9.8", 1) ] installed_entries = [ dummy_installed_package_factory("dummy", "1.0.1", 1) ] remote_repository, installed_repository = \ self._create_repositories(remote_entries, installed_entries) # When updates, EPD_update = updates_check(remote_repository, installed_repository) # Then self.assertEqual(EPD_update, []) self.assertEqual(len(updates), 1) update0 = updates[0] assertCountEqual(self, update0.keys(), ["current", "update"]) self.assertEqual(update0["current"].version, V("1.0.1-1")) self.assertEqual(update0["update"].version, V("1.2.0-1"))
def test_update_check_new_available(self): # Given remote_entries = [ dummy_repository_package_factory("dummy", "1.2.0", 1), dummy_repository_package_factory("dummy", "0.9.8", 1) ] installed_entries = [ dummy_installed_package_factory("dummy", "1.0.1", 1) ] remote_repository, installed_repository = \ self._create_repositories(remote_entries, installed_entries) # When updates, EPD_update = updates_check(remote_repository, installed_repository) # Then self.assertEqual(EPD_update, []) self.assertEqual(len(updates), 1) update0 = updates[0] assertCountEqual(self, update0.keys(), ["current", "update"]) self.assertEqual(update0["current"].version, V("1.0.1-1")) self.assertEqual(update0["update"].version, V("1.2.0-1"))
def test_repair(self): # Given broken_as_file_egg = DUMMY_EGG self._install_egg_file_egg_info_dir(broken_as_file_egg) broken_as_empty_dir = DUMMY_EGG_WITH_ENTRY_POINTS self._install_egg_empty_egg_info_dir(broken_as_empty_dir) non_broken_egg = DUMMY_EGG_WITH_APPINST self._install_egg(non_broken_egg) # When repair(self.prefix, False) # Then assertCountEqual(self, os.listdir(self._egg_info_path(broken_as_file_egg)), ["PKG-INFO", "egginst.json", "_info.json"]) assertCountEqual(self, os.listdir(self._egg_info_path(broken_as_empty_dir)), ["entry_points.txt", "PKG-INFO", "egginst.json", "_info.json"]) assertCountEqual(self, os.listdir(self._egg_info_path(non_broken_egg)), ["PKG-INFO"])
def test_repair(self): # Given broken_as_file_egg = DUMMY_EGG self._install_egg_file_egg_info_dir(broken_as_file_egg) broken_as_empty_dir = DUMMY_EGG_WITH_ENTRY_POINTS self._install_egg_empty_egg_info_dir(broken_as_empty_dir) non_broken_egg = DUMMY_EGG_WITH_APPINST self._install_egg(non_broken_egg) # When repair(self.prefix, False) # Then assertCountEqual(self, os.listdir(self._egg_info_path(broken_as_file_egg)), ["PKG-INFO", "egginst.json", "_info.json"]) assertCountEqual(self, os.listdir(self._egg_info_path(broken_as_empty_dir)), ["entry_points.txt", "PKG-INFO", "egginst.json", "_info.json"]) assertCountEqual(self, os.listdir(self._egg_info_path(non_broken_egg)), ["PKG-INFO"])