| # |
| # 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 |