| # Copyright 2017 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| import os |
| import unittest |
| |
| import tradefed_utils |
| |
| |
| def _load_data(filename): |
| """Loads the test data of the given file name.""" |
| with open(os.path.join(os.path.dirname(os.path.realpath(__file__)), |
| 'tradefed_utils_unittest_data', filename), 'r') as f: |
| return f.read() |
| |
| |
| class TradefedTestTest(unittest.TestCase): |
| """Unittest for tradefed_utils.""" |
| |
| def test_parse_tradefed_result(self): |
| """Test for parse_tradefed_result.""" |
| |
| waivers = set([ |
| 'android.app.cts.SystemFeaturesTest#testUsbAccessory', |
| 'android.widget.cts.GridViewTest#testSetNumColumns', |
| ]) |
| |
| # b/35605415 and b/36520623 |
| # http://pantheon/storage/browser/chromeos-autotest-results/108103986-chromeos-test/ |
| # CTS: Tradefed may split a module to multiple chunks. |
| # Besides, the module name may not end with "TestCases". |
| waived, _ = tradefed_utils.parse_tradefed_result( |
| _load_data('CtsHostsideNetworkTests.txt'), |
| waivers=waivers) |
| self.assertEquals(0, len(waived)) |
| |
| # b/35530394 |
| # http://pantheon/storage/browser/chromeos-autotest-results/108291418-chromeos-test/ |
| # Crashed, but the automatic retry by tradefed executed the rest. |
| waived, _ = tradefed_utils.parse_tradefed_result( |
| _load_data('CtsMediaTestCases.txt'), |
| waivers=waivers) |
| self.assertEquals(0, len(waived)) |
| |
| # b/35530394 |
| # http://pantheon/storage/browser/chromeos-autotest-results/106540705-chromeos-test/ |
| # Crashed in the middle, and the device didn't came back. |
| waived, _ = tradefed_utils.parse_tradefed_result( |
| _load_data('CtsSecurityTestCases.txt'), |
| waivers=waivers) |
| self.assertEquals(0, len(waived)) |
| |
| # b/36629187 |
| # http://pantheon/storage/browser/chromeos-autotest-results/108855595-chromeos-test/ |
| # Crashed in the middle. Tradefed decided not to continue. |
| waived, _ = tradefed_utils.parse_tradefed_result( |
| _load_data('CtsViewTestCases.txt'), |
| waivers=waivers) |
| self.assertEquals(0, len(waived)) |
| |
| # b/36375690 |
| # http://pantheon/storage/browser/chromeos-autotest-results/109040174-chromeos-test/ |
| # Mixture of real failures and waivers. |
| waived, _ = tradefed_utils.parse_tradefed_result( |
| _load_data('CtsAppTestCases.txt'), |
| waivers=waivers) |
| self.assertEquals(1, len(waived)) |
| # ... and the retry of the above failing iteration. |
| waived, _ = tradefed_utils.parse_tradefed_result( |
| _load_data('CtsAppTestCases-retry.txt'), |
| waivers=waivers) |
| self.assertEquals(1, len(waived)) |
| |
| # http://pantheon/storage/browser/chromeos-autotest-results/116875512-chromeos-test/ |
| # When a test case crashed during teardown, tradefed prints the "fail" |
| # message twice. Tolerate it and still return an (inconsistent) count. |
| waived, _ = tradefed_utils.parse_tradefed_result( |
| _load_data('CtsWidgetTestCases.txt'), |
| waivers=waivers) |
| self.assertEquals(1, len(waived)) |
| |
| # http://pantheon/storage/browser/chromeos-autotest-results/117914707-chromeos-test/ |
| # When a test case unrecoverably crashed during teardown, tradefed |
| # prints the "fail" and failure summary message twice. Tolerate it. |
| waived, _ = tradefed_utils.parse_tradefed_result( |
| _load_data('CtsPrintTestCases.txt'), |
| waivers=waivers) |
| self.assertEquals(0, len(waived)) |
| |
| gts_waivers = set([ |
| ('com.google.android.placement.gts.CoreGmsAppsTest#' + |
| 'testCoreGmsAppsPreloaded'), |
| ('com.google.android.placement.gts.CoreGmsAppsTest#' + |
| 'testGoogleDuoPreloaded'), |
| 'com.google.android.placement.gts.UiPlacementTest#testPlayStore' |
| ]) |
| |
| # crbug.com/748116 |
| # http://pantheon/storage/browser/chromeos-autotest-results/130080763-chromeos-test/ |
| # 3 ABIS: x86, x86_64, and armeabi-v7a |
| waived, _ = tradefed_utils.parse_tradefed_result( |
| _load_data('GtsPlacementTestCases.txt'), |
| waivers=gts_waivers) |
| self.assertEquals(9, len(waived)) |
| |
| # b/64095702 |
| # http://pantheon/storage/browser/chromeos-autotest-results/130211812-chromeos-test/ |
| # The result of the last chunk not reported by tradefed. |
| # The actual dEQP log is too big, hence the test data here is trimmed. |
| waived, _ = tradefed_utils.parse_tradefed_result( |
| _load_data('CtsDeqpTestCases-trimmed.txt'), |
| waivers=waivers) |
| self.assertEquals(0, len(waived)) |
| |
| # b/80160772 |
| # http://pantheon/storage/browser/chromeos-autotest-results/201962931-kkanchi/ |
| # The newer tradefed requires different parsing to count waivers. |
| waived, _ = tradefed_utils.parse_tradefed_result( |
| _load_data('CtsAppTestCases_P_simplified.txt'), |
| waivers=waivers) |
| self.assertEquals(1, len(waived)) |
| |
| # b/66899135, tradefed may reported inaccuratly with `list results`. |
| # Check if summary section shows that the result is inacurrate. |
| _, accurate = tradefed_utils.parse_tradefed_result( |
| _load_data('CtsAppTestCases_P_simplified.txt'), |
| waivers=waivers) |
| self.assertTrue(accurate) |
| |
| _, accurate = tradefed_utils.parse_tradefed_result( |
| _load_data('CtsDeqpTestCases-trimmed-inaccurate.txt'), |
| waivers=waivers) |
| self.assertFalse(accurate) |
| |
| def test_get_test_result_xml_path(self): |
| path = tradefed_utils.get_test_result_xml_path(os.path.join( |
| os.path.dirname(os.path.realpath(__file__)), |
| 'tradefed_utils_unittest_data', 'results')) |
| self.assertEqual(path, os.path.join( |
| os.path.dirname(os.path.realpath(__file__)), |
| 'tradefed_utils_unittest_data', 'results', '2019.11.07_10.14.55', |
| 'test_result.xml')) |
| |
| # assertNoRaises |
| tradefed_utils.get_test_result_xml_path(os.path.join( |
| os.path.dirname(os.path.realpath(__file__)), |
| 'tradefed_utils_unittest_data', 'not_exist')) |
| |
| def test_parse_tradefed_testresults_xml_no_failure(self): |
| waived, accurate = tradefed_utils.parse_tradefed_testresults_xml( |
| os.path.join(os.path.dirname(os.path.realpath(__file__)), |
| 'tradefed_utils_unittest_data', 'test_result.xml')) |
| self.assertEquals(0, len(waived)) |
| self.assertTrue(accurate) |
| |
| def test_parse_tradefed_testresult_xml_waivers(self): |
| waived, accurate = tradefed_utils.parse_tradefed_testresults_xml( |
| os.path.join(os.path.dirname(os.path.realpath(__file__)), |
| 'tradefed_utils_unittest_data', |
| 'gtsplacement_test_result.xml')) |
| self.assertEquals(0, len(waived)) |
| |
| waivers = set([ |
| 'com.google.android.media.gts.WidevineDashPolicyTests#testL1RenewalDelay5S', |
| 'com.google.android.media.gts.MediaDrmTest#testWidevineApi28', |
| 'com.google.android.media.gts.WidevineGenericOpsTests#testL3', |
| 'com.google.android.media.gts.WidevineDashPolicyTests#testL3RenewalDelay5S', |
| 'com.google.android.media.gts.WidevineH264PlaybackTests#testCbc1L3WithUHD30', |
| 'com.google.android.media.gts.WidevineH264PlaybackTests#testCbcsL3WithUHD30', |
| 'com.google.android.media.gts.WidevineH264PlaybackTests#testCbc1L1WithUHD30', |
| 'com.google.android.media.gts.WidevineDashPolicyTests#testL3RenewalDelay13S', |
| 'com.google.android.gts.backup.BackupHostTest#testGmsBackupTransportIsDefault', |
| 'com.google.android.placement.gts.CoreGmsAppsTest#testGoogleDuoPreloaded', |
| 'com.google.android.placement.gts.CoreGmsAppsTest#testCoreGmsAppsPreloaded', |
| 'com.google.android.media.gts.WidevineH264PlaybackTests#testCbcsL1WithUHD30']) |
| waived, accurate = tradefed_utils.parse_tradefed_testresults_xml( |
| os.path.join(os.path.dirname(os.path.realpath(__file__)), |
| 'tradefed_utils_unittest_data', |
| 'gtsplacement_test_result.xml'), waivers=waivers) |
| self.assertEquals(4, len(waived)) |
| |
| def test_get_perf_metrics_from_test_result_xml(self): |
| perf_result = tradefed_utils.get_perf_metrics_from_test_result_xml( |
| os.path.join(os.path.dirname(os.path.realpath(__file__)), |
| 'tradefed_utils_unittest_data', 'test_result.xml'), |
| os.path.join('/', 'resultsdir')) |
| expected_result = [ |
| {'units': 'ms', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.AudioRecordTest' |
| '#testAudioRecordLocalMono16Bit', |
| 'value': '7.1688596491228065', 'higher_is_better': False}, |
| {'units': 'ms', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.AudioRecordTest' |
| '#testAudioRecordLocalMono16BitShort', |
| 'value': '2.5416666666666665', 'higher_is_better': False}, |
| {'units': 'ms', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.AudioRecordTest' |
| '#testAudioRecordLocalNonblockingStereoFloat', |
| 'value': '1.75', 'higher_is_better': False}, |
| {'units': 'ms', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.AudioRecordTest' |
| '#testAudioRecordMonoFloat', |
| 'value': '12.958881578947368', 'higher_is_better': False}, |
| {'units': 'ms', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.AudioRecordTest' |
| '#testAudioRecordResamplerMono8Bit', |
| 'value': '0.0', 'higher_is_better': False}, |
| {'units': 'ms', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.AudioRecordTest' |
| '#testAudioRecordResamplerStereo8Bit', |
| 'value': '3.5', 'higher_is_better': False}, |
| {'units': 'ms', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.AudioRecordTest' |
| '#testAudioRecordStereo16Bit', |
| 'value': '3.5', 'higher_is_better': False}, |
| {'units': 'ms', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.AudioTrackTest' |
| '#testFastTimestamp', |
| 'value': '0.1547618955373764', 'higher_is_better': False}, |
| {'units': 'ms', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.AudioTrackTest' |
| '#testGetTimestamp', |
| 'value': '0.1490119844675064', 'higher_is_better': False}, |
| {'units': 'ms', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.AudioTrack_ListenerTest' |
| '#testAudioTrackCallback', |
| 'value': '9.347127739984884', 'higher_is_better': False}, |
| {'units': 'ms', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.AudioTrack_ListenerTest' |
| '#testAudioTrackCallbackWithHandler', |
| 'value': '7.776177955844914', 'higher_is_better': False}, |
| {'units': 'ms', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.AudioTrack_ListenerTest' |
| '#testStaticAudioTrackCallback', |
| 'value': '7.776177955844914', 'higher_is_better': False}, |
| {'units': 'ms', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.AudioTrack_ListenerTest' |
| '#testStaticAudioTrackCallbackWithHandler', |
| 'value': '9.514361300075587', 'higher_is_better': False}, |
| {'units': 'count', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.DecoderTest' |
| '#testH264ColorAspects', |
| 'value': '1.0', 'higher_is_better': True}, |
| {'units': 'count', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.DecoderTest' |
| '#testH265ColorAspects', |
| 'value': '1.0', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testAvcGoog0Perf0320x0240', |
| 'value': '580.1607045151507', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testAvcGoog0Perf0720x0480', |
| 'value': '244.18184010611358', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testAvcGoog0Perf1280x0720', |
| 'value': '70.96290491279275', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testAvcGoog0Perf1920x1080', |
| 'value': '31.299613935451564', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testAvcOther0Perf0320x0240', |
| 'value': '1079.6843075197307', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testAvcOther0Perf0720x0480', |
| 'value': '873.7785366761784', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testAvcOther0Perf1280x0720', |
| 'value': '664.6463289568261', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testAvcOther0Perf1920x1080', |
| 'value': '382.10811352923474', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testH263Goog0Perf0176x0144', |
| 'value': '1511.3027429644353', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testHevcGoog0Perf0352x0288', |
| 'value': '768.8737453173384', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testHevcGoog0Perf0640x0360', |
| 'value': '353.7226028743237', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testHevcGoog0Perf0720x0480', |
| 'value': '319.3122874170939', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testHevcGoog0Perf1280x0720', |
| 'value': '120.89218432028369', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testMpeg4Goog0Perf0176x0144', |
| 'value': '1851.890822618321', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testVp8Goog0Perf0320x0180', |
| 'value': '1087.946513466716', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testVp8Goog0Perf0640x0360', |
| 'value': '410.18461316281423', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testVp8Goog0Perf1920x1080', |
| 'value': '36.26433070651982', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testVp8Other0Perf0320x0180', |
| 'value': '1066.7819511702078', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testVp8Other0Perf0640x0360', |
| 'value': '930.261434505189', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testVp8Other0Perf1280x0720', |
| 'value': '720.4170603577236', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testVp8Other0Perf1920x1080', |
| 'value': '377.55742437554915', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testVp9Goog0Perf0320x0180', |
| 'value': '988.6158776121617', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testVp9Goog0Perf0640x0360', |
| 'value': '409.8162085338674', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testVp9Goog0Perf1280x0720', |
| 'value': '147.75847359424512', 'higher_is_better': True}, |
| {'units': 'fps', |
| 'resultsdir': '/resultsdir/tests/CTS.CtsMediaTestCases', |
| 'description': 'android.media.cts.VideoDecoderPerfTest' |
| '#testVp9Goog0Perf1920x1080', |
| 'value': '83.95677136649255', 'higher_is_better': True} |
| ] |
| self.assertListEqual(list(perf_result), expected_result) |
| |
| perf_result = tradefed_utils.get_perf_metrics_from_test_result_xml( |
| os.path.join(os.path.dirname(os.path.realpath(__file__)), |
| 'tradefed_utils_unittest_data', |
| 'malformed_test_result.xml'), |
| os.path.join('/', 'resultsdir')) |
| self.assertListEqual(list(perf_result), []) |
| |
| # assertNoRaises |
| tradefed_utils.get_perf_metrics_from_test_result_xml( |
| os.path.join(os.path.dirname(os.path.realpath(__file__)), |
| 'tradefed_utils_unittest_data', |
| 'not_exist'), |
| os.path.join('/', 'resultsdir')) |
| |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |