#! /bin/bash # Copyright (C) 2013 The Android Open Source Project # # 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. # Test for warn_collector. Run the warn collector in the background, emulate # the kernel by appending lines to the log file "messages", and observe the log # of the (fake) crash reporter each time is run by the warn collector daemon. set -e fail() { printf '[ FAIL ] %b\n' "$*" exit 1 } if [[ -z ${SYSROOT} ]]; then fail "SYSROOT must be set for this test to work" fi : ${OUT:=${PWD}} cd "${OUT}" PATH=${OUT}:${PATH} TESTLOG="${OUT}/warn-test-log" echo "Testing: $(which warn_collector)" cleanup() { # Kill daemon (if started) on exit kill % } check_log() { local n_expected=$1 if [[ ! -f ${TESTLOG} ]]; then fail "${TESTLOG} was not created" fi if [[ $(wc -l < "${TESTLOG}") -ne ${n_expected} ]]; then fail "expected ${n_expected} lines in ${TESTLOG}, found this instead: $(<"${TESTLOG}")" fi if egrep -qv '^[0-9a-f]{8}' "${TESTLOG}"; then fail "found bad lines in ${TESTLOG}: $(<"${TESTLOG}")" fi } rm -f "${TESTLOG}" cp "${SRC}/warn_collector_test_reporter.sh" . cp "${SRC}/TEST_WARNING" . cp TEST_WARNING messages # Start the collector daemon. With the --test option, the daemon reads input # from ./messages, writes the warning into ./warning, and invokes # ./warn_collector_test_reporter.sh to report the warning. warn_collector --test & trap cleanup EXIT # After a while, check that the first warning has been collected. sleep 1 check_log 1 # Add the same warning to messages, verify that it is NOT collected cat TEST_WARNING >> messages sleep 1 check_log 1 # Add a slightly different warning to messages, check that it is collected. sed s/intel_dp.c/intel_xx.c/ < TEST_WARNING >> messages sleep 1 check_log 2 # Emulate log rotation, add a warning, and check. mv messages messages.1 sed s/intel_dp.c/intel_xy.c/ < TEST_WARNING > messages sleep 2 check_log 3 # Success! exit 0