Skip to content

Commit e0cc8c0

Browse files
dlatypovshuahkh
authored andcommitted
kunit: tool: delete kunit_parser.TestResult type
The `log` field is unused, and the `status` field is accessible via `test.status`. So it's simpler to just return the main `Test` object directly. And since we're no longer returning a namedtuple, which has no type annotations, this hopefully means typecheckers are better equipped to find any errors. Signed-off-by: Daniel Latypov <[email protected]> Reviewed-by: Brendan Higgins <[email protected]> Signed-off-by: Shuah Khan <[email protected]>
1 parent db16798 commit e0cc8c0

File tree

4 files changed

+29
-35
lines changed

4 files changed

+29
-35
lines changed

tools/testing/kunit/kunit.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ def exec_tests(linux: kunit_kernel.LinuxSourceTree, request: KunitExecRequest) -
172172
test_end = time.time()
173173
exec_time += test_end - test_start
174174

175-
test_counts.add_subtest_counts(result.result.test.counts)
175+
test_counts.add_subtest_counts(result.result.counts)
176176

177177
if len(filter_globs) == 1 and test_counts.crashed > 0:
178178
bd = request.build_dir
@@ -181,7 +181,7 @@ def exec_tests(linux: kunit_kernel.LinuxSourceTree, request: KunitExecRequest) -
181181
bd, bd, kunit_kernel.get_outfile_path(bd), bd, sys.argv[0]))
182182

183183
kunit_status = _map_to_overall_status(test_counts.get_status())
184-
return KunitResult(status=kunit_status, result=result.result, elapsed_time=exec_time)
184+
return KunitResult(status=kunit_status, result=result, elapsed_time=exec_time)
185185

186186
def _map_to_overall_status(test_status: kunit_parser.TestStatus) -> KunitStatus:
187187
if test_status in (kunit_parser.TestStatus.SUCCESS, kunit_parser.TestStatus.SKIPPED):
@@ -192,14 +192,12 @@ def _map_to_overall_status(test_status: kunit_parser.TestStatus) -> KunitStatus:
192192
def parse_tests(request: KunitParseRequest, input_data: Iterable[str]) -> KunitResult:
193193
parse_start = time.time()
194194

195-
test_result = kunit_parser.TestResult(kunit_parser.TestStatus.SUCCESS,
196-
kunit_parser.Test(),
197-
'Tests not Parsed.')
195+
test_result = kunit_parser.Test()
198196

199197
if request.raw_output:
200198
# Treat unparsed results as one passing test.
201-
test_result.test.status = kunit_parser.TestStatus.SUCCESS
202-
test_result.test.counts.passed = 1
199+
test_result.status = kunit_parser.TestStatus.SUCCESS
200+
test_result.counts.passed = 1
203201

204202
output: Iterable[str] = input_data
205203
if request.raw_output == 'all':
@@ -217,7 +215,7 @@ def parse_tests(request: KunitParseRequest, input_data: Iterable[str]) -> KunitR
217215

218216
if request.json:
219217
json_obj = kunit_json.get_json_result(
220-
test_result=test_result,
218+
test=test_result,
221219
def_config='kunit_defconfig',
222220
build_dir=request.build_dir,
223221
json_path=request.json)

tools/testing/kunit/kunit_json.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
import kunit_parser
1313

14-
from kunit_parser import Test, TestResult, TestStatus
14+
from kunit_parser import Test, TestStatus
1515
from typing import Any, Dict, Optional
1616

1717
JsonObj = Dict[str, Any]
@@ -50,9 +50,9 @@ def _get_group_json(test: Test, def_config: str,
5050
}
5151
return test_group
5252

