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')