def test_db_remove(self): tmp_db = self._make_tmp_db_path() db = DB(tmp_db) self.assertFalse(db.has_package('foo')) files = package_files(FCL([('f1', 'c1'), ('f2', 'c2')]), FCL([('e1', 'ec1'), ('e2', 'ec2')]), 'f_chk', 'ef_chk') reqs = None new_entry = PE('foo', '1.2.3', 1, 0, [], {}, files) db.add_package(new_entry) self.assertTrue(db.has_package('foo')) self.assertEqual(['foo'], db.list_all()) self.assertEqual(PE('foo', '1.2.3', 1, 0, [], {}, files), db.find_package('foo')) db.remove_package('foo') self.assertFalse(db.has_package('foo')) self.assertEqual([], db.list_all()) self.assertEqual(None, db.find_package('foo')) del db recreated_db = DB(tmp_db) self.assertFalse(recreated_db.has_package('foo')) self.assertEqual([], recreated_db.list_all()) self.assertEqual(None, recreated_db.find_package('foo'))
def test_package_files(self): db = DB(self._make_tmp_db_path()) db.add_package( PE( 'p1', '1', 0, 0, [], {}, package_files(FCL([('p1/f1', 'c1a'), ('p1/f2', 'c1b')]), FCL([('p1/e1a', 'ec1a'), ('p1/e2b', 'ec1b')]), 'f_chk', 'ef_chk'))) db.add_package( PE( 'p2', '1', 0, 0, [], {}, package_files(FCL([('p2/f1', 'c2a'), ('p2/f2', 'c2b')]), FCL([('p2/e2a', 'ec2a'), ('p2/e2b', 'ec2b')]), 'f_chk', 'ef_chk'))) db.add_package( PE( 'p3', '1', 0, 0, [], {}, package_files(FCL([('p3/f1', 'c3a'), ('p3/f2', 'c3b')]), FCL([('p3/e3a', 'ec3a'), ('p3/e2b', 'ec3b')]), 'f_chk', 'ef_chk'))) db.add_package( PE( 'p4', '1', 0, 0, [], {}, package_files(FCL([('p4/f1', 'c4a'), ('p4/f2', 'c4b')]), FCL([('p4/e4a', 'ec4a'), ('p4/e2b', 'ec4b')]), 'f_chk', 'ef_chk'))) db.add_package( PE( 'p5', '1', 0, 0, [], {}, package_files(FCL([('p5/f1', 'c5a'), ('p5/f2', 'c5b')]), FCL([('p5/e5a', 'ec5a'), ('p5/e2b', 'ec5b')]), 'f_chk', 'ef_chk'))) db.add_package( PE( 'p6', '1', 0, 0, [], {}, package_files(FCL([('p6/f1', 'c6a'), ('p6/f2', 'c6b')]), FCL([('p6/e6a', 'ec6a'), ('p6/e2b', 'ec6b')]), 'f_chk', 'ef_chk'))) self.assertEqual(set(['p1/f1', 'p1/f2']), db.files('p1')) self.assertEqual(set(['p1/e1a', 'p1/e2b']), db.env_files('p1')) self.assertEqual(set(['p2/f1', 'p2/f2']), db.files('p2')) self.assertEqual(set(['p2/e2a', 'p2/e2b']), db.env_files('p2')) self.assertEqual(set(['p3/f1', 'p3/f2']), db.files('p3')) self.assertEqual(set(['p3/e3a', 'p3/e2b']), db.env_files('p3')) self.assertEqual(set(['p4/f1', 'p4/f2']), db.files('p4')) self.assertEqual(set(['p4/e4a', 'p4/e2b']), db.env_files('p4')) self.assertEqual(set(['p5/f1', 'p5/f2']), db.files('p5')) self.assertEqual(set(['p5/e5a', 'p5/e2b']), db.env_files('p5')) self.assertEqual(set(['p6/f1', 'p6/f2']), db.files('p6')) self.assertEqual(set(['p6/e6a', 'p6/e2b']), db.env_files('p6'))
def test_packages_with_files(self): db = DB(self._make_tmp_db_path()) db.add_package( PE( 'p1', '1', 0, 0, [], {}, package_files(FCL([('p1/f1', 'c1'), ('p1/f2', 'c2')]), FCL([('e1', 'ec1'), ('e2', 'ec2')]), 'f_chk', 'ef_chk'))) db.add_package( PE( 'p2', '1', 0, 0, [], {}, package_files(FCL([('p2/f1', 'c1'), ('p2/f2', 'c2')]), FCL([('e1', 'ec1'), ('e2', 'ec2')]), 'f_chk', 'ef_chk'))) db.add_package( PE( 'p3', '1', 0, 0, [], {}, package_files(FCL([('p3/f1', 'c1'), ('p3/f2', 'c2')]), FCL([('e1', 'ec1'), ('e2', 'ec2')]), 'f_chk', 'ef_chk'))) db.add_package( PE( 'p4', '1', 0, 0, [], {}, package_files(FCL([('p4/f1', 'c1'), ('p4/f2', 'c2')]), FCL([('e1', 'ec1'), ('e2', 'ec2')]), 'f_chk', 'ef_chk'))) db.add_package( PE( 'p5', '1', 0, 0, [], {}, package_files(FCL([('p5/f1', 'c1'), ('p5/f2', 'c2')]), FCL([('e1', 'ec1'), ('e2', 'ec2')]), 'f_chk', 'ef_chk'))) db.add_package( PE( 'p6', '1', 0, 0, [], {}, package_files(FCL([('p6/f1', 'c1'), ('p6/f2', 'c2')]), FCL([('e1', 'ec1'), ('e2', 'ec2')]), 'f_chk', 'ef_chk'))) self.assertEqual([], db.packages_with_files(['notthere'])) self.assertEqual(['p1'], db.packages_with_files(['p1/f2'])) self.assertEqual(['p1', 'p2'], db.packages_with_files(['p1/f2', 'p2/f1'])) self.assertEqual(['p1', 'p2', 'p6'], db.packages_with_files(['p1/f2', 'p2/f1', 'p6/f1']))
def test_db_add(self): tmp_db = self._make_tmp_db_path() db = DB(tmp_db) self.assertFalse(db.has_package('foo')) files = package_files(FCL([('f1', 'c1'), ('f2', 'c2')]), FCL([('e1', 'ec1'), ('e2', 'ec2')]), 'f_chk', 'ef_chk') reqs = None new_entry = PE('foo', '1.2.3', 1, 0, [], {}, files) db.add_package(new_entry) self.assertTrue(db.has_package('foo')) self.assertEqual(['foo'], db.list_all()) self.assertEqual(['foo-1.2.3-1'], db.list_all(include_version=True)) self.assertEqual([PD.parse('foo-1.2.3-1')], db.descriptors()) self.assertEqual(PE('foo', '1.2.3', 1, 0, [], {}, files), db.find_package('foo')) del db recreated_db = DB(tmp_db) self.assertTrue(recreated_db.has_package('foo')) self.assertEqual(['foo'], recreated_db.list_all()) actual_package = recreated_db.find_package('foo') expected_package = PE('foo', '1.2.3', 1, 0, [], {}, files) self.assertEqual(expected_package, actual_package)
class test_package_db_entry(unit_test): TEST_REQUIREMENTS = RL.parse('foo >= 1.2.3-1 bar >= 6.6.6-1') TEST_FILES = package_files(FCL([ ('f1', 'fchk1'), ('f2', 'fchk2'), ]), FCL([ ('e1', 'echk1'), ('e2', 'echk2'), ]), 'files_chk', 'env_files_chk') TEST_PROPERTIES = {'p1': 'v1', 'p2': 6} TEST_ENTRY = PE('kiwi', '6.7.8', 2, 0, TEST_REQUIREMENTS, TEST_PROPERTIES, TEST_FILES) def test_descriptor(self): self.assertEqual( package_descriptor('kiwi', '6.7.8-2', self.TEST_PROPERTIES, self.TEST_REQUIREMENTS), self.TEST_ENTRY.descriptor) def test_to_json(self): self.maxDiff = None expected_json = '''\ { "_format_version": 2, "epoch": 0, "files": { "env_files": [ [ "e1", "echk1" ], [ "e2", "echk2" ] ], "env_files_checksum": "env_files_chk", "files": [ [ "f1", "fchk1" ], [ "f2", "fchk2" ] ], "files_checksum": "files_chk" }, "name": "kiwi", "properties": { "p1": "v1", "p2": 6 }, "requirements": [ "foo >= 1.2.3-1", "bar >= 6.6.6-1" ], "revision": 2, "version": "6.7.8" }''' self.assertMultiLineEqual(expected_json, self.TEST_ENTRY.to_json()) def test_parse_json_v2(self): json = '''\ { "_format_version": 2, "epoch": 0, "files": { "env_files": [ [ "e1", "echk1" ], [ "e2", "echk2" ] ], "env_files_checksum": "env_files_chk", "files": [ [ "f1", "fchk1" ], [ "f2", "fchk2" ] ], "files_checksum": "files_chk" }, "name": "kiwi", "properties": { "p1": "v1", "p2": 6 }, "requirements": [ "foo >= 1.2.3-1", "bar >= 6.6.6-1" ], "revision": 2, "version": "6.7.8" }''' actual_entry = PE.parse_json(json) self.maxDiff = None self.assertEqual(self.TEST_ENTRY, actual_entry) def test_to_simple_dict(self): expected = { '_format_version': 2, 'epoch': 0, 'files': { 'env_files': [['e1', 'echk1'], ['e2', 'echk2']], 'env_files_checksum': 'env_files_chk', 'files': [['f1', 'fchk1'], ['f2', 'fchk2']], 'files_checksum': 'files_chk' }, 'name': 'kiwi', 'properties': { 'p1': 'v1', 'p2': 6 }, 'requirements': ['foo >= 1.2.3-1', 'bar >= 6.6.6-1'], 'revision': 2, 'version': '6.7.8', } self.assertEqual(expected, self.TEST_ENTRY.to_simple_dict())
class test_artifact_db(unit_test): TEST_FILES = package_files(FCL([ ('f1', 'fchk1'), ('f2', 'fchk2'), ]), FCL([ ('e1', 'echk1'), ('e2', 'echk2'), ]), 'files_chk', 'env_files_chk') TEST_FILES2 = package_files(FCL([ ('g1', 'gchk1'), ('g2', 'gchk2'), ]), FCL([ ('h1', 'hchk1'), ('h2', 'hchk2'), ]), 'files2_chk', 'env_files2_chk') DEBUG = unit_test.DEBUG #DEBUG = True LINUX_BT = build_target('linux', 'ubuntu', '18', ('x86_64', ), 'release') MACOS_BT = build_target('macos', '', '10.13', ('x86_64', ), 'release') def _make_tmp_db_path(self): tmp_dir = temp_file.make_temp_dir(delete=not self.DEBUG) f = path.join(tmp_dir, 'db.sqlite') if self.DEBUG: self.spew('_make_tmp_db_path() => %s' % (f)) return f def test_db_create_empty(self): tmp_db = self._make_tmp_db_path() db = DB(tmp_db) self.assertEqual([], db.list_all_by_descriptor()) def test_db_recreate_empty(self): tmp_db = self._make_tmp_db_path() db = DB(tmp_db) self.assertEqual([], db.list_all_by_descriptor()) del db recreated_db = DB(tmp_db) self.assertEqual([], recreated_db.list_all_by_descriptor()) def test_add(self): tmp_db = self._make_tmp_db_path() db = DB(tmp_db) e = PM('foo-1.2.3.tar.gz', 'foo', '1.2.3', 1, 0, 'macos', 'release', ('x86_64', ), '', '', [], {}, self.TEST_FILES) adesc = e.artifact_descriptor self.assertFalse(db.has_artifact(adesc)) db.add_artifact(e) self.assertTrue(db.has_artifact(adesc)) def test_add_duplicate(self): tmp_db = self._make_tmp_db_path() db = DB(tmp_db) e = PM('foo-1.2.3.tar.gz', 'foo', '1.2.3', 1, 0, 'macos', 'release', ('x86_64', ), '', '', [], {}, self.TEST_FILES) adesc = e.artifact_descriptor self.assertFalse(db.has_artifact(adesc)) db.add_artifact(e) self.assertTrue(db.has_artifact(adesc)) with self.assertRaises(AlreadyInstalledError) as context: db.add_artifact(e) def test_remove(self): tmp_db = self._make_tmp_db_path() db = DB(tmp_db) e = PM('foo-1.2.3.tar.gz', 'foo', '1.2.3', 1, 0, 'macos', 'release', ('x86_64', ), '', '', [], {}, self.TEST_FILES) adesc = e.artifact_descriptor self.assertFalse(db.has_artifact(adesc)) db.add_artifact(e) self.assertTrue(db.has_artifact(adesc)) db.remove_artifact(adesc) self.assertFalse(db.has_artifact(adesc)) def test_readd(self): tmp_db = self._make_tmp_db_path() db = DB(tmp_db) e = PM('foo-1.2.3.tar.gz', 'foo', '1.2.3', 1, 0, 'macos', 'release', ('x86_64', ), '', '', [], {}, self.TEST_FILES) adesc = e.artifact_descriptor self.assertFalse(db.has_artifact(adesc)) db.add_artifact(e) self.assertTrue(db.has_artifact(adesc)) db.remove_artifact(adesc) self.assertFalse(db.has_artifact(adesc)) db.add_artifact(e) self.assertTrue(db.has_artifact(adesc)) db.remove_artifact(adesc) self.assertFalse(db.has_artifact(adesc)) def test_remove_not_installed(self): tmp_db = self._make_tmp_db_path() db = DB(tmp_db) e = PM('foo-1.2.3.tar.gz', 'foo', '1.2.3', 1, 0, 'macos', 'release', ('x86_64', ), '', '', [], {}, self.TEST_FILES) adesc = e.artifact_descriptor self.assertFalse(db.has_artifact(adesc)) with self.assertRaises(NotInstalledError) as context: db.remove_artifact(adesc) def test_replace(self): tmp_db = self._make_tmp_db_path() db = DB(tmp_db) e1 = PM('foo-1.2.3.tar.gz', 'foo', '1.2.3', 1, 0, 'macos', 'release', ('x86_64', ), '', '', [], {}, self.TEST_FILES) e2 = PM('foo-1.2.3.tar.gz', 'foo', '1.2.3', 1, 0, 'macos', 'release', ('x86_64', ), '', '', [], {}, self.TEST_FILES2) self.assertFalse(db.has_artifact(e1.artifact_descriptor)) db.add_artifact(e1) self.assertTrue(db.has_artifact(e1.artifact_descriptor)) self.assertEqual([e1.artifact_descriptor], db.list_all_by_descriptor()) db.replace_artifact(e2) self.assertEqual([e2.artifact_descriptor], db.list_all_by_descriptor()) def test_replace_not_installed(self): tmp_db = self._make_tmp_db_path() db = DB(tmp_db) e1 = PM('foo-1.2.3.tar.gz', 'foo', '1.2.3', 1, 0, 'macos', 'release', ('x86_64', ), '', '', [], {}, self.TEST_FILES) e2 = PM('foo-1.2.3.tar.gz', 'foo', '1.2.3', 1, 0, 'macos', 'release', ('x86_64', ), '', '', [], {}, self.TEST_FILES2) self.assertFalse(db.has_artifact(e1.artifact_descriptor)) with self.assertRaises(NotInstalledError) as context: db.replace_artifact(e2) def test_find(self): tmp_db = self._make_tmp_db_path() db = DB(tmp_db) e = PM('foo-1.2.3.tar.gz', 'foo', '1.2.3', 1, 0, 'macos', 'release', ('x86_64', ), '', '', [], {}, self.TEST_FILES) adesc = e.artifact_descriptor self.assertEqual(None, db.find_artifact(adesc)) db.add_artifact(e) r = db.find_artifact(adesc) print('R: %s' % (str(r))) self.assertEqual(e, r) db.remove_artifact(adesc) self.assertEqual(None, db.find_artifact(adesc)) def test_get(self): tmp_db = self._make_tmp_db_path() db = DB(tmp_db) e = PM('foo-1.2.3.tar.gz', 'foo', '1.2.3', 1, 0, 'macos', 'release', ('x86_64', ), '', '', [], {}, self.TEST_FILES) adesc = e.artifact_descriptor with self.assertRaises(NotInstalledError) as context: db.get_artifact(adesc) db.add_artifact(e) self.assertEqual(e, db.get_artifact(adesc)) db.remove_artifact(adesc) with self.assertRaises(NotInstalledError) as context: db.get_artifact(adesc) def test_list_all_by_descriptor(self): tmp_db = self._make_tmp_db_path() db = DB(tmp_db) e1 = PM('foo-1.2.3.tar.gz', 'foo', '1.2.3', 1, 0, 'macos', 'release', ('x86_64', ), '', '', [], {}, self.TEST_FILES) e2 = PM('bar-5.6.7.tar.gz', 'bar', '5.6.7', 1, 0, 'linux', 'release', ('x86_64', ), '', '', [], {}, self.TEST_FILES2) db.add_artifact(e1) self.assertEqual([e1.artifact_descriptor], db.list_all_by_descriptor()) db.add_artifact(e2) self.assertEqual([e2.artifact_descriptor, e1.artifact_descriptor], db.list_all_by_descriptor()) def test_list_all_by_descriptor_with_build_target(self): tmp_db = self._make_tmp_db_path() db = DB(tmp_db) e1 = PM('foo-1.2.3.tar.gz', 'foo', '1.2.3', 1, 0, 'macos', 'release', ('x86_64', ), '', '', [], {}, self.TEST_FILES) e2 = PM('bar-5.6.7.tar.gz', 'bar', '5.6.7', 1, 0, 'linux', 'release', ('x86_64', ), '', '', [], {}, self.TEST_FILES2) db.add_artifact(e1) db.add_artifact(e2) self.assertEqual([e2.artifact_descriptor], db.list_all_by_descriptor(build_target=self.LINUX_BT)) self.assertEqual([e1.artifact_descriptor], db.list_all_by_descriptor(build_target=self.MACOS_BT)) def test_list_all_by_metadata(self): tmp_db = self._make_tmp_db_path() db = DB(tmp_db) e1 = PM('foo-1.2.3.tar.gz', 'foo', '1.2.3', 1, 0, 'macos', 'release', ('x86_64', ), '', '', [], {}, self.TEST_FILES) e2 = PM('bar-5.6.7.tar.gz', 'bar', '5.6.7', 1, 0, 'linux', 'release', ('x86_64', ), '', '', [], {}, self.TEST_FILES2) db.add_artifact(e1) self.assertEqual([e1], db.list_all_by_metadata()) db.add_artifact(e2) self.assertEqual([e2, e1], db.list_all_by_metadata()) def test_list_all_by_metadata_with_build_target(self): tmp_db = self._make_tmp_db_path() db = DB(tmp_db) e1 = PM('foo-1.2.3.tar.gz', 'foo', '1.2.3', 1, 0, 'macos', 'release', ('x86_64', ), '', '', [], {}, self.TEST_FILES) e2 = PM('bar-5.6.7.tar.gz', 'bar', '5.6.7', 1, 0, 'linux', 'release', ('x86_64', ), '', '', [], {}, self.TEST_FILES2) db.add_artifact(e1) db.add_artifact(e2) self.assertEqual([e2], db.list_all_by_metadata(build_target=self.LINUX_BT)) self.assertEqual([e1], db.list_all_by_metadata(build_target=self.MACOS_BT)) def test_list_all_by_package_descriptor(self): tmp_db = self._make_tmp_db_path() db = DB(tmp_db) e1 = PM('foo-1.2.3.tar.gz', 'foo', '1.2.3', 1, 0, 'macos', 'release', ('x86_64', ), '', '', [], {}, self.TEST_FILES) e2 = PM('bar-5.6.7.tar.gz', 'bar', '5.6.7', 1, 0, 'linux', 'release', ('x86_64', ), '', '', [], {}, self.TEST_FILES2) pd1 = PD('foo', '1.2.3-1') pd2 = PD('bar', '5.6.7-1') db.add_artifact(e1) self.assertEqual([pd1], db.list_all_by_package_descriptor()) db.add_artifact(e2) self.assertEqual([pd2, pd1], db.list_all_by_package_descriptor()) def test_list_all_by_package_descriptor_with_build_target(self): tmp_db = self._make_tmp_db_path() db = DB(tmp_db) e1 = PM('foo-1.2.3.tar.gz', 'foo', '1.2.3', 1, 0, 'macos', 'release', ('x86_64', ), '', '', [], {}, self.TEST_FILES) e2 = PM('bar-5.6.7.tar.gz', 'bar', '5.6.7', 1, 0, 'linux', 'release', ('x86_64', ), '', '', [], {}, self.TEST_FILES2) pd1 = PD('foo', '1.2.3-1') pd2 = PD('bar', '5.6.7-1') db.add_artifact(e1) db.add_artifact(e2) self.assertEqual( [pd2], db.list_all_by_package_descriptor(build_target=self.LINUX_BT)) self.assertEqual( [pd1], db.list_all_by_package_descriptor(build_target=self.MACOS_BT))
class unit_test_packages(object): __test__ = False FILES = package_files([], []) TEST_PACKAGES = { 'water-1.0.0-0': PM('', 'water', '1.0.0', 0, 0, 'macos', 'release', 'x86_64', '', '', None, {}, FILES), 'water-1.0.0-1': PM('', 'water', '1.0.0', 1, 0, 'macos', 'release', 'x86_64', '', '', None, {}, FILES), 'water-1.0.0-2': PM('', 'water', '1.0.0', 2, 0, 'macos', 'release', 'x86_64', '', '', None, {}, FILES), 'fiber-1.0.0-0': PM('', 'fiber', '1.0.0', 0, 0, 'macos', 'release', 'x86_64', '', '', None, {}, FILES), 'citrus-1.0.0-0': PM('', 'citrus', '1.0.0', 2, 0, 'macos', 'release', 'x86_64', '', '', None, {}, FILES), 'fructose-3.4.5-6': PM('', 'fructose', '3.4.5', 6, 0, 'macos', 'release', 'x86_64', '', '', None, {}, FILES), 'mercury-1.2.8-0': PM('', 'mercury', '1.2.8', 0, 0, 'macos', 'release', 'x86_64', '', '', None, {}, FILES), 'mercury-1.2.8-1': PM('', 'mercury', '1.2.8', 1, 0, 'macos', 'release', 'x86_64', '', '', None, {}, FILES), 'mercury-1.2.9-0': PM('', 'mercury', '1.2.9', 0, 0, 'macos', 'release', 'x86_64', '', '', None, {}, FILES), 'mercury_conflict-3.2.1-0': PM('', 'mercury_conflict', '3.2.1', 0, 0, 'macos', 'release', 'x86_64', '', '', None, {}, FILES), 'arsenic-1.2.9-0': PM('', 'arsenic', '1.2.9', 0, 0, 'macos', 'release', 'x86_64', '', '', None, {}, FILES), 'arsenic-1.2.9-1': PM('', 'arsenic', '1.2.9', 1, 0, 'macos', 'release', 'x86_64', '', '', None, {}, FILES), 'arsenic-1.2.10-0': PM('', 'arsenic', '1.2.10', 0, 0, 'macos', 'release', 'x86_64', '', '', None, {}, FILES), 'apple-1.2.3-1': PM('', 'apple', '1.2.3', 1, 0, 'macos', 'release', 'x86_64', '', '', 'fruit >= 1.0.0', {}, FILES), 'fruit-1.0.0-0': PM('', 'fruit', '1.0.0', 0, 0, 'macos', 'release', 'x86_64', '', '', 'fructose >= 3.4.5-6 fiber >= 1.0.0-0 water >= 1.0.0-0', {}, FILES), 'pear-1.2.3-1': PM('', 'pear', '1.2.3', 1, 0, 'macos', 'release', 'x86_64', '', '', 'fruit >= 1.0.0', {}, FILES), 'orange-6.5.4-3': PM('', 'orange', '6.5.4', 3, 0, 'macos', 'release', 'x86_64', '', '', 'fruit >= 1.0.0-0 citrus >= 1.0.0-0', {}, FILES), 'orange_juice-1.4.5-0': PM('', 'orange_juice', '1.4.5', 0, 0, 'macos', 'release', 'x86_64', '', '', 'orange >= 6.5.4-3', {}, FILES), 'pear_juice-6.6.6-0': PM('', 'pear_juice', '6.6.6', 0, 0, 'macos', 'release', 'x86_64', '', '', 'pear >= 1.2.3-1', {}, FILES), 'smoothie-1.0.0-0': PM('', 'smoothie', '1.0.0', 0, 0, 'macos', 'release', 'x86_64', '', '', 'orange >= 6.5.4-3 pear >= 1.2.3-1 apple >= 1.2.3-1', {}, FILES), } def __init__(self, desc, pm, system, level, distro, distro_version, debug = False): self.desc = desc self.pm = PM(pm.filename, pm.name, pm.version, pm.revision, pm.epoch, system, level, pm.arch, distro, distro_version, pm.requirements, pm.properties, pm.files) self.system = system self.level = level self.debug = debug def create_package(self, root_dir): package = self.make_test_package(self.pm, debug = self.debug) artifact_path = package.metadata.package_descriptor.artifact_path(package.metadata.build_target, False) target_path = path.join(root_dir, artifact_path) file_util.rename(package.tarball, target_path) if self.debug: print(('DEBUG: test_package.create_package() package=%s' % (target_path))) return target_path test_package = namedtuple('test_package', 'tarball,metadata') @classmethod def make_test_package(clazz, pm, debug = False): pkg_config_pc_contnet = clazz.make_pkg_config_pc_content(pm.name, pm.build_version) script_content = '#!/bin/bash\necho %s-%s\nexit 0\n' % (pm.name, pm.build_version) name = pm.name.replace('_conflict', '') items = [ clazz.make_temp_item(name, pm.version, '_foo.txt', 'docs'), clazz.make_temp_item(name, pm.version, '_bar.txt', 'docs'), clazz.make_temp_item(name, pm.version, '_script.sh', 'bin', content = script_content, mode = 0o755), temp_item('lib/pkgconfig/%s.pc' % (name), content = pkg_config_pc_contnet) ] tmp_stage_dir = temp_file.make_temp_dir(delete = not debug) tmp_stage_files_dir = path.join(tmp_stage_dir, 'files') temp_file.write_temp_files(tmp_stage_files_dir, items) tmp_tarball = temp_file.make_temp_file(prefix = pm.package_descriptor.full_name, suffix = '.tar.gz', delete = not debug) package.create_package(tmp_tarball, pm.package_descriptor, pm.build_target, tmp_stage_dir) return clazz.test_package(tmp_tarball, pm) _PKG_CONFIG_PC_TEMPLATE = ''' prefix=${REBUILD_PACKAGE_PREFIX} exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir=${prefix}/include Name: @NAME@ Description: @NAME@ Version: @VERSION@ Libs: -L${libdir} @LIBS@ Libs.private: @LIBS_PRIVATE@ Cflags: -I${includedir} ''' @classmethod def make_pkg_config_pc_content(clazz, name, version): replacemetns = { '@NAME@': name, '@VERSION@': version.upstream_version, '@LIBS@': '-l%s' % (name), '@LIBS_PRIVATE@': '-lpriv', } return string_util.replace(clazz._PKG_CONFIG_PC_TEMPLATE, replacemetns) @classmethod def make_temp_item(clazz, name, version, suffix, location, content = None, mode = None): filename = '%s/%s%s' % (location, name, suffix) if not content: content = 'package=%s-%s\nfilename=%s' % (name, version, filename) return temp_item(filename, content = content, mode = mode) @classmethod def make_simple_tarball(clazz, desc, templates, debug = False): tmp_dir = temp_file.make_temp_dir(delete = not debug) pm = templates[desc] tp = clazz(desc, pm, 'macos', 'release', '', '10.10', debug = debug) return tp.create_package(tmp_dir) @classmethod def make_test_packages(clazz, packages, root_dir, debug = False): for system in [ 'macos', 'linux' ]: for level in [ 'release', 'debug' ]: for desc, pm in packages.items(): if system == 'linux': distro = 'ubuntu' distro_version = '18' else: distro = '' distro_version = '10.10' tp = clazz(desc, pm, system, level, distro, distro_version, debug = debug) tp.create_package(root_dir) @classmethod def publish_artifacts(clazz, am): artifacts = file_find.find_fnmatch(am.root_dir, [ '*.tar.gz' ], relative = False) for artifact in artifacts: tmp_artifact = temp_file.make_temp_file() file_util.copy(artifact, tmp_artifact) file_util.remove(artifact) p = package(tmp_artifact) am.publish(tmp_artifact, p.metadata.build_target, False) @classmethod def make_water(clazz, debug = False): return clazz.make_simple_tarball('water-1.0.0-0', clazz.TEST_PACKAGES, debug = debug) @classmethod def make_fiber(clazz, debug = False): return clazz.make_simple_tarball('fiber-1.0.0-0', clazz.TEST_PACKAGES, debug = debug) @classmethod def make_apple(clazz, debug = False): return clazz.make_simple_tarball('apple-1.2.3-1', clazz.TEST_PACKAGES, debug = debug) @classmethod def make_fruit(clazz, debug = False): return clazz.make_simple_tarball('fruit-1.0.0-0', clazz.TEST_PACKAGES, debug = debug) @classmethod def make_orange(clazz, debug = False): return clazz.make_simple_tarball('orange-6.5.4-3', clazz.TEST_PACKAGES, debug = debug) @classmethod def make_fructose(clazz, debug = False): return clazz.make_simple_tarball('fructose-3.4.5-6', clazz.TEST_PACKAGES, debug = debug) @classmethod def make_mercury(clazz, debug = False): return clazz.make_simple_tarball('mercury-1.2.8-0', clazz.TEST_PACKAGES, debug = debug) @classmethod def make_mercury_conflict(clazz, debug = False): return clazz.make_simple_tarball('mercury_conflict-3.2.1-0', clazz.TEST_PACKAGES, debug = debug) @classmethod def make_arsenic(clazz, debug = False): return clazz.make_simple_tarball('arsenic-1.2.9-0', clazz.TEST_PACKAGES, debug = debug) _TEST_PACKAGE_RECIPES='''