blob: d4ce7ac1fa75a297842a9d7509c4307c42e38376 [file] [log] [blame]
#!/usr/bin/env fuchsia-vendored-python
# Copyright 2024 The Fuchsia 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 sys
import unittest
from pathlib import Path
from unittest import mock
from typing import Iterable, Sequence
import build_summary
class LabelsToDictTests(unittest.TestCase):
def test_one_label(self) -> None:
self.assertEqual(
build_summary.labels_to_dict("bar=foo"), {"bar": "foo"}
)
def test_two_labels(self) -> None:
self.assertEqual(
build_summary.labels_to_dict("baz=1,spice=sugar"),
{"baz": "1", "spice": "sugar"},
)
def test_duplicate_last_wins(self) -> None:
self.assertEqual(
build_summary.labels_to_dict("bar=foo,bar=quux"), {"bar": "quux"}
)
class GetActionCategoryFromLabelsTests(unittest.TestCase):
def test_cxx(self) -> None:
self.assertEqual(
build_summary.get_action_category_from_labels(
"lang=cpp,type=compile,tool=clang"
),
"cxx",
)
def test_link(self) -> None:
self.assertEqual(
build_summary.get_action_category_from_labels(
"type=link,tool=clang"
),
"link",
)
def test_rust(self) -> None:
self.assertEqual(
build_summary.get_action_category_from_labels(
"type=tool,toolname=rustc"
),
"rust",
)
def test_custom_tool(self) -> None:
self.assertEqual(
build_summary.get_action_category_from_labels(
"type=tool,toolname=protoc"
),
"protoc",
)
def test_unknown(self) -> None:
self.assertEqual(
build_summary.get_action_category_from_labels("type=tool"), "other"
)
class GetActionCategoryAndMetricTests(unittest.TestCase):
def test_metric_for_all(self) -> None:
self.assertEqual(
build_summary.get_action_category_and_metric("Foo.Metadata.Time"),
(None, "Foo.Metadata.Time"),
)
def test_metric_for_one_tool(self) -> None:
self.assertEqual(
build_summary.get_action_category_and_metric(
"[toolname=catter].Foo.Metadata.Time"
),
("catter", "Foo.Metadata.Time"),
)
RBE_METRICS_TXT_DATA = """
num_records: 47
stats: {
name: "CompletionStatus"
counts_by_value: {
name: "STATUS_NON_ZERO_EXIT"
count: 2
}
counts_by_value: {
name: "STATUS_REMOTE_EXECUTION"
count: 45
}
}
stats: {
name: "LocalMetadata.EventTimes.AtomicOutputOverheadMillis"
count: 45
outliers: {
command_id: "1c2a12e4-3cbc3101"
value: 1
}
outliers: {
command_id: "1c2a12e4-eb41eb70"
value: 1
}
percentile95: 1
average: 0.08888888888888889
}
stats: {
name: "LocalMetadata.EventTimes.CPPInputProcessorMillis"
count: 47
outliers: {
command_id: "1c2a12e4-cfde6b4a"
value: 275
}
outliers: {
command_id: "1c2a12e4-6f7c7849"
value: 271
}
median: 239
percentile75: 253
percentile85: 260
percentile95: 270
average: 216.70212765957447
}
stats: {
name: "LocalMetadata.EventTimes.InputProcessorWaitMillis"
count: 47
}
stats: {
name: "LocalMetadata.EventTimes.LocalCommandExecutionMillis"
count: 2
outliers: {
command_id: "1c2a12e4-ec7fb7e0"
value: 10330
}
outliers: {
command_id: "1c2a12e4-8df6e4b4"
value: 10047
}
median: 10330
percentile75: 10330
percentile85: 10330
percentile95: 10330
average: 10188.5
}
stats: {
name: "LocalMetadata.EventTimes.LocalCommandQueuedMillis"
count: 2
}
stats: {
name: "LocalMetadata.EventTimes.ProcessInputsMillis"
count: 47
outliers: {
command_id: "1c2a12e4-cfde6b4a"
value: 307
}
outliers: {
command_id: "1c2a12e4-6f7c7849"
value: 303
}
median: 272
percentile75: 285
percentile85: 292
percentile95: 301
average: 248.10638297872342
}
stats: {
name: "LocalMetadata.EventTimes.ProxyExecutionMillis"
count: 47
outliers: {
command_id: "1c2a12e4-ec7fb7e0"
value: 28953
}
outliers: {
command_id: "1c2a12e4-5fc72963"
value: 26916
}
median: 12248
percentile75: 14475
percentile85: 15016
percentile95: 25648
average: 11568.851063829787
}
stats: {
name: "LocalMetadata.EventTimes.WrapperOverheadMillis"
count: 47
outliers: {
command_id: "1c2a12e4-59ee7648"
value: 61
}
outliers: {
command_id: "1c2a12e4-2acc7a82"
value: 61
}
median: 27
percentile75: 29
percentile85: 29
percentile95: 59
average: 28.893617021276597
}
stats: {
name: "LocalMetadata.ExecutedLocally"
count: 2
}
stats: {
name: "LocalMetadata.Result.Status"
counts_by_value: {
name: "NON_ZERO_EXIT"
count: 2
}
}
stats: {
name: "RemoteMetadata.EventTimes.CheckActionCacheMillis"
count: 47
outliers: {
command_id: "1c2a12e4-d56ac563"
value: 248
}
outliers: {
command_id: "1c2a12e4-458a7e63"
value: 194
}
median: 39
percentile75: 45
percentile85: 49
percentile95: 88
average: 47.851063829787236
}
stats: {
name: "RemoteMetadata.EventTimes.ComputeMerkleTreeMillis"
count: 47
outliers: {
command_id: "1c2a12e4-1fdf7bca"
value: 893
}
outliers: {
command_id: "1c2a12e4-7447be93"
value: 869
}
median: 796
percentile75: 822
percentile85: 836
percentile95: 855
average: 805.7446808510638
}
stats: {
name: "RemoteMetadata.EventTimes.DownloadResultsMillis"
count: 45
outliers: {
command_id: "1c2a12e4-cd0cc4aa"
value: 143
}
outliers: {
command_id: "1c2a12e4-cc0daf2c"
value: 132
}
median: 49
percentile75: 93
percentile85: 109
percentile95: 129
average: 64.97777777777777
}
stats: {
name: "RemoteMetadata.EventTimes.ExecuteRemotelyMillis"
count: 47
outliers: {
command_id: "1c2a12e4-5fc72963"
value: 25567
}
outliers: {
command_id: "1c2a12e4-d56ac563"
value: 18720
}
median: 10934
percentile75: 12951
percentile85: 13762
percentile95: 18123
average: 9794.68085106383
}
stats: {
name: "RemoteMetadata.EventTimes.ServerQueuedMillis"
count: 47
outliers: {
command_id: "1c2a12e4-3c25a847"
value: 17
}
outliers: {
command_id: "1c2a12e4-1fdf7bca"
value: 14
}
median: 9
percentile75: 11
percentile85: 12
percentile95: 14
average: 9.191489361702128
}
stats: {
name: "RemoteMetadata.EventTimes.ServerWorkerExecutionMillis"
count: 47
outliers: {
command_id: "1c2a12e4-5fc72963"
value: 24872
}
outliers: {
command_id: "1c2a12e4-d56ac563"
value: 17943
}
median: 10297
percentile75: 12277
percentile85: 12831
percentile95: 17062
average: 9110.404255319148
}
stats: {
name: "RemoteMetadata.EventTimes.ServerWorkerInputFetchMillis"
count: 47
outliers: {
command_id: "1c2a12e4-d563e7ab"
value: 366
}
outliers: {
command_id: "1c2a12e4-ec7fb7e0"
value: 290
}
median: 108
percentile75: 140
percentile85: 164
percentile95: 262
average: 121.29787234042553
}
stats: {
name: "RemoteMetadata.EventTimes.ServerWorkerMillis"
count: 47
outliers: {
command_id: "1c2a12e4-5fc72963"
value: 25315
}
outliers: {
command_id: "1c2a12e4-d56ac563"
value: 18479
}
median: 10770
percentile75: 12694
percentile85: 13490
percentile95: 17905
average: 9553.851063829787
}
stats: {
name: "RemoteMetadata.EventTimes.ServerWorkerOutputUploadMillis"
count: 47
outliers: {
command_id: "1c2a12e4-cd0cc4aa"
value: 341
}
outliers: {
command_id: "1c2a12e4-8e33b72c"
value: 154
}
median: 69
percentile75: 85
percentile85: 139
percentile95: 146
average: 82.91489361702128
}
stats: {
name: "RemoteMetadata.EventTimes.UploadInputsMillis"
count: 47
outliers: {
command_id: "1c2a12e4-2acc7a82"
value: 727
}
outliers: {
command_id: "1c2a12e4-4fcd9f90"
value: 419
}
median: 143
percentile75: 164
percentile85: 212
percentile95: 239
average: 166.25531914893617
}
stats: {
name: "RemoteMetadata.LogicalBytesDownloaded"
count: 35608332
outliers: {
command_id: "1c2a12e4-d56ac563"
value: 2633657
}
outliers: {
command_id: "1c2a12e4-eb41eb70"
value: 2395373
}
median: 657753
percentile75: 1051777
percentile85: 1264361
percentile95: 1786261
average: 757624.085106383
}
stats: {
name: "RemoteMetadata.LogicalBytesUploaded"
count: 327048
outliers: {
command_id: "1c2a12e4-8df6e4b4"
value: 33008
}
outliers: {
command_id: "1c2a12e4-ec7fb7e0"
value: 33008
}
median: 5432
percentile75: 5749
percentile85: 5864
percentile95: 18399
average: 6958.468085106383
}
stats: {
name: "RemoteMetadata.NumInputDirectories"
count: 12952
outliers: {
command_id: "1c2a12e4-d56ac563"
value: 372
}
outliers: {
command_id: "1c2a12e4-f47e9b45"
value: 362
}
median: 289
percentile75: 320
percentile85: 324
percentile95: 345
average: 275.5744680851064
}
stats: {
name: "RemoteMetadata.NumInputFiles"
count: 44646
outliers: {
command_id: "1c2a12e4-d56ac563"
value: 1240
}
outliers: {
command_id: "1c2a12e4-cfde6b4a"
value: 1235
}
median: 1029
percentile75: 1082
percentile85: 1145
percentile95: 1226
average: 949.9148936170212
}
stats: {
name: "RemoteMetadata.NumOutputFiles"
count: 92
outliers: {
command_id: "1c2a12e4-1fdf7bca"
value: 2
}
outliers: {
command_id: "1c2a12e4-a85b51f3"
value: 2
}
median: 2
percentile75: 2
percentile85: 2
percentile95: 2
average: 1.9574468085106382
}
stats: {
name: "RemoteMetadata.RealBytesDownloaded"
count: 35608332
outliers: {
command_id: "1c2a12e4-d56ac563"
value: 2633657
}
outliers: {
command_id: "1c2a12e4-eb41eb70"
value: 2395373
}
median: 657753
percentile75: 1051777
percentile85: 1264361
percentile95: 1786261
average: 757624.085106383
}
stats: {
name: "RemoteMetadata.RealBytesUploaded"
count: 327048
outliers: {
command_id: "1c2a12e4-8df6e4b4"
value: 33008
}
outliers: {
command_id: "1c2a12e4-ec7fb7e0"
value: 33008
}
median: 5432
percentile75: 5749
percentile85: 5864
percentile95: 18399
average: 6958.468085106383
}
stats: {
name: "RemoteMetadata.Result.Status"
counts_by_value: {
name: "NON_ZERO_EXIT"
count: 2
}
counts_by_value: {
name: "SUCCESS"
count: 45
}
}
stats: {
name: "RemoteMetadata.TotalInputBytes"
count: 8443562883
outliers: {
command_id: "1c2a12e4-5fc72963"
value: 192203614
}
outliers: {
command_id: "1c2a12e4-cfde6b4a"
value: 190111791
}
median: 181259894
percentile75: 182335622
percentile85: 184712342
percentile95: 187618652
average: 1.7965027410638297e+08
}
stats: {
name: "RemoteMetadata.TotalOutputBytes"
count: 35777071
outliers: {
command_id: "1c2a12e4-d56ac563"
value: 2633657
}
outliers: {
command_id: "1c2a12e4-eb41eb70"
value: 2395373
}
median: 657753
percentile75: 1051777
percentile85: 1264361
percentile95: 1786261
average: 761214.2765957447
}
stats: {
name: "Result.Status"
counts_by_value: {
name: "NON_ZERO_EXIT"
count: 2
}
counts_by_value: {
name: "SUCCESS"
count: 45
}
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].CompletionStatus"
counts_by_value: {
name: "STATUS_NON_ZERO_EXIT"
count: 2
}
counts_by_value: {
name: "STATUS_REMOTE_EXECUTION"
count: 45
}
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].LocalMetadata.EventTimes.AtomicOutputOverheadMillis"
count: 45
outliers: {
command_id: "1c2a12e4-3cbc3101"
value: 1
}
outliers: {
command_id: "1c2a12e4-eb41eb70"
value: 1
}
percentile95: 1
average: 0.08888888888888889
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].LocalMetadata.EventTimes.CPPInputProcessorMillis"
count: 47
outliers: {
command_id: "1c2a12e4-cfde6b4a"
value: 275
}
outliers: {
command_id: "1c2a12e4-6f7c7849"
value: 271
}
median: 239
percentile75: 253
percentile85: 260
percentile95: 270
average: 216.70212765957447
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].LocalMetadata.EventTimes.InputProcessorWaitMillis"
count: 47
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].LocalMetadata.EventTimes.LocalCommandExecutionMillis"
count: 2
outliers: {
command_id: "1c2a12e4-ec7fb7e0"
value: 10330
}
outliers: {
command_id: "1c2a12e4-8df6e4b4"
value: 10047
}
median: 10330
percentile75: 10330
percentile85: 10330
percentile95: 10330
average: 10188.5
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].LocalMetadata.EventTimes.LocalCommandQueuedMillis"
count: 2
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].LocalMetadata.EventTimes.ProcessInputsMillis"
count: 47
outliers: {
command_id: "1c2a12e4-cfde6b4a"
value: 307
}
outliers: {
command_id: "1c2a12e4-6f7c7849"
value: 303
}
median: 272
percentile75: 285
percentile85: 292
percentile95: 301
average: 248.10638297872342
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].LocalMetadata.EventTimes.ProxyExecutionMillis"
count: 47
outliers: {
command_id: "1c2a12e4-ec7fb7e0"
value: 28953
}
outliers: {
command_id: "1c2a12e4-5fc72963"
value: 26916
}
median: 12248
percentile75: 14475
percentile85: 15016
percentile95: 25648
average: 11568.851063829787
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].LocalMetadata.EventTimes.WrapperOverheadMillis"
count: 47
outliers: {
command_id: "1c2a12e4-59ee7648"
value: 61
}
outliers: {
command_id: "1c2a12e4-2acc7a82"
value: 61
}
median: 27
percentile75: 29
percentile85: 29
percentile95: 59
average: 28.893617021276597
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].LocalMetadata.ExecutedLocally"
count: 2
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].LocalMetadata.Result.Status"
counts_by_value: {
name: "NON_ZERO_EXIT"
count: 2
}
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].RemoteMetadata.EventTimes.CheckActionCacheMillis"
count: 47
outliers: {
command_id: "1c2a12e4-d56ac563"
value: 248
}
outliers: {
command_id: "1c2a12e4-458a7e63"
value: 194
}
median: 39
percentile75: 45
percentile85: 49
percentile95: 88
average: 47.851063829787236
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].RemoteMetadata.EventTimes.ComputeMerkleTreeMillis"
count: 47
outliers: {
command_id: "1c2a12e4-1fdf7bca"
value: 893
}
outliers: {
command_id: "1c2a12e4-7447be93"
value: 869
}
median: 796
percentile75: 822
percentile85: 836
percentile95: 855
average: 805.7446808510638
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].RemoteMetadata.EventTimes.DownloadResultsMillis"
count: 45
outliers: {
command_id: "1c2a12e4-cd0cc4aa"
value: 143
}
outliers: {
command_id: "1c2a12e4-cc0daf2c"
value: 132
}
median: 49
percentile75: 93
percentile85: 109
percentile95: 129
average: 64.97777777777777
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].RemoteMetadata.EventTimes.ExecuteRemotelyMillis"
count: 47
outliers: {
command_id: "1c2a12e4-5fc72963"
value: 25567
}
outliers: {
command_id: "1c2a12e4-d56ac563"
value: 18720
}
median: 10934
percentile75: 12951
percentile85: 13762
percentile95: 18123
average: 9794.68085106383
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].RemoteMetadata.EventTimes.ServerQueuedMillis"
count: 47
outliers: {
command_id: "1c2a12e4-3c25a847"
value: 17
}
outliers: {
command_id: "1c2a12e4-1fdf7bca"
value: 14
}
median: 9
percentile75: 11
percentile85: 12
percentile95: 14
average: 9.191489361702128
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].RemoteMetadata.EventTimes.ServerWorkerExecutionMillis"
count: 47
outliers: {
command_id: "1c2a12e4-5fc72963"
value: 24872
}
outliers: {
command_id: "1c2a12e4-d56ac563"
value: 17943
}
median: 10297
percentile75: 12277
percentile85: 12831
percentile95: 17062
average: 9110.404255319148
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].RemoteMetadata.EventTimes.ServerWorkerInputFetchMillis"
count: 47
outliers: {
command_id: "1c2a12e4-d563e7ab"
value: 366
}
outliers: {
command_id: "1c2a12e4-ec7fb7e0"
value: 290
}
median: 108
percentile75: 140
percentile85: 164
percentile95: 262
average: 121.29787234042553
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].RemoteMetadata.EventTimes.ServerWorkerMillis"
count: 47
outliers: {
command_id: "1c2a12e4-5fc72963"
value: 25315
}
outliers: {
command_id: "1c2a12e4-d56ac563"
value: 18479
}
median: 10770
percentile75: 12694
percentile85: 13490
percentile95: 17905
average: 9553.851063829787
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].RemoteMetadata.EventTimes.ServerWorkerOutputUploadMillis"
count: 47
outliers: {
command_id: "1c2a12e4-cd0cc4aa"
value: 341
}
outliers: {
command_id: "1c2a12e4-8e33b72c"
value: 154
}
median: 69
percentile75: 85
percentile85: 139
percentile95: 146
average: 82.91489361702128
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].RemoteMetadata.EventTimes.UploadInputsMillis"
count: 47
outliers: {
command_id: "1c2a12e4-2acc7a82"
value: 727
}
outliers: {
command_id: "1c2a12e4-4fcd9f90"
value: 419
}
median: 143
percentile75: 164
percentile85: 212
percentile95: 239
average: 166.25531914893617
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].RemoteMetadata.LogicalBytesDownloaded"
count: 35608332
outliers: {
command_id: "1c2a12e4-d56ac563"
value: 2633657
}
outliers: {
command_id: "1c2a12e4-eb41eb70"
value: 2395373
}
median: 657753
percentile75: 1051777
percentile85: 1264361
percentile95: 1786261
average: 757624.085106383
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].RemoteMetadata.LogicalBytesUploaded"
count: 327048
outliers: {
command_id: "1c2a12e4-8df6e4b4"
value: 33008
}
outliers: {
command_id: "1c2a12e4-ec7fb7e0"
value: 33008
}
median: 5432
percentile75: 5749
percentile85: 5864
percentile95: 18399
average: 6958.468085106383
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].RemoteMetadata.NumInputDirectories"
count: 12952
outliers: {
command_id: "1c2a12e4-d56ac563"
value: 372
}
outliers: {
command_id: "1c2a12e4-f47e9b45"
value: 362
}
median: 289
percentile75: 320
percentile85: 324
percentile95: 345
average: 275.5744680851064
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].RemoteMetadata.NumInputFiles"
count: 44646
outliers: {
command_id: "1c2a12e4-d56ac563"
value: 1240
}
outliers: {
command_id: "1c2a12e4-cfde6b4a"
value: 1235
}
median: 1029
percentile75: 1082
percentile85: 1145
percentile95: 1226
average: 949.9148936170212
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].RemoteMetadata.NumOutputFiles"
count: 92
outliers: {
command_id: "1c2a12e4-1fdf7bca"
value: 2
}
outliers: {
command_id: "1c2a12e4-a85b51f3"
value: 2
}
median: 2
percentile75: 2
percentile85: 2
percentile95: 2
average: 1.9574468085106382
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].RemoteMetadata.RealBytesDownloaded"
count: 35608332
outliers: {
command_id: "1c2a12e4-d56ac563"
value: 2633657
}
outliers: {
command_id: "1c2a12e4-eb41eb70"
value: 2395373
}
median: 657753
percentile75: 1051777
percentile85: 1264361
percentile95: 1786261
average: 757624.085106383
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].RemoteMetadata.RealBytesUploaded"
count: 327048
outliers: {
command_id: "1c2a12e4-8df6e4b4"
value: 33008
}
outliers: {
command_id: "1c2a12e4-ec7fb7e0"
value: 33008
}
median: 5432
percentile75: 5749
percentile85: 5864
percentile95: 18399
average: 6958.468085106383
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].RemoteMetadata.Result.Status"
counts_by_value: {
name: "NON_ZERO_EXIT"
count: 2
}
counts_by_value: {
name: "SUCCESS"
count: 45
}
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].RemoteMetadata.TotalInputBytes"
count: 8443562883
outliers: {
command_id: "1c2a12e4-5fc72963"
value: 192203614
}
outliers: {
command_id: "1c2a12e4-cfde6b4a"
value: 190111791
}
median: 181259894
percentile75: 182335622
percentile85: 184712342
percentile95: 187618652
average: 1.7965027410638297e+08
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].RemoteMetadata.TotalOutputBytes"
count: 35777071
outliers: {
command_id: "1c2a12e4-d56ac563"
value: 2633657
}
outliers: {
command_id: "1c2a12e4-eb41eb70"
value: 2395373
}
median: 657753
percentile75: 1051777
percentile85: 1264361
percentile95: 1786261
average: 761214.2765957447
}
stats: {
name: "[compiler=clang,lang=cpp,type=compile].Result.Status"
counts_by_value: {
name: "NON_ZERO_EXIT"
count: 2
}
counts_by_value: {
name: "SUCCESS"
count: 45
}
}
tool_version: "0.141.1.29a9d3c"
invocation_ids: "user:9cef0a51-1b70-4552-826e-1a13f9308359"
machine_info: {
num_cpu: 96
ram_mbs: 181310
os_family: "linux"
arch: "amd64"
}
build_latency: 28
"""
class PrintBuildSummarySmokeTest(unittest.TestCase):
def test_build_summary(self) -> None:
# Smoke test that `print_build_summary()` does not error.
lines = RBE_METRICS_TXT_DATA.split("\n")
build_summary.print_build_summary(lines, "reproxy_logdir")
if __name__ == "__main__":
unittest.main()