# # Copyright (C) 2014 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. # LOCAL_PATH := $(call my-dir) define declare-strace-test-target include $(CLEAR_VARS) LOCAL_SRC_FILES := $(1) LOCAL_MULTILIB := both LOCAL_CFLAGS := -Wno-unused-parameter -Wno-error=return-type LOCAL_MODULE := strace-$(basename $(1))-test LOCAL_MODULE_STEM_32 := strace-$(basename $(1))32-test LOCAL_MODULE_STEM_64 := strace-$(basename $(1))64-test LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES) LOCAL_MODULE_TAGS := tests LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk include $(BUILD_EXECUTABLE) endef src_files := \ childthread.c \ clone.c \ fork.c \ leaderkill.c \ mmap_offset_decode.c \ mtd.c \ select.c \ sfd.c \ sig.c \ sigkill_rain.c \ sigreturn.c \ skodic.c \ threaded_execve.c \ ubi.c \ vfork.c \ wait_must_be_interruptible.c \ $(foreach file, $(src_files), $(eval $(call declare-strace-test-target,$(file)))) # Simple sanity tests meant to be run manually on device. Tests expect that # strace will report "exit with 0" at the end of the programs. Some tests # document what string should be expected in the output and for them additional # checks is made (*-expected output vars)). # # Failure should be inspected manually. Usually they require a special test # setup that can't be easily automated. # # adb sync is requreired before running "mm run-strace-tests". # logs are pulled automatically from the device to the root of the tree # (strace-log-*) childthread-expected-output := 'write(1, "OK\\n",' clone-expected-output := 'write(1, "original\\n",' fork-expected-output := 'write(1, "parent\\n",' leaderkill-expected-output := 'write(1, "OK\\n",' mmap_offset_decode-expected-output := '' mtd-expected-output := '' select-expected-output := '' sfd-expected-output := '' sig-expected-output := 'write(2, "qwerty\\n",' sigkill_rain-expected-output := '' sigreturn-expected-output := 'RT_1 RT_3 RT_31 RT_32' skodic-expected-output := '' threaded_execve-expected-output := '' ubi-expected-output := '' vfork-expected-output := 'write(1, "parent\\n",' wait_must_be_interruptible-expected-output := 'write(1, "Good: wait seems to be correctly"' run-strace-%-test: TEST_TMP_DIR := /data/local/tmp run-strace-%-test: @printf >&2 "\n$*: RUNNING...\n" ; \ adb shell rm -f $(TEST_TMP_DIR)/strace-log-$* ; \ timeout -s 9 10 adb shell strace -v -f -o$(TEST_TMP_DIR)/strace-log-$* strace-$*-test > strace-log-$*-output ; \ adb pull $(TEST_TMP_DIR)/strace-log-$* 2> /dev/null ; \ adb pull $(TEST_TMP_DIR)/strace-log-$*-output 2> /dev/null ; \ if adb shell cat $(TEST_TMP_DIR)/strace-log-$* | grep "exited with 0" > /dev/null ; \ then \ if [ -n $($(shell echo $* | sed 's/[0-9]//g')-expected-output) ] ; then \ if adb shell cat $(TEST_TMP_DIR)/strace-log-$* | grep $($(shell echo $* | sed 's/[0-9]//g')-expected-output) > /dev/null ; \ then printf >&2 "$*: PASSED\n" ; \ else printf >&2 "$*: FAILED\n" ; \ fi ; \ else \ printf >&2 "$*: PASSED\n" ; \ fi ; \ else \ printf >&2 "$*: FAILED\n" ; \ fi adb-sync: adb sync run-strace32-test: $(foreach file, $(src_files), run-strace-$(basename $(file))32-test) run-strace64-test: $(foreach file, $(src_files), run-strace-$(basename $(file))64-test) run-strace-tests: adb-sync run-strace32-test run-strace64-test