53-
def get_json_result(test_result: TestResult, def_config: str,
53+
def get_json_result(test: Test, def_config: str,
5454
build_dir: Optional[str], json_path: str) -> str:
55-
test_group = _get_group_json(test_result.test, def_config, build_dir)
55+
test_group = _get_group_json(test, def_config, build_dir)
5656
test_group["name"] = "KUnit Test Group"
5757
json_obj = json.dumps(test_group, indent=4)
5858
if json_path != 'stdout':

tools/testing/kunit/kunit_parser.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,11 @@
1212
from __future__ import annotations
1313
import re
1414

15-
from collections import namedtuple
1615
from datetime import datetime
1716
from enum import Enum, auto
1817
from functools import reduce
1918
from typing import Iterable, Iterator, List, Optional, Tuple
2019

21-
TestResult = namedtuple('TestResult', ['status','test','log'])
22-
2320
class Test(object):
2421
"""
2522
A class to represent a test parsed from KTAP results. All KTAP
@@ -805,7 +802,7 @@ def parse_test(lines: LineStream, expected_num: int, log: List[str]) -> Test:
805802
print_test_result(test)
806803
return test
807804

808-
def parse_run_tests(kernel_output: Iterable[str]) -> TestResult:
805+
def parse_run_tests(kernel_output: Iterable[str]) -> Test:
809806
"""
810807
Using kernel output, extract KTAP lines, parse the lines for test
811808
results and print condensed test results and summary line .
@@ -814,8 +811,7 @@ def parse_run_tests(kernel_output: Iterable[str]) -> TestResult:
814811
kernel_output - Iterable object contains lines of kernel output
815812
816813
Return:
817-
TestResult - Tuple containg status of main test object, main test
818-
object with all subtests, and log of all KTAP lines.
814+
Test - the main test object with all subtests.
819815
"""
820816
print_with_timestamp(DIVIDER)
821817
lines = extract_tap_lines(kernel_output)
@@ -829,4 +825,4 @@ def parse_run_tests(kernel_output: Iterable[str]) -> TestResult:
829825
test.status = test.counts.get_status()
830826
print_with_timestamp(DIVIDER)
831827
print_summary_line(test)
832-
return TestResult(test.status, test, lines)
828+
return test

tools/testing/kunit/kunit_tool_test.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ def test_no_header(self):
178178
with open(empty_log) as file:
179179
result = kunit_parser.parse_run_tests(
180180
kunit_parser.extract_tap_lines(file.readlines()))
181-
self.assertEqual(0, len(result.test.subtests))
181+
self.assertEqual(0, len(result.subtests))
182182
self.assertEqual(
183183
kunit_parser.TestStatus.FAILURE_TO_PARSE_TESTS,
184184
result.status)
@@ -191,9 +191,9 @@ def test_missing_test_plan(self):
191191
kunit_parser.extract_tap_lines(
192192
file.readlines()))
193193
# A missing test plan is not an error.
194-
self.assertEqual(0, result.test.counts.errors)
194+
self.assertEqual(0, result.counts.errors)
195195
# All tests should be accounted for.
196-
self.assertEqual(10, result.test.counts.total())
196+
self.assertEqual(10, result.counts.total())
197197
self.assertEqual(
198198
kunit_parser.TestStatus.SUCCESS,
199199
result.status)
@@ -203,7 +203,7 @@ def test_no_tests(self):
203203
with open(header_log) as file:
204204
result = kunit_parser.parse_run_tests(
205205
kunit_parser.extract_tap_lines(file.readlines()))
206-
self.assertEqual(0, len(result.test.subtests))
206+
self.assertEqual(0, len(result.subtests))
207207
self.assertEqual(
208208
kunit_parser.TestStatus.NO_TESTS,
209209
result.status)
@@ -213,11 +213,11 @@ def test_no_tests_no_plan(self):
213213
with open(no_plan_log) as file:
214214
result = kunit_parser.parse_run_tests(
215215
kunit_parser.extract_tap_lines(file.readlines()))
216-
self.assertEqual(0, len(result.test.subtests[0].subtests[0].subtests))
216+
self.assertEqual(0, len(result.subtests[0].subtests[0].subtests))
217217
self.assertEqual(
218218
kunit_parser.TestStatus.NO_TESTS,
219-
result.test.subtests[0].subtests[0].status)
220-
self.assertEqual(1, result.test.counts.errors)
219+
result.subtests[0].subtests[0].status)
220+
self.assertEqual(1, result.counts.errors)
221221

222222

223223
def test_no_kunit_output(self):
@@ -228,7 +228,7 @@ def test_no_kunit_output(self):
228228
kunit_parser.extract_tap_lines(file.readlines()))
229229
print_mock.assert_any_call(StrContains('invalid KTAP input!'))
230230
print_mock.stop()
231-
self.assertEqual(0, len(result.test.subtests))
231+
self.assertEqual(0, len(result.subtests))
232232

233233
def test_crashed_test(self):
234234
crashed_log = test_data_path('test_is_test_passed-crash.log')
@@ -269,10 +269,10 @@ def test_ignores_hyphen(self):
269269
result.status)
270270
self.assertEqual(
271271
"sysctl_test",
272-
result.test.subtests[0].name)
272+
result.subtests[0].name)
273273
self.assertEqual(
274274
"example",
275-
result.test.subtests[1].name)
275+
result.subtests[1].name)
276276
file.close()
277277

278278

@@ -283,7 +283,7 @@ def test_ignores_prefix_printk_time(self):
283283
self.assertEqual(
284284
kunit_parser.TestStatus.SUCCESS,
285285
result.status)
286-
self.assertEqual('kunit-resource-test', result.test.subtests[0].name)
286+
self.assertEqual('kunit-resource-test', result.subtests[0].name)
287287

288288
def test_ignores_multiple_prefixes(self):
289289
prefix_log = test_data_path('test_multiple_prefixes.log')
@@ -292,7 +292,7 @@ def test_ignores_multiple_prefixes(self):
292292
self.assertEqual(
293293
kunit_parser.TestStatus.SUCCESS,
294294
result.status)
295-
self.assertEqual('kunit-resource-test', result.test.subtests[0].name)
295+
self.assertEqual('kunit-resource-test', result.subtests[0].name)
296296

297297
def test_prefix_mixed_kernel_output(self):
298298
mixed_prefix_log = test_data_path('test_interrupted_tap_output.log')
@@ -301,7 +301,7 @@ def test_prefix_mixed_kernel_output(self):
301301
self.assertEqual(
302302
kunit_parser.TestStatus.SUCCESS,
303303
result.status)
304-
self.assertEqual('kunit-resource-test', result.test.subtests[0].name)
304+
self.assertEqual('kunit-resource-test', result.subtests[0].name)
305305

306306
def test_prefix_poundsign(self):
307307
pound_log = test_data_path('test_pound_sign.log')
@@ -310,7 +310,7 @@ def test_prefix_poundsign(self):
310310
self.assertEqual(
311311
kunit_parser.TestStatus.SUCCESS,
312312
result.status)
313-
self.assertEqual('kunit-resource-test', result.test.subtests[0].name)
313+
self.assertEqual('kunit-resource-test', result.subtests[0].name)
314314

315315
def test_kernel_panic_end(self):
316316
panic_log = test_data_path('test_kernel_panic_interrupt.log')
@@ -319,7 +319,7 @@ def test_kernel_panic_end(self):
319319
self.assertEqual(
320320
kunit_parser.TestStatus.TEST_CRASHED,
321321
result.status)
322-
self.assertEqual('kunit-resource-test', result.test.subtests[0].name)
322+
self.assertEqual('kunit-resource-test', result.subtests[0].name)
323323

324324
def test_pound_no_prefix(self):
325325
pound_log = test_data_path('test_pound_no_prefix.log')
@@ -328,7 +328,7 @@ def test_pound_no_prefix(self):
328328
self.assertEqual(
329329
kunit_parser.TestStatus.SUCCESS,
330330
result.status)
331-
self.assertEqual('kunit-resource-test', result.test.subtests[0].name)
331+
self.assertEqual('kunit-resource-test', result.subtests[0].name)
332332

333333
def line_stream_from_strs(strs: Iterable[str]) -> kunit_parser.LineStream:
334334
return kunit_parser.LineStream(enumerate(strs, start=1))
@@ -467,7 +467,7 @@ def _json_for(self, log_file):
467467
with open(test_data_path(log_file)) as file:
468468
test_result = kunit_parser.parse_run_tests(file)
469469
json_obj = kunit_json.get_json_result(
470-
test_result=test_result,
470+
test=test_result,
471471
def_config='kunit_defconfig',
472472
build_dir=None,
473473
json_path='stdout')

0 commit comments

Comments
 (0)