197 lines
5.4 KiB
Bash
Executable File
197 lines
5.4 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Copyright 2012 The ChromiumOS Authors
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
. /usr/share/misc/shflags
|
|
|
|
DEFINE_string out "testlog.txt" "Output log from replay"
|
|
DEFINE_string only_honor "Tap Enable,Sensitivity" \
|
|
"Which properties from the log should be honored"
|
|
|
|
FLAGS_HELP="usage: replay_log [--out testlog.txt] [--only_honor Props] \
|
|
infile|feedback_url"
|
|
|
|
FLAGS "$@" || exit 1
|
|
eval set -- "${FLAGS_ARGV}"
|
|
|
|
# Only now can we die on error. shflags functions leak non-zero error codes,
|
|
# so will die prematurely if 'set -e' is specified before now.
|
|
set -e
|
|
|
|
infile="${1}"
|
|
if [ $# -ne 1 ]; then
|
|
echo $FLAGS_HELP
|
|
exit 1
|
|
fi
|
|
|
|
COOKIE_DIR="$(readlink -f "$(dirname "$0")/../cookies")"
|
|
COOKIE_FILE="${COOKIE_DIR}/login.cookie"
|
|
|
|
setup_login_cookie_dir() {
|
|
mkdir -p "$COOKIE_DIR"
|
|
chmod 0700 "$COOKIE_DIR"
|
|
}
|
|
|
|
login() {
|
|
setup_login_cookie_dir
|
|
read -p "Username (without @google.com): " USER
|
|
read -s -p "Password: " PASS
|
|
echo
|
|
read -p "OTP: " OTP
|
|
LOGIN_POST_FILE="$COOKIE_DIR/login.post"
|
|
LOGIN_RESULTS_FILE="$COOKIE_DIR/login.results"
|
|
echo "u=${USER}&pw=${PASS}&otp=${OTP}" > "$LOGIN_POST_FILE"
|
|
echo "Logging in..."
|
|
curl -s -c "$COOKIE_FILE" -L -d @"$LOGIN_POST_FILE" \
|
|
'https://login.corp.google.com/login?ssoformat=CORP_SSO' \
|
|
> $LOGIN_RESULTS_FILE
|
|
local should_abort="$FLAGS_FALSE"
|
|
if grep -i error ${LOGIN_RESULTS_FILE} >/dev/null; then
|
|
echo Login failure.
|
|
should_abort="$FLAGS_TRUE"
|
|
else
|
|
echo Login success
|
|
fi
|
|
rm -f "$LOGIN_POST_FILE"
|
|
rm -f "$LOGIN_RESULTS_FILE"
|
|
if [ $should_abort -eq $FLAGS_TRUE ]; then
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
if [[ "$infile" = "https://"* ]]; then
|
|
LOG_IDNUM=$(echo "$infile" | sed 's/.*[^0-9]\([0-9][0-9][0-9][0-9]*\).*/\1/')
|
|
LOG_FILE="report-${LOG_IDNUM}-system_logs.bz2"
|
|
LOG_URL="https://feedback.corp.googleusercontent.com/\
|
|
binarydata/${LOG_FILE}?id=${LOG_IDNUM}&logIndex=0"
|
|
if [ -f "${LOG_FILE}" ]; then
|
|
echo already have file
|
|
infile=${LOG_FILE}
|
|
else
|
|
echo downloading log file
|
|
TRIES=0
|
|
while true; do
|
|
http_proxy=http://cache.corp.google.com:3128/ curl -b "$COOKIE_FILE" \
|
|
-L -o "$LOG_FILE" "$LOG_URL"
|
|
TYPE="$(file -b "$LOG_FILE" | cut -d ' ' -f 1)"
|
|
if [[ "$TYPE" = bzip2 || "$TYPE" = Zip ]]; then
|
|
# download success
|
|
infile="$LOG_FILE"
|
|
break
|
|
fi
|
|
rm -f "$LOG_FILE"
|
|
TRIES=$((TRIES + 1))
|
|
if [ $TRIES -eq 2 ]; then
|
|
echo Failed twice. Aborting
|
|
exit 1
|
|
fi
|
|
# login failure
|
|
echo 'Download failure. Logging in'
|
|
login
|
|
done
|
|
fi
|
|
fi
|
|
|
|
# Convert the infile from a relative path to the realpath since we will
|
|
# change directory below.
|
|
original_infile="$infile"
|
|
infile="$(realpath $infile)"
|
|
|
|
# Go to the Gestures source root
|
|
cd $(dirname "$0")/..
|
|
|
|
make -j $(fgrep processor /proc/cpuinfo | wc -l) test
|
|
|
|
expand_input_file() {
|
|
# Get input filetype
|
|
intype="$(file -b "${infile}" | cut -d ' ' -f 1)"
|
|
# Extra check in case file gets ASCII wrong
|
|
if [ "$(head -n 1 "${infile}")" = "{" ]; then
|
|
intype="ASCII"
|
|
fi
|
|
|
|
if [ "$intype" = "bzip2" -o "$intype" = "Zip" ]; then
|
|
# Expand to the bzip2ed file within
|
|
local raw_text_log="raw_text_log.txt"
|
|
CAT=bzcat
|
|
if [ "$intype" = "Zip" ]; then
|
|
CAT=zcat
|
|
fi
|
|
$CAT "$infile" > "$raw_text_log"
|
|
cp "$raw_text_log" "full_feedback_log.txt"
|
|
if fgrep -q hack-33025-touchpad_activity "$raw_text_log"; then
|
|
# Expand the hack touchpad activity log
|
|
awk "/hack-33025-touchpad_activity/{found=1} found{print}" \
|
|
"$raw_text_log" > "$raw_text_log".tmp
|
|
mv "$raw_text_log".tmp "$raw_text_log"
|
|
fi
|
|
|
|
zlogs="$(cat "$raw_text_log" | uudecode -o - | tar xvf -)"
|
|
rm "$raw_text_log"
|
|
# take newest log and reduce to next case
|
|
cp "$(ls -t $zlogs | grep touchpad_activity | head -n 1)" log.gz
|
|
|
|
# Also expand evdev log
|
|
zcat "$(ls -t $zlogs | grep cmt_input_events | head -n 1)" > evlog.txt \
|
|
|| true
|
|
|
|
rm -f $zlogs
|
|
infile="log.gz"
|
|
intype="gzip"
|
|
fi
|
|
|
|
if [ "$intype" = "gzip" ]; then
|
|
zcat "$infile" > log.txt
|
|
infile="log.txt"
|
|
intype="ASCII"
|
|
fi
|
|
|
|
if [ "$intype" != "ASCII" ]; then
|
|
echo "Unable to read input file"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
run_test() {
|
|
expand_input_file
|
|
# We would like the shell to survive no matter whether ./test succeeds or not.
|
|
result=0
|
|
./test --gtest_also_run_disabled_tests \
|
|
--gtest_filter="ActivityReplayTest.DISABLED_SimpleTest" \
|
|
--outfile="$FLAGS_out" --only_honor="$FLAGS_only_honor" --in="$infile" ||
|
|
result=$?
|
|
}
|
|
|
|
# If infile is a file, test this log as before and there is no redirection.
|
|
# If infile is a directory, test all logs in the directory, and output
|
|
# the test statistics at the end.
|
|
if [ -f "$infile" ]; then
|
|
echo "$original_infile is a file."
|
|
run_test
|
|
elif [ -d "$infile" ]; then
|
|
statistics_result="$(mktemp)"
|
|
echo -e "\nInput directory: $original_infile\n" > $statistics_result
|
|
indir="$infile"
|
|
files=$(ls "$indir")
|
|
count=0
|
|
passed=0
|
|
for file in $files; do
|
|
infile="$indir/$file"
|
|
if [ -f "$infile" ]; then
|
|
run_test
|
|
if [ $result -eq 0 ]; then
|
|
echo "[ PASSED ] $original_infile/$file" >> $statistics_result
|
|
passed=$(($passed + 1))
|
|
else
|
|
echo "[ FAILED ] $original_infile/$file" >> $statistics_result
|
|
fi
|
|
count=$(($count + 1))
|
|
fi
|
|
done
|
|
cat $statistics_result
|
|
rm -fr $statistics_result
|
|
echo -e "\n$passed out of $count tests passed.\n"
|
|
fi
|