Set execution as valid after mutation. am: af340a5706 am: a7d7e0b1a2
am: 5b52663e3d
Change-Id: I57f1610fbb1930aaef0047c2d241551851f0b197
diff --git a/config/cas/V1_0/iface_fuzzer/Android.mk b/config/cas/V1_0/iface_fuzzer/Android.mk
new file mode 100644
index 0000000..362e172
--- /dev/null
+++ b/config/cas/V1_0/iface_fuzzer/Android.mk
@@ -0,0 +1,9 @@
+# This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+# Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := VtsHalCasV1_0IfaceFuzzer
+include test/vts/tools/build/Android.host_config.mk
diff --git a/config/cas/V1_0/iface_fuzzer/AndroidTest.xml b/config/cas/V1_0/iface_fuzzer/AndroidTest.xml
new file mode 100644
index 0000000..c52320d
--- /dev/null
+++ b/config/cas/V1_0/iface_fuzzer/AndroidTest.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+ Do not edit manually.
+-->
+<configuration description="Config for VtsHalCasV1_0IfaceFuzzer test cases">
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+ <option name="push-group" value="IfaceFuzzerTest.push"/>
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer"/>
+ <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
+ <option name="test-module-name" value="VtsHalCasV1_0IfaceFuzzer"/>
+ <option name="hal-hidl-package-name" value="android.hardware.cas@1.0"/>
+ <option name="test-case-path" value="vts/testcases/fuzz/template/iface_fuzzer_test/iface_fuzzer_test"/>
+ <option name="test-timeout" value="3h"/>
+ </test>
+</configuration>
diff --git a/config/cas/native/V1_0/iface_fuzzer/Android.mk b/config/cas/native/V1_0/iface_fuzzer/Android.mk
new file mode 100644
index 0000000..62529ac
--- /dev/null
+++ b/config/cas/native/V1_0/iface_fuzzer/Android.mk
@@ -0,0 +1,9 @@
+# This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+# Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := VtsHalCasNativeV1_0IfaceFuzzer
+include test/vts/tools/build/Android.host_config.mk
diff --git a/config/cas/native/V1_0/iface_fuzzer/AndroidTest.xml b/config/cas/native/V1_0/iface_fuzzer/AndroidTest.xml
new file mode 100644
index 0000000..b0b8505
--- /dev/null
+++ b/config/cas/native/V1_0/iface_fuzzer/AndroidTest.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+ Do not edit manually.
+-->
+<configuration description="Config for VtsHalCasNativeV1_0IfaceFuzzer test cases">
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+ <option name="push-group" value="IfaceFuzzerTest.push"/>
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer"/>
+ <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
+ <option name="test-module-name" value="VtsHalCasNativeV1_0IfaceFuzzer"/>
+ <option name="hal-hidl-package-name" value="android.hardware.cas.native@1.0"/>
+ <option name="test-case-path" value="vts/testcases/fuzz/template/iface_fuzzer_test/iface_fuzzer_test"/>
+ <option name="test-timeout" value="3h"/>
+ </test>
+</configuration>
diff --git a/config/configstore/V1_1/iface_fuzzer/Android.mk b/config/configstore/V1_1/iface_fuzzer/Android.mk
new file mode 100644
index 0000000..194ab3d
--- /dev/null
+++ b/config/configstore/V1_1/iface_fuzzer/Android.mk
@@ -0,0 +1,9 @@
+# This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+# Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := VtsHalConfigstoreV1_1IfaceFuzzer
+include test/vts/tools/build/Android.host_config.mk
diff --git a/config/configstore/V1_1/iface_fuzzer/AndroidTest.xml b/config/configstore/V1_1/iface_fuzzer/AndroidTest.xml
new file mode 100644
index 0000000..c168057
--- /dev/null
+++ b/config/configstore/V1_1/iface_fuzzer/AndroidTest.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+ Do not edit manually.
+-->
+<configuration description="Config for VtsHalConfigstoreV1_1IfaceFuzzer test cases">
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+ <option name="push-group" value="IfaceFuzzerTest.push"/>
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer"/>
+ <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
+ <option name="test-module-name" value="VtsHalConfigstoreV1_1IfaceFuzzer"/>
+ <option name="hal-hidl-package-name" value="android.hardware.configstore@1.1"/>
+ <option name="test-case-path" value="vts/testcases/fuzz/template/iface_fuzzer_test/iface_fuzzer_test"/>
+ <option name="test-timeout" value="3h"/>
+ </test>
+</configuration>
diff --git a/config/neuralnetworks/V1_0/iface_fuzzer/Android.mk b/config/neuralnetworks/V1_0/iface_fuzzer/Android.mk
new file mode 100644
index 0000000..84e315d
--- /dev/null
+++ b/config/neuralnetworks/V1_0/iface_fuzzer/Android.mk
@@ -0,0 +1,9 @@
+# This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+# Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := VtsHalNeuralnetworksV1_0IfaceFuzzer
+include test/vts/tools/build/Android.host_config.mk
diff --git a/config/neuralnetworks/V1_0/iface_fuzzer/AndroidTest.xml b/config/neuralnetworks/V1_0/iface_fuzzer/AndroidTest.xml
new file mode 100644
index 0000000..f1bac48
--- /dev/null
+++ b/config/neuralnetworks/V1_0/iface_fuzzer/AndroidTest.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+ Do not edit manually.
+-->
+<configuration description="Config for VtsHalNeuralnetworksV1_0IfaceFuzzer test cases">
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+ <option name="push-group" value="IfaceFuzzerTest.push"/>
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer"/>
+ <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
+ <option name="test-module-name" value="VtsHalNeuralnetworksV1_0IfaceFuzzer"/>
+ <option name="hal-hidl-package-name" value="android.hardware.neuralnetworks@1.0"/>
+ <option name="test-case-path" value="vts/testcases/fuzz/template/iface_fuzzer_test/iface_fuzzer_test"/>
+ <option name="test-timeout" value="3h"/>
+ </test>
+</configuration>
diff --git a/config/oemlock/V1_0/iface_fuzzer/Android.mk b/config/oemlock/V1_0/iface_fuzzer/Android.mk
new file mode 100644
index 0000000..1439d24
--- /dev/null
+++ b/config/oemlock/V1_0/iface_fuzzer/Android.mk
@@ -0,0 +1,9 @@
+# This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+# Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := VtsHalOemlockV1_0IfaceFuzzer
+include test/vts/tools/build/Android.host_config.mk
diff --git a/config/oemlock/V1_0/iface_fuzzer/AndroidTest.xml b/config/oemlock/V1_0/iface_fuzzer/AndroidTest.xml
new file mode 100644
index 0000000..ee49557
--- /dev/null
+++ b/config/oemlock/V1_0/iface_fuzzer/AndroidTest.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+ Do not edit manually.
+-->
+<configuration description="Config for VtsHalOemlockV1_0IfaceFuzzer test cases">
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+ <option name="push-group" value="IfaceFuzzerTest.push"/>
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer"/>
+ <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
+ <option name="test-module-name" value="VtsHalOemlockV1_0IfaceFuzzer"/>
+ <option name="hal-hidl-package-name" value="android.hardware.oemlock@1.0"/>
+ <option name="test-case-path" value="vts/testcases/fuzz/template/iface_fuzzer_test/iface_fuzzer_test"/>
+ <option name="test-timeout" value="3h"/>
+ </test>
+</configuration>
diff --git a/config/power/V1_1/iface_fuzzer/Android.mk b/config/power/V1_1/iface_fuzzer/Android.mk
new file mode 100644
index 0000000..fd73150
--- /dev/null
+++ b/config/power/V1_1/iface_fuzzer/Android.mk
@@ -0,0 +1,9 @@
+# This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+# Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := VtsHalPowerV1_1IfaceFuzzer
+include test/vts/tools/build/Android.host_config.mk
diff --git a/config/power/V1_1/iface_fuzzer/AndroidTest.xml b/config/power/V1_1/iface_fuzzer/AndroidTest.xml
new file mode 100644
index 0000000..8bed22c
--- /dev/null
+++ b/config/power/V1_1/iface_fuzzer/AndroidTest.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+ Do not edit manually.
+-->
+<configuration description="Config for VtsHalPowerV1_1IfaceFuzzer test cases">
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+ <option name="push-group" value="IfaceFuzzerTest.push"/>
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer"/>
+ <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
+ <option name="test-module-name" value="VtsHalPowerV1_1IfaceFuzzer"/>
+ <option name="hal-hidl-package-name" value="android.hardware.power@1.1"/>
+ <option name="test-case-path" value="vts/testcases/fuzz/template/iface_fuzzer_test/iface_fuzzer_test"/>
+ <option name="test-timeout" value="3h"/>
+ </test>
+</configuration>
diff --git a/config/thermal/V1_1/iface_fuzzer/Android.mk b/config/thermal/V1_1/iface_fuzzer/Android.mk
new file mode 100644
index 0000000..f371ea3
--- /dev/null
+++ b/config/thermal/V1_1/iface_fuzzer/Android.mk
@@ -0,0 +1,9 @@
+# This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+# Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := VtsHalThermalV1_1IfaceFuzzer
+include test/vts/tools/build/Android.host_config.mk
diff --git a/config/thermal/V1_1/iface_fuzzer/AndroidTest.xml b/config/thermal/V1_1/iface_fuzzer/AndroidTest.xml
new file mode 100644
index 0000000..30bad03
--- /dev/null
+++ b/config/thermal/V1_1/iface_fuzzer/AndroidTest.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+ Do not edit manually.
+-->
+<configuration description="Config for VtsHalThermalV1_1IfaceFuzzer test cases">
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+ <option name="push-group" value="IfaceFuzzerTest.push"/>
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer"/>
+ <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
+ <option name="test-module-name" value="VtsHalThermalV1_1IfaceFuzzer"/>
+ <option name="hal-hidl-package-name" value="android.hardware.thermal@1.1"/>
+ <option name="test-case-path" value="vts/testcases/fuzz/template/iface_fuzzer_test/iface_fuzzer_test"/>
+ <option name="test-timeout" value="3h"/>
+ </test>
+</configuration>
diff --git a/config/usb/V1_1/iface_fuzzer/Android.mk b/config/usb/V1_1/iface_fuzzer/Android.mk
new file mode 100644
index 0000000..3082a08
--- /dev/null
+++ b/config/usb/V1_1/iface_fuzzer/Android.mk
@@ -0,0 +1,9 @@
+# This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+# Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := VtsHalUsbV1_1IfaceFuzzer
+include test/vts/tools/build/Android.host_config.mk
diff --git a/config/usb/V1_1/iface_fuzzer/AndroidTest.xml b/config/usb/V1_1/iface_fuzzer/AndroidTest.xml
new file mode 100644
index 0000000..af51ee9
--- /dev/null
+++ b/config/usb/V1_1/iface_fuzzer/AndroidTest.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+ Do not edit manually.
+-->
+<configuration description="Config for VtsHalUsbV1_1IfaceFuzzer test cases">
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+ <option name="push-group" value="IfaceFuzzerTest.push"/>
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer"/>
+ <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
+ <option name="test-module-name" value="VtsHalUsbV1_1IfaceFuzzer"/>
+ <option name="hal-hidl-package-name" value="android.hardware.usb@1.1"/>
+ <option name="test-case-path" value="vts/testcases/fuzz/template/iface_fuzzer_test/iface_fuzzer_test"/>
+ <option name="test-timeout" value="3h"/>
+ </test>
+</configuration>
diff --git a/config/vibrator/V1_1/iface_fuzzer/Android.mk b/config/vibrator/V1_1/iface_fuzzer/Android.mk
new file mode 100644
index 0000000..b69c673
--- /dev/null
+++ b/config/vibrator/V1_1/iface_fuzzer/Android.mk
@@ -0,0 +1,9 @@
+# This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+# Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := VtsHalVibratorV1_1IfaceFuzzer
+include test/vts/tools/build/Android.host_config.mk
diff --git a/config/vibrator/V1_1/iface_fuzzer/AndroidTest.xml b/config/vibrator/V1_1/iface_fuzzer/AndroidTest.xml
new file mode 100644
index 0000000..e195698
--- /dev/null
+++ b/config/vibrator/V1_1/iface_fuzzer/AndroidTest.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+ Do not edit manually.
+-->
+<configuration description="Config for VtsHalVibratorV1_1IfaceFuzzer test cases">
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+ <option name="push-group" value="IfaceFuzzerTest.push"/>
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer"/>
+ <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
+ <option name="test-module-name" value="VtsHalVibratorV1_1IfaceFuzzer"/>
+ <option name="hal-hidl-package-name" value="android.hardware.vibrator@1.1"/>
+ <option name="test-case-path" value="vts/testcases/fuzz/template/iface_fuzzer_test/iface_fuzzer_test"/>
+ <option name="test-timeout" value="3h"/>
+ </test>
+</configuration>
diff --git a/config/weaver/V1_0/iface_fuzzer/Android.mk b/config/weaver/V1_0/iface_fuzzer/Android.mk
new file mode 100644
index 0000000..f4f4a84
--- /dev/null
+++ b/config/weaver/V1_0/iface_fuzzer/Android.mk
@@ -0,0 +1,9 @@
+# This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+# Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := VtsHalWeaverV1_0IfaceFuzzer
+include test/vts/tools/build/Android.host_config.mk
diff --git a/config/weaver/V1_0/iface_fuzzer/AndroidTest.xml b/config/weaver/V1_0/iface_fuzzer/AndroidTest.xml
new file mode 100644
index 0000000..834d58f
--- /dev/null
+++ b/config/weaver/V1_0/iface_fuzzer/AndroidTest.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+ Do not edit manually.
+-->
+<configuration description="Config for VtsHalWeaverV1_0IfaceFuzzer test cases">
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+ <option name="push-group" value="IfaceFuzzerTest.push"/>
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer"/>
+ <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
+ <option name="test-module-name" value="VtsHalWeaverV1_0IfaceFuzzer"/>
+ <option name="hal-hidl-package-name" value="android.hardware.weaver@1.0"/>
+ <option name="test-case-path" value="vts/testcases/fuzz/template/iface_fuzzer_test/iface_fuzzer_test"/>
+ <option name="test-timeout" value="3h"/>
+ </test>
+</configuration>
diff --git a/config/wifi/V1_1/iface_fuzzer/Android.mk b/config/wifi/V1_1/iface_fuzzer/Android.mk
new file mode 100644
index 0000000..5dc99ce
--- /dev/null
+++ b/config/wifi/V1_1/iface_fuzzer/Android.mk
@@ -0,0 +1,9 @@
+# This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+# Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := VtsHalWifiV1_1IfaceFuzzer
+include test/vts/tools/build/Android.host_config.mk
diff --git a/config/wifi/V1_1/iface_fuzzer/AndroidTest.xml b/config/wifi/V1_1/iface_fuzzer/AndroidTest.xml
new file mode 100644
index 0000000..7343fd5
--- /dev/null
+++ b/config/wifi/V1_1/iface_fuzzer/AndroidTest.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+ Do not edit manually.
+-->
+<configuration description="Config for VtsHalWifiV1_1IfaceFuzzer test cases">
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+ <option name="push-group" value="IfaceFuzzerTest.push"/>
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer"/>
+ <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
+ <option name="test-module-name" value="VtsHalWifiV1_1IfaceFuzzer"/>
+ <option name="hal-hidl-package-name" value="android.hardware.wifi@1.1"/>
+ <option name="test-case-path" value="vts/testcases/fuzz/template/iface_fuzzer_test/iface_fuzzer_test"/>
+ <option name="test-timeout" value="3h"/>
+ </test>
+</configuration>
diff --git a/config/wifi/offload/V1_0/iface_fuzzer/Android.mk b/config/wifi/offload/V1_0/iface_fuzzer/Android.mk
new file mode 100644
index 0000000..6d494c9
--- /dev/null
+++ b/config/wifi/offload/V1_0/iface_fuzzer/Android.mk
@@ -0,0 +1,9 @@
+# This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+# Do not edit manually.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := VtsHalWifiOffloadV1_0IfaceFuzzer
+include test/vts/tools/build/Android.host_config.mk
diff --git a/config/wifi/offload/V1_0/iface_fuzzer/AndroidTest.xml b/config/wifi/offload/V1_0/iface_fuzzer/AndroidTest.xml
new file mode 100644
index 0000000..e8dbafb
--- /dev/null
+++ b/config/wifi/offload/V1_0/iface_fuzzer/AndroidTest.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This file was auto-generated by test/vts-testcase/fuzz/script/update_makefiles.py.
+ Do not edit manually.
+-->
+<configuration description="Config for VtsHalWifiOffloadV1_0IfaceFuzzer test cases">
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+ <option name="push-group" value="IfaceFuzzerTest.push"/>
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer"/>
+ <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
+ <option name="test-module-name" value="VtsHalWifiOffloadV1_0IfaceFuzzer"/>
+ <option name="hal-hidl-package-name" value="android.hardware.wifi.offload@1.0"/>
+ <option name="test-case-path" value="vts/testcases/fuzz/template/iface_fuzzer_test/iface_fuzzer_test"/>
+ <option name="test-timeout" value="3h"/>
+ </test>
+</configuration>
diff --git a/iface_fuzzer/Android.bp b/iface_fuzzer/Android.bp
index 17bd091..b611bac 100644
--- a/iface_fuzzer/Android.bp
+++ b/iface_fuzzer/Android.bp
@@ -14,13 +14,14 @@
// limitations under the License.
//
-cc_library_shared {
+cc_library {
name: "libvts_proto_fuzzer",
srcs: [
"ProtoFuzzerUtils.cpp",
"ProtoFuzzerMutator.cpp",
"ProtoFuzzerMutateFns.cpp",
"ProtoFuzzerRunner.cpp",
+ "ProtoFuzzerStats.cpp",
],
include_dirs: [
"test/vts/drivers/hal/common/include",
@@ -52,13 +53,14 @@
],
shared_libs: [
"libprotobuf-cpp-full",
+ "libvintf",
"libvts_common",
"libvts_multidevice_proto",
- "libvts_proto_fuzzer",
"libvts_proto_fuzzer_proto",
],
static_libs: [
"libFuzzer",
+ "libvts_proto_fuzzer",
],
cflags: [
"-Wall",
diff --git a/iface_fuzzer/ProtoFuzzerMain.cpp b/iface_fuzzer/ProtoFuzzerMain.cpp
index 6b79192..5310507 100644
--- a/iface_fuzzer/ProtoFuzzerMain.cpp
+++ b/iface_fuzzer/ProtoFuzzerMain.cpp
@@ -20,6 +20,7 @@
#include <unistd.h>
+#include <cstdlib>
#include <iostream>
#include <memory>
#include <string>
@@ -37,7 +38,7 @@
namespace fuzzer {
// 64-bit random number generator.
-static Random random{static_cast<uint64_t>(time(0))};
+static unique_ptr<Random> random;
// Parameters that were passed in to fuzzer.
static ProtoFuzzerParams params;
// Used to mutate inputs to hal driver.
@@ -70,20 +71,42 @@
// Odds of an enum being treated like a scalar are 1:1000.
{1, 1000}};
+// Executed when fuzzer process exits. We use this to print out useful
+// information about the state of the fuzzer.
+static void AtExit() {
+ // Print currently opened interfaces.
+ cerr << "Currently opened interfaces: " << endl;
+ for (const auto &iface_desc : runner->GetOpenedIfaces()) {
+ cerr << iface_desc.first << endl;
+ }
+ cerr << endl;
+ cerr << runner->GetStats().StatsString();
+}
+
extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) {
params = ExtractProtoFuzzerParams(*argc, *argv);
+ cerr << params.DebugString() << endl;
+
+ random = make_unique<Random>(params.seed_);
mutator = make_unique<ProtoFuzzerMutator>(
- random, ExtractPredefinedTypes(params.comp_specs_), mutator_config);
+ *random.get(), ExtractPredefinedTypes(params.comp_specs_),
+ mutator_config);
runner = make_unique<ProtoFuzzerRunner>(params.comp_specs_);
runner->Init(params.target_iface_, params.binder_mode_);
+ // Register atexit handler after all static objects' initialization.
+ std::atexit(AtExit);
return 0;
}
extern "C" size_t LLVMFuzzerCustomMutator(uint8_t *data, size_t size,
size_t max_size, unsigned int seed) {
ExecSpec exec_spec{};
- if (!FromArray(data, size, &exec_spec)) {
+ // An Execution is randomly generated if:
+ // 1. It can't be serialized from the given buffer OR
+ // 2. The runner has opened interfaces that have not been touched.
+ // Otherwise, the Execution is mutated.
+ if (!FromArray(data, size, &exec_spec) || runner->UntouchedIfaces()) {
exec_spec =
mutator->RandomGen(runner->GetOpenedIfaces(), params.exec_size_);
} else {
diff --git a/iface_fuzzer/ProtoFuzzerMutateFns.cpp b/iface_fuzzer/ProtoFuzzerMutateFns.cpp
index 09fad15..06c6cf5 100644
--- a/iface_fuzzer/ProtoFuzzerMutateFns.cpp
+++ b/iface_fuzzer/ProtoFuzzerMutateFns.cpp
@@ -30,7 +30,7 @@
result.set_type(var_spec.type());
} else {
cerr << "VarInstance with no type field: " << var_spec.DebugString();
- exit(1);
+ std::abort();
}
if (var_spec.has_name()) {
result.set_name(var_spec.name());
diff --git a/iface_fuzzer/ProtoFuzzerMutator.cpp b/iface_fuzzer/ProtoFuzzerMutator.cpp
index 4941382..10c1f78 100644
--- a/iface_fuzzer/ProtoFuzzerMutator.cpp
+++ b/iface_fuzzer/ProtoFuzzerMutator.cpp
@@ -17,9 +17,9 @@
#include "ProtoFuzzerMutator.h"
#include <iostream>
-using std::endl;
using std::cerr;
using std::cout;
+using std::endl;
using std::make_unique;
using std::unordered_map;
using namespace std::placeholders;
@@ -61,6 +61,9 @@
random_gen_fns_[TYPE_HIDL_INTERFACE] = default_transform;
mutate_fns_[TYPE_HIDL_INTERFACE] = default_transform;
+ random_gen_fns_[TYPE_HIDL_MEMORY] = default_transform;
+ mutate_fns_[TYPE_HIDL_MEMORY] = default_transform;
+
// Interpret masks as enums.
random_gen_fns_[TYPE_MASK] =
std::bind(&ProtoFuzzerMutator::EnumRandomGen, this, _1);
@@ -106,6 +109,7 @@
ExecSpec ProtoFuzzerMutator::RandomGen(const IfaceDescTbl &tbl,
size_t num_calls) {
+ cerr << "Generating a random execution." << endl;
ExecSpec result{};
for (size_t i = 0; i < num_calls; ++i) {
const CompSpec *comp_spec = RandomSelectIface(tbl);
@@ -182,7 +186,7 @@
auto transform_fn = transform_fns.find(type);
if (transform_fn == transform_fns.end()) {
cerr << "Transformation function not found for type: " << type << endl;
- exit(1);
+ std::abort();
}
return transform_fn->second(var_spec);
}
@@ -199,7 +203,7 @@
auto type_spec = predefined_types_.find(name);
if (type_spec == predefined_types_.end()) {
cerr << "Predefined type not found: " << name << endl;
- exit(1);
+ std::abort();
}
return type_spec->second;
}
diff --git a/iface_fuzzer/ProtoFuzzerRunner.cpp b/iface_fuzzer/ProtoFuzzerRunner.cpp
index 708e188..923241e 100644
--- a/iface_fuzzer/ProtoFuzzerRunner.cpp
+++ b/iface_fuzzer/ProtoFuzzerRunner.cpp
@@ -25,11 +25,11 @@
using android::vintf::HalManifest;
-using std::cout;
using std::cerr;
+using std::cout;
using std::string;
-using std::vector;
using std::unordered_map;
+using std::vector;
namespace android {
namespace vts {
@@ -53,7 +53,7 @@
hal_name, iface_name);
if (instance_names.empty()) {
cerr << "HAL service name not available in VINTF." << endl;
- exit(1);
+ std::abort();
}
// For fuzzing we don't care which instance of the HAL is targeted.
@@ -74,7 +74,7 @@
if (!handle) {
cerr << __func__ << ": " << dlerror() << endl;
cerr << __func__ << ": Can't load shared library: " << lib_name << endl;
- exit(1);
+ std::abort();
}
return handle;
}
@@ -87,7 +87,7 @@
if ((error = dlerror()) != NULL) {
cerr << __func__ << ": Can't find: " << function_name << endl;
cerr << error << endl;
- exit(1);
+ std::abort();
}
return function;
}
@@ -108,7 +108,7 @@
if (!hal->GetService(false, service_name.c_str())) {
cerr << __func__ << ": Failed to open HAL in binder mode." << endl;
- exit(1);
+ std::abort();
} else {
cerr << "HAL opened in binder mode." << endl;
return;
@@ -182,12 +182,13 @@
auto iface_desc = opened_ifaces_.find(iface_name);
if (iface_desc == opened_ifaces_.end()) {
cerr << "Interface is not open: " << iface_name << endl;
- exit(1);
+ std::abort();
}
FuncSpec result{};
iface_desc->second.hal_->CallFunction(func_spec, "", &result);
+ stats_.RegisterTouch(iface_name, func_spec.name());
ProcessReturnValue(result);
}
@@ -201,7 +202,10 @@
void ProtoFuzzerRunner::ProcessReturnValue(const FuncSpec &result) {
for (const auto &var : result.return_type_hidl()) {
- if (var.has_hidl_interface_pointer() && var.has_predefined_type()) {
+ // If result contains a pointer to an interface, register it in
+ // opened_ifaces_ table. That pointer must not be a nullptr.
+ if (var.has_hidl_interface_pointer() && var.hidl_interface_pointer() &&
+ var.has_predefined_type()) {
uint64_t hidl_service = var.hidl_interface_pointer();
string type = var.predefined_type();
string iface_name = StripNamespace(type);
@@ -209,6 +213,11 @@
const CompSpec *comp_spec = FindCompSpec(iface_name);
std::shared_ptr<DriverBase> hal{LoadInterface(*comp_spec, hidl_service)};
+ // If this interface has not been seen before, record the fact.
+ if (opened_ifaces_.find(iface_name) == opened_ifaces_.end()) {
+ cerr << "Discovered new interface: " << iface_name << endl;
+ }
+
// Register this interface as opened by the runner.
opened_ifaces_[iface_name] = {
.comp_spec_ = comp_spec, .hal_ = hal,
@@ -221,7 +230,7 @@
auto comp_spec = comp_specs_.find(name);
if (comp_spec == comp_specs_.end()) {
cerr << "VTS spec not found: " << name << endl;
- exit(1);
+ std::abort();
}
return &comp_spec->second;
}
diff --git a/iface_fuzzer/ProtoFuzzerStats.cpp b/iface_fuzzer/ProtoFuzzerStats.cpp
new file mode 100644
index 0000000..da65c7f
--- /dev/null
+++ b/iface_fuzzer/ProtoFuzzerStats.cpp
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2017 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.
+ */
+
+#include "ProtoFuzzerStats.h"
+
+#include <iomanip>
+#include <iostream>
+#include <map>
+#include <sstream>
+
+using std::endl;
+using std::map;
+using std::string;
+using std::unordered_map;
+
+namespace android {
+namespace vts {
+namespace fuzzer {
+
+void ProtoFuzzerStats::RegisterTouch(string iface_name, string func_name) {
+ // Update the touch count for the full function name.
+ string key = iface_name + "::" + func_name;
+ touch_count_[key]++;
+ // Record that this interface has been touched.
+ touched_ifaces_.insert(std::move(iface_name));
+}
+
+string ProtoFuzzerStats::StatsString() const {
+ std::map<string, uint64_t> ordered_result{touch_count_.cbegin(),
+ touch_count_.cend()};
+
+ std::stringstream ss{};
+ ss << "HAL api function touch count: " << endl;
+ for (const auto &entry : ordered_result) {
+ ss << std::left << std::setfill(' ') << std::setw(40) << entry.first
+ << std::setw(40) << entry.second << endl;
+ }
+ ss << endl;
+ return ss.str();
+}
+
+} // namespace fuzzer
+} // namespace vts
+} // namespace android
diff --git a/iface_fuzzer/ProtoFuzzerUtils.cpp b/iface_fuzzer/ProtoFuzzerUtils.cpp
index 6dbdb0a..b9a5635 100644
--- a/iface_fuzzer/ProtoFuzzerUtils.cpp
+++ b/iface_fuzzer/ProtoFuzzerUtils.cpp
@@ -23,8 +23,8 @@
#include "utils/InterfaceSpecUtil.h"
-using std::cout;
using std::cerr;
+using std::cout;
using std::string;
using std::unordered_map;
using std::vector;
@@ -34,25 +34,26 @@
namespace fuzzer {
static void usage() {
- fprintf(
- stdout,
- "Usage:\n"
- "\n"
- "./vts_proto_fuzzer <vts flags> -- <libfuzzer flags>\n"
- "\n"
- "VTS flags (strictly in form --flag=value):\n"
- "\n"
- "\tvts_binder_mode: if set, fuzzer will open the HAL in binder mode.\n"
- "\tvts_exec_size: number of function calls per 1 run of "
- "LLVMFuzzerTestOneInput.\n"
- "\tvts_spec_dir: \":\"-separated list of directories on the target "
- "containing .vts spec files.\n"
- "\tvts_target_iface: name of interface targeted for fuzz, e.g. "
- "\"INfc\".\n"
- "\n"
- "libfuzzer flags (strictly in form -flag=value):\n"
- "\tUse -help=1 to see libfuzzer flags\n"
- "\n");
+ cout
+ << "Usage:\n"
+ "\n"
+ "./vts_proto_fuzzer <vts flags> -- <libfuzzer flags>\n"
+ "\n"
+ "VTS flags (strictly in form --flag=value):\n"
+ "\n"
+ "\tvts_binder_mode: if set, fuzzer will open the HAL in binder mode.\n"
+ "\tvts_exec_size: number of function calls per 1 run of "
+ "LLVMFuzzerTestOneInput.\n"
+ "\tvts_spec_dir: \":\"-separated list of directories on the target "
+ "containing .vts spec files.\n"
+ "\tvts_target_iface: name of interface targeted for fuzz, e.g. "
+ "\"INfc\".\n"
+ "\tvts_seed: optional integral argument used to initalize the random "
+ "number generator.\n"
+ "\n"
+ "libfuzzer flags (strictly in form -flag=value):\n"
+ "\tUse -help=1 to see libfuzzer flags\n"
+ "\n";
}
static struct option long_options[] = {
@@ -60,6 +61,7 @@
{"vts_binder_mode", no_argument, 0, 'b'},
{"vts_spec_dir", required_argument, 0, 'd'},
{"vts_exec_size", required_argument, 0, 'e'},
+ {"vts_seed", required_argument, 0, 's'},
{"vts_target_iface", required_argument, 0, 't'}};
// Removes information from CompSpec not needed by fuzzer.
@@ -86,12 +88,11 @@
struct dirent *ent;
if (!(dir = opendir(dir_path.c_str()))) {
cerr << "Could not open directory: " << dir_path << endl;
- exit(1);
+ std::abort();
}
while ((ent = readdir(dir))) {
string vts_spec_name{ent->d_name};
if (vts_spec_name.find(".vts") != string::npos) {
- cout << "Loading: " << vts_spec_name << endl;
string vts_spec_path = dir_path + "/" + vts_spec_name;
CompSpec comp_spec{};
ParseInterfaceSpec(vts_spec_path.c_str(), &comp_spec);
@@ -107,9 +108,14 @@
const TypeSpec &var_spec,
unordered_map<string, TypeSpec> &predefined_types) {
predefined_types[var_spec.name()] = var_spec;
+ // Find all nested struct declarations.
for (const auto &sub_var_spec : var_spec.sub_struct()) {
ExtractPredefinedTypesFromVar(sub_var_spec, predefined_types);
}
+ // Find all nested union declarations.
+ for (const auto &sub_var_spec : var_spec.sub_union()) {
+ ExtractPredefinedTypesFromVar(sub_var_spec, predefined_types);
+ }
}
ProtoFuzzerParams ExtractProtoFuzzerParams(int argc, char **argv) {
@@ -120,7 +126,7 @@
switch (opt) {
case 'h':
usage();
- exit(0);
+ std::abort();
case 'b':
params.binder_mode_ = true;
break;
@@ -128,7 +134,10 @@
params.comp_specs_ = ExtractCompSpecs(optarg);
break;
case 'e':
- params.exec_size_ = atoi(optarg);
+ params.exec_size_ = std::stoul(optarg);
+ break;
+ case 's':
+ params.seed_ = std::stoull(optarg);
break;
case 't':
params.target_iface_ = optarg;
@@ -141,6 +150,19 @@
return params;
}
+string ProtoFuzzerParams::DebugString() const {
+ std::stringstream ss;
+ ss << "Execution size: " << exec_size_ << endl;
+ ss << "Target interface: " << target_iface_ << endl;
+ ss << "Binder mode: " << binder_mode_ << endl;
+ ss << "Seed: " << seed_ << endl;
+ ss << "Loaded specs: " << endl;
+ for (const auto &spec : comp_specs_) {
+ ss << spec.component_name() << endl;
+ }
+ return ss.str();
+}
+
unordered_map<string, TypeSpec> ExtractPredefinedTypes(
const vector<CompSpec> &specs) {
unordered_map<string, TypeSpec> predefined_types;
diff --git a/iface_fuzzer/include/ProtoFuzzerRunner.h b/iface_fuzzer/include/ProtoFuzzerRunner.h
index 179b059..3bb0bc4 100644
--- a/iface_fuzzer/include/ProtoFuzzerRunner.h
+++ b/iface_fuzzer/include/ProtoFuzzerRunner.h
@@ -17,6 +17,7 @@
#ifndef __VTS_PROTO_FUZZER_RUNNER_H_
#define __VTS_PROTO_FUZZER_RUNNER_H_
+#include "ProtoFuzzerStats.h"
#include "ProtoFuzzerUtils.h"
#include <memory>
@@ -50,6 +51,12 @@
// Accessor to interface descriptor table containing currently opened
// interfaces.
const IfaceDescTbl &GetOpenedIfaces() const { return opened_ifaces_; }
+ // Accessor to stats object.
+ const ProtoFuzzerStats &GetStats() const { return stats_; }
+ // Returns true iff there are opened interfaces that are untouched.
+ bool UntouchedIfaces() const {
+ return opened_ifaces_.size() > stats_.TouchedIfaces().size();
+ }
private:
// Looks up interface spec by name.
@@ -66,6 +73,9 @@
std::unordered_map<std::string, CompSpec> comp_specs_;
// Handle to the driver library.
void *driver_handle_;
+
+ // Collects statistical information.
+ ProtoFuzzerStats stats_;
};
} // namespace fuzzer
diff --git a/iface_fuzzer/include/ProtoFuzzerStats.h b/iface_fuzzer/include/ProtoFuzzerStats.h
new file mode 100644
index 0000000..5052817
--- /dev/null
+++ b/iface_fuzzer/include/ProtoFuzzerStats.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2017 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.
+ */
+
+#ifndef __VTS_PROTO_FUZZER_STATS_H_
+#define __VTS_PROTO_FUZZER_STATS_H_
+
+#include <string>
+#include <unordered_map>
+#include <unordered_set>
+
+namespace android {
+namespace vts {
+namespace fuzzer {
+
+// Holds stats about a fuzzer run.
+class ProtoFuzzerStats {
+ public:
+ // Registers fuzzer touching an interface function.
+ void RegisterTouch(std::string iface_name, std::string func_name);
+ // Returns collected stats in string form.
+ std::string StatsString() const;
+ // Returns the set of touched interfaces.
+ const std::unordered_set<std::string> &TouchedIfaces() const {
+ return touched_ifaces_;
+ }
+
+ private:
+ // Counts the number of times a function was touched.
+ // This object will be written to often, so we use unordered_map.
+ std::unordered_map<std::string, uint64_t> touch_count_;
+ // The set of interfaces that have been touched to far.
+ std::unordered_set<std::string> touched_ifaces_;
+};
+
+} // namespace fuzzer
+} // namespace vts
+} // namespace android
+
+#endif // __VTS_PROTO_FUZZER_STATS__
diff --git a/iface_fuzzer/include/ProtoFuzzerUtils.h b/iface_fuzzer/include/ProtoFuzzerUtils.h
index 85af37f..cc0f7e8 100644
--- a/iface_fuzzer/include/ProtoFuzzerUtils.h
+++ b/iface_fuzzer/include/ProtoFuzzerUtils.h
@@ -17,6 +17,7 @@
#ifndef __VTS_PROTO_FUZZER_UTILS_H__
#define __VTS_PROTO_FUZZER_UTILS_H__
+#include <unistd.h>
#include <iostream>
#include <random>
#include <string>
@@ -64,7 +65,8 @@
};
// Additional non-libfuzzer parameters passed to the fuzzer.
-struct ProtoFuzzerParams {
+class ProtoFuzzerParams {
+ public:
// Number of function calls per execution (fixed throughout fuzzer run).
size_t exec_size_;
// VTS specs supplied to the fuzzer.
@@ -72,8 +74,12 @@
// Name of target interface, e.g. "INfc".
std::string target_iface_;
// Controls whether HAL is opened in passthrough or binder mode.
- // Passthrough mode is default. Used for testing.
- bool binder_mode_ = false;
+ // Binder mode is default. Used for testing.
+ bool binder_mode_ = true;
+ // Seed used to initialize the random number generator.
+ uint64_t seed_ = static_cast<uint64_t>(time(0));
+ // Returns a string summarizing content of this object.
+ string DebugString() const;
};
// Parses command-line flags to create a ProtoFuzzerParams instance.
diff --git a/template/func_fuzzer_test/func_fuzzer_test.py b/template/func_fuzzer_test/func_fuzzer_test.py
index dcbbb3c..b4fbf04 100644
--- a/template/func_fuzzer_test/func_fuzzer_test.py
+++ b/template/func_fuzzer_test/func_fuzzer_test.py
@@ -51,6 +51,7 @@
self.hal_hidl_package_name)
self._dut = self.registerController(android_device, False)[0]
+ self._dut.startAdbLogcat()
self._dut.adb.shell('mkdir %s -p' % config.FUZZER_TEST_DIR)
self._vts_spec_parser = vts_spec_utils.VtsSpecParser(
self.data_file_path)
diff --git a/template/iface_fuzzer_test/iface_fuzzer_test.py b/template/iface_fuzzer_test/iface_fuzzer_test.py
index 59d7ebb..8dde8f4 100644
--- a/template/iface_fuzzer_test/iface_fuzzer_test.py
+++ b/template/iface_fuzzer_test/iface_fuzzer_test.py
@@ -111,8 +111,8 @@
}
libfuzzer_params = config.FUZZER_DEFAULT_PARAMS.copy()
libfuzzer_params.update({
- 'max_len': 65536,
- 'max_total_time': 10,
+ 'max_len': 16777216,
+ 'max_total_time': 600,
})
bin_host_path = os.path.join(self.data_file_path, 'DATA', 'bin',
'vts_proto_fuzzer')