Skip to content

Commit 76f9a02

Browse files
LukaszMrugalajhedberg
authored andcommitted
scripts: tests: twister: Domains tests fix
PR zephyrproject-rtos#63195 has changed how Domains work without triggering necessary tests, thus breaking them. This commit fixes the domains tests. Signed-off-by: Lukasz Mrugala <[email protected]>
1 parent 2fcf4e3 commit 76f9a02

File tree

1 file changed

+104
-67
lines changed

1 file changed

+104
-67
lines changed

scripts/tests/twister/test_domains.py

+104-67
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,9 @@
2323
('', False, 1, ['domains.yaml file not found: domains.yaml']),
2424
(
2525
"""
26-
default: some default
27-
build_dir: my/dir
28-
domains:
29-
- name: some default
30-
build_dir: dir/2
31-
- name: another
32-
build_dir: dir/3
33-
flash_order: I don\'t think this is correct
34-
""",
35-
True, 1, ['ERROR: Malformed yaml in file: domains.yaml']
36-
),
37-
(
38-
"""
3926
default: None
4027
build_dir: some/dir
28+
domains: []
4129
""",
4230
True, None, []
4331
),
@@ -46,7 +34,7 @@
4634
@pytest.mark.parametrize(
4735
'f_contents, f_exists, exit_code, expected_logs',
4836
TESTDATA_1,
49-
ids=['no file', 'schema error', 'valid']
37+
ids=['no file', 'valid']
5038
)
5139
def test_from_file(caplog, f_contents, f_exists, exit_code, expected_logs):
5240
def mock_open(*args, **kwargs):
@@ -71,43 +59,51 @@ def mock_open(*args, **kwargs):
7159

7260

7361
TESTDATA_2 = [
74-
({'build_dir': None, 'default': None}, True, None, [], None, {}),
7562
(
76-
{
77-
'build_dir': os.path.join('build', 'dir'),
78-
'domains': [
79-
{
80-
'name': 'a domain',
81-
'build_dir': os.path.join('dir', '1')
82-
},
83-
{
84-
'name': 'default_domain',
85-
'build_dir': os.path.join('dir', '2')
86-
}
87-
],
88-
'default': 'default_domain',
89-
'flash_order': ['default_domain', 'a domain']
90-
},
91-
False,
92-
os.path.join('build', 'dir'),
93-
[('default_domain', os.path.join('dir', '2')),
94-
('a domain', os.path.join('dir', '1'))],
95-
('default_domain', os.path.join('dir', '2')),
96-
{'a domain': ('a domain', os.path.join('dir', '1')),
97-
'default_domain': ('default_domain', os.path.join('dir', '2'))}
63+
"""
64+
default: some default
65+
build_dir: my/dir
66+
domains:
67+
- name: some default
68+
build_dir: dir/2
69+
- name: another
70+
build_dir: dir/3
71+
flash_order: I don\'t think this is correct
72+
""",
73+
1, None, None, None, None
74+
),
75+
(
76+
"""
77+
build_dir: build/dir
78+
domains:
79+
- name: a domain
80+
build_dir: dir/1
81+
- name: default_domain
82+
build_dir: dir/2
83+
default: default_domain
84+
flash_order:
85+
- default_domain
86+
- a domain
87+
""",
88+
None,
89+
'build/dir',
90+
[('default_domain', 'dir/2'), ('a domain', 'dir/1')],
91+
('default_domain', 'dir/2'),
92+
{'a domain': ('a domain', 'dir/1'),
93+
'default_domain': ('default_domain', 'dir/2')}
9894
),
9995
]
10096

