Merge "cts: ensure AAudio MMAP cannot be turned on by app" into oc-dev am: b81fe51953 am: 8cc0d6af98 -s ours
am: 73c7e0447f -s ours
Change-Id: Id26b9bd821bac958aa0a839495dfd90be3cb9548
diff --git a/CtsCoverage.mk b/CtsCoverage.mk
index c4536f6..aeef125 100644
--- a/CtsCoverage.mk
+++ b/CtsCoverage.mk
@@ -84,12 +84,10 @@
cts-combined-xml-coverage : $(cts-combined-xml-coverage-report)
# Put the test coverage report in the dist dir if "cts" is among the build goals.
-ifneq ($(filter cts, $(MAKECMDGOALS)),)
- $(call dist-for-goals, cts, $(cts-test-coverage-report):cts-test-coverage-report.html)
- $(call dist-for-goals, cts, $(cts-verifier-coverage-report):cts-verifier-coverage-report.html)
- $(call dist-for-goals, cts, $(cts-combined-coverage-report):cts-combined-coverage-report.html)
- $(call dist-for-goals, cts, $(cts-combined-xml-coverage-report):cts-combined-coverage-report.xml)
-endif
+$(call dist-for-goals, cts, $(cts-test-coverage-report):cts-test-coverage-report.html)
+$(call dist-for-goals, cts, $(cts-verifier-coverage-report):cts-verifier-coverage-report.html)
+$(call dist-for-goals, cts, $(cts-combined-coverage-report):cts-combined-coverage-report.html)
+$(call dist-for-goals, cts, $(cts-combined-xml-coverage-report):cts-combined-coverage-report.xml)
# Arguments;
# 1 - Name of the report printed out on the screen
@@ -98,7 +96,7 @@
define generate-coverage-report
$(hide) mkdir -p $(dir $@)
$(hide) $(PRIVATE_CTS_API_COVERAGE_EXE) -d $(PRIVATE_DEXDEPS_EXE) -a $(PRIVATE_API_XML_DESC) -f $(3) -o $@ $(2)
- @ echo $(1): file://$(ANDROID_BUILD_TOP)/$@
+ @ echo $(1): file://$$(cd $(dir $@); pwd)/$(notdir $@)
endef
# Reset temp vars
diff --git a/apps/CtsVerifier/Android.mk b/apps/CtsVerifier/Android.mk
index ba9155c..9fcbdb1 100644
--- a/apps/CtsVerifier/Android.mk
+++ b/apps/CtsVerifier/Android.mk
@@ -155,8 +155,6 @@
$(hide) $(ACP) -fpr $(HOST_OUT)/CameraITS $(verifier-dir)
$(hide) cd $(cts-dir) && zip -rq $(verifier-dir-name) $(verifier-dir-name)
-ifneq ($(filter cts, $(MAKECMDGOALS)),)
- $(call dist-for-goals, cts, $(verifier-zip):$(verifier-zip-name))
-endif
+$(call dist-for-goals, cts, $(verifier-zip):$(verifier-zip-name))
include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/apps/CtsVerifier/AndroidManifest.xml b/apps/CtsVerifier/AndroidManifest.xml
index 7d76f3b..514056a 100644
--- a/apps/CtsVerifier/AndroidManifest.xml
+++ b/apps/CtsVerifier/AndroidManifest.xml
@@ -2744,6 +2744,17 @@
android:value="android.software.live_tv" />
</activity>
+ <activity android:name=".tv.MicrophoneDeviceTestActivity"
+ android:label="@string/tv_microphone_device_test">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.cts.intent.category.MANUAL_TEST" />
+ </intent-filter>
+ <meta-data android:name="test_category" android:value="@string/test_category_tv" />
+ <meta-data android:name="test_required_features"
+ android:value="android.software.leanback" />
+ </activity>
+
<activity android:name=".screenpinning.ScreenPinningTestActivity"
android:label="@string/screen_pinning_test">
<intent-filter>
diff --git a/apps/CtsVerifier/res/values/strings.xml b/apps/CtsVerifier/res/values/strings.xml
index b5b65b8..bf7b879 100755
--- a/apps/CtsVerifier/res/values/strings.xml
+++ b/apps/CtsVerifier/res/values/strings.xml
@@ -3503,6 +3503,35 @@
2) You should see the text \"Cts App-Link Text\".\n
</string>
+ <string name="tv_microphone_device_test">Microphone device test</string>
+ <string name="tv_microphone_device_test_info">
+ This test checks if InputDevice.hasMicrophone of the Media API reports a
+ correct value on every input device (including remote controls).
+ </string>
+ <string name="tv_microphone_device_test_prep_question">
+ Before continuing, please make sure that you pair all primary input
+ devices intended to be used by the device, including bluetooth
+ remotes and companion remote-control apps such as the Android TV Remote Control.
+ Have you paired every primary input device with the device under test (DUT)?
+ </string>
+ <string name="tv_microphone_device_test_mic_question">
+ Does input device \"%1$s\" have a microphone?
+ </string>
+ <string name="tv_microphone_device_test_negative_mismatch">
+ InputDevice.hasMicrophone reports that this input device DOES have a
+ microphone whereas you selected that it does not. Please correct it by
+ declaring \"audio.mic = 0\" in the device\'s input device configuration
+ (.idc) file.
+ </string>
+ <string name="tv_microphone_device_test_positive_mismatch">
+ InputDevice.hasMicrophone reports that this input device does NOT have a
+ microphone whereas you selected that it does. Please correct it by
+ declaring \"audio.mic = 1\" in the device\'s input device configuration
+ (.idc) file and make sure that relevant files such as key layout (.kl)
+ and key character map (.kcm) files are found by the system accordingly.
+ </string>
+ <string name="tv_microphone_device_test_no_input_devices">No input devices found.</string>
+
<string name="overlay_view_text">Overlay View Dummy Text</string>
<string name="custom_rating">Example of input app specific custom rating.</string>
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/tv/MicrophoneDeviceTestActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/tv/MicrophoneDeviceTestActivity.java
new file mode 100644
index 0000000..eca02c1
--- /dev/null
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/tv/MicrophoneDeviceTestActivity.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright (C) 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.
+ */
+
+package com.android.cts.verifier.tv;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.hardware.input.InputManager;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.InputDevice;
+import android.view.View;
+import android.widget.Toast;
+
+import com.android.cts.verifier.R;
+
+/**
+ * Tests for verifying that all input devices report correct hasMicrophone() states.
+ */
+@SuppressLint("NewApi")
+public class MicrophoneDeviceTestActivity extends TvAppVerifierActivity
+ implements View.OnClickListener {
+ private static final String TAG = "MicrophoneDeviceTestActivity";
+ private static final boolean PASS = true;
+
+ private InputManager mInputManager;
+ private HashMap<View, List<Object>> mInputDeviceItems;
+ private View mPreparationYesItem;
+ private View mPreparationNoItem;
+
+ @Override
+ public void onClick(View v) {
+ final View postTarget = getPostTarget();
+
+ if (containsButton(mPreparationYesItem, v)) {
+ setPassState(mPreparationYesItem, true);
+ setButtonEnabled(mPreparationNoItem, false);
+ createInputDeviceItems();
+ return;
+ } else if (containsButton(mPreparationNoItem, v)) {
+ setPassState(mPreparationYesItem, false);
+ setButtonEnabled(mPreparationNoItem, false);
+ getPassButton().setEnabled(false);
+ return;
+ } else if (mInputDeviceItems == null) {
+ return;
+ }
+
+ for (View item : mInputDeviceItems.keySet()) {
+ if (containsButton(item, v)) {
+ final List<Object> triple = mInputDeviceItems.get(item);
+ final boolean userAnswer = (boolean) triple.get(0);
+ final boolean actualAnswer = (boolean) triple.get(1);
+ final View pairedItem = (View) triple.get(2);
+
+ if (userAnswer == actualAnswer) {
+ setPassState(userAnswer ? item : pairedItem, true);
+ setButtonEnabled(userAnswer ? pairedItem : item, false);
+ item.setTag(PASS); pairedItem.setTag(PASS);
+ if (checkAllPassed()) {
+ getPassButton().setEnabled(true);
+ }
+ return;
+ }
+
+ final int messageId =
+ actualAnswer ? R.string.tv_microphone_device_test_negative_mismatch :
+ R.string.tv_microphone_device_test_positive_mismatch;
+ Toast.makeText(this, messageId, Toast.LENGTH_LONG).show();
+ setPassState(userAnswer ? item : pairedItem, false);
+ getPassButton().setEnabled(false);
+ return;
+ }
+ }
+ }
+
+ @Override
+ protected void createTestItems() {
+ mPreparationYesItem = createUserItem(
+ R.string.tv_microphone_device_test_prep_question,
+ R.string.tv_yes, this);
+ setButtonEnabled(mPreparationYesItem, true);
+ mPreparationNoItem = createButtonItem(R.string.tv_no, this);
+ setButtonEnabled(mPreparationNoItem, true);
+ }
+
+ private void createInputDeviceItems() {
+ final Context context = MicrophoneDeviceTestActivity.this;
+ mInputManager = (InputManager) context.getSystemService(Context.INPUT_SERVICE);
+
+ final int[] inputDeviceIds = mInputManager.getInputDeviceIds();
+ mInputDeviceItems = new HashMap<View, List<Object>>();
+
+ for (int inputDeviceId : inputDeviceIds) {
+ final InputDevice inputDevice = mInputManager.getInputDevice(inputDeviceId);
+ final boolean hasMicrophone = inputDevice.hasMicrophone();
+ Log.w(TAG, "name: " + inputDevice.getName() + ", mic: " + hasMicrophone + ", virtual: "
+ + inputDevice.isVirtual() + ", descriptor: " + inputDevice.getDescriptor());
+
+ // Skip virtual input devices such as virtual keyboards. This does
+ // not, e.g., include com.google.android.tv.remote bluetooth connections.
+ if (inputDevice.isVirtual()) {
+ continue;
+ }
+
+ final CharSequence micQuestion =
+ getString(R.string.tv_microphone_device_test_mic_question, inputDevice.getName());
+
+ final View inputDeviceYesItem = createUserItem(micQuestion, R.string.tv_yes, this);
+ setButtonEnabled(inputDeviceYesItem, true);
+ final View inputDeviceNoItem = createButtonItem(R.string.tv_no, this);
+ setButtonEnabled(inputDeviceNoItem, true);
+ mInputDeviceItems.put(
+ inputDeviceYesItem, Arrays.asList(true, hasMicrophone, inputDeviceNoItem));
+ mInputDeviceItems.put(
+ inputDeviceNoItem, Arrays.asList(false, hasMicrophone, inputDeviceYesItem));
+ }
+
+ if (mInputDeviceItems.size() == 0) {
+ Toast.makeText(this, R.string.tv_microphone_device_test_no_input_devices,
+ Toast.LENGTH_LONG).show();
+ getPassButton().setEnabled(true);
+ }
+ }
+
+ @Override
+ protected void setInfoResources() {
+ setInfoResources(R.string.tv_microphone_device_test,
+ R.string.tv_microphone_device_test_info, -1);
+ }
+
+ private boolean hasPassed(View item) {
+ return (item.getTag() != null) && ((Boolean) item.getTag()) == PASS;
+ }
+
+ private boolean checkAllPassed() {
+ if (mInputDeviceItems != null && mInputDeviceItems.size() > 0) {
+ for (View item : mInputDeviceItems.keySet()) {
+ if (!hasPassed(item)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/tv/TvAppVerifierActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/tv/TvAppVerifierActivity.java
index d580ef8..41ab6f7 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/tv/TvAppVerifierActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/tv/TvAppVerifierActivity.java
@@ -91,6 +91,22 @@
}
/**
+ * Call this to create a test step where the user must perform some action.
+ */
+ protected View createUserItem(CharSequence instructionCharSequence,
+ int buttonTextId, View.OnClickListener l) {
+ View item = mInflater.inflate(R.layout.tv_item, mItemList, false);
+ TextView instructions = (TextView) item.findViewById(R.id.instructions);
+ instructions.setText(instructionCharSequence);
+ Button button = (Button) item.findViewById(R.id.user_action_button);
+ button.setVisibility(View.VISIBLE);
+ button.setText(buttonTextId);
+ button.setOnClickListener(l);
+ mItemList.addView(item);
+ return item;
+ }
+
+ /**
* Call this to create a test step where the test automatically evaluates whether
* an expected condition is satisfied.
*/
diff --git a/common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/VintfDeviceInfo.java b/common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/VintfDeviceInfo.java
index c9a6265..468bcc1 100644
--- a/common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/VintfDeviceInfo.java
+++ b/common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/VintfDeviceInfo.java
@@ -45,7 +45,6 @@
store.addResult("os_version", VintfRuntimeInfo.getOsVersion());
store.addResult("hardware_id", VintfRuntimeInfo.getHardwareId());
store.addResult("kernel_version", VintfRuntimeInfo.getKernelVersion());
- store.addResult("kernel_sepolicy_version", VintfRuntimeInfo.getKernelSepolicyVersion());
store.addResult("sepolicy_version", VintfObject.getSepolicyVersion());
String[] hals = VintfObject.getHalNamesAndVersions();
diff --git a/hostsidetests/jvmti/allocation-tracking/Android.mk b/hostsidetests/jvmti/allocation-tracking/Android.mk
index 634b0f6..15c3e50 100644
--- a/hostsidetests/jvmti/allocation-tracking/Android.mk
+++ b/hostsidetests/jvmti/allocation-tracking/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiTrackingHostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../host_side.mk
diff --git a/hostsidetests/jvmti/base/jni/cts_agent.cpp b/hostsidetests/jvmti/base/jni/cts_agent.cpp
index bb1e620..665a47e 100644
--- a/hostsidetests/jvmti/base/jni/cts_agent.cpp
+++ b/hostsidetests/jvmti/base/jni/cts_agent.cpp
@@ -49,7 +49,7 @@
LOG(FATAL) << "Could not get shared jvmtiEnv";
}
- SetAllCapabilities(jvmti_env);
+ SetStandardCapabilities(jvmti_env);
return 0;
}
@@ -64,7 +64,7 @@
LOG(FATAL) << "Could not get shared jvmtiEnv";
}
- SetAllCapabilities(jvmti_env);
+ SetStandardCapabilities(jvmti_env);
InformMainAttach(jvmti_env, env, kMainClass, kMainClassStartup);
return 0;
}
diff --git a/hostsidetests/jvmti/host_side.mk b/hostsidetests/jvmti/host_side.mk
new file mode 100644
index 0000000..708d170
--- /dev/null
+++ b/hostsidetests/jvmti/host_side.mk
@@ -0,0 +1,45 @@
+# Copyright (C) 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.
+
+# This file is meant to be included for every host-side test case to
+# have common build system code.
+#
+# For example:
+#
+# LOCAL_PATH := $(call my-dir)
+#
+# include $(CLEAR_VARS)
+#
+# LOCAL_MODULE := CtsJvmtiRunTest902HostTestCases
+#
+# include $(LOCAL_PATH)/../host_side.mk
+#
+
+
+ifndef LOCAL_PATH
+ $(error LOCAL_PATH not defined)
+endif
+ifndef LOCAL_MODULE
+ $(error LOCAL_MODULE not defined)
+endif
+
+LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
+LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
+LOCAL_MODULE_TAGS := tests
+LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
+
+include $(BUILD_HOST_JAVA_LIBRARY)
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
+
diff --git a/hostsidetests/jvmti/redefining/Android.mk b/hostsidetests/jvmti/redefining/Android.mk
index 327aa69..a5c0f07 100644
--- a/hostsidetests/jvmti/redefining/Android.mk
+++ b/hostsidetests/jvmti/redefining/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRedefineClassesHostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/Android.mk b/hostsidetests/jvmti/run-tests/Android.mk
index db06595..ca07cab 100644
--- a/hostsidetests/jvmti/run-tests/Android.mk
+++ b/hostsidetests/jvmti/run-tests/Android.mk
@@ -157,7 +157,7 @@
$$(GEN_OUTPUT): $$(GEN_INPUT) $$(GEN_JACK)
cp $$< $$@
ifneq (,$$(GEN_JACK))
- patch $$@ < $$(PRIVATE_GEN_JACK)
+ (cd $$(dir $$@) && patch $$(notdir $$@)) < $$(PRIVATE_GEN_JACK)
endif
GEN_INPUT :=
diff --git a/hostsidetests/jvmti/run-tests/test-902/Android.mk b/hostsidetests/jvmti/run-tests/test-902/Android.mk
index e47ab62..4467924 100644
--- a/hostsidetests/jvmti/run-tests/test-902/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-902/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest902HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-903/Android.mk b/hostsidetests/jvmti/run-tests/test-903/Android.mk
index 7ba63d8..74208d0 100644
--- a/hostsidetests/jvmti/run-tests/test-903/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-903/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest903HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-904/Android.mk b/hostsidetests/jvmti/run-tests/test-904/Android.mk
index fa9a94e..bfbbfa2 100644
--- a/hostsidetests/jvmti/run-tests/test-904/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-904/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest904HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-905/Android.mk b/hostsidetests/jvmti/run-tests/test-905/Android.mk
index 97678be..cd9234a 100644
--- a/hostsidetests/jvmti/run-tests/test-905/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-905/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest905HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-906/Android.mk b/hostsidetests/jvmti/run-tests/test-906/Android.mk
index 7b6e063..d9105ca 100644
--- a/hostsidetests/jvmti/run-tests/test-906/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-906/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest906HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-907/Android.mk b/hostsidetests/jvmti/run-tests/test-907/Android.mk
index a64d940..12c66f2 100644
--- a/hostsidetests/jvmti/run-tests/test-907/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-907/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest907HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-908/Android.mk b/hostsidetests/jvmti/run-tests/test-908/Android.mk
index a4a3716..2879daf 100644
--- a/hostsidetests/jvmti/run-tests/test-908/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-908/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest908HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-910/Android.mk b/hostsidetests/jvmti/run-tests/test-910/Android.mk
index dc913dd..85334b3 100644
--- a/hostsidetests/jvmti/run-tests/test-910/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-910/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest910HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-911/Android.mk b/hostsidetests/jvmti/run-tests/test-911/Android.mk
index 10d15fd..445fab0 100644
--- a/hostsidetests/jvmti/run-tests/test-911/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-911/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest911HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-912/Android.mk b/hostsidetests/jvmti/run-tests/test-912/Android.mk
index 6ec22d7..aa69a75 100644
--- a/hostsidetests/jvmti/run-tests/test-912/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-912/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest912HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-913/Android.mk b/hostsidetests/jvmti/run-tests/test-913/Android.mk
index d54985d..3c87a22 100644
--- a/hostsidetests/jvmti/run-tests/test-913/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-913/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest913HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-914/Android.mk b/hostsidetests/jvmti/run-tests/test-914/Android.mk
index 51b1022..7732cb1 100644
--- a/hostsidetests/jvmti/run-tests/test-914/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-914/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest914HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-915/Android.mk b/hostsidetests/jvmti/run-tests/test-915/Android.mk
index 961c4cc..384884a 100644
--- a/hostsidetests/jvmti/run-tests/test-915/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-915/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest915HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-917/Android.mk b/hostsidetests/jvmti/run-tests/test-917/Android.mk
index 8cf73fc..ebf60f5 100644
--- a/hostsidetests/jvmti/run-tests/test-917/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-917/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest917HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-918/Android.mk b/hostsidetests/jvmti/run-tests/test-918/Android.mk
index 497f86c..f6ba563 100644
--- a/hostsidetests/jvmti/run-tests/test-918/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-918/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest918HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-919/Android.mk b/hostsidetests/jvmti/run-tests/test-919/Android.mk
index 640f3d6..b14ab91 100644
--- a/hostsidetests/jvmti/run-tests/test-919/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-919/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest919HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-920/Android.mk b/hostsidetests/jvmti/run-tests/test-920/Android.mk
index 3029742..80ddaa8 100644
--- a/hostsidetests/jvmti/run-tests/test-920/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-920/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest920HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-922/Android.mk b/hostsidetests/jvmti/run-tests/test-922/Android.mk
index bf10341..d84b832 100644
--- a/hostsidetests/jvmti/run-tests/test-922/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-922/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest922HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-923/Android.mk b/hostsidetests/jvmti/run-tests/test-923/Android.mk
index fd2d6f8..d7f9f09 100644
--- a/hostsidetests/jvmti/run-tests/test-923/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-923/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest923HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-924/Android.mk b/hostsidetests/jvmti/run-tests/test-924/Android.mk
index 4b917d8..7e71607 100644
--- a/hostsidetests/jvmti/run-tests/test-924/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-924/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest924HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-926/Android.mk b/hostsidetests/jvmti/run-tests/test-926/Android.mk
index 9e0ffe1..d11f3f3 100644
--- a/hostsidetests/jvmti/run-tests/test-926/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-926/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest926HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-927/Android.mk b/hostsidetests/jvmti/run-tests/test-927/Android.mk
index 3371896..839ab86 100644
--- a/hostsidetests/jvmti/run-tests/test-927/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-927/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest927HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-928/Android.mk b/hostsidetests/jvmti/run-tests/test-928/Android.mk
index 3b0e60c..30ec7b5 100644
--- a/hostsidetests/jvmti/run-tests/test-928/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-928/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest928HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-930/Android.mk b/hostsidetests/jvmti/run-tests/test-930/Android.mk
index 3b7ddf7..73e6ba5d 100644
--- a/hostsidetests/jvmti/run-tests/test-930/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-930/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest930HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-931/Android.mk b/hostsidetests/jvmti/run-tests/test-931/Android.mk
index 8f2cec9..3c2175d 100644
--- a/hostsidetests/jvmti/run-tests/test-931/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-931/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest931HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-932/Android.mk b/hostsidetests/jvmti/run-tests/test-932/Android.mk
index 4e655f5..3773279 100644
--- a/hostsidetests/jvmti/run-tests/test-932/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-932/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest932HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-940/Android.mk b/hostsidetests/jvmti/run-tests/test-940/Android.mk
index 99fc6ae..372ee0d 100644
--- a/hostsidetests/jvmti/run-tests/test-940/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-940/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest940HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-942/Android.mk b/hostsidetests/jvmti/run-tests/test-942/Android.mk
index 68d839b..9a9407a 100644
--- a/hostsidetests/jvmti/run-tests/test-942/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-942/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest942HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-944/Android.mk b/hostsidetests/jvmti/run-tests/test-944/Android.mk
index bcc2046..c60d2e2 100644
--- a/hostsidetests/jvmti/run-tests/test-944/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-944/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest944HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-945/Android.mk b/hostsidetests/jvmti/run-tests/test-945/Android.mk
index b06d1f9..433d9ac6 100644
--- a/hostsidetests/jvmti/run-tests/test-945/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-945/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest945HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-947/Android.mk b/hostsidetests/jvmti/run-tests/test-947/Android.mk
index 2258a4b..0201816 100644
--- a/hostsidetests/jvmti/run-tests/test-947/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-947/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest947HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-951/Android.mk b/hostsidetests/jvmti/run-tests/test-951/Android.mk
index 5677f8b..e198f70 100644
--- a/hostsidetests/jvmti/run-tests/test-951/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-951/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest951HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-982/Android.mk b/hostsidetests/jvmti/run-tests/test-982/Android.mk
index b766614..e245e1d 100644
--- a/hostsidetests/jvmti/run-tests/test-982/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-982/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest982HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-984/Android.mk b/hostsidetests/jvmti/run-tests/test-984/Android.mk
index 2d71278..b0a919a 100644
--- a/hostsidetests/jvmti/run-tests/test-984/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-984/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest984HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-985/Android.mk b/hostsidetests/jvmti/run-tests/test-985/Android.mk
index 06e4454..0a55fac 100644
--- a/hostsidetests/jvmti/run-tests/test-985/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-985/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest985HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-986/Android.mk b/hostsidetests/jvmti/run-tests/test-986/Android.mk
index e198471..6be45f2 100644
--- a/hostsidetests/jvmti/run-tests/test-986/Android.mk
+++ b/hostsidetests/jvmti/run-tests/test-986/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiRunTest986HostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/tagging/Android.mk b/hostsidetests/jvmti/tagging/Android.mk
index 3d3e9e4..1ee7bee 100644
--- a/hostsidetests/jvmti/tagging/Android.mk
+++ b/hostsidetests/jvmti/tagging/Android.mk
@@ -17,11 +17,5 @@
include $(CLEAR_VARS)
LOCAL_MODULE := CtsJvmtiTaggingHostTestCases
-LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiHostTestBase
-LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
-LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
+include $(LOCAL_PATH)/../host_side.mk
diff --git a/hostsidetests/security/Android.mk b/hostsidetests/security/Android.mk
index f209153..ec7403d 100644
--- a/hostsidetests/security/Android.mk
+++ b/hostsidetests/security/Android.mk
@@ -34,6 +34,12 @@
LOCAL_CTS_TEST_PACKAGE := android.host.security
+ifeq ($(HOST_OS),darwin)
+SHAREDLIB_EXT=dylib
+else
+SHAREDLIB_EXT=so
+endif
+
selinux_plat_seapp_contexts := $(call intermediates-dir-for,ETC,plat_seapp_contexts)/plat_seapp_contexts
selinux_plat_seapp_neverallows := $(call intermediates-dir-for,ETC,plat_seapp_neverallows)/plat_seapp_neverallows
@@ -47,6 +53,9 @@
LOCAL_JAVA_RESOURCE_FILES := \
$(HOST_OUT_EXECUTABLES)/checkseapp \
$(HOST_OUT_EXECUTABLES)/checkfc \
+ $(HOST_OUT_EXECUTABLES)/sepolicy_tests \
+ $(HOST_OUT)/lib64/libsepolwrap.$(SHAREDLIB_EXT) \
+ $(HOST_OUT)/lib64/libc++.$(SHAREDLIB_EXT) \
$(selinux_plat_seapp_contexts) \
$(selinux_plat_seapp_neverallows) \
$(selinux_plat_file_contexts) \
diff --git a/hostsidetests/security/securityPatch/CVE-2017-0564/kernel-headers/linux/ion.h b/hostsidetests/security/securityPatch/CVE-2017-0564/kernel-headers/linux/ion.h
new file mode 100644
index 0000000..7b5b031
--- /dev/null
+++ b/hostsidetests/security/securityPatch/CVE-2017-0564/kernel-headers/linux/ion.h
@@ -0,0 +1,78 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ *** This header was automatically generated from a Linux kernel header
+ *** of the same name, to make information necessary for userspace to
+ *** call into the kernel available to libc. It contains only constants,
+ *** structures, and macros generated from the original header, and thus,
+ *** contains no copyrightable information.
+ ***
+ *** To edit the content of this header, modify the corresponding
+ *** source file (e.g. under external/kernel-headers/original/) then
+ *** run bionic/libc/kernel/tools/update_all.py
+ ***
+ *** Any manual change here will be lost the next time this script will
+ *** be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef _UAPI_LINUX_ION_H
+#define _UAPI_LINUX_ION_H
+#include <linux/ioctl.h>
+#include <linux/types.h>
+typedef int ion_user_handle_t;
+enum ion_heap_type {
+ ION_HEAP_TYPE_SYSTEM,
+ ION_HEAP_TYPE_SYSTEM_CONTIG,
+ ION_HEAP_TYPE_CARVEOUT,
+ ION_HEAP_TYPE_CHUNK,
+ ION_HEAP_TYPE_DMA,
+ ION_HEAP_TYPE_CUSTOM,
+};
+#define ION_NUM_HEAP_IDS (sizeof(unsigned int) * 8)
+#define ION_FLAG_CACHED 1
+#define ION_FLAG_CACHED_NEEDS_SYNC 2
+struct ion_allocation_data {
+ size_t len;
+ size_t align;
+ unsigned int heap_id_mask;
+ unsigned int flags;
+ ion_user_handle_t handle;
+};
+struct ion_fd_data {
+ ion_user_handle_t handle;
+ int fd;
+};
+struct ion_handle_data {
+ ion_user_handle_t handle;
+};
+struct ion_custom_data {
+ unsigned int cmd;
+ unsigned long arg;
+};
+#define MAX_HEAP_NAME 32
+struct ion_heap_data {
+ char name[MAX_HEAP_NAME];
+ __u32 type;
+ __u32 heap_id;
+ __u32 reserved0;
+ __u32 reserved1;
+ __u32 reserved2;
+};
+struct ion_heap_query {
+ __u32 cnt;
+ __u32 reserved0;
+ __u64 heaps;
+ __u32 reserved1;
+ __u32 reserved2;
+};
+#define ION_IOC_MAGIC 'I'
+#define ION_IOC_ALLOC _IOWR(ION_IOC_MAGIC, 0, struct ion_allocation_data)
+#define ION_IOC_FREE _IOWR(ION_IOC_MAGIC, 1, struct ion_handle_data)
+#define ION_IOC_MAP _IOWR(ION_IOC_MAGIC, 2, struct ion_fd_data)
+#define ION_IOC_SHARE _IOWR(ION_IOC_MAGIC, 4, struct ion_fd_data)
+#define ION_IOC_IMPORT _IOWR(ION_IOC_MAGIC, 5, struct ion_fd_data)
+#define ION_IOC_SYNC _IOWR(ION_IOC_MAGIC, 7, struct ion_fd_data)
+#define ION_IOC_CUSTOM _IOWR(ION_IOC_MAGIC, 6, struct ion_custom_data)
+#define ION_IOC_HEAP_QUERY _IOWR(ION_IOC_MAGIC, 8, struct ion_heap_query)
+#endif
diff --git a/hostsidetests/security/securityPatch/CVE-2017-0564/original-kernel-headers/linux/ion.h b/hostsidetests/security/securityPatch/CVE-2017-0564/original-kernel-headers/linux/ion.h
new file mode 100644
index 0000000..14cd873
--- /dev/null
+++ b/hostsidetests/security/securityPatch/CVE-2017-0564/original-kernel-headers/linux/ion.h
@@ -0,0 +1,236 @@
+/*
+ * drivers/staging/android/uapi/ion.h
+ *
+ * Copyright (C) 2011 Google, Inc.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef _UAPI_LINUX_ION_H
+#define _UAPI_LINUX_ION_H
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+typedef int ion_user_handle_t;
+
+/**
+ * enum ion_heap_types - list of all possible types of heaps
+ * @ION_HEAP_TYPE_SYSTEM: memory allocated via vmalloc
+ * @ION_HEAP_TYPE_SYSTEM_CONTIG: memory allocated via kmalloc
+ * @ION_HEAP_TYPE_CARVEOUT: memory allocated from a prereserved
+ * carveout heap, allocations are physically
+ * contiguous
+ * @ION_HEAP_TYPE_DMA: memory allocated via DMA API
+ * @ION_NUM_HEAPS: helper for iterating over heaps, a bit mask
+ * is used to identify the heaps, so only 32
+ * total heap types are supported
+ */
+enum ion_heap_type {
+ ION_HEAP_TYPE_SYSTEM,
+ ION_HEAP_TYPE_SYSTEM_CONTIG,
+ ION_HEAP_TYPE_CARVEOUT,
+ ION_HEAP_TYPE_CHUNK,
+ ION_HEAP_TYPE_DMA,
+ ION_HEAP_TYPE_CUSTOM, /*
+ * must be last so device specific heaps always
+ * are at the end of this enum
+ */
+};
+
+#define ION_NUM_HEAP_IDS (sizeof(unsigned int) * 8)
+
+/**
+ * allocation flags - the lower 16 bits are used by core ion, the upper 16
+ * bits are reserved for use by the heaps themselves.
+ */
+
+/*
+ * mappings of this buffer should be cached, ion will do cache maintenance
+ * when the buffer is mapped for dma
+ */
+#define ION_FLAG_CACHED 1
+
+/*
+ * mappings of this buffer will created at mmap time, if this is set
+ * caches must be managed manually
+ */
+#define ION_FLAG_CACHED_NEEDS_SYNC 2
+
+/**
+ * DOC: Ion Userspace API
+ *
+ * create a client by opening /dev/ion
+ * most operations handled via following ioctls
+ *
+ */
+
+/**
+ * struct ion_allocation_data - metadata passed from userspace for allocations
+ * @len: size of the allocation
+ * @align: required alignment of the allocation
+ * @heap_id_mask: mask of heap ids to allocate from
+ * @flags: flags passed to heap
+ * @handle: pointer that will be populated with a cookie to use to
+ * refer to this allocation
+ *
+ * Provided by userspace as an argument to the ioctl
+ */
+struct ion_allocation_data {
+ size_t len;
+ size_t align;
+ unsigned int heap_id_mask;
+ unsigned int flags;
+ ion_user_handle_t handle;
+};
+
+/**
+ * struct ion_fd_data - metadata passed to/from userspace for a handle/fd pair
+ * @handle: a handle
+ * @fd: a file descriptor representing that handle
+ *
+ * For ION_IOC_SHARE or ION_IOC_MAP userspace populates the handle field with
+ * the handle returned from ion alloc, and the kernel returns the file
+ * descriptor to share or map in the fd field. For ION_IOC_IMPORT, userspace
+ * provides the file descriptor and the kernel returns the handle.
+ */
+struct ion_fd_data {
+ ion_user_handle_t handle;
+ int fd;
+};
+
+/**
+ * struct ion_handle_data - a handle passed to/from the kernel
+ * @handle: a handle
+ */
+struct ion_handle_data {
+ ion_user_handle_t handle;
+};
+
+/**
+ * struct ion_custom_data - metadata passed to/from userspace for a custom ioctl
+ * @cmd: the custom ioctl function to call
+ * @arg: additional data to pass to the custom ioctl, typically a user
+ * pointer to a predefined structure
+ *
+ * This works just like the regular cmd and arg fields of an ioctl.
+ */
+struct ion_custom_data {
+ unsigned int cmd;
+ unsigned long arg;
+};
+
+#define MAX_HEAP_NAME 32
+
+/**
+ * struct ion_heap_data - data about a heap
+ * @name - first 32 characters of the heap name
+ * @type - heap type
+ * @heap_id - heap id for the heap
+ */
+struct ion_heap_data {
+ char name[MAX_HEAP_NAME];
+ __u32 type;
+ __u32 heap_id;
+ __u32 reserved0;
+ __u32 reserved1;
+ __u32 reserved2;
+};
+
+/**
+ * struct ion_heap_query - collection of data about all heaps
+ * @cnt - total number of heaps to be copied
+ * @heaps - buffer to copy heap data
+ */
+struct ion_heap_query {
+ __u32 cnt; /* Total number of heaps to be copied */
+ __u32 reserved0; /* align to 64bits */
+ __u64 heaps; /* buffer to be populated */
+ __u32 reserved1;
+ __u32 reserved2;
+};
+
+#define ION_IOC_MAGIC 'I'
+
+/**
+ * DOC: ION_IOC_ALLOC - allocate memory
+ *
+ * Takes an ion_allocation_data struct and returns it with the handle field
+ * populated with the opaque handle for the allocation.
+ */
+#define ION_IOC_ALLOC _IOWR(ION_IOC_MAGIC, 0, \
+ struct ion_allocation_data)
+
+/**
+ * DOC: ION_IOC_FREE - free memory
+ *
+ * Takes an ion_handle_data struct and frees the handle.
+ */
+#define ION_IOC_FREE _IOWR(ION_IOC_MAGIC, 1, struct ion_handle_data)
+
+/**
+ * DOC: ION_IOC_MAP - get a file descriptor to mmap
+ *
+ * Takes an ion_fd_data struct with the handle field populated with a valid
+ * opaque handle. Returns the struct with the fd field set to a file
+ * descriptor open in the current address space. This file descriptor
+ * can then be used as an argument to mmap.
+ */
+#define ION_IOC_MAP _IOWR(ION_IOC_MAGIC, 2, struct ion_fd_data)
+
+/**
+ * DOC: ION_IOC_SHARE - creates a file descriptor to use to share an allocation
+ *
+ * Takes an ion_fd_data struct with the handle field populated with a valid
+ * opaque handle. Returns the struct with the fd field set to a file
+ * descriptor open in the current address space. This file descriptor
+ * can then be passed to another process. The corresponding opaque handle can
+ * be retrieved via ION_IOC_IMPORT.
+ */
+#define ION_IOC_SHARE _IOWR(ION_IOC_MAGIC, 4, struct ion_fd_data)
+
+/**
+ * DOC: ION_IOC_IMPORT - imports a shared file descriptor
+ *
+ * Takes an ion_fd_data struct with the fd field populated with a valid file
+ * descriptor obtained from ION_IOC_SHARE and returns the struct with the handle
+ * filed set to the corresponding opaque handle.
+ */
+#define ION_IOC_IMPORT _IOWR(ION_IOC_MAGIC, 5, struct ion_fd_data)
+
+/**
+ * DOC: ION_IOC_SYNC - syncs a shared file descriptors to memory
+ *
+ * Deprecated in favor of using the dma_buf api's correctly (syncing
+ * will happen automatically when the buffer is mapped to a device).
+ * If necessary should be used after touching a cached buffer from the cpu,
+ * this will make the buffer in memory coherent.
+ */
+#define ION_IOC_SYNC _IOWR(ION_IOC_MAGIC, 7, struct ion_fd_data)
+
+/**
+ * DOC: ION_IOC_CUSTOM - call architecture specific ion ioctl
+ *
+ * Takes the argument of the architecture specific ioctl to call and
+ * passes appropriate userdata for that ioctl
+ */
+#define ION_IOC_CUSTOM _IOWR(ION_IOC_MAGIC, 6, struct ion_custom_data)
+
+/**
+ * DOC: ION_IOC_HEAP_QUERY - information about available heaps
+ *
+ * Takes an ion_heap_query structure and populates information about
+ * available Ion heaps.
+ */
+#define ION_IOC_HEAP_QUERY _IOWR(ION_IOC_MAGIC, 8, \
+ struct ion_heap_query)
+
+#endif /* _UAPI_LINUX_ION_H */
diff --git a/hostsidetests/security/securityPatch/CVE-2017-0564/poc.c b/hostsidetests/security/securityPatch/CVE-2017-0564/poc.c
index 7734d4c..ae5ad40 100644
--- a/hostsidetests/security/securityPatch/CVE-2017-0564/poc.c
+++ b/hostsidetests/security/securityPatch/CVE-2017-0564/poc.c
@@ -29,7 +29,11 @@
#include <string.h>
#include <fcntl.h>
#include <errno.h>
-#include <linux/ion.h>
+
+// Include a fixed version of the ion.h file because it changes per kernel.
+// This test is going to be extremely brittle due to it's dependency on
+// a structure that is going to change with different kernels.
+#include "kernel-headers/linux/ion.h"
#define ION_HEAP(bit) (1 << (bit))
@@ -73,7 +77,7 @@
#ifdef NEW_ION
.heap_id_mask = ion_type,
//.flags = ION_SECURE | ION_FORCE_CONTIGUOUS,
- .flags = (1 << 0),
+ //.flags = (1 << 0),
.flags = 0x0,
#else
.flags = ION_SECURE | ION_FORCE_CONTIGUOUS | ION_HEAP(ION_CP_MM_HEAP_ID),
@@ -165,7 +169,7 @@
int main()
{
- int ret, i, count;
+ int ret, count;
pthread_t tid_free[2];
count = 0;
@@ -178,6 +182,7 @@
return -1;
}
+ size_t i;
for (i=0; i < sizeof(ion_type)/sizeof(ion_type[0]); i++) {
ret = ion_alloc(ion_fd, 0x1000, &ion_handle, ion_type[i]);
if (ret == 0) {
diff --git a/hostsidetests/security/src/android/security/cts/SELinuxHostTest.java b/hostsidetests/security/src/android/security/cts/SELinuxHostTest.java
index 54f1a92..b048672 100644
--- a/hostsidetests/security/src/android/security/cts/SELinuxHostTest.java
+++ b/hostsidetests/security/src/android/security/cts/SELinuxHostTest.java
@@ -62,6 +62,8 @@
public class SELinuxHostTest extends DeviceTestCase implements IBuildReceiver, IDeviceTest {
private static final Map<ITestDevice, File> cachedDevicePolicyFiles = new HashMap<>(1);
+ private static final Map<ITestDevice, File> cachedDevicePlatFcFiles = new HashMap<>(1);
+ private static final Map<ITestDevice, File> cachedDeviceNonplatFcFiles = new HashMap<>(1);
private File sepolicyAnalyze;
private File checkSeapp;
@@ -78,6 +80,9 @@
private File devicePcFile;
private File deviceSvcFile;
private File seappNeverAllowFile;
+ private File libsepolwrap;
+ private File libcpp;
+ private File sepolicyTests;
private IBuildInfo mBuild;
@@ -107,9 +112,11 @@
InputStream is = this.getClass().getResourceAsStream(resName);
File tempFile = File.createTempFile("SELinuxHostTest", ".tmp");
FileOutputStream os = new FileOutputStream(tempFile);
- int rByte = 0;
- while ((rByte = is.read()) != -1) {
- os.write(rByte);
+ byte[] buf = new byte[1024];
+ int len;
+
+ while ((len = is.read(buf)) != -1) {
+ os.write(buf, 0, len);
}
os.flush();
os.close();
@@ -137,6 +144,43 @@
sepolicyAnalyze.setExecutable(true);
devicePolicyFile = getDevicePolicyFile(mDevice);
+ if (mDevice.doesFileExist("/system/etc/selinux/plat_file_contexts")) {
+ devicePlatFcFile = getDeviceFile(mDevice, cachedDevicePlatFcFiles,
+ "/system/etc/selinux/plat_file_contexts", "plat_file_contexts");
+ deviceNonplatFcFile = getDeviceFile(mDevice, cachedDeviceNonplatFcFiles,
+ "/vendor/etc/selinux/nonplat_file_contexts", "nonplat_file_contexts");
+ } else {
+ devicePlatFcFile = getDeviceFile(mDevice, cachedDevicePlatFcFiles,
+ "/plat_file_contexts", "plat_file_contexts");
+ deviceNonplatFcFile = getDeviceFile(mDevice, cachedDeviceNonplatFcFiles,
+ "/nonplat_file_contexts", "nonplat_file_contexts");
+ }
+ }
+
+ /*
+ * IMPLEMENTATION DETAILS: We cache some host-side policy files on per-device basis (in case
+ * CTS supports running against multiple devices at the same time). HashMap is used instead
+ * of WeakHashMap because in the grand scheme of things, keeping ITestDevice and
+ * corresponding File objects from being garbage-collected is not a big deal in CTS. If this
+ * becomes a big deal, this can be switched to WeakHashMap.
+ */
+ private static File getDeviceFile(ITestDevice device,
+ Map<ITestDevice, File> cache, String deviceFilePath,
+ String tmpFileName) throws Exception {
+ File file;
+ synchronized (cache) {
+ file = cache.get(device);
+ }
+ if (file != null) {
+ return file;
+ }
+ file = File.createTempFile(tmpFileName, ".tmp");
+ file.deleteOnExit();
+ device.pullFile(deviceFilePath, file);
+ synchronized (cache) {
+ cache.put(device, file);
+ }
+ return file;
}
// NOTE: cts/tools/selinux depends on this method. Rename/change with caution.
@@ -144,25 +188,7 @@
* Returns the host-side file containing the SELinux policy of the device under test.
*/
public static File getDevicePolicyFile(ITestDevice device) throws Exception {
- // IMPLEMENTATION DETAILS: We cache the host-side policy file on per-device basis (in case
- // CTS supports running against multiple devices at the same time). HashMap is used instead
- // of WeakHashMap because in the grand scheme of things, keeping ITestDevice and
- // corresponding File objects from being garbage-collected is not a big deal in CTS. If this
- // becomes a big deal, this can be switched to WeakHashMap.
- File file;
- synchronized (cachedDevicePolicyFiles) {
- file = cachedDevicePolicyFiles.get(device);
- }
- if (file != null) {
- return file;
- }
- file = File.createTempFile("sepolicy", ".tmp");
- file.deleteOnExit();
- device.pullFile("/sys/fs/selinux/policy", file);
- synchronized (cachedDevicePolicyFiles) {
- cachedDevicePolicyFiles.put(device, file);
- }
- return file;
+ return getDeviceFile(device, cachedDevicePolicyFiles, "/sys/fs/selinux/policy", "sepolicy");
}
/**
@@ -455,13 +481,6 @@
checkFc = copyResourceToTempFile("/checkfc");
checkFc.setExecutable(true);
- /* obtain file_contexts file(s) from running device */
- devicePlatFcFile = File.createTempFile("file_contexts", ".tmp");
- devicePlatFcFile.deleteOnExit();
- if (!mDevice.pullFile("/system/etc/selinux/plat_file_contexts", devicePlatFcFile)) {
- mDevice.pullFile("/plat_file_contexts", devicePlatFcFile);
- }
-
/* retrieve the AOSP file_contexts file from jar */
aospFcFile = copyResourceToTempFile("/plat_file_contexts");
@@ -539,24 +558,16 @@
checkFc = copyResourceToTempFile("/checkfc");
checkFc.setExecutable(true);
- /* obtain file_contexts file(s) from running device */
- devicePlatFcFile = File.createTempFile("plat_file_contexts", ".tmp");
- devicePlatFcFile.deleteOnExit();
- deviceNonplatFcFile = File.createTempFile("nonplat_file_contexts", ".tmp");
- deviceNonplatFcFile.deleteOnExit();
- if (mDevice.pullFile("/system/etc/selinux/plat_file_contexts", devicePlatFcFile)) {
- mDevice.pullFile("/vendor/etc/selinux/nonplat_file_contexts", deviceNonplatFcFile);
- } else {
- mDevice.pullFile("/plat_file_contexts", devicePlatFcFile);
- mDevice.pullFile("/nonplat_file_contexts", deviceNonplatFcFile);
- }
- appendTo(devicePlatFcFile.getAbsolutePath(),
- deviceNonplatFcFile.getAbsolutePath());
+ /* combine plat and nonplat policies for testing */
+ File combinedFcFile = File.createTempFile("combined_file_context", ".tmp");
+ combinedFcFile.deleteOnExit();
+ appendTo(combinedFcFile.getAbsolutePath(), devicePlatFcFile.getAbsolutePath());
+ appendTo(combinedFcFile.getAbsolutePath(), deviceNonplatFcFile.getAbsolutePath());
/* run checkfc sepolicy file_contexts */
ProcessBuilder pb = new ProcessBuilder(checkFc.getAbsolutePath(),
devicePolicyFile.getAbsolutePath(),
- devicePlatFcFile.getAbsolutePath());
+ combinedFcFile.getAbsolutePath());
pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
pb.redirectErrorStream(true);
Process p = pb.start();
@@ -644,6 +655,67 @@
+ errorString, errorString.length() == 0);
}
+ private boolean isMac() {
+ String os = System.getProperty("os.name").toLowerCase();
+ return (os.startsWith("mac") || os.startsWith("darwin"));
+ }
+
+ private void setupLibraries() throws Exception {
+ // The host side binary tests are host OS specific. Use Linux
+ // libraries on Linux and Mac libraries on Mac.
+ if (isMac()) {
+ libsepolwrap = copyResourceToTempFile("/libsepolwrap.dylib");
+ libcpp = copyResourceToTempFile("/libc++.dylib");
+ libcpp.renameTo(new File(System.getProperty("java.io.tmpdir") + "/libc++.dylib"));
+ } else {
+ libsepolwrap = copyResourceToTempFile("/libsepolwrap.so");
+ libcpp = copyResourceToTempFile("/libc++.so");
+ libcpp.renameTo(new File(System.getProperty("java.io.tmpdir") + "/libc++.so"));
+ }
+ libsepolwrap.deleteOnExit();
+ libcpp.deleteOnExit();
+ }
+
+ private void assertSepolicyTests(String Test) throws Exception {
+ setupLibraries();
+ sepolicyTests = copyResourceToTempFile("/sepolicy_tests");
+ sepolicyTests.setExecutable(true);
+ ProcessBuilder pb = new ProcessBuilder(
+ sepolicyTests.getAbsolutePath(),
+ "-l", libsepolwrap.getAbsolutePath(),
+ "-f", devicePlatFcFile.getAbsolutePath(),
+ "-f", deviceNonplatFcFile.getAbsolutePath(),
+ "-p", devicePolicyFile.getAbsolutePath(),
+ "--test", Test);
+ Map<String, String> env = pb.environment();
+ if (isMac()) {
+ env.put("DYLD_LIBRARY_PATH", System.getProperty("java.io.tmpdir"));
+ } else {
+ env.put("LD_LIBRARY_PATH", System.getProperty("java.io.tmpdir"));
+ }
+ pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
+ pb.redirectErrorStream(true);
+ Process p = pb.start();
+ p.waitFor();
+ BufferedReader result = new BufferedReader(new InputStreamReader(p.getInputStream()));
+ String line;
+ StringBuilder errorString = new StringBuilder();
+ while ((line = result.readLine()) != null) {
+ errorString.append(line);
+ errorString.append("\n");
+ }
+ assertTrue(errorString.toString(), errorString.length() == 0);
+ }
+
+ /**
+ * Tests that all types on /data have the data_file_type attribute.
+ *
+ * @throws Exception
+ */
+ public void testDataTypeViolators() throws Exception {
+ assertSepolicyTests("TestDataTypeViolations");
+ }
+
/**
* Tests that the policy defines no booleans (runtime conditional policy).
*
diff --git a/hostsidetests/theme/assets/P b/hostsidetests/theme/assets/P
new file mode 120000
index 0000000..a5c750f
--- /dev/null
+++ b/hostsidetests/theme/assets/P
@@ -0,0 +1 @@
+27
\ No newline at end of file
diff --git a/suite/audio_quality/Android.mk b/suite/audio_quality/Android.mk
index c3404d2..9cf5dc8 100644
--- a/suite/audio_quality/Android.mk
+++ b/suite/audio_quality/Android.mk
@@ -50,8 +50,6 @@
cts: $(CTS_AUDIO_QUALITY_ZIP)
-ifneq ($(filter cts, $(MAKECMDGOALS)),)
$(call dist-for-goals, cts, $(CTS_AUDIO_QUALITY_ZIP))
-endif # cts
endif # linux
diff --git a/suite/audio_quality/lib/src/task/ModelBuilder.cpp b/suite/audio_quality/lib/src/task/ModelBuilder.cpp
index 78e5138..f1a506b 100644
--- a/suite/audio_quality/lib/src/task/ModelBuilder.cpp
+++ b/suite/audio_quality/lib/src/task/ModelBuilder.cpp
@@ -87,7 +87,7 @@
{
XMLDocument doc;
int error = doc.LoadFile(xmlFileName.string());
- if (error != XML_NO_ERROR) {
+ if (error != XML_SUCCESS) {
LOGE("ModelBuilder::parseTestDescriptionXml cannot load file %s: %d", xmlFileName.string(), error);
return NULL;
}
diff --git a/tests/libcore/ojluni/Android.mk b/tests/libcore/ojluni/Android.mk
index be709be..079638e 100644
--- a/tests/libcore/ojluni/Android.mk
+++ b/tests/libcore/ojluni/Android.mk
@@ -21,6 +21,10 @@
LOCAL_STATIC_JAVA_LIBRARIES := \
core-ojtests-public
+LOCAL_JAVA_LIBRARIES := testng
+
+LOCAL_DX_FLAGS := --core-library
+
# Don't include this package in any target
LOCAL_MODULE_TAGS := tests
diff --git a/tests/tests/content/src/android/content/cts/IntentTest.java b/tests/tests/content/src/android/content/cts/IntentTest.java
index dbbbe15..af53e56 100644
--- a/tests/tests/content/src/android/content/cts/IntentTest.java
+++ b/tests/tests/content/src/android/content/cts/IntentTest.java
@@ -1148,6 +1148,11 @@
.putExtra("int", 1000).putExtra("long", (long) 1000)
.putExtra("boolean", true).putExtra("float", 10.4f)
.setPackage("com.myapp"));
+ checkIntentUri(
+ "intent://example.org/db?123#Intent;scheme=z39.50r;end",
+ null,
+ new Intent().setAction(Intent.ACTION_VIEW)
+ .setData(Uri.parse("z39.50r://example.org/db?123")));
}
private boolean compareIntents(Intent expected, Intent actual) {
diff --git a/tests/tests/icu/AndroidTest.xml b/tests/tests/icu/AndroidTest.xml
index cbc5fb9..be33fd2 100644
--- a/tests/tests/icu/AndroidTest.xml
+++ b/tests/tests/icu/AndroidTest.xml
@@ -20,11 +20,25 @@
<option name="cleanup-apks" value="true" />
<option name="test-file-name" value="CtsIcuTestCases.apk" />
</target_preparer>
+ <!-- ICU tests are split into shards to improve reliability, mostly due to unrecoverable heap
+ growth. http://b/62512577 -->
+ <!-- A shard containing a small set of tests that are run separately to avoid polluting the heap
+ of the MainTestShard. -->
<test class="com.android.compatibility.testtype.LibcoreTest" >
<option name="package" value="android.icu.cts" />
<option name="instrumentation-arg" key="filter"
value="com.android.cts.core.runner.ExpectationBasedFilter" />
<option name="core-expectation" value="/android/icu/cts/expectations/icu-known-failures.txt" />
- <option name="runtime-hint" value="18m30s" />
+ <option name="runtime-hint" value="20s" />
+ <option name="include-annotation" value="android.icu.testsharding.HiMemTestShard" />
+ </test>
+ <!-- The shard used to run most ICU tests. -->
+ <test class="com.android.compatibility.testtype.LibcoreTest" >
+ <option name="package" value="android.icu.cts" />
+ <option name="instrumentation-arg" key="filter"
+ value="com.android.cts.core.runner.ExpectationBasedFilter" />
+ <option name="core-expectation" value="/android/icu/cts/expectations/icu-known-failures.txt" />
+ <option name="runtime-hint" value="18m" />
+ <option name="include-annotation" value="android.icu.testsharding.MainTestShard" />
</test>
</configuration>
diff --git a/tests/tests/jni/libjninamespacea1/namespacea1.cpp b/tests/tests/jni/libjninamespacea1/namespacea1.cpp
index decb4f1..8a79c3c 100644
--- a/tests/tests/jni/libjninamespacea1/namespacea1.cpp
+++ b/tests/tests/jni/libjninamespacea1/namespacea1.cpp
@@ -18,7 +18,7 @@
#include <android/log.h>
#include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,"namespacea1",__VA_ARGS__)
diff --git a/tests/tests/jni/libjninamespacea2/namespacea2.cpp b/tests/tests/jni/libjninamespacea2/namespacea2.cpp
index 809266e..49f055e 100644
--- a/tests/tests/jni/libjninamespacea2/namespacea2.cpp
+++ b/tests/tests/jni/libjninamespacea2/namespacea2.cpp
@@ -18,7 +18,7 @@
#include <android/log.h>
#include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,"namespacea2",__VA_ARGS__)
diff --git a/tests/tests/jni/libjninamespaceb/namespaceb.cpp b/tests/tests/jni/libjninamespaceb/namespaceb.cpp
index b3bedcb..4c48627 100644
--- a/tests/tests/jni/libjninamespaceb/namespaceb.cpp
+++ b/tests/tests/jni/libjninamespaceb/namespaceb.cpp
@@ -18,7 +18,7 @@
#include <android/log.h>
#include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,"namespaceb",__VA_ARGS__)
diff --git a/tests/tests/jni/libjnitest/android_jni_cts_InstanceNonce.c b/tests/tests/jni/libjnitest/android_jni_cts_InstanceNonce.c
index 3fda82a..cb44b42a 100644
--- a/tests/tests/jni/libjnitest/android_jni_cts_InstanceNonce.c
+++ b/tests/tests/jni/libjnitest/android_jni_cts_InstanceNonce.c
@@ -20,7 +20,7 @@
*/
#include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
#include <stdbool.h>
#include <string.h>
diff --git a/tests/tests/jni/libjnitest/android_jni_cts_JniCTest.c b/tests/tests/jni/libjnitest/android_jni_cts_JniCTest.c
index 23278dc..cca5383 100644
--- a/tests/tests/jni/libjnitest/android_jni_cts_JniCTest.c
+++ b/tests/tests/jni/libjnitest/android_jni_cts_JniCTest.c
@@ -19,7 +19,7 @@
*/
#include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
/*
diff --git a/tests/tests/jni/libjnitest/android_jni_cts_JniCppTest.cpp b/tests/tests/jni/libjnitest/android_jni_cts_JniCppTest.cpp
index 38829a0..b0937f4 100644
--- a/tests/tests/jni/libjnitest/android_jni_cts_JniCppTest.cpp
+++ b/tests/tests/jni/libjnitest/android_jni_cts_JniCppTest.cpp
@@ -19,7 +19,7 @@
*/
#include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
/*
diff --git a/tests/tests/jni/libjnitest/android_jni_cts_JniStaticTest.cpp b/tests/tests/jni/libjnitest/android_jni_cts_JniStaticTest.cpp
index 5e8bea0..aa5651f 100644
--- a/tests/tests/jni/libjnitest/android_jni_cts_JniStaticTest.cpp
+++ b/tests/tests/jni/libjnitest/android_jni_cts_JniStaticTest.cpp
@@ -19,7 +19,7 @@
*/
#include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
extern "C" JNIEXPORT jint JNICALL Java_android_jni_cts_ClassLoaderHelper_nativeGetHashCode(
JNIEnv* env,
diff --git a/tests/tests/jni/libjnitest/android_jni_cts_LinkerNamespacesTest.cpp b/tests/tests/jni/libjnitest/android_jni_cts_LinkerNamespacesTest.cpp
index c983ee2..748b756 100644
--- a/tests/tests/jni/libjnitest/android_jni_cts_LinkerNamespacesTest.cpp
+++ b/tests/tests/jni/libjnitest/android_jni_cts_LinkerNamespacesTest.cpp
@@ -22,7 +22,6 @@
#include <dlfcn.h>
#include <fcntl.h>
#include <jni.h>
-#include <JNIHelp.h>
#include <libgen.h>
#include <stdlib.h>
#include <sys/types.h>
@@ -34,8 +33,9 @@
#include <unordered_set>
#include <vector>
-#include "ScopedLocalRef.h"
-#include "ScopedUtfChars.h"
+#include <nativehelper/JNIHelp.h>
+#include <nativehelper/ScopedLocalRef.h>
+#include <nativehelper/ScopedUtfChars.h>
#if defined(__LP64__)
static const std::string kSystemLibraryPath = "/system/lib64";
diff --git a/tests/tests/jni/libjnitest/android_jni_cts_StaticNonce.c b/tests/tests/jni/libjnitest/android_jni_cts_StaticNonce.c
index ada2bf8..4e330e5 100644
--- a/tests/tests/jni/libjnitest/android_jni_cts_StaticNonce.c
+++ b/tests/tests/jni/libjnitest/android_jni_cts_StaticNonce.c
@@ -20,7 +20,7 @@
*/
#include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
#include <stdbool.h>
#include <string.h>
diff --git a/tests/tests/jni/libjnitest/macroized_tests.c b/tests/tests/jni/libjnitest/macroized_tests.c
index 130b378..e8ac08f 100644
--- a/tests/tests/jni/libjnitest/macroized_tests.c
+++ b/tests/tests/jni/libjnitest/macroized_tests.c
@@ -182,13 +182,13 @@
// TODO: Missing functions:
// AllocObject
-static char *help_CallBooleanMethod(JNIEnv *env, callType ct, ...) {
+static char *help_CallBooleanMethod(JNIEnv *env, int ct, ...) {
va_list args;
va_start(args, ct);
char *msg;
jobject o = getStandardInstance(env);
- jmethodID method = findAppropriateMethod(env, &msg, ct,
+ jmethodID method = findAppropriateMethod(env, &msg, (callType)ct,
"returnBoolean", "()Z");
if (method == NULL) {
@@ -287,13 +287,13 @@
return help_CallBooleanMethod(env, STATIC_VA);
}
-static char *help_CallByteMethod(JNIEnv *env, callType ct, ...) {
+static char *help_CallByteMethod(JNIEnv *env, int ct, ...) {
va_list args;
va_start(args, ct);
char *msg;
jobject o = getStandardInstance(env);
- jmethodID method = findAppropriateMethod(env, &msg, ct,
+ jmethodID method = findAppropriateMethod(env, &msg, (callType)ct,
"returnByte", "()B");
if (method == NULL) {
@@ -392,13 +392,13 @@
return help_CallByteMethod(env, STATIC_VA);
}
-static char *help_CallShortMethod(JNIEnv *env, callType ct, ...) {
+static char *help_CallShortMethod(JNIEnv *env, int ct, ...) {
va_list args;
va_start(args, ct);
char *msg;
jobject o = getStandardInstance(env);
- jmethodID method = findAppropriateMethod(env, &msg, ct,
+ jmethodID method = findAppropriateMethod(env, &msg, (callType)ct,
"returnShort", "()S");
if (method == NULL) {
@@ -497,13 +497,13 @@
return help_CallShortMethod(env, STATIC_VA);
}
-static char *help_CallCharMethod(JNIEnv *env, callType ct, ...) {
+static char *help_CallCharMethod(JNIEnv *env, int ct, ...) {
va_list args;
va_start(args, ct);
char *msg;
jobject o = getStandardInstance(env);
- jmethodID method = findAppropriateMethod(env, &msg, ct,
+ jmethodID method = findAppropriateMethod(env, &msg, (callType)ct,
"returnChar", "()C");
if (method == NULL) {
@@ -602,13 +602,13 @@
return help_CallCharMethod(env, STATIC_VA);
}
-static char *help_CallIntMethod(JNIEnv *env, callType ct, ...) {
+static char *help_CallIntMethod(JNIEnv *env, int ct, ...) {
va_list args;
va_start(args, ct);
char *msg;
jobject o = getStandardInstance(env);
- jmethodID method = findAppropriateMethod(env, &msg, ct,
+ jmethodID method = findAppropriateMethod(env, &msg, (callType)ct,
"returnInt", "()I");
if (method == NULL) {
@@ -707,13 +707,13 @@
return help_CallIntMethod(env, STATIC_VA);
}
-static char *help_CallLongMethod(JNIEnv *env, callType ct, ...) {
+static char *help_CallLongMethod(JNIEnv *env, int ct, ...) {
va_list args;
va_start(args, ct);
char *msg;
jobject o = getStandardInstance(env);
- jmethodID method = findAppropriateMethod(env, &msg, ct,
+ jmethodID method = findAppropriateMethod(env, &msg, (callType)ct,
"returnLong", "()J");
if (method == NULL) {
@@ -812,13 +812,13 @@
return help_CallLongMethod(env, STATIC_VA);
}
-static char *help_CallFloatMethod(JNIEnv *env, callType ct, ...) {
+static char *help_CallFloatMethod(JNIEnv *env, int ct, ...) {
va_list args;
va_start(args, ct);
char *msg;
jobject o = getStandardInstance(env);
- jmethodID method = findAppropriateMethod(env, &msg, ct,
+ jmethodID method = findAppropriateMethod(env, &msg, (callType)ct,
"returnFloat", "()F");
if (method == NULL) {
@@ -917,13 +917,13 @@
return help_CallFloatMethod(env, STATIC_VA);
}
-static char *help_CallDoubleMethod(JNIEnv *env, callType ct, ...) {
+static char *help_CallDoubleMethod(JNIEnv *env, int ct, ...) {
va_list args;
va_start(args, ct);
char *msg;
jobject o = getStandardInstance(env);
- jmethodID method = findAppropriateMethod(env, &msg, ct,
+ jmethodID method = findAppropriateMethod(env, &msg, (callType)ct,
"returnDouble", "()D");
if (method == NULL) {
@@ -1022,13 +1022,13 @@
return help_CallDoubleMethod(env, STATIC_VA);
}
-static char *help_CallVoidMethod(JNIEnv *env, callType ct, ...) {
+static char *help_CallVoidMethod(JNIEnv *env, int ct, ...) {
va_list args;
va_start(args, ct);
char *msg;
jobject o = getStandardInstance(env);
- jmethodID method = findAppropriateMethod(env, &msg, ct,
+ jmethodID method = findAppropriateMethod(env, &msg, (callType)ct,
"nop", "()V");
if (method == NULL) {
@@ -1127,13 +1127,13 @@
return help_CallVoidMethod(env, STATIC_VA);
}
-static char *help_CallObjectMethod(JNIEnv *env, callType ct, ...) {
+static char *help_CallObjectMethod(JNIEnv *env, int ct, ...) {
va_list args;
va_start(args, ct);
char *msg;
jobject o = getStandardInstance(env);
- jmethodID method = findAppropriateMethod(env, &msg, ct,
+ jmethodID method = findAppropriateMethod(env, &msg, (callType)ct,
"returnString", "()Ljava/lang/String;");
if (method == NULL) {
@@ -1250,13 +1250,13 @@
return help_CallObjectMethod(env, STATIC_VA);
}
-static char *help_TakeOneOfEach(JNIEnv *env, callType ct, ...) {
+static char *help_TakeOneOfEach(JNIEnv *env, int ct, ...) {
va_list args;
va_start(args, ct);
char *msg;
jobject o = getStandardInstance(env);
- jmethodID method = findAppropriateMethod(env, &msg, ct,
+ jmethodID method = findAppropriateMethod(env, &msg, (callType)ct,
"takeOneOfEach", "(DFJICSBZLjava/lang/String;)Z");
if (method == NULL) {
@@ -1372,13 +1372,13 @@
(jboolean) true, biscuits);
}
-static char *help_TakeCoolHandLuke(JNIEnv *env, callType ct, ...) {
+static char *help_TakeCoolHandLuke(JNIEnv *env, int ct, ...) {
va_list args;
va_start(args, ct);
char *msg;
jobject o = getStandardInstance(env);
- jmethodID method = findAppropriateMethod(env, &msg, ct,
+ jmethodID method = findAppropriateMethod(env, &msg, (callType)ct,
"takeCoolHandLuke",
"(IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII)Z");
diff --git a/tests/tests/media/libmediandkjni/codec-utils-jni.cpp b/tests/tests/media/libmediandkjni/codec-utils-jni.cpp
index cb4363e..d7bd74e 100644
--- a/tests/tests/media/libmediandkjni/codec-utils-jni.cpp
+++ b/tests/tests/media/libmediandkjni/codec-utils-jni.cpp
@@ -24,8 +24,8 @@
#include <sys/types.h>
#include <jni.h>
-#include <ScopedLocalRef.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
+#include <nativehelper/ScopedLocalRef.h>
#include <math.h>
diff --git a/tests/tests/media/libmediandkjni/native-mediadrm-jni.cpp b/tests/tests/media/libmediandkjni/native-mediadrm-jni.cpp
index a94bbb0..cff5c18 100644
--- a/tests/tests/media/libmediandkjni/native-mediadrm-jni.cpp
+++ b/tests/tests/media/libmediandkjni/native-mediadrm-jni.cpp
@@ -24,7 +24,7 @@
#include <assert.h>
#include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
#include <android/native_window_jni.h>
diff --git a/tests/tests/media/res/raw/video_1280x720_mkv_h265_500kbps_25fps_aac_stereo_128kbps_44100hz.mkv b/tests/tests/media/res/raw/video_1280x720_mkv_h265_500kbps_25fps_aac_stereo_128kbps_44100hz.mkv
new file mode 100644
index 0000000..dd6d3ab
--- /dev/null
+++ b/tests/tests/media/res/raw/video_1280x720_mkv_h265_500kbps_25fps_aac_stereo_128kbps_44100hz.mkv
Binary files differ
diff --git a/tests/tests/media/src/android/media/cts/MediaPlayerTest.java b/tests/tests/media/src/android/media/cts/MediaPlayerTest.java
index 35d2cd8..363c350 100644
--- a/tests/tests/media/src/android/media/cts/MediaPlayerTest.java
+++ b/tests/tests/media/src/android/media/cts/MediaPlayerTest.java
@@ -1343,6 +1343,11 @@
mMediaPlayer.stop();
}
+ public void testLocalVideo_MKV_H265_1280x720_500kbps_25fps_AAC_Stereo_128kbps_44100Hz()
+ throws Exception {
+ playVideoTest(
+ R.raw.video_1280x720_mkv_h265_500kbps_25fps_aac_stereo_128kbps_44100hz, 1280, 720);
+ }
public void testLocalVideo_MP4_H264_480x360_500kbps_25fps_AAC_Stereo_128kbps_44110Hz()
throws Exception {
playVideoTest(
diff --git a/tests/tests/mediastress/jni/native-media-jni.cpp b/tests/tests/mediastress/jni/native-media-jni.cpp
index 4a105e1..42fac20 100644
--- a/tests/tests/mediastress/jni/native-media-jni.cpp
+++ b/tests/tests/mediastress/jni/native-media-jni.cpp
@@ -106,7 +106,7 @@
return JNI_FALSE;
}
assert(1 <= nbRead && nbRead <= NB_BUFFERS);
- ALOGV("Initially queueing %u buffers of %u bytes each", nbRead, BUFFER_SIZE);
+ ALOGV("Initially queueing %zu buffers of %u bytes each", nbRead, BUFFER_SIZE);
/* Enqueue the content of our cache before starting to play,
we don't want to starve the player */
diff --git a/tests/tests/net/src/android/net/cts/IpSecManagerTest.java b/tests/tests/net/src/android/net/cts/IpSecManagerTest.java
new file mode 100644
index 0000000..bcecee1
--- /dev/null
+++ b/tests/tests/net/src/android/net/cts/IpSecManagerTest.java
@@ -0,0 +1,171 @@
+/*
+ * Copyright (C) 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.
+ */
+
+package android.net.cts;
+
+import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.IpSecAlgorithm;
+import android.net.IpSecManager;
+import android.net.IpSecTransform;
+import android.os.ParcelFileDescriptor;
+import android.system.Os;
+import android.system.OsConstants;
+import android.test.AndroidTestCase;
+import java.io.ByteArrayOutputStream;
+import java.net.DatagramSocket;
+import java.io.FileDescriptor;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.Arrays;
+
+public class IpSecManagerTest extends AndroidTestCase {
+
+ private static final String TAG = IpSecManagerTest.class.getSimpleName();
+
+ private IpSecManager mISM;
+
+ private ConnectivityManager mCM;
+
+ private static final InetAddress GOOGLE_DNS_4;
+ private static final InetAddress GOOGLE_DNS_6;
+
+ static {
+ try {
+ // Google Public DNS Addresses;
+ GOOGLE_DNS_4 = InetAddress.getByName("8.8.8.8");
+ GOOGLE_DNS_6 = InetAddress.getByName("2001:4860:4860::8888");
+ } catch (UnknownHostException e) {
+ throw new RuntimeException("Could not resolve DNS Addresses", e);
+ }
+ }
+
+ private static final InetAddress[] GOOGLE_DNS_LIST =
+ new InetAddress[] {GOOGLE_DNS_4, GOOGLE_DNS_6};
+
+ private static final int DROID_SPI = 0xD1201D;
+
+ private static final byte[] CRYPT_KEY =
+ new byte[] {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
+ 0x0E, 0x0F
+ };
+ private static final byte[] AUTH_KEY =
+ new byte[] {
+ 0x7A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7F
+ };
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ mCM = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
+ mISM = (IpSecManager) getContext().getSystemService(Context.IPSEC_SERVICE);
+ }
+
+ /*
+ * Allocate a random SPI
+ * Allocate a specific SPI using previous randomly created SPI value
+ * Realloc the same SPI that was specifically created (expect SpiUnavailable)
+ * Close SPIs
+ */
+ public void testAllocSpi() throws Exception {
+ for (InetAddress addr : GOOGLE_DNS_LIST) {
+ IpSecManager.SecurityParameterIndex randomSpi = null, droidSpi = null;
+ randomSpi = mISM.reserveSecurityParameterIndex(IpSecTransform.DIRECTION_OUT, addr);
+ assertTrue(
+ "Failed to receive a valid SPI",
+ randomSpi.getSpi() != IpSecManager.INVALID_SECURITY_PARAMETER_INDEX);
+
+ droidSpi =
+ mISM.reserveSecurityParameterIndex(
+ IpSecTransform.DIRECTION_IN, addr, DROID_SPI);
+ assertTrue(
+ "Failed to allocate specified SPI, " + DROID_SPI,
+ droidSpi.getSpi() == DROID_SPI);
+
+ try {
+ mISM.reserveSecurityParameterIndex(IpSecTransform.DIRECTION_IN, addr, DROID_SPI);
+ fail("Duplicate SPI was allowed to be created");
+ } catch (IpSecManager.SpiUnavailableException expected) {
+ // This is a success case because we expect a dupe SPI to throw
+ }
+
+ randomSpi.close();
+ droidSpi.close();
+ }
+ }
+
+ /*
+ * Alloc outbound SPI
+ * Alloc inbound SPI
+ * Create transport mode transform
+ * open socket
+ * apply transform to socket
+ * send data on socket
+ * release transform
+ * send data (expect exception)
+ */
+ public void testCreateTransform() throws Exception {
+ InetAddress local = InetAddress.getLoopbackAddress();
+ IpSecManager.SecurityParameterIndex outSpi =
+ mISM.reserveSecurityParameterIndex(IpSecTransform.DIRECTION_OUT, local);
+
+ IpSecManager.SecurityParameterIndex inSpi =
+ mISM.reserveSecurityParameterIndex(
+ IpSecTransform.DIRECTION_IN, local, outSpi.getSpi());
+
+ IpSecTransform transform =
+ new IpSecTransform.Builder(mContext)
+ .setSpi(IpSecTransform.DIRECTION_OUT, outSpi)
+ .setEncryption(
+ IpSecTransform.DIRECTION_OUT,
+ new IpSecAlgorithm(IpSecAlgorithm.CRYPT_AES_CBC, CRYPT_KEY))
+ .setAuthentication(
+ IpSecTransform.DIRECTION_OUT,
+ new IpSecAlgorithm(
+ IpSecAlgorithm.AUTH_HMAC_SHA256,
+ AUTH_KEY,
+ AUTH_KEY.length * 8))
+ .setSpi(IpSecTransform.DIRECTION_IN, inSpi)
+ .setEncryption(
+ IpSecTransform.DIRECTION_IN,
+ new IpSecAlgorithm(IpSecAlgorithm.CRYPT_AES_CBC, CRYPT_KEY))
+ .setAuthentication(
+ IpSecTransform.DIRECTION_IN,
+ new IpSecAlgorithm(
+ IpSecAlgorithm.AUTH_HMAC_SHA256,
+ AUTH_KEY,
+ CRYPT_KEY.length * 8))
+ .buildTransportModeTransform(local);
+
+ // Hack to ensure the socket doesn't block indefinitely on failure
+ DatagramSocket localSocket = new DatagramSocket(8888);
+ localSocket.setSoTimeout(500);
+ ParcelFileDescriptor pin = ParcelFileDescriptor.fromDatagramSocket(localSocket);
+ FileDescriptor udpSocket = pin.getFileDescriptor();
+
+ mISM.applyTransportModeTransform(udpSocket, transform);
+ byte[] data = new String("Best test data ever!").getBytes("UTF-8");
+
+ byte[] in = new byte[data.length];
+ Os.sendto(udpSocket, data, 0, data.length, 0, local, 8888);
+ Os.read(udpSocket, in, 0, in.length);
+ assertTrue("Encapsulated data did not match.", Arrays.equals(data, in));
+ mISM.removeTransportModeTransform(udpSocket, transform);
+ Os.close(udpSocket);
+ transform.close();
+ }
+}
diff --git a/tests/tests/os/assets/platform_versions.txt b/tests/tests/os/assets/platform_versions.txt
index 8104cab..52c184f 100644
--- a/tests/tests/os/assets/platform_versions.txt
+++ b/tests/tests/os/assets/platform_versions.txt
@@ -1 +1 @@
-8.1.0
+P
diff --git a/tests/tests/os/jni/Android.mk b/tests/tests/os/jni/Android.mk
index 68f839c..01e1447 100644
--- a/tests/tests/os/jni/Android.mk
+++ b/tests/tests/os/jni/Android.mk
@@ -57,6 +57,14 @@
endif
LOCAL_CFLAGS := -Wno-unused-parameter
+
+# Let's overwrite -mcpu in case it's set to some ARMv8 core by
+# TARGET_2ND_CPU_VARIANT and causes clang to ignore the -march below.
LOCAL_CPPFLAGS_arm := -mcpu=generic
+# The ARM version of this library must be built using ARMv7 ISA (even if it
+# can be run on armv8 cores) since one of the tested instruction, swp, is
+# only supported in ARMv7 (and older) cores, and obsolete in ARMv8.
+LOCAL_CPPFLAGS_arm += -march=armv7-a
+
include $(BUILD_SHARED_LIBRARY)
diff --git a/tests/tests/os/jni/android_os_cts_TaggedPointer.cpp b/tests/tests/os/jni/android_os_cts_TaggedPointer.cpp
index f656f50..dca6ae2 100644
--- a/tests/tests/os/jni/android_os_cts_TaggedPointer.cpp
+++ b/tests/tests/os/jni/android_os_cts_TaggedPointer.cpp
@@ -18,7 +18,6 @@
#include <inttypes.h>
#include <setjmp.h>
#include <signal.h>
-#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
diff --git a/tests/tests/permission/jni/Android.mk b/tests/tests/permission/jni/Android.mk
index 2e64d47..e8b3f1a 100644
--- a/tests/tests/permission/jni/Android.mk
+++ b/tests/tests/permission/jni/Android.mk
@@ -30,6 +30,7 @@
LOCAL_SHARED_LIBRARIES := libnativehelper_compat_libc++ liblog
LOCAL_SDK_VERSION := 23
LOCAL_CPPFLAGS := -std=gnu++11
+LOCAL_NDK_STL_VARIANT := c++_static
LOCAL_CFLAGS := -Wno-unused-parameter
diff --git a/tests/tests/permission/jni/android_permission_cts_FileUtils.cpp b/tests/tests/permission/jni/android_permission_cts_FileUtils.cpp
index 0547be4..22dae69 100644
--- a/tests/tests/permission/jni/android_permission_cts_FileUtils.cpp
+++ b/tests/tests/permission/jni/android_permission_cts_FileUtils.cpp
@@ -25,9 +25,9 @@
#include <grp.h>
#include <pwd.h>
#include <string.h>
-#include <ScopedLocalRef.h>
-#include <ScopedPrimitiveArray.h>
-#include <ScopedUtfChars.h>
+#include <nativehelper/ScopedLocalRef.h>
+#include <nativehelper/ScopedPrimitiveArray.h>
+#include <nativehelper/ScopedUtfChars.h>
static jfieldID gFileStatusDevFieldID;
static jfieldID gFileStatusInoFieldID;
diff --git a/tests/tests/permission2/res/raw/android_manifest.xml b/tests/tests/permission2/res/raw/android_manifest.xml
index b23c6ab..a4dad83 100644
--- a/tests/tests/permission2/res/raw/android_manifest.xml
+++ b/tests/tests/permission2/res/raw/android_manifest.xml
@@ -204,8 +204,8 @@
android:name="com.android.bluetooth.BluetoothMapContentObserver.action.MESSAGE_DELIVERY" />
<protected-broadcast
android:name="android.bluetooth.pan.profile.action.CONNECTION_STATE_CHANGED" />
- <protected-broadcast android:name="android.bluetooth.pbap.intent.action.PBAP_STATE_CHANGED" />
<protected-broadcast android:name="android.bluetooth.pbap.profile.action.CONNECTION_STATE_CHANGED" />
+ <protected-broadcast android:name="android.bluetooth.pbapclient.profile.action.CONNECTION_STATE_CHANGED" />
<protected-broadcast android:name="android.bluetooth.sap.profile.action.CONNECTION_STATE_CHANGED" />
<protected-broadcast android:name="android.btopp.intent.action.INCOMING_FILE_NOTIFICATION" />
<protected-broadcast android:name="android.btopp.intent.action.USER_CONFIRMATION_TIMEOUT" />
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/CoreMathVerifier.java b/tests/tests/renderscript/src/android/renderscript/cts/CoreMathVerifier.java
index bc13144..cf535e8 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/CoreMathVerifier.java
+++ b/tests/tests/renderscript/src/android/renderscript/cts/CoreMathVerifier.java
@@ -3045,9 +3045,9 @@
RemquoResult expected = remquo(args.inNumerator, args.inDenominator);
// If the expected remainder is NaN, we don't validate the quotient. It's because of
// a division by zero.
- if (expected.remainder != expected.remainder) {
+ if (Float.isNaN(expected.remainder)) {
// Check that the value we got is NaN too.
- if (args.out == args.out) {
+ if (!Float.isNaN(args.out)) {
return "Expected a remainder of NaN but got " + Float.toString(args.out);
}
} else {
diff --git a/tests/tests/renderscript/src/android/renderscript/cts/Target.java b/tests/tests/renderscript/src/android/renderscript/cts/Target.java
index 55d3712..3ac4ff8 100644
--- a/tests/tests/renderscript/src/android/renderscript/cts/Target.java
+++ b/tests/tests/renderscript/src/android/renderscript/cts/Target.java
@@ -341,7 +341,7 @@
mHasRange = false;
mValue = values[0];
for (double f: values) {
- if (f != f) {
+ if (Double.isNaN(f)) {
mCanBeNan = true;
continue;
}
@@ -573,7 +573,7 @@
public boolean couldBe(double a, double extraAllowedError) {
//Log.w("Floaty.couldBe", "Can " + Double.toString(a) + " be " + toString() + "? ");
// Handle the input being a NaN.
- if (a != a) {
+ if (Double.isNaN(a)) {
//Log.w("couldBe", "true because is Naan");
return mCanBeNan;
}
diff --git a/tests/tests/rsblas/libbnnmdata/Android.mk b/tests/tests/rsblas/libbnnmdata/Android.mk
index bbfd289..84fb4e6 100644
--- a/tests/tests/rsblas/libbnnmdata/Android.mk
+++ b/tests/tests/rsblas/libbnnmdata/Android.mk
@@ -14,7 +14,6 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
-LOCAL_CLANG := true
LOCAL_MODULE := libbnnmdata_jni
LOCAL_MODULE_TAGS := optional
diff --git a/tests/tests/rscpp/librscpptest/Android.mk b/tests/tests/rscpp/librscpptest/Android.mk
index 5621c02..47ab6dd3 100644
--- a/tests/tests/rscpp/librscpptest/Android.mk
+++ b/tests/tests/rscpp/librscpptest/Android.mk
@@ -18,7 +18,6 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
-LOCAL_CLANG := true
LOCAL_MODULE := librscpptest_jni
LOCAL_MODULE_TAGS := optional
diff --git a/tests/tests/security/jni/android_security_cts_EncryptionTest.cpp b/tests/tests/security/jni/android_security_cts_EncryptionTest.cpp
index 136b52b..47f760a 100644
--- a/tests/tests/security/jni/android_security_cts_EncryptionTest.cpp
+++ b/tests/tests/security/jni/android_security_cts_EncryptionTest.cpp
@@ -18,7 +18,7 @@
#include <cutils/log.h>
#include <cutils/properties.h>
#include <jni.h>
-#include <JNIHelp.h>
+#include <nativehelper/JNIHelp.h>
#include <openssl/aes.h>
#include <openssl/cpu.h>
#include <openssl/evp.h>
diff --git a/tests/tests/security/jni/android_security_cts_SELinuxTest.cpp b/tests/tests/security/jni/android_security_cts_SELinuxTest.cpp
index 1cfde0a..c7975ec 100644
--- a/tests/tests/security/jni/android_security_cts_SELinuxTest.cpp
+++ b/tests/tests/security/jni/android_security_cts_SELinuxTest.cpp
@@ -15,10 +15,10 @@
*/
#include <jni.h>
+#include <nativehelper/JNIHelp.h>
+#include <nativehelper/ScopedLocalRef.h>
+#include <nativehelper/ScopedUtfChars.h>
#include <selinux/selinux.h>
-#include <JNIHelp.h>
-#include <ScopedLocalRef.h>
-#include <ScopedUtfChars.h>
#include <memory>
diff --git a/tests/tests/security/res/raw/b38116746_new.ico b/tests/tests/security/res/raw/b38116746_new.ico
deleted file mode 100644
index 35ee5b5..0000000
--- a/tests/tests/security/res/raw/b38116746_new.ico
+++ /dev/null
Binary files differ
diff --git a/tests/tests/security/src/android/security/cts/BitmapFactorySecurityTests.java b/tests/tests/security/src/android/security/cts/BitmapFactorySecurityTests.java
index 203db12..c8bfbb1 100644
--- a/tests/tests/security/src/android/security/cts/BitmapFactorySecurityTests.java
+++ b/tests/tests/security/src/android/security/cts/BitmapFactorySecurityTests.java
@@ -17,56 +17,30 @@
package android.security.cts;
import android.graphics.BitmapFactory;
-import android.os.ParcelFileDescriptor;
import android.platform.test.annotations.SecurityTest;
import android.test.AndroidTestCase;
-import java.io.File;
-import java.io.FileDescriptor;
-import java.io.FileOutputStream;
import java.io.InputStream;
-import java.lang.Exception;
-
import android.security.cts.R;
@SecurityTest
public class BitmapFactorySecurityTests extends AndroidTestCase {
- private FileDescriptor getResource(int resId) {
- try {
- InputStream is = mContext.getResources().openRawResource(resId);
- assertNotNull(is);
- File file = File.createTempFile("BitmapFactorySecurityFile" + resId, "img");
- file.deleteOnExit();
- FileOutputStream output = new FileOutputStream(file);
- byte[] buffer = new byte[1024];
- int readLength;
- while ((readLength = is.read(buffer)) != -1) {
- output.write(buffer, 0, readLength);
- }
- is.close();
- output.close();
- ParcelFileDescriptor pfd = ParcelFileDescriptor.open(file,
- ParcelFileDescriptor.MODE_READ_ONLY);
- return pfd.getFileDescriptor();
- } catch (Exception e) {
- fail("Could not get resource " + resId + "! " + e);
- return null;
- }
+ private InputStream getResource(int resId) {
+ InputStream resource = mContext.getResources().openRawResource(R.raw.bug_38116746);
+ assertNotNull(resource);
+ return resource;
}
/**
- * Verifies that decoding a corrupt ICO does crash.
+ * Verifies that decoding a corrupt ICO does not run out of memory.
*/
public void test_android_bug_38116746() {
- FileDescriptor exploitImage = getResource(R.raw.bug_38116746);
+ InputStream exploitImage = getResource(R.raw.bug_38116746);
try {
- BitmapFactory.decodeFileDescriptor(exploitImage);
+ BitmapFactory.decodeStream(exploitImage);
} catch (OutOfMemoryError e) {
fail("OOM attempting to decode ICO");
}
-
- // This previously crashed in fread. No need to check the output.
- BitmapFactory.decodeFileDescriptor(getResource(R.raw.b38116746_new));
}
}
diff --git a/tests/tests/security/src/android/security/cts/CryptoProviderWorkaroundTest.java b/tests/tests/security/src/android/security/cts/CryptoProviderWorkaroundTest.java
deleted file mode 100644
index 861c443..0000000
--- a/tests/tests/security/src/android/security/cts/CryptoProviderWorkaroundTest.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright 2016 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.
- */
-
-package android.security.cts;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.fail;
-
-import dalvik.system.VMRuntime;
-import java.security.NoSuchProviderException;
-import java.security.SecureRandom;
-import java.security.Security;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-/**
- * http://b/28550092 : Removal of "Crypto" provider in N caused application compatibility
- * issues for callers of SecureRandom. To improve compatibility the provider is not registered
- * as a JCA Provider obtainable via Security.getProvider() but is made available for
- * SecureRandom.getInstance() iff the application targets API <= 23.
- */
-@RunWith(JUnit4.class)
-public class CryptoProviderWorkaroundTest {
- @Test
- public void cryptoProvider_withWorkaround_Success() throws Exception {
- // Assert that SecureRandom is still using the default value. Sanity check.
- assertEquals(SecureRandom.DEFAULT_SDK_TARGET_FOR_CRYPTO_PROVIDER_WORKAROUND,
- SecureRandom.getSdkTargetForCryptoProviderWorkaround());
-
- try {
- // Modify the maximum target SDK to apply the workaround, thereby enabling the
- // workaround for the current SDK and enabling it to be tested.
- SecureRandom.setSdkTargetForCryptoProviderWorkaround(
- VMRuntime.getRuntime().getTargetSdkVersion());
-
- // Assert that the crypto provider is not installed...
- assertNull(Security.getProvider("Crypto"));
- SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");
- assertNotNull(sr);
- // ...but we can get a SecureRandom from it...
- assertEquals("org.apache.harmony.security.provider.crypto.CryptoProvider",
- sr.getProvider().getClass().getName());
- // ...yet it's not installed. So the workaround worked.
- assertNull(Security.getProvider("Crypto"));
- } finally {
- // Reset the target SDK for the workaround to the default / real value.
- SecureRandom.setSdkTargetForCryptoProviderWorkaround(
- SecureRandom.DEFAULT_SDK_TARGET_FOR_CRYPTO_PROVIDER_WORKAROUND);
- }
- }
-
- @Test
- public void cryptoProvider_withoutWorkaround_Failure() throws Exception {
- // Assert that SecureRandom is still using the default value. Sanity check.
- assertEquals(SecureRandom.DEFAULT_SDK_TARGET_FOR_CRYPTO_PROVIDER_WORKAROUND,
- SecureRandom.getSdkTargetForCryptoProviderWorkaround());
-
- try {
- // We set the limit SDK for the workaround at the previous one, indicating that the
- // workaround shouldn't be in place.
- SecureRandom.setSdkTargetForCryptoProviderWorkaround(
- VMRuntime.getRuntime().getTargetSdkVersion() - 1);
-
- SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");
- fail("Should throw " + NoSuchProviderException.class.getName());
- } catch(NoSuchProviderException expected) {
- // The workaround doesn't work. As expected.
- } finally {
- // Reset the target SDK for the workaround to the default / real value.
- SecureRandom.setSdkTargetForCryptoProviderWorkaround(
- SecureRandom.DEFAULT_SDK_TARGET_FOR_CRYPTO_PROVIDER_WORKAROUND);
- }
- }
-}
diff --git a/tests/tests/view/jni/Android.mk b/tests/tests/view/jni/Android.mk
index 288e250..f1aad68 100644
--- a/tests/tests/view/jni/Android.mk
+++ b/tests/tests/view/jni/Android.mk
@@ -32,6 +32,4 @@
LOCAL_CXX_STL := libc++_static
-LOCAL_CLANG := true
-
include $(BUILD_SHARED_LIBRARY)
diff --git a/tests/tests/wrap/nowrap/Android.mk b/tests/tests/wrap/nowrap/Android.mk
index 8f70c2a..35c0448 100644
--- a/tests/tests/wrap/nowrap/Android.mk
+++ b/tests/tests/wrap/nowrap/Android.mk
@@ -32,4 +32,7 @@
LOCAL_PACKAGE_NAME := CtsWrapNoWrapTestCases
LOCAL_MANIFEST_FILE := AndroidManifest.xml
+# Jarjar to make WrapTest unique.
+LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
+
include $(BUILD_PACKAGE)
diff --git a/tests/tests/wrap/nowrap/jarjar-rules.txt b/tests/tests/wrap/nowrap/jarjar-rules.txt
new file mode 100644
index 0000000..91e7454
--- /dev/null
+++ b/tests/tests/wrap/nowrap/jarjar-rules.txt
@@ -0,0 +1 @@
+rule android.wrap.cts.WrapTest** android.wrap.cts.WrapTestNoWrap@1
diff --git a/tests/tests/wrap/wrap_debug/Android.mk b/tests/tests/wrap/wrap_debug/Android.mk
index 7299f02..77b6d27 100644
--- a/tests/tests/wrap/wrap_debug/Android.mk
+++ b/tests/tests/wrap/wrap_debug/Android.mk
@@ -39,6 +39,9 @@
LOCAL_PACKAGE_NAME := CtsWrapWrapDebugTestCases
LOCAL_MANIFEST_FILE := AndroidManifest.xml
+# Jarjar to make WrapTest unique.
+LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
+
include $(BUILD_PACKAGE)
include $(CLEAR_VARS)
diff --git a/tests/tests/wrap/wrap_debug/jarjar-rules.txt b/tests/tests/wrap/wrap_debug/jarjar-rules.txt
new file mode 100644
index 0000000..3020934
--- /dev/null
+++ b/tests/tests/wrap/wrap_debug/jarjar-rules.txt
@@ -0,0 +1 @@
+rule android.wrap.cts.WrapTest** android.wrap.cts.WrapTestWrapDebug@1
diff --git a/tests/tests/wrap/wrap_debug_malloc_debug/Android.mk b/tests/tests/wrap/wrap_debug_malloc_debug/Android.mk
new file mode 100644
index 0000000..bc6240d
--- /dev/null
+++ b/tests/tests/wrap/wrap_debug_malloc_debug/Android.mk
@@ -0,0 +1,47 @@
+# Copyright (C) 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.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MULTILIB := both
+LOCAL_MODULE_TAGS := tests
+LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
+LOCAL_DEX_PREOPT := false
+LOCAL_PROGUARD_ENABLED := disabled
+LOCAL_STATIC_JAVA_LIBRARIES := \
+ compatibility-device-util \
+ android-support-test \
+ legacy-android-test
+LOCAL_SRC_FILES := $(call all-java-files-under, ../src)
+LOCAL_COMPATIBILITY_SUITE := cts
+LOCAL_SDK_VERSION := current
+
+LOCAL_PREBUILT_JNI_LIBS_arm := wrap.sh
+LOCAL_PREBUILT_JNI_LIBS_arm64 := wrap.sh
+LOCAL_PREBUILT_JNI_LIBS_mips := wrap.sh
+LOCAL_PREBUILT_JNI_LIBS_mips64 := wrap.sh
+LOCAL_PREBUILT_JNI_LIBS_x86 := wrap.sh
+LOCAL_PREBUILT_JNI_LIBS_x86_64 := wrap.sh
+
+LOCAL_PACKAGE_NAME := CtsWrapWrapDebugMallocDebugTestCases
+LOCAL_MANIFEST_FILE := AndroidManifest.xml
+
+# Jarjar to make WrapTest unique.
+LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
+
+include $(BUILD_PACKAGE)
+
+include $(CLEAR_VARS)
diff --git a/tests/tests/wrap/wrap_debug_malloc_debug/AndroidManifest.xml b/tests/tests/wrap/wrap_debug_malloc_debug/AndroidManifest.xml
new file mode 100644
index 0000000..a359f17
--- /dev/null
+++ b/tests/tests/wrap/wrap_debug_malloc_debug/AndroidManifest.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 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.
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="android.wrap.wrap_debug_malloc_debug.cts">
+
+ <application android:debuggable="true">
+ <uses-library android:name="android.test.runner" />
+ <meta-data android:name="android.wrap.cts.expext_env" android:value="true" />
+ <activity android:name="android.wrap.WrapActivity" >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+
+ <!-- self-instrumenting test package. -->
+ <instrumentation
+ android:name="android.support.test.runner.AndroidJUnitRunner"
+ android:label="CTS tests for wrap.sh"
+ android:targetPackage="android.wrap.wrap_debug_malloc_debug.cts" >
+ </instrumentation>
+</manifest>
+
diff --git a/tests/tests/wrap/wrap_debug_malloc_debug/AndroidTest.xml b/tests/tests/wrap/wrap_debug_malloc_debug/AndroidTest.xml
new file mode 100644
index 0000000..0c740e4
--- /dev/null
+++ b/tests/tests/wrap/wrap_debug_malloc_debug/AndroidTest.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 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.
+-->
+<configuration description="Config for CTS Debug Wrap (Malloc Debug) test cases">
+ <option name="config-descriptor:metadata" key="component" value="art" />
+ <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+ <option name="cleanup-apks" value="true" />
+ <option name="test-file-name" value="CtsWrapWrapDebugMallocDebugTestCases.apk" />
+ </target_preparer>
+ <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+ <option name="package" value="android.wrap.wrap_debug_malloc_debug.cts" />
+ </test>
+</configuration>
diff --git a/tests/tests/wrap/wrap_debug_malloc_debug/jarjar-rules.txt b/tests/tests/wrap/wrap_debug_malloc_debug/jarjar-rules.txt
new file mode 100644
index 0000000..286029b
--- /dev/null
+++ b/tests/tests/wrap/wrap_debug_malloc_debug/jarjar-rules.txt
@@ -0,0 +1 @@
+rule android.wrap.cts.WrapTest** android.wrap.cts.WrapTestDebugMalloc@1
diff --git a/tests/tests/wrap/wrap_debug_malloc_debug/wrap.sh b/tests/tests/wrap/wrap_debug_malloc_debug/wrap.sh
new file mode 100755
index 0000000..f00a554
--- /dev/null
+++ b/tests/tests/wrap/wrap_debug_malloc_debug/wrap.sh
@@ -0,0 +1,15 @@
+#!/system/bin/sh
+# Copyright (C) 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.
+LIBC_DEBUG_MALLOC_OPTIONS=backtrace=1 WRAP_PROPERTY=test $@
diff --git a/tests/tests/wrap/wrap_nodebug/Android.mk b/tests/tests/wrap/wrap_nodebug/Android.mk
index e4a8c51..1d6e9c0 100644
--- a/tests/tests/wrap/wrap_nodebug/Android.mk
+++ b/tests/tests/wrap/wrap_nodebug/Android.mk
@@ -39,6 +39,9 @@
LOCAL_PACKAGE_NAME := CtsWrapWrapNoDebugTestCases
LOCAL_MANIFEST_FILE := AndroidManifest.xml
+# Jarjar to make WrapTest unique.
+LOCAL_JARJAR_RULES := $(LOCAL_PATH)/jarjar-rules.txt
+
include $(BUILD_PACKAGE)
include $(CLEAR_VARS)
diff --git a/tests/tests/wrap/wrap_nodebug/jarjar-rules.txt b/tests/tests/wrap/wrap_nodebug/jarjar-rules.txt
new file mode 100644
index 0000000..11a43f1
--- /dev/null
+++ b/tests/tests/wrap/wrap_nodebug/jarjar-rules.txt
@@ -0,0 +1 @@
+rule android.wrap.cts.WrapTest** android.wrap.cts.WrapTestWrapNoDebug@1
diff --git a/tools/cts-api-coverage/src/com/android/cts/apicoverage/CtsApiCoverage.java b/tools/cts-api-coverage/src/com/android/cts/apicoverage/CtsApiCoverage.java
index fb82c95..06aa6fa 100644
--- a/tools/cts-api-coverage/src/com/android/cts/apicoverage/CtsApiCoverage.java
+++ b/tools/cts-api-coverage/src/com/android/cts/apicoverage/CtsApiCoverage.java
@@ -43,6 +43,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import java.util.Locale;
import java.util.Set;
import javax.xml.transform.TransformerException;
@@ -103,6 +104,8 @@
String reportTitle = "CTS API Coverage";
int apiLevel = Integer.MAX_VALUE;
+ List<File> notFoundTestApks = new ArrayList<File>();
+ int numTestApkArgs = 0;
for (int i = 0; i < args.length; i++) {
if (args[i].startsWith("-")) {
if ("-o".equals(args[i])) {
@@ -133,14 +136,23 @@
}
} else {
File file = new File(args[i]);
+ numTestApkArgs++;
if (file.isDirectory()) {
testApks.addAll(Arrays.asList(file.listFiles(SUPPORTED_FILE_NAME_FILTER)));
- } else {
+ } else if (file.isFile()) {
testApks.add(file);
+ } else {
+ notFoundTestApks.add(file);
}
}
}
+ if (!notFoundTestApks.isEmpty()) {
+ String msg = String.format(Locale.US, "%d/%d testApks not found: %s",
+ notFoundTestApks.size(), numTestApkArgs, notFoundTestApks);
+ throw new IllegalArgumentException(msg);
+ }
+
/*
* 1. Create an ApiCoverage object that is a tree of Java objects representing the API
* in current.xml. The object will have no information about the coverage for each
diff --git a/tools/cts-tradefed/res/config/cts-known-failures.xml b/tools/cts-tradefed/res/config/cts-known-failures.xml
index 0e8d8bc..2053f36 100644
--- a/tools/cts-tradefed/res/config/cts-known-failures.xml
+++ b/tools/cts-tradefed/res/config/cts-known-failures.xml
@@ -93,6 +93,9 @@
<option name="compatibility:exclude-filter" value="CtsSecurityTestCases android.security.cts.MediaCryptoTest#testMediaCryptoClearKey" />
<option name="compatibility:exclude-filter" value="CtsSecurityTestCases android.security.cts.MediaCryptoTest#testMediaCryptoWidevine" />
+ <!-- b/63916274 -->
+ <option name="compatibility:exclude-filter" value="CtsTelecomTestCases android.telecom.cts.WiredHeadsetTest" />
+
<!-- b/62302163 -->
<option name="compatibility:exclude-filter" value="CtsSecurityHostTestCases android.security.cts.Poc17_04#testPocCVE_2017_0564" />
diff --git a/tools/vm-tests-tf/Android.mk b/tools/vm-tests-tf/Android.mk
index c7d61e4..51f01ee 100644
--- a/tools/vm-tests-tf/Android.mk
+++ b/tools/vm-tests-tf/Android.mk
@@ -28,7 +28,7 @@
-include cts/error_prone_rules_tests.mk
include $(BUILD_JAVA_LIBRARY)
-cts-tf-dalvik-lib.jack := $(full_classes_jack)
+cts-tf-dalvik-lib.jar := $(full_classes_jar)
# buildutil java library
# ============================================================
@@ -55,8 +55,6 @@
#
include $(CLEAR_VARS)
-include $(BUILD_SYSTEM)/configure_local_jack.mk
-
LOCAL_MODULE := vm-tests-tf
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE_SUFFIX := $(COMMON_JAVA_PACKAGE_SUFFIX)
@@ -74,14 +72,9 @@
vmteststf_dep_jars := \
$(HOST_JDK_TOOLS_JAR) \
+ $(cts-tf-dalvik-lib.jar) \
$(addprefix $(HOST_OUT_JAVA_LIBRARIES)/, cts-tf-dalvik-buildutil.jar dasm.jar dx.jar cfassembler.jar junit-host.jar)
-$(LOCAL_BUILT_MODULE): PRIVATE_JACK_EXTRA_ARGS := $(LOCAL_JACK_EXTRA_ARGS)
-
-ifdef LOCAL_JACK_ENABLED
- vmteststf_dep_jars += $(cts-tf-dalvik-lib.jack)
-endif
-
$(LOCAL_BUILT_MODULE): PRIVATE_SRC_FOLDER := $(LOCAL_PATH)/src
$(LOCAL_BUILT_MODULE): PRIVATE_INTERMEDIATES_CLASSES := $(call intermediates-dir-for,JAVA_LIBRARIES,cts-tf-dalvik-buildutil,HOST)/classes
$(LOCAL_BUILT_MODULE): PRIVATE_INTERMEDIATES := $(intermediates)/tests
@@ -89,50 +82,29 @@
$(LOCAL_BUILT_MODULE): PRIVATE_INTERMEDIATES_MAIN_FILES := $(intermediates)/main_files
$(LOCAL_BUILT_MODULE): PRIVATE_INTERMEDIATES_HOSTJUNIT_FILES := $(intermediates)/hostjunit_files
$(LOCAL_BUILT_MODULE): PRIVATE_CLASS_PATH := $(call normalize-path-list, $(vmteststf_dep_jars))
-$(LOCAL_BUILT_MODULE): PRIVATE_JACK_VERSION := $(LOCAL_JACK_VERSION)
-ifndef LOCAL_JACK_ENABLED
-$(LOCAL_BUILT_MODULE) : $(vmteststf_dep_jars) $(HOST_OUT_JAVA_LIBRARIES)/tradefed.jar
+oj_jar := $(call intermediates-dir-for,JAVA_LIBRARIES,core-oj,,COMMON)/classes.jar
+libart_jar := $(call intermediates-dir-for,JAVA_LIBRARIES,core-libart,,COMMON)/classes.jar
+$(LOCAL_BUILT_MODULE): PRIVATE_DALVIK_SUITE_CLASSPATH := $(oj_jar):$(libart_jar):$(cts-tf-dalvik-lib.jar):$(HOST_OUT_JAVA_LIBRARIES)/tradefed.jar:
+$(LOCAL_BUILT_MODULE) : $(vmteststf_dep_jars) $(HOST_OUT_JAVA_LIBRARIES)/tradefed.jar $(DX)
$(hide) rm -rf $(dir $@) && mkdir -p $(dir $@)
$(hide) mkdir -p $(PRIVATE_INTERMEDIATES_HOSTJUNIT_FILES)/dot/junit $(dir $(PRIVATE_INTERMEDIATES_DEXCORE_JAR))
# generated and compile the host side junit tests
@echo "Write generated Main_*.java files to $(PRIVATE_INTERMEDIATES_MAIN_FILES)"
$(hide) $(JAVA) \
- $(if $(EXPERIMENTAL_USE_OPENJDK9),--add-exports jdk.jartool/sun.tools.jar=ALL-UNNAMED) \
-cp $(PRIVATE_CLASS_PATH) util.build.BuildDalvikSuite $(PRIVATE_SRC_FOLDER) $(PRIVATE_INTERMEDIATES) \
- $(HOST_OUT_JAVA_LIBRARIES)/cts-tf-dalvik-buildutil.jar:$(HOST_OUT_JAVA_LIBRARIES)/tradefed.jar \
- $(PRIVATE_INTERMEDIATES_MAIN_FILES) $(PRIVATE_INTERMEDIATES_CLASSES) $(PRIVATE_INTERMEDIATES_HOSTJUNIT_FILES) $$RUN_VM_TESTS_RTO
- @echo "Generate $(PRIVATE_INTERMEDIATES_DEXCORE_JAR)"
- $(hide) $(JAR) -cf $(PRIVATE_INTERMEDIATES_DEXCORE_JAR).jar \
- $(addprefix -C $(PRIVATE_INTERMEDIATES_CLASSES) , dot/junit/DxUtil.class dot/junit/DxAbstractMain.class)
- $(hide) $(DX) -JXms16M -JXmx768M --dex --output=$(PRIVATE_INTERMEDIATES_DEXCORE_JAR) \
- $(if $(NO_OPTIMIZE_DX), --no-optimize) $(PRIVATE_INTERMEDIATES_DEXCORE_JAR).jar && rm -f $(PRIVATE_INTERMEDIATES_DEXCORE_JAR).jar
- $(hide) cd $(PRIVATE_INTERMEDIATES_HOSTJUNIT_FILES)/classes && zip -q -r ../../$(notdir $@).jar .
- $(hide) cd $(dir $@) && zip -q -r $(notdir $@) tests
-else # LOCAL_JACK_ENABLED
-oj_jack := $(call intermediates-dir-for,JAVA_LIBRARIES,core-oj,,COMMON)/classes.jack
-libart_jack := $(call intermediates-dir-for,JAVA_LIBRARIES,core-libart,,COMMON)/classes.jack
-$(LOCAL_BUILT_MODULE): PRIVATE_DALVIK_SUITE_CLASSPATH := $(oj_jack):$(libart_jack):$(cts-tf-dalvik-lib.jack):$(HOST_OUT_JAVA_LIBRARIES)/tradefed.jar
-$(LOCAL_BUILT_MODULE) : $(vmteststf_dep_jars) $(JACK) $(oj_jack) $(libart_jack) $(HOST_OUT_JAVA_LIBRARIES)/tradefed.jar | setup-jack-server
- $(hide) rm -rf $(dir $@) && mkdir -p $(dir $@)
- $(hide) mkdir -p $(PRIVATE_INTERMEDIATES_HOSTJUNIT_FILES)/dot/junit $(dir $(PRIVATE_INTERMEDIATES_DEXCORE_JAR))
- # generated and compile the host side junit tests
- @echo "Write generated Main_*.java files to $(PRIVATE_INTERMEDIATES_MAIN_FILES)"
- $(hide) JACK_VERSION=$(PRIVATE_JACK_VERSION) $(JAVA) -cp $(PRIVATE_CLASS_PATH) util.build.JackBuildDalvikSuite $(JACK) $(PRIVATE_SRC_FOLDER) $(PRIVATE_INTERMEDIATES) \
$(PRIVATE_DALVIK_SUITE_CLASSPATH) \
$(PRIVATE_INTERMEDIATES_MAIN_FILES) $(PRIVATE_INTERMEDIATES_CLASSES) $(PRIVATE_INTERMEDIATES_HOSTJUNIT_FILES) $$RUN_VM_TESTS_RTO
@echo "Generate $(PRIVATE_INTERMEDIATES_DEXCORE_JAR)"
$(hide) $(JAR) -cf $(PRIVATE_INTERMEDIATES_DEXCORE_JAR)-class.jar \
- $(addprefix -C $(PRIVATE_INTERMEDIATES_CLASSES) , dot/junit/DxUtil.class dot/junit/DxAbstractMain.class)
- $(hide) $(call call-jack) --import $(PRIVATE_INTERMEDIATES_DEXCORE_JAR)-class.jar --output-jack $(PRIVATE_INTERMEDIATES_DEXCORE_JAR).jack
+ $(addprefix -C $(PRIVATE_INTERMEDIATES_CLASSES) , dot/junit/DxUtil.class dot/junit/DxAbstractMain.class dot/junit/AssertionFailedException.class)
$(hide) mkdir -p $(PRIVATE_INTERMEDIATES_DEXCORE_JAR).tmp
- $(hide) $(call call-jack,$(PRIVATE_JACK_EXTRA_ARGS)) --output-dex $(PRIVATE_INTERMEDIATES_DEXCORE_JAR).tmp \
- $(if $(NO_OPTIMIZE_DX), -D jack.dex.optimize "false") --import $(PRIVATE_INTERMEDIATES_DEXCORE_JAR).jack && rm -f $(PRIVATE_INTERMEDIATES_DEXCORE_JAR).jack
+ $(hide) $(DX_COMMAND) --dex --output=$(PRIVATE_INTERMEDIATES_DEXCORE_JAR).tmp \
+ $(if $(NO_OPTIMIZE_DX), --no-optimize) $(PRIVATE_INTERMEDIATES_DEXCORE_JAR)-class.jar && rm -f $(PRIVATE_INTERMEDIATES_DEXCORE_JAR).jar
$(hide) cd $(PRIVATE_INTERMEDIATES_DEXCORE_JAR).tmp && zip -q -r $(abspath $(PRIVATE_INTERMEDIATES_DEXCORE_JAR)) .
$(hide) cd $(PRIVATE_INTERMEDIATES_HOSTJUNIT_FILES)/classes && zip -q -r ../../$(notdir $@) .
$(hide) cd $(dir $@) && zip -q -r $(notdir $@) tests
-oj_jack :=
-libart_jack :=
-endif # LOCAL_JACK_ENABLED
+oj_jar :=
+libart_jar :=
# Clean up temp vars
intermediates :=
diff --git a/tools/vm-tests-tf/etc/starthosttests b/tools/vm-tests-tf/etc/starthosttests
new file mode 100755
index 0000000..c1144f0
--- /dev/null
+++ b/tools/vm-tests-tf/etc/starthosttests
@@ -0,0 +1,249 @@
+#!/bin/bash
+#
+# Copyright (C) 2008 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.
+
+# Set up prog to be the path of this script, including following symlinks,
+# and set up progdir to be the fully-qualified pathname of its directory.
+
+prog="$0"
+while [ -h "${prog}" ]; do
+ newProg=`/bin/ls -ld "${prog}"`
+ newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
+ if expr "x${newProg}" : 'x/' >/dev/null; then
+ prog="${newProg}"
+ else
+ progdir=`dirname "${prog}"`
+ prog="${progdir}/${newProg}"
+ fi
+done
+oldwd=`pwd`
+progdir=`dirname "${prog}"`
+cd "${progdir}"
+progdir=`pwd`
+prog="${progdir}"/`basename "${prog}"`
+cd "${oldwd}"
+
+javaOpts=""
+while expr "x$1" : 'x-J' >/dev/null; do
+ opt=`expr "$1" : '-J\(.*\)'`
+ javaOpts="${javaOpts} -${opt}"
+ shift
+done
+
+
+#######################################################################
+# Original content of invocation script follows. Uses values cleverly
+# deduced by the above code.
+#######################################################################
+
+selection=$1
+interpreter="fast"
+if [ "$selection" = "--portable" ]; then
+ selection=$2;
+ interpreter="portable"
+fi
+
+dalviktest=$ANDROID_BUILD_TOP/out/host/common/obj/JAVA_LIBRARIES/vm-tests-tf_intermediates
+dalviktestdir=$dalviktest/tests
+dexcore=$dalviktest/tests/dot/junit/dexcore.jar
+scriptdata=$dalviktestdir/data/scriptdata
+report=$dalviktest/report.html
+curdate=`date`
+datadir=/tmp/${USER}
+export ANDROID_PRINTF_LOG=tag
+export ANDROID_LOG_TAGS='*:s' # was: jdwp:i dalvikvm:i dalvikvmi:i'
+export ANDROID_DATA=$datadir
+export ANDROID_ROOT=$ANDROID_HOST_OUT
+# export LD_LIBRARY_PATH=$base/system/lib
+# export DYLD_LIBRARY_PATH=$base/system/lib
+debug_opts="-Xcheck:jni -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
+vmtpath=$ANDROID_HOST_OUT/../common/obj/JAVA_LIBRARIES/vm-tests-tf_intermediates/tests
+
+echo "--------------------------------------------------"
+echo "Dalvik VM Test Suite"
+echo "Version 1.0"
+echo "Copyright (c) 2008 The Android Open Source Project"
+echo ""
+
+if [ "$selection" = "--help" ]; then
+ echo "Usage: vm-tests [--help|--portable] [<mnemonic>]"
+ echo ""
+ echo " --help prints this help message"
+ echo ""
+ echo " <mnemonic> specifies the instruction to test;"
+ echo " default is to run all tests"
+ echo ""
+ exit 1;
+fi
+
+rm -rf --preserve-root $datadir/dalvik-cache
+mkdir -p $datadir
+mkdir -p $datadir/dalvik-cache
+
+echo ""
+
+pre_report="<html><head><style>
+table tr.ok { background:#a0ffa0; }
+table tr.nok { background:#ffa0a0; }
+table tr.wok { background:#ffffa0; }
+table tr.lok { background:#aaaaff; }
+</style></head>
+<body>
+<h1>Dalvik VM test suite results</h1>
+Generated $curdate (using the emulator)
+<p>
+<table width='100%'>
+<tr><td>Status</td><td>Target</td><td>Category</td><td>Details</td></tr>"
+post_report="</body></html>"
+
+rm -f $report
+echo $pre_report > $report
+
+# ----------- running each opcode test ------------
+
+export jpassedcnt=0
+export jfailedcnt=0
+export jvfefailedcnt=0
+export jwarningcnt=0
+export jallcnt=0
+export jcolumns=0
+
+function classnameToJar()
+{
+ echo $1 | sed -e 's#\.#/#g;s#$#.jar#'
+}
+
+while read -u 3 myline;
+do
+ # dot.junit.opcodes.add_double.Main_testB1;dot.junit.opcodes.add_double.d.T_add_double_1 ;opcode add_double;test B #1 (border edge case)
+ # ->
+ # mainclass: dot.junit.opcodes.add_double.Main_testB1
+ # testcasedir: opcodes/add_double
+ # testname: testB1 ->
+ # dir dot/junit/opcodes/add_double/testB1
+
+ # e.g dot.junit.opcodes.add_double.Main_testB1
+ mainclass=`echo $myline | cut -d";" -f1`
+ # e.g dot.junit.opcodes.add_double.d.T_add_double_1, space sep. >=1 entries
+ deps=`echo $myline | cut -d";" -f2`
+
+ jtitle=`echo $myline | cut -d";" -f3`
+ jcomment=`echo $myline | cut -d";" -f4`
+ details=`echo $myline | cut -d";" -f5`
+
+ if [ "$selection" == "" ] || [ "$jtitle" == "$selection" ]; then
+
+ (( jallcnt += 1 ))
+
+ cd $dalviktestdir
+ rm -f $datadir/dalvikout
+ # write dalvik output to file
+ echo -n "mk_b:" > $datadir/dalvikout
+
+ classpath="${vmtpath}/dot/junit/dexcore.jar:${vmtpath}/mains.jar"
+ deps=${deps}" "${mainclass}
+ for dep in ${deps}; do
+ depJar=`classnameToJar ${dep}`
+ classpath=${classpath}:${vmtpath}/${depJar}
+ done
+
+ art -Djava.io.tmpdir=/tmp/${USER} \
+ -classpath $classpath $mainclass >> $datadir/dalvikout 2>&1 && \
+ echo -n dvmpassed: >> $datadir/dalvikout 2>&1
+
+ echo -n "mk_s:" >> $datadir/dalvikout
+ # Verify tmpout only contains mkdxc_start;mkdxc_stop -> no system.out/err
+ # because of exception. If ok -> green report line else red report with info
+ # between mkdxc_start and stop
+ vmresult=`cat $datadir/dalvikout`
+
+ if [[ ("$vmresult" == "mk_b:mk_s:") || ("$vmresult" == "mk_b:dvmpassed:mk_s:") ]]; then
+ (( jpassedcnt += 1 ))
+ echo -n "<tr class=\"ok\"><td>Success</td><td>$jtitle</td>" >> $report
+ echo "<td>$jcomment</td><td>$details</td></tr>" >> $report
+ echo -n "."
+ else
+ vmres=`cat $datadir/dalvikout | sed -e 's/mk_b://;s/mk_s://'`
+ vmres="$details<br><pre>$vmres</pre>"
+
+ stacktraces=`echo $vmresult | grep "java\.lang\." | grep -c "at dot\.junit\."`
+ if [[ $stacktraces > 0 ]]; then
+ jtype=`echo "$mainclass" | sed -e 's/.*_test\([^0-9]*\)[0-9].*/\1/' `
+ if [ "$jtype" == "VFE" ]; then
+ (( jvfefailedcnt += 1 ))
+ echo -n "V"
+ else
+ (( jfailedcnt += 1 ))
+ echo -n "F"
+ fi
+
+ echo "<tr class=\"nok\"><td>Failure</td><td>$jtitle</td><td>" >> $report
+ echo "$jcomment</td><td>$vmres</td></tr>" >> $report
+ else
+ (( jwarningcnt += 1 ))
+ echo "<tr class=\"wok\"><td>Failure</td><td>$jtitle</td><td>" >> $report
+ echo "$jcomment</td><td>(No stacktrace, but errors on console)" >> $report
+ echo "<br>$vmres</td></tr>" >> $report
+ echo -n "C"
+ fi
+ fi
+
+ (( jcolumns += 1 ))
+ if [ ${jcolumns} -eq 40 ]; then
+ echo ""
+ (( jcolumns = 0 ))
+ fi
+
+ fi
+# Use fd nr 3 to avoid subshelling via cat since this looses all
+# variables(and thus also the counters we are interested in).
+done 3<$scriptdata
+
+echo "</table>" >> $report
+let jallcalccnt=$jpassedcnt+$jfailedcnt+$jvfefailedcnt+$jwarningcnt
+if [ $jallcalccnt -ne $jallcnt ]; then
+ echo "<br>error: green & red != total , $jallcalccnt -ne $jallcnt" >> $report
+ exit 1;
+fi
+
+echo $post_report >> $report
+
+echo "<br>Tests run: ${jallcnt}" >> $report
+echo "<br>Functional failures: ${jfailedcnt}" >> $report
+echo "<br>Verifier failures: ${jvfefailedcnt}" >> $report
+echo "<br>Console errors: ${jwarningcnt}" >> $report
+
+echo $post_report >> $report
+
+if [[ jcolumns -ne 0 ]]; then
+ echo ""
+fi
+
+echo ""
+
+if [[ jallcnt -eq jpassedcnt ]]; then
+ echo "OK (${jpassedcnt} tests)"
+else
+ echo "FAILURES!!!"
+ echo ""
+ echo "Tests run : ${jallcnt}"
+ echo "Functional failures: ${jfailedcnt}"
+ echo "Verifier failures : ${jvfefailedcnt}"
+ echo "Console errors : ${jwarningcnt}"
+fi
+
+echo ""
+echo "Please see complete report in ${report}"
+echo "--------------------------------------------------"
diff --git a/tools/vm-tests-tf/src/dot/junit/AssertionFailedException.java b/tools/vm-tests-tf/src/dot/junit/AssertionFailedException.java
new file mode 100644
index 0000000..44b686d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/AssertionFailedException.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 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.
+ */
+
+package dot.junit;
+
+class AssertionFailedException extends RuntimeException {
+
+ public AssertionFailedException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public AssertionFailedException(String message) {
+ super(message);
+ }
+}
\ No newline at end of file
diff --git a/tools/vm-tests-tf/src/dot/junit/DxAbstractMain.java b/tools/vm-tests-tf/src/dot/junit/DxAbstractMain.java
index dac6dcf..6223507 100644
--- a/tools/vm-tests-tf/src/dot/junit/DxAbstractMain.java
+++ b/tools/vm-tests-tf/src/dot/junit/DxAbstractMain.java
@@ -25,20 +25,19 @@
private static void checkError(Class<?> expectedErrorClass, Throwable thrown,
boolean in_invocation_exc) {
if (expectedErrorClass != null && thrown == null) {
- fail("Expected error of type " + expectedErrorClass);
+ fail("Expected error of type " + expectedErrorClass, null);
} else if (expectedErrorClass == null && thrown != null) {
- fail("Unexpected error " + thrown);
+ fail("Unexpected error " + thrown, thrown);
} else if (expectedErrorClass != null && thrown != null) {
if (in_invocation_exc) {
if (!(thrown instanceof java.lang.reflect.InvocationTargetException)) {
- fail("Expected invocation target exception, but got " + thrown);
+ fail("Expected invocation target exception, but got " + thrown, thrown);
}
thrown = thrown.getCause();
}
if (!expectedErrorClass.equals(thrown.getClass())) {
- thrown.printStackTrace(System.err);
fail("Expected error of type " + expectedErrorClass + ", but got " +
- thrown.getClass());
+ thrown.getClass(), thrown);
}
}
}
@@ -47,19 +46,19 @@
* Try to load the class with the given name, and check for the expected error.
*/
public static Class<?> load(String className, Class<?> expectedErrorClass) {
+ Class<?> c;
try {
- Class<?> c = Class.forName(className);
- checkError(expectedErrorClass, null, false);
- return c;
+ c = Class.forName(className);
} catch (Throwable t) {
if (expectedErrorClass != null) {
checkError(expectedErrorClass, t, false);
} else {
- t.printStackTrace(System.err);
- fail("Could not load class " + className + ": " + t);
+ fail("Could not load class " + className, t);
}
return null;
}
+ checkError(expectedErrorClass, null, false);
+ return c;
}
/**
@@ -80,7 +79,7 @@
}
}
if (method == null) {
- fail("Could not find method 'run'");
+ fail("Could not find method 'run'", null);
}
Object receiver = null;
@@ -88,16 +87,17 @@
try {
receiver = c.newInstance();
} catch (Exception exc) {
- fail("Could not instantiate " + className + ": " + exc.getMessage());
+ fail("Could not instantiate " + className, exc);
}
}
try {
method.invoke(receiver, args);
- checkError(expectedErrorClass, null, false);
} catch (Throwable t) {
checkError(expectedErrorClass, t, wrapped);
+ return;
}
+ checkError(expectedErrorClass, null, false);
}
public static void loadAndRun(String className, Class<?> expectedErrorClass) {
@@ -109,19 +109,26 @@
}
static public void assertEquals(int expected, int actual) {
- if (expected != actual) throw new RuntimeException("AssertionFailedError: not equals. Expected " + expected + " actual " + actual);
+ if (expected != actual)
+ throw new AssertionFailedException(
+ "not equals. Expected " + expected + " actual " + actual);
}
static public void assertEquals(String message, int expected, int actual) {
- if (expected != actual) throw new RuntimeException("AssertionFailedError: not equals: " + message + " Expected " + expected + " actual " + actual);
+ if (expected != actual)
+ throw new AssertionFailedException(
+ "not equals: " + message + " Expected " + expected + " actual " + actual);
}
static public void assertEquals(long expected, long actual) {
- if (expected != actual) throw new RuntimeException("AssertionFailedError: not equals. Expected " + expected + " actual " + actual);
+ if (expected != actual)
+ throw new AssertionFailedException(
+ "not equals. Expected " + expected + " actual " + actual);
}
static public void assertEquals(double expected, double actual, double delta) {
- if(!(Math.abs(expected-actual) <= delta)) throw new RuntimeException("AssertionFailedError: not within delta");
+ if (!(Math.abs(expected - actual) <= delta))
+ throw new AssertionFailedException("not within delta");
}
static public void assertEquals(Object expected, Object actual) {
@@ -129,26 +136,34 @@
return;
if (expected != null && expected.equals(actual))
return;
- throw new RuntimeException("AssertionFailedError: not the same");
+ throw new AssertionFailedException("not the same: " + expected + " vs " + actual);
}
static public void assertTrue(boolean condition) {
- if (!condition) throw new RuntimeException("AssertionFailedError: condition was false");
+ if (!condition)
+ throw new AssertionFailedException("condition was false");
}
static public void assertFalse(boolean condition) {
- if (condition) throw new RuntimeException("AssertionFailedError: condition was true");
+ if (condition)
+ throw new AssertionFailedException("condition was true");
}
static public void assertNotNull(Object object) {
- if (object == null) throw new RuntimeException("AssertionFailedError: object was null");
+ if (object == null)
+ throw new AssertionFailedException("object was null");
}
static public void assertNull(Object object) {
- if (object != null) throw new RuntimeException("AssertionFailedError: object was not null");
+ if (object != null)
+ throw new AssertionFailedException("object was not null");
}
static public void fail(String message) {
- throw new RuntimeException("AssertionFailedError msg:"+message);
+ fail(message, null);
+ }
+
+ static public void fail(String message, Throwable cause) {
+ throw new AssertionFailedException(message, cause);
}
}
diff --git a/tools/vm-tests-tf/src/util/build/JavacBuildStep.java b/tools/vm-tests-tf/src/util/build/JavacBuildStep.java
index a1cde1f..e551989 100644
--- a/tools/vm-tests-tf/src/util/build/JavacBuildStep.java
+++ b/tools/vm-tests-tf/src/util/build/JavacBuildStep.java
@@ -16,12 +16,18 @@
package util.build;
-import com.sun.tools.javac.Main;
-
import java.io.File;
-import java.io.PrintWriter;
+import java.lang.Iterable;
+import java.util.stream.Collectors;
+import java.util.Arrays;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
+import javax.tools.JavaCompiler;
+import javax.tools.JavaFileObject;
+import javax.tools.StandardJavaFileManager;
+import javax.tools.StandardLocation;
+import javax.tools.ToolProvider;
public class JavacBuildStep extends SourceBuildStep {
@@ -55,23 +61,37 @@
System.err.println("failed to create destination dir");
return false;
}
- int args = 8;
- String[] commandLine = new String[sourceFiles.size()+args];
- commandLine[0] = "-classpath";
- commandLine[1] = classPath;
- commandLine[2] = "-d";
- commandLine[3] = destPath;
- commandLine[4] = "-source";
- commandLine[5] = "1.7";
- commandLine[6] = "-target";
- commandLine[7] = "1.7";
- String[] files = new String[sourceFiles.size()];
- sourceFiles.toArray(files);
+ Iterable<File> classPathFiles = Arrays.asList(classPath.split(":"))
+ .stream()
+ .map(File::new)
+ .collect(Collectors.toList());
- System.arraycopy(files, 0, commandLine, args, files.length);
+ JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
+ try (StandardJavaFileManager fileManager = compiler.getStandardFileManager(
+ null, // diagnosticListener: we don't care about the details.
+ null, // locale: use default locale.
+ null)) { // charset: use platform default.
+ fileManager.setLocation(StandardLocation.CLASS_OUTPUT, Arrays.asList(
+ new File(destPath)));
+ fileManager.setLocation(StandardLocation.CLASS_PATH, classPathFiles);
- return Main.compile(commandLine, new PrintWriter(System.err)) == 0;
+ Iterable<? extends JavaFileObject> compilationUnits =
+ fileManager.getJavaFileObjectsFromStrings(sourceFiles);
+
+ List<String> options = Arrays.asList("-source", "1.7", "-target", "1.7");
+
+ return compiler.getTask(
+ null, // out: write errors to System.err.
+ fileManager,
+ null, // diagnosticListener: we don't care about the details.
+ options,
+ null, // classes: classes for annotation processing = none.
+ compilationUnits).call();
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
}
return false;
}