1*9712c20fSFrederick Mayle#!/bin/sh 2*9712c20fSFrederick Mayle# 3*9712c20fSFrederick Mayle# Copyright 2012 Google LLC 4*9712c20fSFrederick Mayle# 5*9712c20fSFrederick Mayle# Redistribution and use in source and binary forms, with or without 6*9712c20fSFrederick Mayle# modification, are permitted provided that the following conditions are 7*9712c20fSFrederick Mayle# met: 8*9712c20fSFrederick Mayle# 9*9712c20fSFrederick Mayle# * Redistributions of source code must retain the above copyright 10*9712c20fSFrederick Mayle# notice, this list of conditions and the following disclaimer. 11*9712c20fSFrederick Mayle# * Redistributions in binary form must reproduce the above 12*9712c20fSFrederick Mayle# copyright notice, this list of conditions and the following disclaimer 13*9712c20fSFrederick Mayle# in the documentation and/or other materials provided with the 14*9712c20fSFrederick Mayle# distribution. 15*9712c20fSFrederick Mayle# * Neither the name of Google LLC nor the names of its 16*9712c20fSFrederick Mayle# contributors may be used to endorse or promote products derived from 17*9712c20fSFrederick Mayle# this software without specific prior written permission. 18*9712c20fSFrederick Mayle# 19*9712c20fSFrederick Mayle# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20*9712c20fSFrederick Mayle# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21*9712c20fSFrederick Mayle# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22*9712c20fSFrederick Mayle# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23*9712c20fSFrederick Mayle# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24*9712c20fSFrederick Mayle# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25*9712c20fSFrederick Mayle# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26*9712c20fSFrederick Mayle# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27*9712c20fSFrederick Mayle# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28*9712c20fSFrederick Mayle# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29*9712c20fSFrederick Mayle# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30*9712c20fSFrederick Mayle 31*9712c20fSFrederick Mayle# A special shell wrapper that can be used to run the Google Breakpad unit 32*9712c20fSFrederick Mayle# tests on a connected Android device. 33*9712c20fSFrederick Mayle# 34*9712c20fSFrederick Mayle# This is designed to be called from the Makefile during 'make check' 35*9712c20fSFrederick Mayle# 36*9712c20fSFrederick Mayle 37*9712c20fSFrederick MaylePROGDIR=$(dirname "$0") 38*9712c20fSFrederick MaylePROGNAME=$(basename "$0") 39*9712c20fSFrederick Mayle. $PROGDIR/common-functions.sh 40*9712c20fSFrederick Mayle 41*9712c20fSFrederick Mayle# Extract test program name first. 42*9712c20fSFrederick MayleTEST_PROGRAM=$1 43*9712c20fSFrederick Mayleshift 44*9712c20fSFrederick Mayle 45*9712c20fSFrederick Mayleif [ -z "$TEST_PROGRAM" ]; then 46*9712c20fSFrederick Mayle panic "No test program/script name on the command-line!" 47*9712c20fSFrederick Maylefi 48*9712c20fSFrederick Mayle 49*9712c20fSFrederick Mayleif [ ! -f "$TEST_PROGRAM" ]; then 50*9712c20fSFrederick Mayle panic "Can't find test program/script: $TEST_PROGRAM" 51*9712c20fSFrederick Maylefi 52*9712c20fSFrederick Mayle 53*9712c20fSFrederick Mayle# Create test directory on the device 54*9712c20fSFrederick MayleTEST_DIR=/data/local/tmp/test-google-breakpad-$$ 55*9712c20fSFrederick Mayleadb_shell mkdir "$TEST_DIR" || 56*9712c20fSFrederick Mayle panic "Can't create test directory on device: $TEST_DIR" 57*9712c20fSFrederick Mayle 58*9712c20fSFrederick Mayle# Ensure that it is always removed when the script exits. 59*9712c20fSFrederick Mayleclean_test_dir () { 60*9712c20fSFrederick Mayle # Don't care about success/failure, use '$ADB shell' directly. 61*9712c20fSFrederick Mayle adb_shell rm -r "$TEST_DIR" 62*9712c20fSFrederick Mayle} 63*9712c20fSFrederick Mayle 64*9712c20fSFrederick Mayleatexit clean_test_dir 65*9712c20fSFrederick Mayle 66*9712c20fSFrederick MayleTEST_PROGRAM_NAME=$(basename "$TEST_PROGRAM") 67*9712c20fSFrederick MayleTEST_PROGRAM_DIR=$(dirname "$TEST_PROGRAM") 68*9712c20fSFrederick Mayle 69*9712c20fSFrederick Mayle# Handle special case(s) here. 70*9712c20fSFrederick MayleDATA_FILES= 71*9712c20fSFrederick Maylecase $TEST_PROGRAM_NAME in 72*9712c20fSFrederick Mayle linux_client_unittest) 73*9712c20fSFrederick Mayle # linux_client_unittest will call another executable at runtime, ensure 74*9712c20fSFrederick Mayle # it is installed too. 75*9712c20fSFrederick Mayle adb_install "$TEST_PROGRAM_DIR/linux_dumper_unittest_helper" "$TEST_DIR" 76*9712c20fSFrederick Mayle # linux_client_unittest loads a shared library at runtime, ensure it is 77*9712c20fSFrederick Mayle # installed too. 78*9712c20fSFrederick Mayle adb_install "$TEST_PROGRAM_DIR/linux_client_unittest_shlib" "$TEST_DIR" 79*9712c20fSFrederick Mayle ;; 80*9712c20fSFrederick Mayle basic_source_line_resolver_unittest) 81*9712c20fSFrederick Mayle DATA_FILES="module1.out \ 82*9712c20fSFrederick Mayle module2.out \ 83*9712c20fSFrederick Mayle module3_bad.out \ 84*9712c20fSFrederick Mayle module4_bad.out" 85*9712c20fSFrederick Mayle ;; 86*9712c20fSFrederick Mayle exploitability_unittest) 87*9712c20fSFrederick Mayle DATA_FILES="scii_read_av.dmp \ 88*9712c20fSFrederick Mayle ascii_read_av_block_write.dmp \ 89*9712c20fSFrederick Mayle ascii_read_av_clobber_write.dmp \ 90*9712c20fSFrederick Mayle ascii_read_av_conditional.dmp \ 91*9712c20fSFrederick Mayle ascii_read_av_non_null.dmp \ 92*9712c20fSFrederick Mayle ascii_read_av_then_jmp.dmp \ 93*9712c20fSFrederick Mayle ascii_read_av_xchg_write.dmp \ 94*9712c20fSFrederick Mayle ascii_write_av.dmp \ 95*9712c20fSFrederick Mayle ascii_write_av_arg_to_call.dmp \ 96*9712c20fSFrederick Mayle exec_av_on_stack.dmp \ 97*9712c20fSFrederick Mayle null_read_av.dmp \ 98*9712c20fSFrederick Mayle null_write_av.dmp \ 99*9712c20fSFrederick Mayle read_av.dmp \ 100*9712c20fSFrederick Mayle null_read_av.dmp \ 101*9712c20fSFrederick Mayle write_av_non_null.dmp" 102*9712c20fSFrederick Mayle ;; 103*9712c20fSFrederick Mayle fast_source_line_resolver_unittest) 104*9712c20fSFrederick Mayle DATA_FILES="module0.out \ 105*9712c20fSFrederick Mayle module1.out \ 106*9712c20fSFrederick Mayle module2.out \ 107*9712c20fSFrederick Mayle module3_bad.out \ 108*9712c20fSFrederick Mayle module4_bad.out" 109*9712c20fSFrederick Mayle ;; 110*9712c20fSFrederick Mayle minidump_processor_unittest|minidump_unittest) 111*9712c20fSFrederick Mayle DATA_FILES="src/processor/testdata/minidump2.dmp" 112*9712c20fSFrederick Mayle ;; 113*9712c20fSFrederick Mayleesac 114*9712c20fSFrederick Mayle 115*9712c20fSFrederick Mayle# Install the data files, their path is relative to the environment 116*9712c20fSFrederick Mayle# variable 'srcdir' 117*9712c20fSFrederick Maylefor FILE in $DATA_FILES; do 118*9712c20fSFrederick Mayle FILEDIR=src/processor/testdata/$(dirname "$FILE") 119*9712c20fSFrederick Mayle adb_shell mkdir -p "$TEST_DIR/$FILEDIR" 120*9712c20fSFrederick Mayle adb_install "${srcdir:-.}/$FILE" "$TEST_DIR"/"$FILE" 121*9712c20fSFrederick Mayledone 122*9712c20fSFrederick Mayle 123*9712c20fSFrederick Mayle# Copy test program to device 124*9712c20fSFrederick Mayleadb_install "$TEST_PROGRAM" "$TEST_DIR" 125*9712c20fSFrederick Mayle 126*9712c20fSFrederick Mayle# Run it 127*9712c20fSFrederick Mayleadb_shell "cd $TEST_DIR && LD_LIBRARY_PATH=. ./$TEST_PROGRAM_NAME $@" 128*9712c20fSFrederick Mayle 129*9712c20fSFrederick Mayle# Note: exiting here will call cleanup_exit which will remove the temporary 130*9712c20fSFrederick Mayle# files from the device. 131