10197
@pytest.mark.parametrize(
102-
'data, expect_warning, expected_build_dir, expected_flash_order,' \
98+
'data, exit_code, expected_build_dir, expected_flash_order,' \
10399
' expected_default, expected_domains',
104100
TESTDATA_2,
105-
ids=['required only', 'with default domain']
101+
ids=['invalid', 'valid']
106102
)
107-
def test_from_data(
103+
def test_from_yaml(
108104
caplog,
109105
data,
110-
expect_warning,
106+
exit_code,
111107
expected_build_dir,
112108
expected_flash_order,
113109
expected_default,
@@ -116,15 +112,13 @@ def test_from_data(
116112
def mock_domain(name, build_dir, *args, **kwargs):
117113
return name, build_dir
118114

119-
warning_log = "no domains defined; this probably won't work"
115+
with mock.patch('domains.Domain', side_effect=mock_domain), \
116+
pytest.raises(SystemExit) if exit_code else nullcontext() as exit_st:
117+
doms = domains.Domains.from_yaml(data)
120118

121-
with mock.patch('domains.Domain', side_effect=mock_domain):
122-
doms = domains.Domains.from_data(data)
123-
124-
if expect_warning:
125-
assert warning_log in caplog.text
126-
else:
127-
assert warning_log not in caplog.text
119+
if exit_code:
120+
assert str(exit_st.value) == str(exit_code)
121+
return
128122

129123
assert doms.get_default_domain() == expected_default
130124
assert doms.get_top_build_dir() == expected_build_dir
@@ -139,50 +133,93 @@ def mock_domain(name, build_dir, *args, **kwargs):
139133
(
140134
None,
141135
True,
142-
None,
143-
[],
144136
[('some', os.path.join('dir', '2')),
145137
('order', os.path.join('dir', '1'))]
146138
),
147139
(
148140
None,
149141
False,
150-
None,
151-
[],
152142
[('order', os.path.join('dir', '1')),
153143
('some', os.path.join('dir', '2'))]
154144
),
155-
(
156-
['some', 'other'],
157-
False,
158-
1,
159-
['domain other not found, valid domains are: order, some'],
160-
[('some', os.path.join('dir', '2')),
161-
('order', os.path.join('dir', '1'))]
162-
),
163145
(
164146
['some'],
165147
False,
166-
None,
167-
[],
168148
[('some', os.path.join('dir', '2'))]
169149
),
170150
]
171151

172152
@pytest.mark.parametrize(
173-
'names, default_flash_order, exit_code, expected_logs, expected_result',
153+
'names, default_flash_order, expected_result',
174154
TESTDATA_3,
175-
ids=['order only', 'no parameters', 'domain not found', 'valid']
155+
ids=['order only', 'no parameters', 'valid']
176156
)
177157
def test_get_domains(
178158
caplog,
179159
names,
180160
default_flash_order,
161+
expected_result
162+
):
163+
doms = domains.Domains(
164+
"""
165+
domains:
166+
- name: dummy
167+
build_dir: dummy
168+
default: dummy
169+
build_dir: dummy
170+
"""
171+
)
172+
doms._flash_order = [
173+
('some', os.path.join('dir', '2')),
174+
('order', os.path.join('dir', '1'))
175+
]
176+
doms._domains = {
177+
'order': ('order', os.path.join('dir', '1')),
178+
'some': ('some', os.path.join('dir', '2'))
179+
}
180+
181+
result = doms.get_domains(names, default_flash_order)
182+
183+
assert result == expected_result
184+
185+
186+
187+
TESTDATA_3 = [
188+
(
189+
'other',
190+
1,
191+
['domain "other" not found, valid domains are: order, some'],
192+
None
193+
),
194+
(
195+
'some',
196+
None,
197+
[],
198+
('some', os.path.join('dir', '2'))
199+
),
200+
]
201+
202+
@pytest.mark.parametrize(
203+
'name, exit_code, expected_logs, expected_result',
204+
TESTDATA_3,
205+
ids=['domain not found', 'valid']
206+
)
207+
def test_get_domain(
208+
caplog,
209+
name,
181210
exit_code,
182211
expected_logs,
183212
expected_result
184213
):
185-
doms = domains.Domains({'domains': [], 'default': None})
214+
doms = domains.Domains(
215+
"""
216+
domains:
217+
- name: dummy
218+
build_dir: dummy
219+
default: dummy
220+
build_dir: dummy
221+
"""
222+
)
186223
doms._flash_order = [
187224
('some', os.path.join('dir', '2')),
188225
('order', os.path.join('dir', '1'))
@@ -193,7 +230,7 @@ def test_get_domains(
193230
}
194231

195232
with pytest.raises(SystemExit) if exit_code else nullcontext() as s_exit:
196-
result = doms.get_domains(names, default_flash_order)
233+
result = doms.get_domain(name)
197234

198235
assert all([log in caplog.text for log in expected_logs])
199236

0 commit comments

Comments
 (0)