blob: e1f8a2909eb920277d066a8d7ca26adfecb4c265 [file] [log] [blame]
#! /bin/bash
# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# 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
SYSROOT=/build/link
LD_LIBRARY_PATH=$SYSROOT/lib64:$SYSROOT/usr/lib64
PATH=.:$SYSROOT/bin:$SYSROOT/usr/bin:$PATH
TESTLOG=warn-test-log
trap cleanup EXIT
cleanup() {
# Kill daemon (if started) on exit
kill %
}
check_log() {
n_expected=$1
if [ ! -f $TESTLOG ]; then
echo $TESTLOG was not created
exit 1
fi
if [ "$(wc -l < $TESTLOG)" -ne $n_expected ]; then
echo expected $n_expected lines in $TESTLOG, found this:
cat $TESTLOG
exit 1
fi
if egrep -qv '^[0-9a-f]{8}$' $TESTLOG; then
echo found bad lines in $TESTLOG:
cat $TESTLOG
exit 1
fi
}
rm -f warn-test-log
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 &
# 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