xref: /aosp_15_r20/system/update_engine/local_coverage_rate (revision 5a9231315b4521097b8dc3750bc806fcafe0c72f)
1*5a923131SAndroid Build Coastguard Worker#!/bin/bash
2*5a923131SAndroid Build Coastguard Worker
3*5a923131SAndroid Build Coastguard Worker#
4*5a923131SAndroid Build Coastguard Worker# Copyright (C) 2009 The Android Open Source Project
5*5a923131SAndroid Build Coastguard Worker#
6*5a923131SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
7*5a923131SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
8*5a923131SAndroid Build Coastguard Worker# You may obtain a copy of the License at
9*5a923131SAndroid Build Coastguard Worker#
10*5a923131SAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
11*5a923131SAndroid Build Coastguard Worker#
12*5a923131SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
13*5a923131SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
14*5a923131SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15*5a923131SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
16*5a923131SAndroid Build Coastguard Worker# limitations under the License.
17*5a923131SAndroid Build Coastguard Worker#
18*5a923131SAndroid Build Coastguard Worker
19*5a923131SAndroid Build Coastguard Worker# Calculates the test-coverage percentage for non-test files in the
20*5a923131SAndroid Build Coastguard Worker# update_engine directory. Requires a file 'app.info' to contain the
21*5a923131SAndroid Build Coastguard Worker# results of running the unittests while collecting coverage data.
22*5a923131SAndroid Build Coastguard Worker
23*5a923131SAndroid Build Coastguard Workercat app.info | awk -F '[,:]' '
24*5a923131SAndroid Build Coastguard Worker
25*5a923131SAndroid Build Coastguard WorkerBEGIN { OFS = ":"; }
26*5a923131SAndroid Build Coastguard Worker
27*5a923131SAndroid Build Coastguard Worker/^SF:/{ FILEN = $2; }
28*5a923131SAndroid Build Coastguard Worker
29*5a923131SAndroid Build Coastguard Worker/^end_of_record$/{ FILEN = ""; }
30*5a923131SAndroid Build Coastguard Worker
31*5a923131SAndroid Build Coastguard Worker/^DA:/{ print FILEN, $2, $3; }
32*5a923131SAndroid Build Coastguard Worker
33*5a923131SAndroid Build Coastguard Worker' | sort | awk -F : '
34*5a923131SAndroid Build Coastguard WorkerBEGIN {
35*5a923131SAndroid Build Coastguard Worker  OFS = ":";
36*5a923131SAndroid Build Coastguard Worker  FILEN = "";
37*5a923131SAndroid Build Coastguard Worker  LINE = "";
38*5a923131SAndroid Build Coastguard Worker  HITS = 0;
39*5a923131SAndroid Build Coastguard Worker}
40*5a923131SAndroid Build Coastguard Worker{
41*5a923131SAndroid Build Coastguard Worker  NEWFILEN = $1;
42*5a923131SAndroid Build Coastguard Worker  NEWLINE = $2;
43*5a923131SAndroid Build Coastguard Worker  if ((NEWFILEN == FILEN) && (NEWLINE == LINE)) {
44*5a923131SAndroid Build Coastguard Worker    HITS += $3
45*5a923131SAndroid Build Coastguard Worker  } else {
46*5a923131SAndroid Build Coastguard Worker    if (FILEN != "") {
47*5a923131SAndroid Build Coastguard Worker      print FILEN, LINE, HITS;
48*5a923131SAndroid Build Coastguard Worker    }
49*5a923131SAndroid Build Coastguard Worker    FILEN = NEWFILEN;
50*5a923131SAndroid Build Coastguard Worker    LINE = NEWLINE;
51*5a923131SAndroid Build Coastguard Worker    HITS = $3;
52*5a923131SAndroid Build Coastguard Worker  }
53*5a923131SAndroid Build Coastguard Worker}
54*5a923131SAndroid Build Coastguard Worker' | grep '^.*\/trunk\/src\/platform\/update_engine\/' | \
55*5a923131SAndroid Build Coastguard Workerfgrep -v '_unittest.cc:' | \
56*5a923131SAndroid Build Coastguard Workerfgrep -v '/test_utils.' | \
57*5a923131SAndroid Build Coastguard Workerfgrep -v '/test_http_server.cc' | \
58*5a923131SAndroid Build Coastguard Workerfgrep -v '/testrunner.cc' | \
59*5a923131SAndroid Build Coastguard Workerfgrep -v '/mock' | \
60*5a923131SAndroid Build Coastguard Workerfgrep -v '.pb.cc' | \
61*5a923131SAndroid Build Coastguard Workerawk -F : '
62*5a923131SAndroid Build Coastguard Worker
63*5a923131SAndroid Build Coastguard Workerfunction printfile() {
64*5a923131SAndroid Build Coastguard Worker  if (FNAME != "")
65*5a923131SAndroid Build Coastguard Worker    printf "%-40s %4d / %4d: %5.1f%%\n", FNAME, FILE_GOOD_LINES,
66*5a923131SAndroid Build Coastguard Worker        (FILE_BAD_LINES + FILE_GOOD_LINES),
67*5a923131SAndroid Build Coastguard Worker        (FILE_GOOD_LINES * 100) / (FILE_BAD_LINES + FILE_GOOD_LINES);
68*5a923131SAndroid Build Coastguard Worker}
69*5a923131SAndroid Build Coastguard Worker
70*5a923131SAndroid Build Coastguard WorkerBEGIN {
71*5a923131SAndroid Build Coastguard Worker  FNAME = "";
72*5a923131SAndroid Build Coastguard Worker  FILE_BAD_LINES = 0;
73*5a923131SAndroid Build Coastguard Worker  FILE_GOOD_LINES = 0;
74*5a923131SAndroid Build Coastguard Worker}
75*5a923131SAndroid Build Coastguard Worker{
76*5a923131SAndroid Build Coastguard Worker  // calc filename
77*5a923131SAndroid Build Coastguard Worker  ARR_SIZE = split($1, PARTS, "/");
78*5a923131SAndroid Build Coastguard Worker  NEWFNAME = PARTS[ARR_SIZE];
79*5a923131SAndroid Build Coastguard Worker  if (NEWFNAME != FNAME) {
80*5a923131SAndroid Build Coastguard Worker    printfile();
81*5a923131SAndroid Build Coastguard Worker    FILE_BAD_LINES = 0;
82*5a923131SAndroid Build Coastguard Worker    FILE_GOOD_LINES = 0;
83*5a923131SAndroid Build Coastguard Worker    FNAME = NEWFNAME;
84*5a923131SAndroid Build Coastguard Worker  }
85*5a923131SAndroid Build Coastguard Worker  if ($3 == "0") {
86*5a923131SAndroid Build Coastguard Worker    BAD_LINES += 1;
87*5a923131SAndroid Build Coastguard Worker    FILE_BAD_LINES += 1;
88*5a923131SAndroid Build Coastguard Worker  } else {
89*5a923131SAndroid Build Coastguard Worker    GOOD_LINES += 1;
90*5a923131SAndroid Build Coastguard Worker    FILE_GOOD_LINES += 1;
91*5a923131SAndroid Build Coastguard Worker  }
92*5a923131SAndroid Build Coastguard Worker}
93*5a923131SAndroid Build Coastguard Worker
94*5a923131SAndroid Build Coastguard WorkerEND {
95*5a923131SAndroid Build Coastguard Worker  printfile();
96*5a923131SAndroid Build Coastguard Worker  print "---\nSummary: tested " GOOD_LINES " / " (BAD_LINES + GOOD_LINES);
97*5a923131SAndroid Build Coastguard Worker  printf(
98*5a923131SAndroid Build Coastguard Worker    "Test coverage: %.1f%%\n",
99*5a923131SAndroid Build Coastguard Worker    ((GOOD_LINES * 100) / (BAD_LINES + GOOD_LINES)));
100*5a923131SAndroid Build Coastguard Worker}
101*5a923131SAndroid Build Coastguard Worker'
102