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: |