xref: /aosp_15_r20/build/bazel/scripts/incremental_build/pretty_test.py (revision 7594170e27e0732bc44b93d1440d87a54b6ffe7c)
1*7594170eSAndroid Build Coastguard Worker# Copyright (C) 2023 The Android Open Source Project
2*7594170eSAndroid Build Coastguard Worker#
3*7594170eSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
4*7594170eSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
5*7594170eSAndroid Build Coastguard Worker# You may obtain a copy of the License at
6*7594170eSAndroid Build Coastguard Worker#
7*7594170eSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
8*7594170eSAndroid Build Coastguard Worker#
9*7594170eSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*7594170eSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
11*7594170eSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*7594170eSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
13*7594170eSAndroid Build Coastguard Worker# limitations under the License.
14*7594170eSAndroid Build Coastguard Workerimport io
15*7594170eSAndroid Build Coastguard Workerimport textwrap
16*7594170eSAndroid Build Coastguard Workerimport unittest
17*7594170eSAndroid Build Coastguard Workerfrom typing import TextIO
18*7594170eSAndroid Build Coastguard Worker
19*7594170eSAndroid Build Coastguard Workerfrom pretty import Aggregation
20*7594170eSAndroid Build Coastguard Workerfrom pretty import summarize_helper
21*7594170eSAndroid Build Coastguard Worker
22*7594170eSAndroid Build Coastguard Worker
23*7594170eSAndroid Build Coastguard Workerclass PrettyTest(unittest.TestCase):
24*7594170eSAndroid Build Coastguard Worker    metrics: TextIO
25*7594170eSAndroid Build Coastguard Worker
26*7594170eSAndroid Build Coastguard Worker    def setUp(self) -> None:
27*7594170eSAndroid Build Coastguard Worker        self.metrics = io.StringIO(
28*7594170eSAndroid Build Coastguard Worker            textwrap.dedent(
29*7594170eSAndroid Build Coastguard Worker                """\
30*7594170eSAndroid Build Coastguard Worker                build_result,build_type,description,targets,a,ab,ac
31*7594170eSAndroid Build Coastguard Worker                SUCCESS,B1,WARMUP,nothing,1,10,1:00
32*7594170eSAndroid Build Coastguard Worker                SUCCESS,B1,do it,something,10,200,
33*7594170eSAndroid Build Coastguard Worker                SUCCESS,B1,rebuild-1,something,4,,1:04
34*7594170eSAndroid Build Coastguard Worker                SUCCESS,B1,rebuild-2,something,6,55,1:07
35*7594170eSAndroid Build Coastguard Worker                TEST_FAILURE,B2,do it,something,601,,
36*7594170eSAndroid Build Coastguard Worker                TEST_FAILURE,B2,do it,nothing,3600,,
37*7594170eSAndroid Build Coastguard Worker                TEST_FAILURE,B2,undo it,something,240,,
38*7594170eSAndroid Build Coastguard Worker                FAILED,B3,,,70000,70000,7:00:00
39*7594170eSAndroid Build Coastguard Worker                """
40*7594170eSAndroid Build Coastguard Worker            )
41*7594170eSAndroid Build Coastguard Worker        )
42*7594170eSAndroid Build Coastguard Worker
43*7594170eSAndroid Build Coastguard Worker    def test_summarize_single_prop(self):
44*7594170eSAndroid Build Coastguard Worker        result = summarize_helper(self.metrics, "a$", Aggregation.MAX)
45*7594170eSAndroid Build Coastguard Worker        self.assertEqual(len(result), 1)
46*7594170eSAndroid Build Coastguard Worker        self.assertEqual(
47*7594170eSAndroid Build Coastguard Worker            textwrap.dedent(
48*7594170eSAndroid Build Coastguard Worker                """\
49*7594170eSAndroid Build Coastguard Worker                cuj,targets,B1,B2
50*7594170eSAndroid Build Coastguard Worker                WARMUP,nothing,1,
51*7594170eSAndroid Build Coastguard Worker                do it,something,10,601
52*7594170eSAndroid Build Coastguard Worker                do it,nothing,,3600
53*7594170eSAndroid Build Coastguard Worker                rebuild,something,6[N=2],
54*7594170eSAndroid Build Coastguard Worker                undo it,something,,240
55*7594170eSAndroid Build Coastguard Worker                """
56*7594170eSAndroid Build Coastguard Worker            ),
57*7594170eSAndroid Build Coastguard Worker            result["a"],
58*7594170eSAndroid Build Coastguard Worker        )
59*7594170eSAndroid Build Coastguard Worker
60*7594170eSAndroid Build Coastguard Worker    def test_summarize_multiple_props(self):
61*7594170eSAndroid Build Coastguard Worker        result = summarize_helper(self.metrics, "a.$", Aggregation.MEDIAN)
62*7594170eSAndroid Build Coastguard Worker        self.assertEqual(len(result), 2)
63*7594170eSAndroid Build Coastguard Worker        self.assertEqual(
64*7594170eSAndroid Build Coastguard Worker            textwrap.dedent(
65*7594170eSAndroid Build Coastguard Worker                """\
66*7594170eSAndroid Build Coastguard Worker                cuj,targets,B1,B2
67*7594170eSAndroid Build Coastguard Worker                WARMUP,nothing,10,
68*7594170eSAndroid Build Coastguard Worker                do it,something,200,
69*7594170eSAndroid Build Coastguard Worker                do it,nothing,,
70*7594170eSAndroid Build Coastguard Worker                rebuild,something,55,
71*7594170eSAndroid Build Coastguard Worker                undo it,something,,
72*7594170eSAndroid Build Coastguard Worker                """
73*7594170eSAndroid Build Coastguard Worker            ),
74*7594170eSAndroid Build Coastguard Worker            result["ab"],
75*7594170eSAndroid Build Coastguard Worker        )
76*7594170eSAndroid Build Coastguard Worker        self.assertEqual(
77*7594170eSAndroid Build Coastguard Worker            textwrap.dedent(
78*7594170eSAndroid Build Coastguard Worker                """\
79*7594170eSAndroid Build Coastguard Worker                cuj,targets,B1,B2
80*7594170eSAndroid Build Coastguard Worker                WARMUP,nothing,01:00,
81*7594170eSAndroid Build Coastguard Worker                do it,something,,
82*7594170eSAndroid Build Coastguard Worker                do it,nothing,,
83*7594170eSAndroid Build Coastguard Worker                rebuild,something,01:06[N=2],
84*7594170eSAndroid Build Coastguard Worker                undo it,something,,
85*7594170eSAndroid Build Coastguard Worker                """
86*7594170eSAndroid Build Coastguard Worker            ),
87*7594170eSAndroid Build Coastguard Worker            result["ac"],
88*7594170eSAndroid Build Coastguard Worker        )
89*7594170eSAndroid Build Coastguard Worker
90*7594170eSAndroid Build Coastguard Worker    def test_summarize_loose_pattern(self):
91*7594170eSAndroid Build Coastguard Worker        result = summarize_helper(self.metrics, "^a", Aggregation.MEDIAN)
92*7594170eSAndroid Build Coastguard Worker        self.assertEqual(len(result), 3)
93*7594170eSAndroid Build Coastguard Worker
94*7594170eSAndroid Build Coastguard Worker
95*7594170eSAndroid Build Coastguard Workerif __name__ == "__main__":
96*7594170eSAndroid Build Coastguard Worker    unittest.main()
97