blob: b95060c67e6a41928b9bfca42ca3f7c2b56f504b [file] [log] [blame]
Elliott Hughes858a5c72014-02-28 15:58:12 -08001#
2# Copyright (C) 2014 The Android Open Source Project
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16
17LOCAL_PATH := $(call my-dir)
18
19define declare-strace-test-target
20 include $(CLEAR_VARS)
21 LOCAL_SRC_FILES := $(1)
Fengwei Yinee295a42014-04-08 22:09:31 +080022 LOCAL_MULTILIB := both
Elliott Hughesfa8e4392014-02-28 17:56:20 -080023 LOCAL_CFLAGS := -Wno-unused-parameter -Wno-error=return-type
Elliott Hughes858a5c72014-02-28 15:58:12 -080024 LOCAL_MODULE := strace-$(basename $(1))-test
Fengwei Yinee295a42014-04-08 22:09:31 +080025 LOCAL_MODULE_STEM_32 := strace-$(basename $(1))32-test
26 LOCAL_MODULE_STEM_64 := strace-$(basename $(1))64-test
Elliott Hughes858a5c72014-02-28 15:58:12 -080027 LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
28 LOCAL_MODULE_TAGS := tests
29 LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
30 include $(BUILD_EXECUTABLE)
31endef
32
Elliott Hughesfa8e4392014-02-28 17:56:20 -080033src_files := \
34 childthread.c \
35 clone.c \
36 fork.c \
37 leaderkill.c \
38 mmap_offset_decode.c \
39 mtd.c \
40 select.c \
41 sfd.c \
42 sig.c \
43 sigkill_rain.c \
44 sigreturn.c \
45 skodic.c \
46 threaded_execve.c \
47 ubi.c \
48 vfork.c \
49 wait_must_be_interruptible.c \
50
51$(foreach file, $(src_files), $(eval $(call declare-strace-test-target,$(file))))
Calin Juravle18612f22014-03-12 15:27:35 +000052
53# Simple sanity tests meant to be run manually on device. Tests expect that
54# strace will report "exit with 0" at the end of the programs. Some tests
55# document what string should be expected in the output and for them additional
56# checks is made (*-expected output vars)).
57#
58# Failure should be inspected manually. Usually they require a special test
59# setup that can't be easily automated.
60#
61# adb sync is requreired before running "mm run-strace-tests".
62# logs are pulled automatically from the device to the root of the tree
63# (strace-log-*)
64
65childthread-expected-output := 'write(1, "OK\\n",'
66clone-expected-output := 'write(1, "original\\n",'
67fork-expected-output := 'write(1, "parent\\n",'
68leaderkill-expected-output := 'write(1, "OK\\n",'
69mmap_offset_decode-expected-output := ''
70mtd-expected-output := ''
71select-expected-output := ''
72sfd-expected-output := ''
73sig-expected-output := 'write(2, "qwerty\\n",'
74sigkill_rain-expected-output := ''
75sigreturn-expected-output := 'RT_1 RT_3 RT_31 RT_32'
76skodic-expected-output := ''
77threaded_execve-expected-output := ''
78ubi-expected-output := ''
79vfork-expected-output := 'write(1, "parent\\n",'
80wait_must_be_interruptible-expected-output := 'write(1, "Good: wait seems to be correctly"'
81
82run-strace-%-test: TEST_TMP_DIR := /data/local/tmp
83run-strace-%-test:
84 @printf >&2 "\n$*: RUNNING...\n" ; \
85 adb shell rm -f $(TEST_TMP_DIR)/strace-log-$* ; \
Fengwei Yinee295a42014-04-08 22:09:31 +080086 timeout -s 9 10 adb shell strace -v -f -o$(TEST_TMP_DIR)/strace-log-$* strace-$*-test > strace-log-$*-output ; \
Calin Juravle18612f22014-03-12 15:27:35 +000087 adb pull $(TEST_TMP_DIR)/strace-log-$* 2> /dev/null ; \
Fengwei Yinee295a42014-04-08 22:09:31 +080088 adb pull $(TEST_TMP_DIR)/strace-log-$*-output 2> /dev/null ; \
Calin Juravle18612f22014-03-12 15:27:35 +000089 if adb shell cat $(TEST_TMP_DIR)/strace-log-$* | grep "exited with 0" > /dev/null ; \
90 then \
Fengwei Yinee295a42014-04-08 22:09:31 +080091 if [ -n $($(shell echo $* | sed 's/[0-9]//g')-expected-output) ] ; then \
92 if adb shell cat $(TEST_TMP_DIR)/strace-log-$* | grep $($(shell echo $* | sed 's/[0-9]//g')-expected-output) > /dev/null ; \
Calin Juravle18612f22014-03-12 15:27:35 +000093 then printf >&2 "$*: PASSED\n" ; \
94 else printf >&2 "$*: FAILED\n" ; \
95 fi ; \
96 else \
97 printf >&2 "$*: PASSED\n" ; \
98 fi ; \
99 else \
100 printf >&2 "$*: FAILED\n" ; \
101 fi
102
103adb-sync:
104 adb sync
105
Fengwei Yinee295a42014-04-08 22:09:31 +0800106run-strace32-test: $(foreach file, $(src_files), run-strace-$(basename $(file))32-test)
107run-strace64-test: $(foreach file, $(src_files), run-strace-$(basename $(file))64-test)
108
109run-strace-tests: adb-sync run-strace32-test run-strace64-test