Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(2779)

Unified Diff: android/run-checks.sh

Issue 441002: Fix 'make check' for Android (Closed) Base URL: http://google-breakpad.googlecode.com/svn/trunk/
Patch Set: Created 11 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « android/common-functions.sh ('k') | android/test-shell.sh » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: android/run-checks.sh
===================================================================
--- android/run-checks.sh (revision 1022)
+++ android/run-checks.sh (working copy)
@@ -40,59 +40,14 @@
PROGDIR=$(cd "$PROGDIR" && pwd)
PROGNAME=$(basename "$0")
-# Utility functions
+. $PROGDIR/common-functions.sh
-TMPDIR=
-
-# Used to exit the program after removing the temporary directory.
-clean_exit () {
- if [ "$TMPDIR" ]; then
- if [ -z "$NO_CLEANUP" ]; then
- log "Cleaning up: $TMPDIR"
- rm -rf "$TMPDIR"
- else
- dump "Temporary directory contents preserved: $TMPDIR"
- fi
- fi
- exit "$@"
-}
-
-# Dump a panic message then exit.
-panic () {
- echo "ERROR: $@"
- clean_exit 1;
-}
-
-# If the previous command failed, dump a panic message then exit.
-fail_panic () {
- if [ $? != 0 ]; then
- panic "$@"
- fi;
-}
-
-# Extract number of cores to speed up the builds
-get_core_count () {
- case $(uname -s) in
- Linux)
- grep -c -e '^processor' /proc/cpuinfo
- ;;
- Darwin)
- sysctl -n hw.ncpu
- ;;
- CYGWIN*|*_NT-*)
- echo $NUMBER_OF_PROCESSORS
- ;;
- *)
- echo 1
- ;;
- esac
-}
-
DEFAULT_ABI="armeabi"
VALID_ABIS="armeabi armeabi-v7a x86 mips"
ABI=
ADB=
+ALL_TESTS=
ENABLE_M32=
HELP=
HELP_ALL=
@@ -101,7 +56,6 @@
NO_DEVICE=
NUM_JOBS=$(get_core_count)
TMPDIR=
-VERBOSE=0
for opt do
# The following extracts the value if the option is like --name=<value>.
@@ -109,6 +63,7 @@
case $opt in
--abi=*) ABI=$optarg;;
--adb=*) ADB=$optarg;;
+ --all-tests) ALL_TESTS=true;;
--enable-m32) ENABLE_M32=true;;
--help|-h|-?) HELP=TRUE;;
--help-all) HELP_ALL=true;;
@@ -117,8 +72,8 @@
--tmp-dir=*) TMPDIR=$optarg;;
--no-cleanup) NO_CLEANUP=true;;
--no-device) NO_DEVICE=true;;
- --quiet) VERBOSE=$(( $VERBOSE - 1 ));;
- --verbose) VERBOSE=$(( $VERBOSE + 1 ));;
+ --quiet) decrease_verbosity;;
+ --verbose) increase_verbosity;;
-*) panic "Invalid option '$opt', see --help for details.";;
*) panic "This script doesn't take any parameters. See --help for details."
;;
@@ -180,6 +135,12 @@
--abi=<name> to override this. Valid ABI names are:
$VALID_ABIS
+
+ The script will only run the client library unit test on the device
+ by default. You can use --all-tests to also build and run the unit
+ tests for the Breakpad tools and processor, but be warned that this
+ adds several minutes of testing time. --all-tests will also run the
+ host unit tests suite.
"
fi # HELP_ALL
@@ -197,67 +158,13 @@
--adb=<path> Specify adb program path.
--no-cleanup Don't remove temporary directory after completion.
--no-device Do not try to detect devices, nor run crash test.
+ --all-tests Run all unit tests (i.e. tools and processor ones too).
--verbose Increase verbosity.
--quiet Decrease verbosity."
- clean_exit 0
+ exit 0
fi
-# Dump message to stdout, unless verbosity is < 0, i.e. --quiet was called
-dump () {
- if [ "$VERBOSE" -ge 0 ]; then
- echo "$@"
- fi
-}
-
-# If --verbose was used, dump a message to stdout.
-log () {
- if [ "$VERBOSE" -ge 1 ]; then
- echo "$@"
- fi
-}
-
-# Run a command. Output depends on $VERBOSE:
-# $VERBOSE <= 0: Run command, store output into the run log
-# $VERBOSE >= 1: Dump command, run it, output goest to stdout
-# Note: Ideally, the command's output would go to the run log for $VERBOSE >= 1
-# but the 'tee' tool doesn't preserve the status code of its input pipe
-# in case of error.
-run () {
- local LOGILE
- if [ "$RUN_LOG" ]; then
- LOGFILE=$RUN_LOG
- else
- LOGFILE=/dev/null
- fi
-
- if [ "$VERBOSE" -ge 1 ]; then
- echo "COMMAND: $@"
- "$@"
- else
- "$@" >>$LOGFILE 2>&1
- fi
-}
-
-# Same as run(), but only dump command output for $VERBOSE >= 2
-run2 () {
- local LOGILE
- if [ "$RUN_LOG" ]; then
- LOGFILE=$RUN_LOG
- else
- LOGFILE=/dev/null
- fi
-
- if [ "$VERBOSE" -ge 1 ]; then
- echo "COMMAND: $@"
- fi
- if [ "$VERBOSE" -ge 2 ]; then
- "$@"
- else
- "$@" >>$LOGFILE 2>&1
- fi
-}
-
TESTAPP_DIR=$PROGDIR/sample_app
# Select NDK install directory.
@@ -277,6 +184,23 @@
panic "Your NDK directory is not valid (missing ndk-build): $NDK_DIR"
fi
+# Ensure the temporary directory is deleted on exit, except if the --no-cleanup
+# option is used.
+
+clean_tmpdir () {
+ if [ "$TMPDIR" ]; then
+ if [ -z "$NO_CLEANUP" ]; then
+ log "Cleaning up: $TMPDIR"
+ rm -rf "$TMPDIR"
+ else
+ dump "Temporary directory contents preserved: $TMPDIR"
+ fi
+ fi
+ exit "$@"
+}
+
+atexit clean_tmpdir
+
# If --tmp-dir=<path> is not used, create a temporary directory.
# Otherwise, start by cleaning up the user-provided path.
if [ -z "$TMPDIR" ]; then
@@ -294,101 +218,26 @@
fi
fi
-# Ensure a clean exit when the script is:
-# - Interrupted by Ctrl-C (INT)
-# - Interrupted by log out (HUP)
-# - Being asked to quit nicely (TERM)
-# - Being asked to quit and dump core (QUIT)
-trap "clean_exit 1" INT HUP TERM QUIT
-
-# The 'adb shell' command is pretty hopeless, try to make sense of it by:
-# 1/ Removing trailing \r from line endings.
-# 2/ Ensuring the function returns the command's status code.
-#
-adb_shell () {
- local RET ADB_LOG
- ADB_LOG=$(mktemp "$TMPDIR/adb-XXXXXXXX")
- "$ADB" shell "$@" ";" echo \$? > "$ADB_LOG" 2>&1
- sed -i -e 's![[:cntrl:]]!!g' "$ADB_LOG" # Remove \r.
- RET=$(sed -e '$!d' "$ADB_LOG") # Last line contains status code.
- sed -e '$d' "$ADB_LOG" # Print everything except last line.
- rm -f "$ADB_LOG"
- return $RET
-}
-
-check_for_adb () {
- local ADB_VERSION ADB_DEVICES NUM_DEVICES FINGERPRINT
-
- # Auto-detect ADB in current path when needed.
- if [ -z "$ADB" ]; then
- ADB=$(which adb 2>/dev/null)
- if [ -z "$ADB" ]; then
- panic "The 'adb' tool is not in your path! Use either --no-device to\
- only check the builds, or --adb=<path> to specify the tool path."
- fi
- log "Found ADB path: $ADB"
- else
- log "Using ADB path: $ADB"
- fi
-
- # Check that it works.
- ADB_VERSION=$("$ADB" version 2>/dev/null)
- case $ADB_VERSION in
- "Android Debug Bridge "*) # Pass.
- log "Found ADB version: $ADB_VERSION"
- ;;
- *) # Fail.
- panic "Your ADB binary does not seem to work: $ADB"
- ;;
- esac
-
- # Count the number of connected devices.
- ADB_DEVICES=$("$ADB" devices 2>/dev/null | awk '$2 == "device" { print $1; }')
- if [ "$ADB_DEVICES" ]; then
- NUM_DEVICES=$(echo "$ADB_DEVICES" | wc -l)
- else
- NUM_DEVICES=0
- fi
- case $NUM_DEVICES in
- 0)
- panic "No Android device connected! Connect one, or use --no-device \
-to only check the builds."
- ;;
- 1)
- export ANDROID_SERIAL=$ADB_DEVICES
- ;;
- *)
- if [ "$ANDROID_SERIAL" ]; then
- ADB_DEVICES=$ANDROID_SERIAL
- NUM_DEVICES=1
- else
- dump "ERROR: More than one Android device connected. Please define \
-ANDROID_SERIAL"
- dump " in your environment, or use --no-device to only check \
-the builds."
- clean_exit 1
- fi
- ;;
- esac
-
- FINGERPRINT=$(adb_shell getprop ro.build.fingerprint)
- dump "Using device: $ANDROID_SERIAL ($FINGERPRINT)"
-}
-
if [ -z "$NO_DEVICE" ]; then
- check_for_adb
+ if ! adb_check_device $ADB; then
+ echo "$(adb_get_error)"
+ echo "Use --no-device to build the code without running any tests."
+ exit 1
+ fi
fi
BUILD_LOG="$TMPDIR/build.log"
RUN_LOG="$TMPDIR/run.log"
CRASH_LOG="$TMPDIR/crash.log"
+set_run_log "$RUN_LOG"
+
TMPHOST="$TMPDIR/host-local"
cd "$TMPDIR"
# Build host version of the tools
-dump "Building host tools."
+dump "Building host binaries."
CONFIGURE_FLAGS=
if [ "$ENABLE_M32" ]; then
CONFIGURE_FLAGS="$CONFIGURE_FLAGS --enable-m32"
@@ -399,14 +248,23 @@
run2 "$PROGDIR/../configure" --prefix="$TMPHOST" $CONFIGURE_FLAGS &&
run2 make -j$NUM_JOBS install
)
-fail_panic "Can't build host-tools!"
+fail_panic "Can't build host binaries!"
+if [ "$ALL_TESTS" ]; then
+ dump "Running host unit tests."
+ (
+ run cd "$TMPDIR/build-host" &&
+ run2 make -j$NUM_JOBS check
+ )
+ fail_panic "Host unit tests failed!!"
+fi
+
TMPBIN=$TMPHOST/bin
# Generate a stand-alone NDK toolchain
# Extract CPU ABI and architecture from device, if any.
-if [ "$ADB" ]; then
+if adb_check_device; then
DEVICE_ABI=$(adb_shell getprop ro.product.cpu.abi)
DEVICE_ABI2=$(adb_shell getprop ro.product.cpu.abi2)
if [ -z "$DEVICE_ABI" ]; then
@@ -477,15 +335,17 @@
NDK_STANDALONE="$TMPDIR/ndk-$ARCH-toolchain"
echo "Generating NDK standalone toolchain installation"
mkdir -p "$NDK_STANDALONE"
+# NOTE: The --platform=android-9 is required to provide <regex.h> for GTest.
run "$NDK_DIR/build/tools/make-standalone-toolchain.sh" \
--arch="$ARCH" \
+ --platform=android-9 \
--install-dir="$NDK_STANDALONE"
fail_panic "Can't generate standalone NDK toolchain installation!"
# Rebuild the client library, processor and tools with the auto-tools based
# build system. Even though it's not going to be used, this checks that this
# still works correctly.
-echo "Building Android binaries with configure/make"
+echo "Building full Android binaries with configure/make"
TMPTARGET="$TMPDIR/target-local"
(
PATH="$NDK_STANDALONE/bin:$PATH"
@@ -498,6 +358,40 @@
)
fail_panic "Could not rebuild Android binaries!"
+# Build and/or run unit test suite.
+# If --no-device is used, only rebuild it, otherwise, run in on the
+# connected device.
+if [ "$NO_DEVICE" ]; then
+ ACTION="Building"
+ # This is a trick to force the Makefile to ignore running the scripts.
+ TESTS_ENVIRONMENT="TESTS_ENVIRONMENT=true"
+else
+ ACTION="Running"
+ TESTS_ENVIRONMENT=
+fi
+if [ "$ALL_TESTS" ]; then
+ dump "$ACTION full Android unit tests."
+else
+ dump "$ACTION Android client library unit tests."
+fi
+
+(
+ PATH="$NDK_STANDALONE/bin:$PATH"
+ run cd "$TMPDIR"/build-target &&
+ if [ -z "$ALL_TESTS" ]; then
+ # Reconfigure to avoid building the unit tests for the tools
+ # and processor, unless --all-tests is used.
+ run2 "$PROGDIR"/../configure --prefix="$TMPTARGET" \
+ --host="$GNU_CONFIG" \
+ --disable-tools \
+ --disable-processor
+ fi &&
+ run make -j$NUM_JOBS check $TESTS_ENVIRONMENT
+)
+if [ -z "$NO_DEVICE" ] && verbosity_is_lower_than 2; then
+ dump " Unit tests failed as expected. Use --verbose to see results."
+fi
+
# Copy sources to temporary directory
PROJECT_DIR=$TMPDIR/project
dump "Copying test program sources to: $PROJECT_DIR"
@@ -510,7 +404,7 @@
dump "Building test program with ndk-build"
export NDK_MODULE_PATH="$PROGDIR"
NDK_BUILD_FLAGS="-j$NUM_JOBS"
-if [ "$VERBOSE" -ge 2 ]; then
+if verbosity_is_higher_than 1; then
NDK_BUILD_FLAGS="$NDK_BUILD_FLAGS NDK_LOG=1 V=1"
fi
run "$NDK_DIR/ndk-build" -C "$PROJECT_DIR" $NDK_BUILD_FLAGS APP_ABI=$ABI
@@ -533,7 +427,7 @@
# Run the program there
dump "Installing test program on device"
DEVICE_TMP=/data/local/tmp
-run "$ADB" push "$TESTAPP_FILE" "$DEVICE_TMP/"
+adb_push "$TESTAPP_FILE" "$DEVICE_TMP/"
fail_panic "Cannot push test program to device!"
dump "Running test program on device"
@@ -541,7 +435,7 @@
if [ $? = 0 ]; then
panic "Test program did *not* crash as expected!"
fi
-if [ "$VERBOSE" -ge 1 ]; then
+if verbosity_is_higher_than 0; then
echo -n "Crash log: "
cat "$CRASH_LOG"
fi
@@ -554,11 +448,11 @@
fi
dump "Extracting minidump: $MINIDUMP_NAME"
-run "$ADB" pull "$DEVICE_TMP/$MINIDUMP_NAME" .
+adb_pull "$DEVICE_TMP/$MINIDUMP_NAME" .
fail_panic "Can't extract minidump!"
dump "Parsing test program symbols"
-if [ "$VERBOSE" -ge 1 ]; then
+if verbosity_is_higher_than 1; then
log "COMMAND: $TMPBIN/dump_syms \
$PROJECT_DIR/obj/local/$ABI/$TESTAPP >$TESTAPP.sym"
fi
@@ -586,7 +480,7 @@
dump "Checking stack trace content"
-if [ "$VERBOSE" -ge 1 ]; then
+if verbosity_is_higher_than 1; then
cat "$BUILD_LOG"
fi
@@ -622,7 +516,7 @@
LOCATIONS=$(awk '$2 ~ "^test_google_breakpad!.*" { print $3; }' "$BUILD_LOG")
if [ -z "$LOCATIONS" ]; then
- if [ "$VERBOSE" -lt 1 ]; then
+ if verbosity_is_lower_than 1; then
cat "$BUILD_LOG"
fi
panic "No source location found in stack trace!"
@@ -646,8 +540,8 @@
dump "ERROR: Generated stack trace doesn't contain valid source locations:"
cat "$BUILD_LOG"
echo "Bad locations are: $BAD_LOCATIONS"
- clean_exit 1
+ exit 1
fi
echo "All clear! Congratulations."
-clean_exit 0
+
« no previous file with comments | « android/common-functions.sh ('k') | android/test-shell.sh » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld 1004:630ec63f810e-tainted