#!/bin/bash # # Copyright 2017 The Bazel Authors. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. set -euo pipefail # Assumes integration_test_setup.sh was loaded elsewhere (can't load it twice) enable_errexit readonly CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" readonly STATS_PROTO_PATH="${CURRENT_DIR}/../../../main/protobuf/execution_statistics.proto" readonly STATS_PROTO_DIR="$(cd "$(dirname "${STATS_PROTO_PATH}")" && pwd)" # Checks that user CPU time and system CPU time, as read from an execution # statistics proto file, are within expected bounds. # # This relies on ${protoc_compiler} being set (currently set in testenv.sh) # function assert_execution_time_in_range() { local utime_low="$1"; shift local utime_high="$1"; shift local stime_low="$1"; shift local stime_high="$1"; shift local stats_out_path="$1"; shift if ! [[ -e "${stats_out_path}" ]]; then fail "Stats file not found: '${stats_out_path}'" fi "${protoc_compiler}" --proto_path="${STATS_PROTO_DIR}" \ --decode tools.protos.ExecutionStatistics execution_statistics.proto \ < "${stats_out_path}" > "${stats_out_decoded_path}" if ! [[ -e "${stats_out_decoded_path}" ]]; then fail "Decoded stats file not found: '${stats_out_decoded_path}'" fi local utime=0 if grep -q utime_sec "${stats_out_decoded_path}"; then utime="$(grep utime_sec ${stats_out_decoded_path} | cut -f2 -d':' | \ tr -dc '0-9')" fi local stime=0 if grep -q stime_sec "${stats_out_decoded_path}"; then stime="$(grep stime_sec ${stats_out_decoded_path} | cut -f2 -d':' | \ tr -dc '0-9')" fi if ! [[ ${utime} -ge ${utime_low} && ${utime} -le ${utime_high} ]]; then fail "reported utime of '${utime}' is out of expected range" fi if ! [[ ${stime} -ge ${stime_low} && ${stime} -le ${stime_high} ]]; then fail "reported stime of '${stime}' is out of expected range" fi }