Gentoo Archives: gentoo-commits

From: Zac Medico <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:master commit in: lib/portage/tests/resolver/, lib/portage/tests/dbapi/
Date: Sat, 02 May 2020 22:03:40
Message-Id: 1588456850.e4b3d6e57855ae635e0d9fffddb195d8f819e7c9.zmedico@gentoo
1 commit: e4b3d6e57855ae635e0d9fffddb195d8f819e7c9
2 Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
3 AuthorDate: Sat May 2 21:41:30 2020 +0000
4 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
5 CommitDate: Sat May 2 22:00:50 2020 +0000
6 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=e4b3d6e5
7
8 AuxdbTestCase: test eclass inheritance
9
10 Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>
11
12 lib/portage/tests/dbapi/test_auxdb.py | 32 +++++++++++++++++++-----
13 lib/portage/tests/resolver/ResolverPlayground.py | 16 +++++++++---
14 2 files changed, 38 insertions(+), 10 deletions(-)
15
16 diff --git a/lib/portage/tests/dbapi/test_auxdb.py b/lib/portage/tests/dbapi/test_auxdb.py
17 index cfcabc8bb..85d64c15e 100644
18 --- a/lib/portage/tests/dbapi/test_auxdb.py
19 +++ b/lib/portage/tests/dbapi/test_auxdb.py
20 @@ -34,24 +34,44 @@ class AuxdbTestCase(TestCase):
21 def _test_mod(self, auxdbmodule):
22 ebuilds = {
23 "cat/A-1": {
24 - "EAPI": "7"
25 + "EAPI": "7",
26 + "MISC_CONTENT": "inherit foo",
27 },
28 "cat/B-1": {
29 - "EAPI": "7"
30 + "EAPI": "7",
31 + "MISC_CONTENT": "inherit foo",
32 },
33 }
34
35 - playground = ResolverPlayground(ebuilds=ebuilds,
36 + ebuild_inherited = frozenset(["bar", "foo"])
37 + eclass_defined_phases = "prepare"
38 + eclass_depend = "bar/foo"
39 +
40 + eclasses = {
41 + "foo": (
42 + "inherit bar",
43 + ),
44 + "bar": (
45 + "EXPORT_FUNCTIONS src_prepare",
46 + "DEPEND=\"{}\"".format(eclass_depend),
47 + "bar_src_prepare() { default; }",
48 + ),
49 + }
50 +
51 + playground = ResolverPlayground(ebuilds=ebuilds, eclasses=eclasses,
52 user_config={'modules': ('portdbapi.auxdbmodule = %s' % auxdbmodule,)})
53
54 portdb = playground.trees[playground.eroot]["porttree"].dbapi
55
56 loop = asyncio._wrap_loop()
57 - loop.run_until_complete(self._test_mod_async(ebuilds, portdb))
58 + loop.run_until_complete(self._test_mod_async(ebuilds, ebuild_inherited, eclass_defined_phases, eclass_depend, portdb))
59
60 @coroutine
61 - def _test_mod_async(self, ebuilds, portdb):
62 + def _test_mod_async(self, ebuilds, ebuild_inherited, eclass_defined_phases, eclass_depend, portdb):
63
64 for cpv, metadata in ebuilds.items():
65 - eapi, = yield portdb.async_aux_get(cpv, ['EAPI'])
66 + defined_phases, depend, eapi, inherited = yield portdb.async_aux_get(cpv, ['DEFINED_PHASES', 'DEPEND', 'EAPI', 'INHERITED'])
67 + self.assertEqual(defined_phases, eclass_defined_phases)
68 + self.assertEqual(depend, eclass_depend)
69 self.assertEqual(eapi, metadata['EAPI'])
70 + self.assertEqual(frozenset(inherited.split()), ebuild_inherited)
71
72 diff --git a/lib/portage/tests/resolver/ResolverPlayground.py b/lib/portage/tests/resolver/ResolverPlayground.py
73 index 0456ce2e2..98831e000 100644
74 --- a/lib/portage/tests/resolver/ResolverPlayground.py
75 +++ b/lib/portage/tests/resolver/ResolverPlayground.py
76 @@ -67,7 +67,7 @@ class ResolverPlayground(object):
77 """
78
79 def __init__(self, ebuilds={}, binpkgs={}, installed={}, profile={}, repo_configs={}, \
80 - user_config={}, sets={}, world=[], world_sets=[], distfiles={},
81 + user_config={}, sets={}, world=[], world_sets=[], distfiles={}, eclasses={},
82 eprefix=None, targetroot=False, debug=False):
83 """
84 ebuilds: cpv -> metadata mapping simulating available ebuilds.
85 @@ -159,7 +159,7 @@ class ResolverPlayground(object):
86 self._create_ebuilds(ebuilds)
87 self._create_binpkgs(binpkgs)
88 self._create_installed(installed)
89 - self._create_profile(ebuilds, installed, profile, repo_configs, user_config, sets)
90 + self._create_profile(ebuilds, eclasses, installed, profile, repo_configs, user_config, sets)
91 self._create_world(world, world_sets)
92
93 self.settings, self.trees = self._load_config()
94 @@ -346,7 +346,7 @@ class ResolverPlayground(object):
95 with open(ebuild_path, 'rb') as inputfile:
96 f.write(inputfile.read())
97
98 - def _create_profile(self, ebuilds, installed, profile, repo_configs, user_config, sets):
99 + def _create_profile(self, ebuilds, eclasses, installed, profile, repo_configs, user_config, sets):
100
101 user_config_dir = os.path.join(self.eroot, USER_CONFIG_PATH)
102
103 @@ -404,7 +404,15 @@ class ResolverPlayground(object):
104 f.write("masters =\n")
105
106 #Create $profile_dir/eclass (we fail to digest the ebuilds if it's not there)
107 - os.makedirs(os.path.join(repo_dir, "eclass"))
108 + eclass_dir = os.path.join(repo_dir, "eclass")
109 + os.makedirs(eclass_dir)
110 +
111 + for eclass_name, eclass_content in eclasses.items():
112 + with open(os.path.join(eclass_dir, "{}.eclass".format(eclass_name)), 'wt') as f:
113 + if isinstance(eclass_content, basestring):
114 + eclass_content = [eclass_content]
115 + for line in eclass_content:
116 + f.write("{}\n".format(line))
117
118 # Temporarily write empty value of masters until it becomes default.
119 if not repo_config or "layout.conf" not in repo_config: