xref: /aosp_15_r20/external/pigweed/pw_presubmit/py/bazel_parser_test.py (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1#!/usr/bin/env python3
2# Copyright 2022 The Pigweed Authors
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may not
5# use this file except in compliance with the License. You may obtain a copy of
6# the License at
7#
8#     https://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations under
14# the License.
15"""Tests for bazel_parser."""
16
17import difflib
18from pathlib import Path
19import tempfile
20import unittest
21
22from pw_presubmit import bazel_parser
23
24# This is a real Bazel failure, trimmed slightly.
25_REAL_TEST_INPUT = """
26Starting local Bazel server and connecting to it...
27WARNING: --verbose_explanations has no effect when --explain=<file> is not enabled
28Loading:
29Loading: 0 packages loaded
30Analyzing: 1362 targets (197 packages loaded)
31Analyzing: 1362 targets (197 packages loaded, 0 targets configured)
32INFO: Analyzed 1362 targets (304 packages loaded, 15546 targets configured).
33
34INFO: Found 1362 targets...
35[6 / 124] [Prepa] BazelWorkspaceStatusAction stable-status.txt
36[747 / 1,548] Compiling pw_kvs/entry.cc; 0s linux-sandbox ... (3 actions, ...
37ERROR: /usr/local/google/home/mohrr/pigweed/pigweed/pw_kvs/BUILD.bazel:25:14: Compiling pw_kvs/entry.cc failed: (Exit 1): gcc failed: error executing command
38  (cd /usr/local/google/home/mohrr/.cache/bazel/_bazel_mohrr/7e133e1f95b61... \
39  exec env - \
40    CPP_TOOL_PATH=external/clang_llvm_12_00_x86_64_linux_gnu_ubuntu_16_04/... \
41    GCC_TOOL_PATH=external/clang_llvm_12_00_x86_64_linux_gnu_ubuntu_16_04/... \
42    LD_TOOL_PATH=external/clang_llvm_12_00_x86_64_linux_gnu_ubuntu_16_04/... \
43    NM_TOOL_PATH=external/clang_llvm_12_00_x86_64_linux_gnu_ubuntu_16_04/... \
44    OBJDUMP_TOOL_PATH=external/clang_llvm_12_00_x86_64_linux_gnu_ubuntu_16_... \
45    PATH=/usr/local/google/home/mohrr/pigweed/pigweed/out/host/host_tools:... \
46    PWD=/proc/self/cwd \
47  external/rules_cc_toolchain/cc_toolchain/wrappers/posix/gcc -MD -MF bazel-out/k8-fastbuild/bin/pw_kvs/_objs/pw_kvs/entry.pic.d '-frandom-seed=bazel-out/k8-fastbuild/bin/pw_kvs/_objs/pw_kvs/entry.pic.o' -fPIC -iquote . -iquote bazel-out/k8-fastbuild/bin -isystem pw_kvs/public -isystem bazel-out/k8-fastbuild/bin/pw_kvs/public -isystem pw_assert/assert_compatibility_public_overrides -isystem bazel-out/k8-fastbuild/bin/pw_assert/assert_compatibility_public_overrides -isystem pw_assert/public -isystem bazel-out/k8-fastbuild/bin/pw_assert/public -isystem pw_preprocessor/public -isystem bazel-out/k8-fastbuild/bin/pw_preprocessor/public -isystem pw_assert_basic/public -isystem bazel-out/k8-fastbuild/bin/pw_assert_basic/public -isystem pw_assert_basic/public_overrides -isystem bazel-out/k8-fastbuild/bin/pw_assert_basic/public_overrides -isystem pw_string/public -isystem bazel-out/k8-fastbuild/bin/pw_string/public -isystem pw_span/public -isystem bazel-out/k8-fastbuild/bin/pw_span/public -isystem pw_polyfill/public -isystem bazel-out/k8-fastbuild/bin/pw_polyfill/public -isystem pw_status/public -isystem bazel-out/k8-fastbuild/bin/pw_status/public -isystem pw_result/public -isystem bazel-out/k8-fastbuild/bin/pw_result/public -isystem pw_sys_io/public -isystem bazel-out/k8-fastbuild/bin/pw_sys_io/public -isystem pw_bytes/public -isystem bazel-out/k8-fastbuild/bin/pw_bytes/public -isystem pw_containers/public -isystem bazel-out/k8-fastbuild/bin/pw_containers/public -isystem pw_checksum/public -isystem bazel-out/k8-fastbuild/bin/pw_checksum/public -isystem pw_compilation_testing/public -isystem bazel-out/k8-fastbuild/bin/pw_compilation_testing/public -isystem pw_log/public -isystem bazel-out/k8-fastbuild/bin/pw_log/public -isystem pw_log_basic/public -isystem bazel-out/k8-fastbuild/bin/pw_log_basic/public -isystem pw_log_basic/public_overrides -isystem bazel-out/k8-fastbuild/bin/pw_log_basic/public_overrides -isystem pw_stream/public -isystem bazel-out/k8-fastbuild/bin/pw_stream/public -nostdinc++ -nostdinc -isystemexternal/clang_llvm_12_00_x86_64_linux_gnu_ubuntu_16_04/include/c++/v1 -isystemexternal/debian_stretch_amd64_sysroot/usr/local/include -isystemexternal/debian_stretch_amd64_sysroot/usr/include/x86_64-linux-gnu -isystemexternal/debian_stretch_amd64_sysroot/usr/include -isystemexternal/clang_llvm_12_00_x86_64_linux_gnu_ubuntu_16_04/lib/clang/12.0.0 -isystemexternal/clang_llvm_12_00_x86_64_linux_gnu_ubuntu_16_04/lib/clang/12.0.0/include -fdata-sections -ffunction-sections -no-canonical-prefixes -Wno-builtin-macro-redefined '-D__DATE__="redacted"' '-D__TIMESTAMP__="redacted"' '-D__TIME__="redacted"' -xc++ --sysroot external/debian_stretch_amd64_sysroot -O0 -fPIC -g -fno-common -fno-exceptions -ffunction-sections -fdata-sections -Wall -Wextra -Werror '-Wno-error=cpp' '-Wno-error=deprecated-declarations' -Wno-private-header '-std=c++17' -fno-rtti -Wnon-virtual-dtor -Wno-register -c pw_kvs/entry.cc -o bazel-out/k8-fastbuild/bin/pw_kvs/_objs/pw_kvs/entry.pic.o)
48# Configuration: 752863e407a197a5b9da05cfc572e7013efd6958e856cee61d2fa474ed...
49# Execution platform: @local_config_platform//:host
50
51Use --sandbox_debug to see verbose messages from the sandbox and retain the sandbox build root for debugging
52pw_kvs/entry.cc:49:20: error: no member named 'Dat' in 'pw::Status'
53    return Status::Dat aLoss();
54           ~~~~~~~~^
55pw_kvs/entry.cc:49:23: error: expected ';' after return statement
56    return Status::Dat aLoss();
57                      ^
58                      ;
592 errors generated.
60INFO: Elapsed time: 5.662s, Critical Path: 1.01s
61INFO: 12 processes: 12 internal.
62FAILED: Build did NOT complete successfully
63FAILED: Build did NOT complete successfully
64"""
65
66_REAL_TEST_SUMMARY = """
67ERROR: /usr/local/google/home/mohrr/pigweed/pigweed/pw_kvs/BUILD.bazel:25:14: Compiling pw_kvs/entry.cc failed: (Exit 1): gcc failed: error executing command
68# Execution platform: @local_config_platform//:host
69pw_kvs/entry.cc:49:20: error: no member named 'Dat' in 'pw::Status'
70    return Status::Dat aLoss();
71           ~~~~~~~~^
72pw_kvs/entry.cc:49:23: error: expected ';' after return statement
73    return Status::Dat aLoss();
74                      ^
75                      ;
762 errors generated.
77INFO: Elapsed time: 5.662s, Critical Path: 1.01s
78INFO: 12 processes: 12 internal.
79FAILED: Build did NOT complete successfully
80FAILED: Build did NOT complete successfully
81"""
82
83_REAL_TEST_INPUT_2 = """
84[4,421 / 4,540] 302 / 343 tests; Compiling pw_transfer/client_test.cc; 7s linux-sandbox ... (15 actions running)
85[4,425 / 4,540] 302 / 343 tests; Compiling pw_transfer/client_test.cc; 9s linux-sandbox ... (16 actions, 15 running)
86[4,426 / 4,540] 302 / 343 tests; Compiling pw_transfer/client_test.cc; 10s linux-sandbox ... (16 actions running)
87[4,430 / 4,540] 302 / 343 tests; Compiling pw_rpc/raw/service_nc_test.cc; 7s linux-sandbox ... (14 actions, 13 running)
88[4,439 / 4,542] 304 / 343 tests; Compiling pw_rpc/nanopb/client_server_context_test.cc; 7s linux-sandbox ... (15 actions running)
89[4,443 / 4,542] 304 / 343 tests; Compiling pw_rpc/pwpb/synchronous_call_test.cc; 7s linux-sandbox ... (15 actions running)
90[4,449 / 4,544] 306 / 343 tests; Compiling pw_transfer/transfer.cc; 6s linux-sandbox ... (16 actions, 15 running)
91[4,458 / 4,546] 308 / 343 tests; Compiling pw_rpc/test_helpers_test.cc; 4s linux-sandbox ... (16 actions running)
92[4,460 / 4,547] 309 / 343 tests; Compiling pw_rpc/test_helpers_test.cc; 5s linux-sandbox ... (16 actions running)
93[4,466 / 4,548] 310 / 343 tests; Compiling pw_rpc/test_helpers_test.cc; 6s linux-sandbox ... (16 actions, 15 running)
94[4,469 / 4,549] 311 / 343 tests; Compiling pw_rpc/test_helpers_test.cc; 7s linux-sandbox ... (16 actions running)
95[4,478 / 4,550] 312 / 343 tests; Compiling pw_transfer/client_test.cc; 8s linux-sandbox ... (14 actions, 13 running)
96[4,481 / 4,550] 312 / 343 tests; Compiling pw_transfer/client_test.cc; 9s linux-sandbox ... (16 actions, 15 running)
97[4,486 / 4,551] 313 / 343 tests; Compiling pw_transfer/client_test.cc; 10s linux-sandbox ... (16 actions, 15 running)
98[4,492 / 4,552] 314 / 343 tests; Compiling pw_transfer/integration_test/server.cc; 7s linux-sandbox ... (16 actions, 15 running)
99[4,501 / 4,556] 318 / 343 tests; Compiling pw_transfer/atomic_file_transfer_handler_test.cc; 5s linux-sandbox ... (15 actions running)
100[4,506 / 4,556] 318 / 343 tests; Compiling pw_rpc/pwpb/client_server_context_threaded_test.cc; 5s linux-sandbox ... (16 actions, 15 running)
101[4,513 / 4,557] 319 / 343 tests; Compiling pw_transfer/client.cc; 6s linux-sandbox ... (15 actions, 14 running)
102[4,519 / 4,557] 319 / 343 tests; Compiling pw_rpc/pwpb/client_server_context_threaded_test.cc; 5s linux-sandbox ... (16 actions, 15 running)
103[4,524 / 4,558] 320 / 343 tests; Compiling pw_transfer/integration_test/client.cc; 6s linux-sandbox ... (16 actions running)
104[4,533 / 4,560] 322 / 343 tests; Compiling pw_rpc/pwpb/fake_channel_output_test.cc; 4s linux-sandbox ... (16 actions running)
105[4,537 / 4,560] 322 / 343 tests; Compiling pw_rpc/pwpb/fake_channel_output_test.cc; 5s linux-sandbox ... (14 actions running)
106[4,544 / 4,569] 325 / 343 tests; Compiling pw_rpc/pwpb/fake_channel_output_test.cc; 6s linux-sandbox ... (15 actions running)
107[4,550 / 4,569] 325 / 343 tests; Compiling pw_rpc/pwpb/method_lookup_test.cc; 5s linux-sandbox ... (14 actions, 13 running)
108[4,560 / 4,571] 327 / 343 tests; Compiling pw_rpc/pwpb/server_reader_writer_test.cc; 4s linux-sandbox ... (9 actions, 8 running)
109[4,566 / 4,573] 329 / 343 tests; Testing //pw_transfer/integration_test:cross_language_medium_read_test; 4s linux-sandbox ... (7 actions, 6 running)
110[4,567 / 4,573] 329 / 343 tests; Testing //pw_transfer/integration_test:cross_language_medium_read_test; 5s linux-sandbox ... (6 actions running)
111[4,567 / 4,573] 329 / 343 tests; Testing //pw_transfer/integration_test:cross_language_medium_read_test; 14s linux-sandbox ... (6 actions running)
112[4,567 / 4,573] 330 / 343 tests; Testing //pw_transfer/integration_test:cross_language_medium_read_test; 15s linux-sandbox ... (6 actions running)
113[4,568 / 4,573] 330 / 343 tests; Testing //pw_transfer/integration_test:cross_language_medium_read_test; 16s linux-sandbox ... (5 actions running)
114[4,568 / 4,573] 330 / 343 tests; Testing //pw_transfer/integration_test:cross_language_medium_read_test; 26s linux-sandbox ... (5 actions running)
115[4,568 / 4,573] 330 / 343 tests; Testing //pw_transfer/integration_test:cross_language_medium_read_test; 52s linux-sandbox ... (5 actions running)
116[4,569 / 4,573] 331 / 343 tests; Testing //pw_transfer/integration_test:cross_language_medium_read_test; 53s linux-sandbox ... (4 actions running)
117[4,570 / 4,573] 332 / 343 tests; Testing //pw_transfer/integration_test:cross_language_medium_read_test; 54s linux-sandbox ... (3 actions running)
118[4,570 / 4,573] 332 / 343 tests; Testing //pw_transfer/integration_test:cross_language_medium_read_test; 65s linux-sandbox ... (3 actions running)
119[4,570 / 4,573] 332 / 343 tests; Testing //pw_transfer/integration_test:cross_language_medium_read_test; 83s linux-sandbox ... (3 actions running)
120FAIL: //pw_transfer/integration_test:cross_language_medium_read_test (see <truncated>/pw_transfer/integration_test/cross_language_medium_read_test/test.log)
121INFO: From Testing //pw_transfer/integration_test:cross_language_medium_read_test:
122stdout (<truncated>/_tmp/actions/stdout-2115) 1131999 exceeds maximum size of --experimental_ui_max_stdouterr_bytes=1048576 bytes; skipping
123[4,572 / 4,573] 334 / 343 tests, 1 failed; Testing //pw_transfer/integration_test:expected_errors_test; 84s linux-sandbox
124[4,572 / 4,573] 334 / 343 tests, 1 failed; Testing //pw_transfer/integration_test:expected_errors_test; 94s linux-sandbox
125[4,572 / 4,573] 334 / 343 tests, 1 failed; Testing //pw_transfer/integration_test:expected_errors_test; 124s linux-sandbox
126[4,572 / 4,573] 334 / 343 tests, 1 failed; Testing //pw_transfer/integration_test:expected_errors_test; 168s linux-sandbox
127INFO: Elapsed time: 507.459s, Critical Path: 181.66s
128INFO: 1206 processes: 1235 linux-sandbox, 4 worker.
129INFO: Build completed, 1 test FAILED, 1206 total actions
130//pw_allocator:block_test                                       (cached) PASSED in 0.1s
131//pw_allocator:freelist_heap_test                               (cached) PASSED in 0.1s
132//pw_allocator:freelist_test                                    (cached) PASSED in 0.0s
133//pw_analog:analog_input_test                                   (cached) PASSED in 0.1s
134//pw_analog:microvolt_input_test                                (cached) PASSED in 0.0s
135//pw_arduino_build/py:builder_test                              (cached) PASSED in 0.7s
136//pw_arduino_build/py:file_operations_test                      (cached) PASSED in 1.0s
137//pw_assert:assert_backend_compile_test                         (cached) PASSED in 0.2s
138//pw_assert:assert_facade_test                                  (cached) PASSED in 0.1s
139//pw_async:fake_dispatcher_test                                 (cached) PASSED in 0.1s
140//pw_async_basic:dispatcher_test                                (cached) PASSED in 0.1s
141//pw_async_basic:fake_dispatcher_fixture_test                   (cached) PASSED in 0.1s
142//pw_async_basic:heap_dispatcher_test                           (cached) PASSED in 0.1s
143//pw_base64:base64_test                                         (cached) PASSED in 0.2s
144//pw_blob_store:blob_store_chunk_write_test                     (cached) PASSED in 0.8s
145//pw_blob_store:blob_store_deferred_write_test                  (cached) PASSED in 0.5s
146//pw_blob_store:blob_store_test                                 (cached) PASSED in 1.0s
147//pw_blob_store:flat_file_system_entry_test                     (cached) PASSED in 0.1s
148//pw_bluetooth:address_test                                     (cached) PASSED in 0.3s
149//pw_bluetooth:api_test                                         (cached) PASSED in 0.4s
150//pw_bluetooth:result_test                                      (cached) PASSED in 0.2s
151//pw_bluetooth:uuid_test                                        (cached) PASSED in 0.1s
152//pw_bluetooth_hci:packet_test                                  (cached) PASSED in 0.1s
153//pw_bluetooth_hci:uart_transport_fuzzer                        (cached) PASSED in 0.2s
154//pw_bluetooth_hci:uart_transport_test                          (cached) PASSED in 0.1s
155//pw_bluetooth_profiles:device_info_service_test                (cached) PASSED in 0.0s
156//pw_build:file_prefix_map_test                                 (cached) PASSED in 0.1s
157//pw_build_info:build_id_test                                   (cached) PASSED in 0.1s
158//pw_bytes:array_test                                           (cached) PASSED in 0.1s
159//pw_bytes:bit_test                                             (cached) PASSED in 0.1s
160//pw_bytes:byte_builder_test                                    (cached) PASSED in 0.0s
161//pw_bytes:endian_test                                          (cached) PASSED in 0.1s
162//pw_bytes:units_test                                           (cached) PASSED in 0.1s
163//pw_checksum:crc16_ccitt_test                                  (cached) PASSED in 0.1s
164//pw_checksum:crc32_test                                        (cached) PASSED in 0.1s
165//pw_chrono:simulated_system_clock_test                         (cached) PASSED in 0.1s
166//pw_chrono:system_clock_facade_test                            (cached) PASSED in 0.1s
167//pw_chrono:system_timer_facade_test                            (cached) PASSED in 0.7s
168//pw_cli/py:envparse_test                                       (cached) PASSED in 0.8s
169//pw_cli/py:plugins_test                                        (cached) PASSED in 0.7s
170//pw_containers:algorithm_test                                  (cached) PASSED in 0.1s
171//pw_containers:filtered_view_test                              (cached) PASSED in 0.1s
172//pw_containers:flat_map_test                                   (cached) PASSED in 0.1s
173//pw_containers:inline_deque_test                               (cached) PASSED in 0.3s
174//pw_containers:inline_queue_test                               (cached) PASSED in 0.1s
175//pw_containers:intrusive_list_test                             (cached) PASSED in 0.1s
176//pw_containers:raw_storage_test                                (cached) PASSED in 0.1s
177//pw_containers:to_array_test                                   (cached) PASSED in 0.1s
178//pw_containers:vector_test                                     (cached) PASSED in 0.1s
179//pw_containers:wrapped_iterator_test                           (cached) PASSED in 0.2s
180//pw_cpu_exception_cortex_m/py:exception_analyzer_test          (cached) PASSED in 1.0s
181//pw_crypto:ecdsa_test                                          (cached) PASSED in 0.1s
182//pw_crypto:sha256_mock_test                                    (cached) PASSED in 0.1s
183//pw_crypto:sha256_test                                         (cached) PASSED in 0.0s
184//pw_digital_io:digital_io_test                                 (cached) PASSED in 0.2s
185//pw_file:flat_file_system_test                                 (cached) PASSED in 0.2s
186//pw_function:function_test                                     (cached) PASSED in 0.1s
187//pw_function:pointer_test                                      (cached) PASSED in 0.3s
188//pw_function:scope_guard_test                                  (cached) PASSED in 0.1s
189//pw_fuzzer/examples/fuzztest:metrics_fuzztest                  (cached) PASSED in 0.1s
190//pw_fuzzer/examples/fuzztest:metrics_unittest                  (cached) PASSED in 0.2s
191//pw_fuzzer/examples/libfuzzer:toy_fuzzer                       (cached) PASSED in 0.2s
192//pw_hdlc:decoder_test                                          (cached) PASSED in 0.3s
193//pw_hdlc:encoded_size_test                                     (cached) PASSED in 0.2s
194//pw_hdlc:encoder_test                                          (cached) PASSED in 0.1s
195//pw_hdlc:rpc_channel_test                                      (cached) PASSED in 0.1s
196//pw_hdlc:wire_packet_parser_test                               (cached) PASSED in 0.2s
197//pw_hdlc/java/test/dev/pigweed/pw_hdlc:DecoderTest             (cached) PASSED in 0.5s
198//pw_hdlc/java/test/dev/pigweed/pw_hdlc:EncoderTest             (cached) PASSED in 0.6s
199//pw_hdlc/java/test/dev/pigweed/pw_hdlc:FrameTest               (cached) PASSED in 0.9s
200//pw_hex_dump:hex_dump_test                                     (cached) PASSED in 0.1s
201//pw_i2c:address_test                                           (cached) PASSED in 0.1s
202//pw_i2c:device_test                                            (cached) PASSED in 0.1s
203//pw_i2c:i2c_service_test                                       (cached) PASSED in 0.0s
204//pw_i2c:initiator_mock_test                                    (cached) PASSED in 0.1s
205//pw_i2c:register_device_test                                   (cached) PASSED in 0.1s
206//pw_i2c_linux:initiator_test                                   (cached) PASSED in 0.1s
207//pw_intrusive_ptr:intrusive_ptr_test                           (cached) PASSED in 0.0s
208//pw_intrusive_ptr:recyclable_test                              (cached) PASSED in 0.1s
209//pw_kvs:alignment_test                                         (cached) PASSED in 0.1s
210//pw_kvs:checksum_test                                          (cached) PASSED in 0.2s
211//pw_kvs:converts_to_span_test                                  (cached) PASSED in 0.1s
212//pw_kvs:entry_cache_test                                       (cached) PASSED in 0.1s
213//pw_kvs:entry_test                                             (cached) PASSED in 0.2s
214//pw_kvs:fake_flash_test_key_value_store_test                   (cached) PASSED in 0.1s
215//pw_kvs:flash_partition_16_alignment_test                      (cached) PASSED in 2.4s
216//pw_kvs:flash_partition_1_alignment_test                       (cached) PASSED in 32.1s
217//pw_kvs:flash_partition_256_alignment_test                     (cached) PASSED in 0.5s
218//pw_kvs:flash_partition_256_write_size_test                    (cached) PASSED in 0.4s
219//pw_kvs:flash_partition_64_alignment_test                      (cached) PASSED in 1.0s
220//pw_kvs:flash_partition_stream_test                            (cached) PASSED in 0.3s
221//pw_kvs:key_test                                               (cached) PASSED in 0.1s
222//pw_kvs:key_value_store_16_alignment_flash_test                (cached) PASSED in 0.1s
223//pw_kvs:key_value_store_1_alignment_flash_test                 (cached) PASSED in 0.3s
224//pw_kvs:key_value_store_256_alignment_flash_test               (cached) PASSED in 0.1s
225//pw_kvs:key_value_store_64_alignment_flash_test                (cached) PASSED in 0.2s
226//pw_kvs:key_value_store_binary_format_test                     (cached) PASSED in 0.1s
227//pw_kvs:key_value_store_map_test                               (cached) PASSED in 6.4s
228//pw_kvs:key_value_store_put_test                               (cached) PASSED in 0.2s
229//pw_kvs:key_value_store_test                                   (cached) PASSED in 0.3s
230//pw_kvs:key_value_store_wear_test                              (cached) PASSED in 0.5s
231//pw_kvs:sectors_test                                           (cached) PASSED in 0.1s
232//pw_libc:memset_test                                           (cached) PASSED in 0.1s
233//pw_log:glog_adapter_test                                      (cached) PASSED in 0.1s
234//pw_log:proto_utils_test                                       (cached) PASSED in 0.0s
235//pw_log:test                                                   (cached) PASSED in 0.2s
236//pw_log_null:test                                              (cached) PASSED in 0.0s
237//pw_log_rpc:log_filter_service_test                            (cached) PASSED in 0.1s
238//pw_log_rpc:log_filter_test                                    (cached) PASSED in 0.0s
239//pw_log_rpc:log_service_test                                   (cached) PASSED in 0.0s
240//pw_log_rpc:rpc_log_drain_test                                 (cached) PASSED in 0.2s
241//pw_log_tokenized:log_tokenized_test                           (cached) PASSED in 0.1s
242//pw_log_tokenized:metadata_test                                (cached) PASSED in 0.2s
243//pw_log_tokenized/py:format_string_test                        (cached) PASSED in 0.9s
244//pw_log_tokenized/py:metadata_test                             (cached) PASSED in 0.6s
245//pw_metric:global_test                                         (cached) PASSED in 0.6s
246//pw_metric:metric_service_pwpb_test                            (cached) PASSED in 0.1s
247//pw_metric:metric_test                                         (cached) PASSED in 0.2s
248//pw_multisink:multisink_test                                   (cached) PASSED in 0.2s
249//pw_multisink:stl_multisink_threaded_test                      (cached) PASSED in 0.1s
250//pw_perf_test:chrono_timer_test                                (cached) PASSED in 0.1s
251//pw_perf_test:perf_test_test                                   (cached) PASSED in 0.1s
252//pw_perf_test:state_test                                       (cached) PASSED in 0.2s
253//pw_perf_test:timer_test                                       (cached) PASSED in 0.1s
254//pw_persistent_ram:flat_file_system_entry_test                 (cached) PASSED in 0.1s
255//pw_persistent_ram:persistent_buffer_test                      (cached) PASSED in 0.3s
256//pw_persistent_ram:persistent_test                             (cached) PASSED in 0.1s
257//pw_polyfill:test                                              (cached) PASSED in 0.1s
258//pw_preprocessor:arguments_test                                (cached) PASSED in 0.2s
259//pw_preprocessor:boolean_test                                  (cached) PASSED in 0.2s
260//pw_preprocessor:compiler_test                                 (cached) PASSED in 0.2s
261//pw_preprocessor:concat_test                                   (cached) PASSED in 0.1s
262//pw_preprocessor:util_test                                     (cached) PASSED in 0.1s
263//pw_protobuf:codegen_decoder_test                              (cached) PASSED in 0.1s
264//pw_protobuf:codegen_encoder_test                              (cached) PASSED in 0.2s
265//pw_protobuf:decoder_fuzz_test                                 (cached) PASSED in 0.2s
266//pw_protobuf:decoder_test                                      (cached) PASSED in 0.1s
267//pw_protobuf:encoder_fuzz_test                                 (cached) PASSED in 0.3s
268//pw_protobuf:encoder_test                                      (cached) PASSED in 0.1s
269//pw_protobuf:find_test                                         (cached) PASSED in 0.1s
270//pw_protobuf:map_utils_test                                    (cached) PASSED in 0.1s
271//pw_protobuf:message_test                                      (cached) PASSED in 0.1s
272//pw_protobuf:serialized_size_test                              (cached) PASSED in 0.2s
273//pw_protobuf:stream_decoder_test                               (cached) PASSED in 0.2s
274//pw_protobuf_compiler:nested_packages_test                     (cached) PASSED in 0.1s
275//pw_protobuf_compiler/py:compiled_protos_test                  (cached) PASSED in 0.4s
276//pw_random:xor_shift_test                                      (cached) PASSED in 0.2s
277//pw_result:expected_test                                       (cached) PASSED in 0.1s
278//pw_result:result_test                                         (cached) PASSED in 0.1s
279//pw_result:statusor_test                                       (cached) PASSED in 0.2s
280//pw_ring_buffer:prefixed_entry_ring_buffer_test                (cached) PASSED in 0.2s
281//pw_router:static_router_test                                  (cached) PASSED in 0.2s
282//pw_rpc:call_test                                              (cached) PASSED in 0.1s
283//pw_rpc:callback_test                                          (cached) PASSED in 0.3s
284//pw_rpc:channel_test                                           (cached) PASSED in 0.2s
285//pw_rpc:client_server_test                                     (cached) PASSED in 0.1s
286//pw_rpc:fake_channel_output_test                               (cached) PASSED in 0.1s
287//pw_rpc:method_test                                            (cached) PASSED in 0.1s
288//pw_rpc:packet_meta_test                                       (cached) PASSED in 0.1s
289//pw_rpc:packet_test                                            (cached) PASSED in 0.0s
290//pw_rpc:server_test                                            (cached) PASSED in 0.1s
291//pw_rpc:service_test                                           (cached) PASSED in 0.1s
292//pw_rpc:test_helpers_test                                      (cached) PASSED in 0.2s
293//pw_rpc/java/test/dev/pigweed/pw_rpc:ClientTest                (cached) PASSED in 1.5s
294//pw_rpc/java/test/dev/pigweed/pw_rpc:EndpointTest              (cached) PASSED in 1.5s
295//pw_rpc/java/test/dev/pigweed/pw_rpc:FutureCallTest            (cached) PASSED in 1.5s
296//pw_rpc/java/test/dev/pigweed/pw_rpc:IdsTest                   (cached) PASSED in 0.7s
297//pw_rpc/java/test/dev/pigweed/pw_rpc:PacketsTest               (cached) PASSED in 0.6s
298//pw_rpc/java/test/dev/pigweed/pw_rpc:ServiceTest               (cached) PASSED in 0.6s
299//pw_rpc/java/test/dev/pigweed/pw_rpc:StreamObserverCallTest    (cached) PASSED in 1.5s
300//pw_rpc/java/test/dev/pigweed/pw_rpc:StreamObserverMethodClientTest (cached) PASSED in 1.6s
301//pw_rpc/nanopb:callback_test                                   (cached) PASSED in 0.3s
302//pw_rpc/nanopb:client_call_test                                (cached) PASSED in 0.1s
303//pw_rpc/nanopb:client_reader_writer_test                       (cached) PASSED in 0.1s
304//pw_rpc/nanopb:client_server_context_test                      (cached) PASSED in 0.1s
305//pw_rpc/nanopb:client_server_context_threaded_test             (cached) PASSED in 0.1s
306//pw_rpc/nanopb:codegen_test                                    (cached) PASSED in 0.1s
307//pw_rpc/nanopb:fake_channel_output_test                        (cached) PASSED in 0.2s
308//pw_rpc/nanopb:method_info_test                                (cached) PASSED in 0.2s
309//pw_rpc/nanopb:method_lookup_test                              (cached) PASSED in 0.2s
310//pw_rpc/nanopb:method_test                                     (cached) PASSED in 0.1s
311//pw_rpc/nanopb:method_union_test                               (cached) PASSED in 0.2s
312//pw_rpc/nanopb:serde_test                                      (cached) PASSED in 0.2s
313//pw_rpc/nanopb:server_callback_test                            (cached) PASSED in 0.2s
314//pw_rpc/nanopb:server_reader_writer_test                       (cached) PASSED in 0.0s
315//pw_rpc/nanopb:stub_generation_test                            (cached) PASSED in 0.1s
316//pw_rpc/pwpb:client_call_test                                  (cached) PASSED in 0.1s
317//pw_rpc/pwpb:client_reader_writer_test                         (cached) PASSED in 0.2s
318//pw_rpc/pwpb:client_server_context_test                        (cached) PASSED in 0.1s
319//pw_rpc/pwpb:client_server_context_threaded_test               (cached) PASSED in 0.0s
320//pw_rpc/pwpb:codegen_test                                      (cached) PASSED in 0.1s
321//pw_rpc/pwpb:echo_service_test                                 (cached) PASSED in 0.0s
322//pw_rpc/pwpb:fake_channel_output_test                          (cached) PASSED in 0.2s
323//pw_rpc/pwpb:method_info_test                                  (cached) PASSED in 0.1s
324//pw_rpc/pwpb:method_lookup_test                                (cached) PASSED in 0.1s
325//pw_rpc/pwpb:method_test                                       (cached) PASSED in 0.1s
326//pw_rpc/pwpb:method_union_test                                 (cached) PASSED in 0.1s
327//pw_rpc/pwpb:serde_test                                        (cached) PASSED in 0.1s
328//pw_rpc/pwpb:server_callback_test                              (cached) PASSED in 0.2s
329//pw_rpc/pwpb:server_reader_writer_test                         (cached) PASSED in 0.1s
330//pw_rpc/pwpb:stub_generation_test                              (cached) PASSED in 0.2s
331//pw_rpc/raw:client_reader_writer_test                          (cached) PASSED in 0.2s
332//pw_rpc/raw:client_test                                        (cached) PASSED in 0.1s
333//pw_rpc/raw:codegen_test                                       (cached) PASSED in 0.2s
334//pw_rpc/raw:method_info_test                                   (cached) PASSED in 0.1s
335//pw_rpc/raw:method_test                                        (cached) PASSED in 0.1s
336//pw_rpc/raw:method_union_test                                  (cached) PASSED in 0.1s
337//pw_rpc/raw:server_reader_writer_test                          (cached) PASSED in 0.2s
338//pw_rpc/raw:service_nc_test                                    (cached) PASSED in 0.1s
339//pw_rpc/raw:stub_generation_test                               (cached) PASSED in 0.1s
340//pw_rpc_transport:egress_ingress_test                          (cached) PASSED in 0.1s
341//pw_rpc_transport:hdlc_framing_test                            (cached) PASSED in 0.1s
342//pw_rpc_transport:local_rpc_egress_test                        (cached) PASSED in 0.1s
343//pw_rpc_transport:packet_buffer_queue_test                     (cached) PASSED in 0.1s
344//pw_rpc_transport:rpc_integration_test                         (cached) PASSED in 0.2s
345//pw_rpc_transport:simple_framing_test                          (cached) PASSED in 0.1s
346//pw_rpc_transport:socket_rpc_transport_test                    (cached) PASSED in 0.2s
347//pw_rpc_transport:stream_rpc_dispatcher_test                   (cached) PASSED in 0.1s
348//pw_snapshot:cpp_compile_test                                  (cached) PASSED in 0.1s
349//pw_snapshot:uuid_test                                         (cached) PASSED in 0.2s
350//pw_span:compatibility_test                                    (cached) PASSED in 0.1s
351//pw_span:pw_span_test                                          (cached) PASSED in 0.1s
352//pw_spi:initiator_mock_test                                    (cached) PASSED in 0.2s
353//pw_spi:spi_test                                               (cached) PASSED in 0.0s
354//pw_status:status_test                                         (cached) PASSED in 0.2s
355//pw_status:status_with_size_test                               (cached) PASSED in 0.2s
356//pw_status:try_test                                            (cached) PASSED in 0.2s
357//pw_status/rust:pw_status_doc_test                             (cached) PASSED in 1.0s
358//pw_status/rust:pw_status_test                                 (cached) PASSED in 0.0s
359//pw_stream:interval_reader_test                                (cached) PASSED in 0.2s
360//pw_stream:memory_stream_test                                  (cached) PASSED in 0.1s
361//pw_stream:mpsc_stream_test                                    (cached) PASSED in 0.1s
362//pw_stream:null_stream_test                                    (cached) PASSED in 0.2s
363//pw_stream:seek_test                                           (cached) PASSED in 0.1s
364//pw_stream:socket_stream_test                                  (cached) PASSED in 0.1s
365//pw_stream:std_file_stream_test                                (cached) PASSED in 0.2s
366//pw_stream:stream_test                                         (cached) PASSED in 0.2s
367//pw_stream/rust:pw_stream_doc_test                             (cached) PASSED in 0.8s
368//pw_stream/rust:pw_stream_test                                 (cached) PASSED in 0.0s
369//pw_stream_uart_linux:stream_test                              (cached) PASSED in 0.1s
370//pw_string:format_test                                         (cached) PASSED in 0.1s
371//pw_string:string_builder_test                                 (cached) PASSED in 0.1s
372//pw_string:string_test                                         (cached) PASSED in 0.1s
373//pw_string:to_string_test                                      (cached) PASSED in 0.1s
374//pw_string:type_to_string_test                                 (cached) PASSED in 0.1s
375//pw_string:util_test                                           (cached) PASSED in 0.1s
376//pw_symbolizer/py:symbolizer_test                              (cached) PASSED in 0.6s
377//pw_sync:binary_semaphore_facade_test                          (cached) PASSED in 0.3s
378//pw_sync:borrow_test                                           (cached) PASSED in 0.2s
379//pw_sync:counting_semaphore_facade_test                        (cached) PASSED in 0.2s
380//pw_sync:inline_borrowable_test                                (cached) PASSED in 0.3s
381//pw_sync:interrupt_spin_lock_facade_test                       (cached) PASSED in 0.2s
382//pw_sync:lock_traits_test                                      (cached) PASSED in 0.2s
383//pw_sync:mutex_facade_test                                     (cached) PASSED in 0.1s
384//pw_sync:recursive_mutex_facade_test                           (cached) PASSED in 0.4s
385//pw_sync:thread_notification_facade_test                       (cached) PASSED in 0.1s
386//pw_sync:timed_mutex_facade_test                               (cached) PASSED in 0.1s
387//pw_sync:timed_thread_notification_facade_test                 (cached) PASSED in 0.2s
388//pw_thread:id_facade_test                                      (cached) PASSED in 0.2s
389//pw_thread:sleep_facade_test                                   (cached) PASSED in 0.3s
390//pw_thread:test_thread_context_facade_test                     (cached) PASSED in 0.2s
391//pw_thread:thread_info_test                                    (cached) PASSED in 0.1s
392//pw_thread:thread_snapshot_service_test                        (cached) PASSED in 0.1s
393//pw_thread:yield_facade_test                                   (cached) PASSED in 0.3s
394//pw_thread_stl:thread_backend_test                             (cached) PASSED in 0.2s
395//pw_tokenizer:argument_types_test                              (cached) PASSED in 0.1s
396//pw_tokenizer:base64_test                                      (cached) PASSED in 0.1s
397//pw_tokenizer:decode_test                                      (cached) PASSED in 0.2s
398//pw_tokenizer:detokenize_fuzzer                                (cached) PASSED in 0.3s
399//pw_tokenizer:detokenize_test                                  (cached) PASSED in 0.2s
400//pw_tokenizer:encode_args_test                                 (cached) PASSED in 0.1s
401//pw_tokenizer:hash_test                                        (cached) PASSED in 0.1s
402//pw_tokenizer:simple_tokenize_test                             (cached) PASSED in 0.1s
403//pw_tokenizer:token_database_test                              (cached) PASSED in 0.1s
404//pw_tokenizer:tokenize_test                                    (cached) PASSED in 0.1s
405//pw_tokenizer/rust:pw_tokenizer_core_doc_test                  (cached) PASSED in 1.0s
406//pw_tokenizer/rust:pw_tokenizer_core_test                      (cached) PASSED in 0.2s
407//pw_tokenizer/rust:pw_tokenizer_doc_test                       (cached) PASSED in 0.6s
408//pw_tokenizer/rust:pw_tokenizer_macro_test                     (cached) PASSED in 0.1s
409//pw_tokenizer/rust:pw_tokenizer_printf_doc_test                (cached) PASSED in 1.0s
410//pw_tokenizer/rust:pw_tokenizer_printf_test                    (cached) PASSED in 0.4s
411//pw_tokenizer/rust:pw_tokenizer_test                           (cached) PASSED in 0.1s
412//pw_toolchain:no_destructor_test                               (cached) PASSED in 0.1s
413//pw_trace:trace_backend_compile_test                           (cached) PASSED in 0.1s
414//pw_trace:trace_facade_test                                    (cached) PASSED in 0.1s
415//pw_trace:trace_zero_facade_test                               (cached) PASSED in 0.2s
416//pw_transfer:atomic_file_transfer_handler_test                 (cached) PASSED in 0.1s
417//pw_transfer:chunk_test                                        (cached) PASSED in 0.1s
418//pw_transfer:client_test                                       (cached) PASSED in 0.6s
419//pw_transfer:handler_test                                      (cached) PASSED in 0.2s
420//pw_transfer:transfer_test                                     (cached) PASSED in 0.2s
421//pw_transfer:transfer_thread_test                              (cached) PASSED in 0.0s
422//pw_transfer/java/test/dev/pigweed/pw_transfer:TransferClientTest (cached) PASSED in 5.4s
423//pw_unit_test:framework_test                                   (cached) PASSED in 0.1s
424//pw_unit_test:static_library_support_test                      (cached) PASSED in 0.1s
425//pw_varint:stream_test                                         (cached) PASSED in 0.2s
426//pw_varint:varint_test                                         (cached) PASSED in 0.2s
427//pw_varint/rust:pw_varint_doc_test                             (cached) PASSED in 1.1s
428//pw_varint/rust:pw_varint_test                                 (cached) PASSED in 0.1s
429//pw_work_queue:stl_work_queue_test                             (cached) PASSED in 0.2s
430//pw_cpu_exception_cortex_m:cpu_exception_entry_test                    SKIPPED
431//pw_cpu_exception_cortex_m:util_test                                   SKIPPED
432//pw_digital_io_mcuxpresso:mimxrt595_test                               SKIPPED
433//pw_i2c_mcuxpresso:initiator_test                                      SKIPPED
434//pw_spi_mcuxpresso:flexspi_test                                        SKIPPED
435//pw_spi_mcuxpresso:spi_test                                            SKIPPED
436//pw_stream_shmem_mcuxpresso:stream_test                                SKIPPED
437//pw_stream_uart_mcuxpresso:stream_test                                 SKIPPED
438//pw_console/py:command_runner_test                                      PASSED in 5.3s
439//pw_console/py:console_app_test                                         PASSED in 5.0s
440//pw_console/py:console_prefs_test                                       PASSED in 4.5s
441//pw_console/py:help_window_test                                         PASSED in 2.8s
442//pw_console/py:log_filter_test                                          PASSED in 4.2s
443//pw_console/py:log_store_test                                           PASSED in 4.1s
444//pw_console/py:log_view_test                                            PASSED in 4.4s
445//pw_console/py:repl_pane_test                                           PASSED in 5.2s
446//pw_console/py:table_test                                               PASSED in 3.0s
447//pw_console/py:text_formatting_test                                     PASSED in 3.5s
448//pw_console/py:window_manager_test                                      PASSED in 5.9s
449//pw_hdlc/py:decode_test                                                 PASSED in 0.6s
450//pw_hdlc/py:encode_test                                                 PASSED in 0.5s
451//pw_hdlc/py:rpc_test                                                    PASSED in 1.5s
452//pw_rpc/nanopb:synchronous_call_test                                    PASSED in 0.1s
453//pw_rpc/pwpb:synchronous_call_test                                      PASSED in 0.1s
454//pw_rpc/py:callback_client_test                                         PASSED in 3.2s
455//pw_rpc/py:client_test                                                  PASSED in 2.1s
456//pw_rpc/py:descriptors_test                                             PASSED in 1.1s
457//pw_rpc/py:ids_test                                                     PASSED in 1.1s
458//pw_rpc/py:packets_test                                                 PASSED in 1.2s
459//pw_rpc/raw:synchronous_call_test                                       PASSED in 0.2s
460//pw_tokenizer/py:decode_test                                            PASSED in 0.9s
461//pw_tokenizer/py:detokenize_test                                        PASSED in 0.8s
462//pw_tokenizer/py:elf_reader_test                                        PASSED in 1.1s
463//pw_tokenizer/py:encode_test                                            PASSED in 0.9s
464//pw_tokenizer/py:tokens_test                                            PASSED in 0.9s
465//pw_transfer/integration_test:cross_language_medium_write_test          PASSED in 82.6s
466//pw_transfer/integration_test:cross_language_small_test                 PASSED in 51.0s
467//pw_transfer/integration_test:expected_errors_test                      PASSED in 167.6s
468//pw_transfer/integration_test:legacy_binaries_test                      PASSED in 53.2s
469//pw_transfer/integration_test:multi_transfer_test                       PASSED in 13.1s
470//pw_transfer/integration_test:proxy_test                                PASSED in 2.4s
471//pw_transfer/py:transfer_test                                           PASSED in 1.4s
472//pw_transfer/integration_test:cross_language_medium_read_test           FAILED in 82.1s
473<truncated>/pw_transfer/integration_test/cross_language_medium_read_test/test.log
474
475Executed 35 out of 343 tests: 334 tests pass, 1 fails locally and 8 were skipped.
476There were tests whose specified size is too big. Use the --test_verbose_timeout_warnings command line option to see which ones these are.
477"""
478
479_REAL_TEST_SUMMARY_2 = """
480FAIL: //pw_transfer/integration_test:cross_language_medium_read_test (see <truncated>/pw_transfer/integration_test/cross_language_medium_read_test/test.log)
481INFO: From Testing //pw_transfer/integration_test:cross_language_medium_read_test:
482stdout (<truncated>/_tmp/actions/stdout-2115) 1131999 exceeds maximum size of --experimental_ui_max_stdouterr_bytes=1048576 bytes; skipping
483INFO: Elapsed time: 507.459s, Critical Path: 181.66s
484INFO: 1206 processes: 1235 linux-sandbox, 4 worker.
485INFO: Build completed, 1 test FAILED, 1206 total actions
486//pw_transfer/integration_test:cross_language_medium_read_test           FAILED in 82.1s
487<truncated>/pw_transfer/integration_test/cross_language_medium_read_test/test.log
488Executed 35 out of 343 tests: 334 tests pass, 1 fails locally and 8 were skipped.
489"""
490
491# pylint: disable=attribute-defined-outside-init
492
493
494class TestBazelParser(unittest.TestCase):
495    """Test bazel_parser."""
496
497    def _run(self, contents: str) -> None:
498        with tempfile.TemporaryDirectory() as tempdir:
499            path = Path(tempdir) / 'foo'
500
501            with path.open('w') as outs:
502                outs.write(contents)
503
504            self.output = bazel_parser.parse_bazel_stdout(path)
505
506    def _assert_equal(self, left, right):
507        if (
508            not isinstance(left, str)
509            or not isinstance(right, str)
510            or '\n' not in left
511            or '\n' not in right
512        ):
513            return self.assertEqual(left, right)
514
515        diff = ''.join(
516            difflib.unified_diff(left.splitlines(True), right.splitlines(True))
517        )
518        return self.assertSequenceEqual(left, right, f'\n{diff}\n')
519
520    def test_simple(self) -> None:
521        error = 'ERROR: abc\nerror 1\nerror2\n'
522        self._run('[0/10] foo\n[1/10] bar\n' + error)
523        self._assert_equal(error.strip(), self.output.strip())
524
525    def test_path(self) -> None:
526        error_in = 'ERROR: abc\n PATH=... \\\nerror 1\nerror2\n'
527        error_out = 'ERROR: abc\nerror 1\nerror2\n'
528        self._run('[0/10] foo\n[1/10] bar\n' + error_in)
529        self._assert_equal(error_out.strip(), self.output.strip())
530
531    def test_failure(self) -> None:
532        self._run(_REAL_TEST_INPUT)
533        self._assert_equal(_REAL_TEST_SUMMARY.strip(), self.output.strip())
534
535    def test_failure_2(self) -> None:
536        self._run(_REAL_TEST_INPUT_2)
537        self._assert_equal(_REAL_TEST_SUMMARY_2.strip(), self.output.strip())
538
539
540if __name__ == '__main__':
541    unittest.main()
542