# Copyright (C) 2023 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import io import textwrap import unittest from typing import TextIO from pretty import Aggregation from pretty import summarize_helper class PrettyTest(unittest.TestCase): metrics: TextIO def setUp(self) -> None: self.metrics = io.StringIO( textwrap.dedent( """\ build_result,build_type,description,targets,a,ab,ac SUCCESS,B1,WARMUP,nothing,1,10,1:00 SUCCESS,B1,do it,something,10,200, SUCCESS,B1,rebuild-1,something,4,,1:04 SUCCESS,B1,rebuild-2,something,6,55,1:07 TEST_FAILURE,B2,do it,something,601,, TEST_FAILURE,B2,do it,nothing,3600,, TEST_FAILURE,B2,undo it,something,240,, FAILED,B3,,,70000,70000,7:00:00 """ ) ) def test_summarize_single_prop(self): result = summarize_helper(self.metrics, "a$", Aggregation.MAX) self.assertEqual(len(result), 1) self.assertEqual( textwrap.dedent( """\ cuj,targets,B1,B2 WARMUP,nothing,1, do it,something,10,601 do it,nothing,,3600 rebuild,something,6[N=2], undo it,something,,240 """ ), result["a"], ) def test_summarize_multiple_props(self): result = summarize_helper(self.metrics, "a.$", Aggregation.MEDIAN) self.assertEqual(len(result), 2) self.assertEqual( textwrap.dedent( """\ cuj,targets,B1,B2 WARMUP,nothing,10, do it,something,200, do it,nothing,, rebuild,something,55, undo it,something,, """ ), result["ab"], ) self.assertEqual( textwrap.dedent( """\ cuj,targets,B1,B2 WARMUP,nothing,01:00, do it,something,, do it,nothing,, rebuild,something,01:06[N=2], undo it,something,, """ ), result["ac"], ) def test_summarize_loose_pattern(self): result = summarize_helper(self.metrics, "^a", Aggregation.MEDIAN) self.assertEqual(len(result), 3) if __name__ == "__main__": unittest.main()