xref: /aosp_15_r20/frameworks/base/ravenwood/scripts/ravenwood-test-summary (revision d57664e9bc4670b3ecf6748a746a57c557b6bc9e)
1*d57664e9SAndroid Build Coastguard Worker#!/usr/bin/env python3
2*d57664e9SAndroid Build Coastguard Worker#
3*d57664e9SAndroid Build Coastguard Worker# Copyright (C) 2024 The Android Open Source Project
4*d57664e9SAndroid Build Coastguard Worker#
5*d57664e9SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
6*d57664e9SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
7*d57664e9SAndroid Build Coastguard Worker# You may obtain a copy of the License at
8*d57664e9SAndroid Build Coastguard Worker#
9*d57664e9SAndroid Build Coastguard Worker#   http://www.apache.org/licenses/LICENSE-2.0
10*d57664e9SAndroid Build Coastguard Worker#
11*d57664e9SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
12*d57664e9SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
13*d57664e9SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*d57664e9SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
15*d57664e9SAndroid Build Coastguard Worker# limitations under the License.
16*d57664e9SAndroid Build Coastguard Worker
17*d57664e9SAndroid Build Coastguard Worker'''
18*d57664e9SAndroid Build Coastguard WorkerPrint the latest Ravenwood test execution summary
19*d57664e9SAndroid Build Coastguard Worker
20*d57664e9SAndroid Build Coastguard WorkerUsage: /ravenwood-test-summary
21*d57664e9SAndroid Build Coastguard Worker
22*d57664e9SAndroid Build Coastguard WorkerExample output:
23*d57664e9SAndroid Build Coastguard WorkerModule                                                         Passed   Failed  Skipped
24*d57664e9SAndroid Build Coastguard Workerandroid.test.mock.ravenwood.tests                                   2        0        0
25*d57664e9SAndroid Build Coastguard WorkerCarLibHostUnitTest                                                565        0        7
26*d57664e9SAndroid Build Coastguard WorkerCarServiceHostUnitTest                                            364        0        0
27*d57664e9SAndroid Build Coastguard WorkerCtsAccountManagerTestCasesRavenwood                                 4        0        0
28*d57664e9SAndroid Build Coastguard WorkerCtsAppTestCasesRavenwood                                           21        0        0
29*d57664e9SAndroid Build Coastguard Worker
30*d57664e9SAndroid Build Coastguard WorkerDescription:
31*d57664e9SAndroid Build Coastguard WorkerThis script finds all the test execution result from /tmp/Ravenwood-stats*,
32*d57664e9SAndroid Build Coastguard Workerand shows per-module summary.
33*d57664e9SAndroid Build Coastguard Worker'''
34*d57664e9SAndroid Build Coastguard Worker
35*d57664e9SAndroid Build Coastguard Workerimport csv
36*d57664e9SAndroid Build Coastguard Workerimport glob
37*d57664e9SAndroid Build Coastguard Workerimport sys
38*d57664e9SAndroid Build Coastguard Worker
39*d57664e9SAndroid Build Coastguard Worker# Find the latest stats files.
40*d57664e9SAndroid Build Coastguard Workerstats_files = glob.glob('/tmp/Ravenwood-stats_*_latest.csv')
41*d57664e9SAndroid Build Coastguard Worker
42*d57664e9SAndroid Build Coastguard Workerif len(stats_files) == 0:
43*d57664e9SAndroid Build Coastguard Worker    print("No log files found.", file=sys.stderr)
44*d57664e9SAndroid Build Coastguard Worker    exit(1)
45*d57664e9SAndroid Build Coastguard Worker
46*d57664e9SAndroid Build Coastguard Worker
47*d57664e9SAndroid Build Coastguard Workerdef parse_stats(file, result):
48*d57664e9SAndroid Build Coastguard Worker    module = '(unknwon)'
49*d57664e9SAndroid Build Coastguard Worker    passed = 0
50*d57664e9SAndroid Build Coastguard Worker    failed = 0
51*d57664e9SAndroid Build Coastguard Worker    skipped = 0
52*d57664e9SAndroid Build Coastguard Worker    with open(file) as csvfile:
53*d57664e9SAndroid Build Coastguard Worker        reader = csv.reader(csvfile, delimiter=',')
54*d57664e9SAndroid Build Coastguard Worker
55*d57664e9SAndroid Build Coastguard Worker
56*d57664e9SAndroid Build Coastguard Worker        for i, row in enumerate(reader):
57*d57664e9SAndroid Build Coastguard Worker            if i == 0: continue # Skip header line
58*d57664e9SAndroid Build Coastguard Worker            module = row[0]
59*d57664e9SAndroid Build Coastguard Worker            passed += int(row[3])
60*d57664e9SAndroid Build Coastguard Worker            failed += int(row[4])
61*d57664e9SAndroid Build Coastguard Worker            skipped += int(row[5])
62*d57664e9SAndroid Build Coastguard Worker
63*d57664e9SAndroid Build Coastguard Worker    result[module] = (passed, failed, skipped)
64*d57664e9SAndroid Build Coastguard Worker
65*d57664e9SAndroid Build Coastguard Worker
66*d57664e9SAndroid Build Coastguard Workerresult = {}
67*d57664e9SAndroid Build Coastguard Worker
68*d57664e9SAndroid Build Coastguard Workerfor file in stats_files:
69*d57664e9SAndroid Build Coastguard Worker    parse_stats(file, result)
70*d57664e9SAndroid Build Coastguard Worker
71*d57664e9SAndroid Build Coastguard Workerprint('%-60s %8s %8s %8s' % ("Module", "Passed", "Failed", "Skipped"))
72*d57664e9SAndroid Build Coastguard Worker
73*d57664e9SAndroid Build Coastguard Workerfor module in sorted(result.keys(), key=str.casefold):
74*d57664e9SAndroid Build Coastguard Worker    r = result[module]
75*d57664e9SAndroid Build Coastguard Worker    print('%-60s %8d %8d %8d' % (module, r[0], r[1], r[2]))
76