refactor CTS harness to be a host Java library
- removed compile time generated SuiteInfo.java
- replaced with compile time generated properties file with same
information, to be loaded by generic test suite info loader in
TradeFederation
- created a separate host library for CTS harness parts, without
compile time generated suite info
Bug: 38448863
Bug: 65127140
Test: existing unit/func tests covering test suite info loading
Change-Id: I0b76ad620e4f68bf935cd832c17fcd6bacb79112
diff --git a/CleanSpec.mk b/CleanSpec.mk
index b2474c2..71ada3d 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -45,6 +45,8 @@
#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*)
$(call add-clean-step, rm -rf $(HOST_OUT_INTERMEDIATES)/EXECUTABLES/vm-tests-tf_intermediates)
+$(call add-clean-step, rm -rf $(OUT_DIR)/host/common/obj/JAVA_LIBRARIES/cts-tradefed_intermediates/com/android/compatibility/SuiteInfo.java)
+
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
# ************************************************
diff --git a/build/compatibility_test_suite.mk b/build/compatibility_test_suite.mk
index 7cdd220..d133c3e 100644
--- a/build/compatibility_test_suite.mk
+++ b/build/compatibility_test_suite.mk
@@ -16,25 +16,21 @@
# Builds a compatibility test suite.
#
-# Generate the SuiteInfo.java
-suite_info_java := $(call intermediates-dir-for,JAVA_LIBRARIES,$(LOCAL_MODULE),true,COMMON)/com/android/compatibility/SuiteInfo.java
-$(suite_info_java): PRIVATE_SUITE_BUILD_NUMBER := $(LOCAL_SUITE_BUILD_NUMBER)
-$(suite_info_java): PRIVATE_SUITE_TARGET_ARCH := $(LOCAL_SUITE_TARGET_ARCH)
-$(suite_info_java): PRIVATE_SUITE_NAME := $(LOCAL_SUITE_NAME)
-$(suite_info_java): PRIVATE_SUITE_FULLNAME := $(LOCAL_SUITE_FULLNAME)
-$(suite_info_java): PRIVATE_SUITE_VERSION := $(LOCAL_SUITE_VERSION)
-$(suite_info_java): cts/build/compatibility_test_suite.mk $(LOCAL_MODULE_MAKEFILE)
+# Generate suite info property file
+suite_info_prop := $(call intermediates-dir-for,JAVA_LIBRARIES,$(LOCAL_MODULE),true,COMMON)/test-suite-info.properties
+$(suite_info_prop): PRIVATE_SUITE_BUILD_NUMBER := $(LOCAL_SUITE_BUILD_NUMBER)
+$(suite_info_prop): PRIVATE_SUITE_TARGET_ARCH := $(LOCAL_SUITE_TARGET_ARCH)
+$(suite_info_prop): PRIVATE_SUITE_NAME := $(LOCAL_SUITE_NAME)
+$(suite_info_prop): PRIVATE_SUITE_FULLNAME := $(LOCAL_SUITE_FULLNAME)
+$(suite_info_prop): PRIVATE_SUITE_VERSION := $(LOCAL_SUITE_VERSION)
+$(suite_info_prop): cts/build/compatibility_test_suite.mk $(LOCAL_MODULE_MAKEFILE)
@echo Generating: $@
- $(hide) mkdir -p $(dir $@)
- $(hide) echo "/* This file is auto generated by Android.mk. Do not modify. */" > $@
- $(hide) echo "package com.android.compatibility;" >> $@
- $(hide) echo "public class SuiteInfo {" >> $@
- $(hide) echo " public static final String BUILD_NUMBER = \"$(PRIVATE_SUITE_BUILD_NUMBER)\";" >> $@
- $(hide) echo " public static final String TARGET_ARCH = \"$(PRIVATE_SUITE_TARGET_ARCH)\";" >> $@
- $(hide) echo " public static final String NAME = \"$(PRIVATE_SUITE_NAME)\";" >> $@
- $(hide) echo " public static final String FULLNAME = \"$(PRIVATE_SUITE_FULLNAME)\";" >> $@
- $(hide) echo " public static final String VERSION = \"$(PRIVATE_SUITE_VERSION)\";" >> $@
- $(hide) echo "}" >> $@
+ $(hide) echo "# This file is auto generated by Android.mk. Do not modify." > $@
+ $(hide) echo "build_number = $(PRIVATE_SUITE_BUILD_NUMBER)" >> $@
+ $(hide) echo "target_arch = $(PRIVATE_SUITE_TARGET_ARCH)" >> $@
+ $(hide) echo "name = $(PRIVATE_SUITE_NAME)" >> $@
+ $(hide) echo "fullname = $(PRIVATE_SUITE_FULLNAME)" >> $@
+ $(hide) echo "version = $(PRIVATE_SUITE_VERSION)" >> $@
# Reset variables
LOCAL_SUITE_BUILD_NUMBER :=
@@ -42,8 +38,8 @@
LOCAL_SUITE_FULLNAME :=
LOCAL_SUITE_VERSION :=
-# Include the SuiteInfo.java
-LOCAL_GENERATED_SOURCES := $(suite_info_java)
+# Include the test suite properties file
+LOCAL_JAVA_RESOURCE_FILES += $(suite_info_prop)
# Add the base libraries
LOCAL_JAVA_LIBRARIES += tradefed hosttestlib compatibility-host-util
@@ -51,3 +47,5 @@
LOCAL_MODULE_TAGS := optional
include $(BUILD_HOST_JAVA_LIBRARY)
+
+suite_info_prop :=
diff --git a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/build/CompatibilityBuildProvider.java b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/build/CompatibilityBuildProvider.java
index 722d55a..a7697d7 100644
--- a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/build/CompatibilityBuildProvider.java
+++ b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/build/CompatibilityBuildProvider.java
@@ -16,7 +16,6 @@
package com.android.compatibility.common.tradefed.build;
import com.android.annotations.VisibleForTesting;
-import com.android.compatibility.SuiteInfo;
import com.android.tradefed.build.BuildInfo;
import com.android.tradefed.build.BuildRetrievalError;
import com.android.tradefed.build.DeviceBuildInfo;
@@ -29,6 +28,7 @@
import com.android.tradefed.config.OptionClass;
import com.android.tradefed.device.DeviceNotAvailableException;
import com.android.tradefed.device.ITestDevice;
+import com.android.tradefed.testtype.suite.TestSuiteInfo;
import java.io.File;
import java.text.SimpleDateFormat;
@@ -218,28 +218,28 @@
* Return the SuiteInfo name generated at build time. Exposed for testing.
*/
protected String getSuiteInfoName() {
- return SuiteInfo.NAME;
+ return TestSuiteInfo.getInstance().getName();
}
/**
* Return the SuiteInfo build number generated at build time. Exposed for testing.
*/
protected String getSuiteInfoBuildNumber() {
- return SuiteInfo.BUILD_NUMBER;
+ return TestSuiteInfo.getInstance().getBuildNumber();
}
/**
* Return the SuiteInfo fullname generated at build time. Exposed for testing.
*/
protected String getSuiteInfoFullname() {
- return SuiteInfo.FULLNAME;
+ return TestSuiteInfo.getInstance().getFullName();
}
/**
* Return the SuiteInfo version generated at build time. Exposed for testing.
*/
protected String getSuiteInfoVersion() {
- return SuiteInfo.VERSION;
+ return TestSuiteInfo.getInstance().getVersion();
}
/**
diff --git a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/command/CompatibilityConsole.java b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/command/CompatibilityConsole.java
index 307d648..32e6197 100644
--- a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/command/CompatibilityConsole.java
+++ b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/command/CompatibilityConsole.java
@@ -15,7 +15,6 @@
*/
package com.android.compatibility.common.tradefed.command;
-import com.android.compatibility.SuiteInfo;
import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
import com.android.compatibility.common.tradefed.build.CompatibilityBuildProvider;
import com.android.compatibility.common.tradefed.result.SubPlanHelper;
@@ -32,6 +31,7 @@
import com.android.tradefed.log.LogUtil.CLog;
import com.android.tradefed.testtype.IRemoteTest;
import com.android.tradefed.testtype.IRuntimeHintProvider;
+import com.android.tradefed.testtype.suite.TestSuiteInfo;
import com.android.tradefed.util.ArrayUtil;
import com.android.tradefed.util.FileUtil;
import com.android.tradefed.util.Pair;
@@ -73,8 +73,9 @@
*/
@Override
public void run() {
- printLine(String.format("Android %s %s (%s)", SuiteInfo.FULLNAME, SuiteInfo.VERSION,
- SuiteInfo.BUILD_NUMBER));
+ printLine(String.format("Android %s %s (%s)", TestSuiteInfo.getInstance().getFullName(),
+ TestSuiteInfo.getInstance().getVersion(),
+ TestSuiteInfo.getInstance().getBuildNumber()));
printLine("Use \"help\" or \"help all\" to get more information on running commands.");
super.run();
}
@@ -87,7 +88,7 @@
Map<String, String> commandHelp) {
genericHelp.add("Enter 'help add' for help with 'add subplan' commands");
- genericHelp.add("\t----- " + SuiteInfo.FULLNAME + " usage ----- ");
+ genericHelp.add("\t----- " + TestSuiteInfo.getInstance().getFullName() + " usage ----- ");
genericHelp.add("Usage: run <plan> [--module <module name>] [ options ]");
genericHelp.add("Example: run cts --module CtsGestureTestCases --bugreport-on-failure");
genericHelp.add("");
@@ -149,8 +150,10 @@
trie.put(new Runnable() {
@Override
public void run() {
- printLine(String.format("Android %s %s (%s)", SuiteInfo.FULLNAME,
- SuiteInfo.VERSION, SuiteInfo.BUILD_NUMBER));
+ printLine(String.format("Android %s %s (%s)",
+ TestSuiteInfo.getInstance().getFullName(),
+ TestSuiteInfo.getInstance().getVersion(),
+ TestSuiteInfo.getInstance().getBuildNumber()));
}
}, "version"); // override tradefed 'version' command to print test suite name and version
@@ -162,7 +165,8 @@
}
String combinedHelp = listHelp +
LINE_SEPARATOR +
- "\t----- " + SuiteInfo.FULLNAME + " specific options ----- " + LINE_SEPARATOR +
+ "\t----- " + TestSuiteInfo.getInstance().getFullName()
+ + " specific options ----- " + LINE_SEPARATOR +
"\tp[lans] List all plans available" + LINE_SEPARATOR +
"\tm[odules] List all modules available" + LINE_SEPARATOR +
"\tr[esults] List all results" + LINE_SEPARATOR;
@@ -175,7 +179,8 @@
}
String combinedRunHelp = runHelp +
LINE_SEPARATOR +
- "\t----- " + SuiteInfo.FULLNAME + " specific options ----- " + LINE_SEPARATOR +
+ "\t----- " + TestSuiteInfo.getInstance().getFullName()
+ + " specific options ----- " + LINE_SEPARATOR +
"\t<plan> --module/-m <module> Run a test module" + LINE_SEPARATOR +
"\t<plan> --module/-m <module> --test/-t <test_name> Run a specific test from" +
" the module. Test name can be <package>.<class>, <package>.<class>#<method> or "
@@ -210,7 +215,7 @@
*/
@Override
protected String getConsolePrompt() {
- return String.format("%s-tf > ", SuiteInfo.NAME.toLowerCase());
+ return String.format("%s-tf > ", TestSuiteInfo.getInstance().getName().toLowerCase());
}
private void listModules() {
diff --git a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/targetprep/BusinessLogicPreparer.java b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/targetprep/BusinessLogicPreparer.java
index fded8bf..aa23eb5 100644
--- a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/targetprep/BusinessLogicPreparer.java
+++ b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/targetprep/BusinessLogicPreparer.java
@@ -15,7 +15,6 @@
*/
package com.android.compatibility.common.tradefed.targetprep;
-import com.android.compatibility.SuiteInfo;
import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
import com.android.compatibility.common.util.BusinessLogic;
import com.android.tradefed.build.IBuildInfo;
@@ -26,6 +25,7 @@
import com.android.tradefed.targetprep.BuildError;
import com.android.tradefed.targetprep.ITargetCleaner;
import com.android.tradefed.targetprep.TargetSetupError;
+import com.android.tradefed.testtype.suite.TestSuiteInfo;
import com.android.tradefed.util.FileUtil;
import com.android.tradefed.util.StreamUtil;
@@ -39,8 +39,6 @@
@OptionClass(alias="business-logic-preparer")
public class BusinessLogicPreparer implements ITargetCleaner {
- private static final String LOG_TAG = BusinessLogicPreparer.class.getSimpleName();
-
/* Placeholder in the service URL for the suite to be configured */
private static final String SUITE_PLACEHOLDER = "{suite-name}";
@@ -72,7 +70,7 @@
DeviceNotAvailableException {
// Piece together request URL
String requestString = String.format("%s?key=%s", mUrl.replace(SUITE_PLACEHOLDER,
- SuiteInfo.NAME), mApiKey);
+ TestSuiteInfo.getInstance().getName()), mApiKey);
// Retrieve business logic string from service
String businessLogicString = null;
try {
@@ -80,8 +78,8 @@
businessLogicString = StreamUtil.getStringFromStream(request.openStream());
} catch (IOException e) {
throw new TargetSetupError(String.format(
- "Cannot connect to business logic service for suite %s", SuiteInfo.NAME), e,
- device.getDeviceDescriptor());
+ "Cannot connect to business logic service for suite %s",
+ TestSuiteInfo.getInstance().getName()), e, device.getDeviceDescriptor());
}
// Push business logic string to host file
try {
@@ -93,7 +91,7 @@
} catch (IOException e) {
throw new TargetSetupError(String.format(
"Retrieved business logic for suite %s could not be written to host",
- SuiteInfo.NAME), device.getDeviceDescriptor());
+ TestSuiteInfo.getInstance().getName()), device.getDeviceDescriptor());
}
// Push business logic string to device file
removeDeviceFile(device); // remove any existing business logic file from device
@@ -102,7 +100,7 @@
} else {
throw new TargetSetupError(String.format(
"Retrieved business logic for suite %s could not be written to device %s",
- SuiteInfo.NAME, device.getSerialNumber()), device.getDeviceDescriptor());
+ TestSuiteInfo.getInstance().getName(), device.getSerialNumber()), device.getDeviceDescriptor());
}
}
diff --git a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/testtype/CompatibilityTest.java b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/testtype/CompatibilityTest.java
index b722b3b..97fddea 100644
--- a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/testtype/CompatibilityTest.java
+++ b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/testtype/CompatibilityTest.java
@@ -16,7 +16,6 @@
package com.android.compatibility.common.tradefed.testtype;
-import com.android.compatibility.SuiteInfo;
import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
import com.android.compatibility.common.tradefed.result.InvocationFailureHandler;
import com.android.compatibility.common.tradefed.result.SubPlanHelper;
@@ -55,6 +54,7 @@
import com.android.tradefed.testtype.IShardableTest;
import com.android.tradefed.testtype.IStrictShardableTest;
import com.android.tradefed.testtype.ITestCollector;
+import com.android.tradefed.testtype.suite.TestSuiteInfo;
import com.android.tradefed.util.AbiFormatter;
import com.android.tradefed.util.AbiUtils;
import com.android.tradefed.util.ArrayUtil;
@@ -605,7 +605,7 @@
* Exposed for testing.
*/
protected Set<String> getAbisForBuildTargetArch() {
- return AbiUtils.getAbisForArch(SuiteInfo.TARGET_ARCH);
+ return AbiUtils.getAbisForArch(TestSuiteInfo.getInstance().getTargetArch());
}
/**
diff --git a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/testtype/suite/CompatibilityTestSuite.java b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/testtype/suite/CompatibilityTestSuite.java
index 869c373..23ff935 100644
--- a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/testtype/suite/CompatibilityTestSuite.java
+++ b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/testtype/suite/CompatibilityTestSuite.java
@@ -15,7 +15,6 @@
*/
package com.android.compatibility.common.tradefed.testtype.suite;
-import com.android.compatibility.SuiteInfo;
import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
import com.android.compatibility.common.tradefed.testtype.CompatibilityTest;
import com.android.compatibility.common.tradefed.testtype.ISubPlan;
@@ -33,6 +32,7 @@
import com.android.tradefed.testtype.Abi;
import com.android.tradefed.testtype.IAbi;
import com.android.tradefed.testtype.suite.ITestSuite;
+import com.android.tradefed.testtype.suite.TestSuiteInfo;
import com.android.tradefed.util.AbiFormatter;
import com.android.tradefed.util.AbiUtils;
import com.android.tradefed.util.ArrayUtil;
@@ -235,7 +235,7 @@
* Exposed for testing.
*/
protected Set<String> getAbisForBuildTargetArch() {
- return AbiUtils.getAbisForArch(SuiteInfo.TARGET_ARCH);
+ return AbiUtils.getAbisForArch(TestSuiteInfo.getInstance().getTargetArch());
}
/**
diff --git a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/presubmit/IntegrationTest.java b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/presubmit/IntegrationTest.java
index 4d9bfec..af20a46 100644
--- a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/presubmit/IntegrationTest.java
+++ b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/presubmit/IntegrationTest.java
@@ -18,7 +18,6 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-import com.android.compatibility.SuiteInfo;
import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
import com.android.compatibility.common.tradefed.result.ResultReporter;
import com.android.compatibility.common.tradefed.testtype.CompatibilityTest;
@@ -40,6 +39,7 @@
import com.android.tradefed.testtype.IDeviceTest;
import com.android.tradefed.testtype.IInvocationContextReceiver;
import com.android.tradefed.testtype.IRemoteTest;
+import com.android.tradefed.testtype.suite.TestSuiteInfo;
import com.android.tradefed.util.AbiUtils;
import com.android.tradefed.util.FileUtil;
@@ -551,7 +551,7 @@
@Test
public void testSingleModuleRun_sharded() throws Exception {
final String moduleName = "module_sharded";
- Set<String> abis = AbiUtils.getAbisForArch(SuiteInfo.TARGET_ARCH);
+ Set<String> abis = AbiUtils.getAbisForArch(TestSuiteInfo.getInstance().getTargetArch());
Iterator<String> ite = abis.iterator();
final String abi1 = ite.next();
final String abi2 = ite.next();
@@ -601,7 +601,7 @@
@Test
public void testSingleModuleRun_sharded_incomplete() throws Exception {
final String moduleName = "module_sharded_incomplete";
- Set<String> abis = AbiUtils.getAbisForArch(SuiteInfo.TARGET_ARCH);
+ Set<String> abis = AbiUtils.getAbisForArch(TestSuiteInfo.getInstance().getTargetArch());
Iterator<String> ite = abis.iterator();
final String abi1 = ite.next();
final String abi2 = ite.next();
@@ -652,7 +652,7 @@
@Test
public void testSingleModuleRun_sharded_getTestShard() throws Exception {
final String moduleName = "module_sharded_getTestShard";
- Set<String> abis = AbiUtils.getAbisForArch(SuiteInfo.TARGET_ARCH);
+ Set<String> abis = AbiUtils.getAbisForArch(TestSuiteInfo.getInstance().getTargetArch());
Iterator<String> ite = abis.iterator();
final String abi1 = ite.next();
final String abi2 = ite.next();
diff --git a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/presubmit/ValidateTestsAbi.java b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/presubmit/ValidateTestsAbi.java
index dce227f..ebe50a9 100644
--- a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/presubmit/ValidateTestsAbi.java
+++ b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/presubmit/ValidateTestsAbi.java
@@ -19,7 +19,7 @@
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
-import com.android.compatibility.SuiteInfo;
+import com.android.tradefed.testtype.suite.TestSuiteInfo;
import com.android.tradefed.util.AaptParser;
import com.android.tradefed.util.AbiUtils;
@@ -106,7 +106,8 @@
// We only check the apk that have native code
if (!result.getNativeCode().isEmpty()) {
List<String> supportedAbiApk = result.getNativeCode();
- Set<String> buildTarget = AbiUtils.getAbisForArch(SuiteInfo.TARGET_ARCH);
+ Set<String> buildTarget = AbiUtils.getAbisForArch(
+ TestSuiteInfo.getInstance().getTargetArch());
// first check, all the abis are supported
for (String abi : supportedAbiApk) {
if (!buildTarget.contains(abi)) {
@@ -166,7 +167,8 @@
// we sort to have binary starting with same name, next to each other. The last two
// characters of their name with be the bitness (32 or 64).
Collections.sort(orderedList);
- Set<String> buildTarget = AbiUtils.getAbisForArch(SuiteInfo.TARGET_ARCH);
+ Set<String> buildTarget = AbiUtils.getAbisForArch(
+ TestSuiteInfo.getInstance().getTargetArch());
// We expect one binary per abi of CTS, they should be appended with 32 or 64
for (int i = 0; i < orderedList.size(); i=i + buildTarget.size()) {
List<String> subSet = orderedList.subList(i, i + buildTarget.size());
diff --git a/tools/cts-tradefed/Android.mk b/tools/cts-tradefed/Android.mk
index a539e5b..e3604fb 100644
--- a/tools/cts-tradefed/Android.mk
+++ b/tools/cts-tradefed/Android.mk
@@ -20,12 +20,17 @@
LOCAL_JAVA_RESOURCE_DIRS := res
LOCAL_JAVA_RESOURCE_DIRS += ../../common/host-side/tradefed/res
+LOCAL_MODULE := cts-tradefed-harness
+LOCAL_JAVA_LIBRARIES += tradefed compatibility-host-util
+include $(BUILD_HOST_JAVA_LIBRARY)
+include $(CLEAR_VARS)
LOCAL_SUITE_BUILD_NUMBER := $(BUILD_NUMBER_FROM_FILE)
LOCAL_SUITE_TARGET_ARCH := $(TARGET_ARCH)
LOCAL_SUITE_NAME := CTS
LOCAL_SUITE_FULLNAME := "Compatibility Test Suite"
LOCAL_SUITE_VERSION := 8.0_r1
+LOCAL_STATIC_JAVA_LIBRARIES += cts-tradefed-harness
LOCAL_MODULE := cts-tradefed
LOCAL_COMPATIBILITY_SUITE := general-tests