Merge "Store result directory in build attributes." into mnc-dev
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/build/CtsBuildInfo.java b/tools/tradefed-host/src/com/android/cts/tradefed/build/CtsBuildInfo.java
deleted file mode 100644
index fafdb91..0000000
--- a/tools/tradefed-host/src/com/android/cts/tradefed/build/CtsBuildInfo.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2015 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.tradefed.build;
-
-import com.android.tradefed.build.FolderBuildInfo;
-
-import java.io.File;
-
-/**
- * An extension of {@link FolderBuildInfo} that includes additional CTS build info.
- */
-public class CtsBuildInfo extends FolderBuildInfo implements ICtsBuildInfo {
-
- private File mResultDir = null;
-
- /**
- * Creates a {@link CtsBuildInfo}
- *
- * @param buildId
- * @param testTarget
- * @param buildName
- */
- public CtsBuildInfo(String buildId, String testTarget, String buildName) {
- super(buildId, testTarget, buildName);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public File getResultDir() {
- return mResultDir;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setResultDir(File resultDir) {
- mResultDir = resultDir;
- }
-}
\ No newline at end of file
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/build/CtsBuildProvider.java b/tools/tradefed-host/src/com/android/cts/tradefed/build/CtsBuildProvider.java
index 6169e77..ca67746 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/build/CtsBuildProvider.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/build/CtsBuildProvider.java
@@ -15,6 +15,7 @@
*/
package com.android.cts.tradefed.build;
+import com.android.tradefed.build.FolderBuildInfo;
import com.android.tradefed.build.IBuildInfo;
import com.android.tradefed.build.IBuildProvider;
import com.android.tradefed.build.IFolderBuildInfo;
@@ -41,15 +42,13 @@
if (mCtsRootDirPath == null) {
throw new IllegalArgumentException("Missing --cts-install-path");
}
- CtsBuildInfo ctsBuild = new CtsBuildInfo(CTS_BUILD_VERSION, "cts", "cts");
+ IFolderBuildInfo ctsBuild = new FolderBuildInfo(
+ Package.getPackage(CTS_PACKAGE).getImplementationVersion(),
+ "cts", "cts");
ctsBuild.setRootDir(new File(mCtsRootDirPath));
return ctsBuild;
}
- public static String getBuildNumber() {
- return Package.getPackage(CTS_PACKAGE).getImplementationVersion();
- }
-
/**
* {@inheritDoc}
*/
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/build/ICtsBuildInfo.java b/tools/tradefed-host/src/com/android/cts/tradefed/build/ICtsBuildInfo.java
deleted file mode 100644
index 0b3ad65..0000000
--- a/tools/tradefed-host/src/com/android/cts/tradefed/build/ICtsBuildInfo.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2015 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.tradefed.build;
-
-import com.android.tradefed.build.IFolderBuildInfo;
-
-import java.io.File;
-
-/**
- * An {@link IFolderBuildInfo} that contains local CTS result directory.
- */
-public interface ICtsBuildInfo extends IFolderBuildInfo{
-
- /**
- * Returns the local CTS result directory.
- */
- public File getResultDir();
-
- /**
- * Sets the local CTS result directory.
- */
- public void setResultDir(File resultDir);
-}
\ No newline at end of file
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/command/CtsConsole.java b/tools/tradefed-host/src/com/android/cts/tradefed/command/CtsConsole.java
index 2d6d8f2..24239e6 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/command/CtsConsole.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/command/CtsConsole.java
@@ -24,6 +24,7 @@
import com.android.cts.tradefed.testtype.ITestPackageRepo;
import com.android.cts.tradefed.testtype.TestPackageRepo;
import com.android.cts.util.AbiUtils;
+import com.android.tradefed.build.IFolderBuildInfo;
import com.android.tradefed.command.Console;
import com.android.tradefed.config.ArgsOptionParser;
import com.android.tradefed.config.ConfigurationException;
@@ -48,7 +49,8 @@
protected static final String ADD_PATTERN = "a(?:dd)?";
- private CtsBuildHelper mCtsBuild = null;
+ private IFolderBuildInfo mBuildInfo = null;
+ private CtsBuildHelper mBuildHelper = null;
CtsConsole() {
super();
@@ -57,8 +59,7 @@
@Override
public void run() {
printLine(String.format("Android CTS %s build:%s",
- CtsBuildProvider.CTS_BUILD_VERSION,
- CtsBuildProvider.getBuildNumber()));
+ CtsBuildProvider.CTS_BUILD_VERSION, getCtsBuildInfo().getBuildId()));
super.run();
}
@@ -71,7 +72,7 @@
trie.put(new Runnable() {
@Override
public void run() {
- CtsBuildHelper ctsBuild = getCtsBuild();
+ CtsBuildHelper ctsBuild = getCtsBuildHelper();
if (ctsBuild != null) {
listPlans(ctsBuild);
}
@@ -80,7 +81,7 @@
trie.put(new Runnable() {
@Override
public void run() {
- CtsBuildHelper ctsBuild = getCtsBuild();
+ CtsBuildHelper ctsBuild = getCtsBuildHelper();
if (ctsBuild != null) {
listPackages(ctsBuild);
}
@@ -89,7 +90,7 @@
trie.put(new Runnable() {
@Override
public void run() {
- CtsBuildHelper ctsBuild = getCtsBuild();
+ CtsBuildHelper ctsBuild = getCtsBuildHelper();
if (ctsBuild != null) {
listResults(ctsBuild);
}
@@ -116,7 +117,7 @@
for (int i = 2; i < args.size(); i++) {
flatArgs[i - 2] = args.get(i).get(0);
}
- CtsBuildHelper ctsBuild = getCtsBuild();
+ CtsBuildHelper ctsBuild = getCtsBuildHelper();
if (ctsBuild != null) {
// FIXME may want to only add certain ABIs
addDerivedPlan(ctsBuild, AbiUtils.getAbisSupportedByCts(), flatArgs);
@@ -232,22 +233,28 @@
}
}
- private CtsBuildHelper getCtsBuild() {
- if (mCtsBuild == null) {
- String ctsInstallPath = System.getProperty("CTS_ROOT");
- if (ctsInstallPath != null) {
- mCtsBuild = new CtsBuildHelper(new File(ctsInstallPath));
- try {
- mCtsBuild.validateStructure();
- } catch (FileNotFoundException e) {
- printLine(String.format("Invalid cts install: %s", e.getMessage()));
- mCtsBuild = null;
- }
- } else {
+ private IFolderBuildInfo getCtsBuildInfo() {
+ if (mBuildInfo == null) {
+ try {
+ mBuildInfo = (IFolderBuildInfo) new CtsBuildProvider().getBuild();
+ } catch (IllegalArgumentException e) {
printLine("Could not find CTS install location: CTS_ROOT env variable not set");
}
}
- return mCtsBuild;
+ return mBuildInfo;
+ }
+
+ private CtsBuildHelper getCtsBuildHelper() {
+ if (mBuildHelper == null) {
+ try {
+ mBuildHelper = new CtsBuildHelper(getCtsBuildInfo());
+ mBuildHelper.validateStructure();
+ } catch (FileNotFoundException e) {
+ printLine(String.format("Invalid cts install: %s", e.getMessage()));
+ mBuildHelper = null;
+ }
+ }
+ return mBuildHelper;
}
public static void main(String[] args) throws InterruptedException, ConfigurationException {
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/device/DeviceInfoCollector.java b/tools/tradefed-host/src/com/android/cts/tradefed/device/DeviceInfoCollector.java
index 7883fce..fe096bd 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/device/DeviceInfoCollector.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/device/DeviceInfoCollector.java
@@ -15,10 +15,11 @@
*/
package com.android.cts.tradefed.device;
-import com.android.cts.tradefed.build.ICtsBuildInfo;
import com.android.cts.util.AbiUtils;
+import com.android.cts.tradefed.result.CtsXmlResultReporter;
import com.android.ddmlib.Log;
import com.android.tradefed.build.IBuildInfo;
+import com.android.tradefed.build.IFolderBuildInfo;
import com.android.tradefed.device.DeviceNotAvailableException;
import com.android.tradefed.device.ITestDevice;
import com.android.tradefed.result.ITestInvocationListener;
@@ -115,12 +116,12 @@
private static void pullExtendedDeviceInfoResults(ITestDevice device, IBuildInfo buildInfo)
throws DeviceNotAvailableException {
- if (!(buildInfo instanceof ICtsBuildInfo)) {
+ if (!(buildInfo instanceof IFolderBuildInfo)) {
Log.e(LOG_TAG, "Invalid instance of buildInfo");
return;
}
- ICtsBuildInfo ctsBuildInfo = (ICtsBuildInfo) buildInfo;
- File localResultDir = ctsBuildInfo.getResultDir();
+ File localResultDir = new File(buildInfo.getBuildAttributes().get(
+ CtsXmlResultReporter.CTS_RESULT_DIR));
if (localResultDir == null || !localResultDir.isDirectory()) {
Log.e(LOG_TAG, "Local result directory is null or is not a directory");
return;
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/result/CtsXmlResultReporter.java b/tools/tradefed-host/src/com/android/cts/tradefed/result/CtsXmlResultReporter.java
index f4f133a..973d943 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/result/CtsXmlResultReporter.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/result/CtsXmlResultReporter.java
@@ -17,13 +17,13 @@
package com.android.cts.tradefed.result;
import com.android.cts.tradefed.build.CtsBuildHelper;
-import com.android.cts.tradefed.build.ICtsBuildInfo;
import com.android.cts.tradefed.device.DeviceInfoCollector;
import com.android.cts.tradefed.testtype.CtsTest;
import com.android.ddmlib.Log;
import com.android.ddmlib.Log.LogLevel;
import com.android.ddmlib.testrunner.TestIdentifier;
import com.android.tradefed.build.IBuildInfo;
+import com.android.tradefed.build.IFolderBuildInfo;
import com.android.tradefed.config.Option;
import com.android.tradefed.config.Option.Importance;
import com.android.tradefed.log.LogUtil.CLog;
@@ -62,6 +62,7 @@
private static final String LOG_TAG = "CtsXmlResultReporter";
+ public static final String CTS_RESULT_DIR = "cts-result-dir";
static final String TEST_RESULT_FILE_NAME = "testResult.xml";
static final String CTS_RESULT_FILE_VERSION = "4.4";
private static final String[] CTS_RESULT_RESOURCES = {"cts_result.xsl", "cts_result.css",
@@ -125,10 +126,10 @@
@Override
public void invocationStarted(IBuildInfo buildInfo) {
mBuildInfo = buildInfo;
- if (!(buildInfo instanceof ICtsBuildInfo)) {
- throw new IllegalArgumentException("build info is not a ICtsBuildInfo");
+ if (!(buildInfo instanceof IFolderBuildInfo)) {
+ throw new IllegalArgumentException("build info is not a IFolderBuildInfo");
}
- ICtsBuildInfo ctsBuild = (ICtsBuildInfo)buildInfo;
+ IFolderBuildInfo ctsBuild = (IFolderBuildInfo)buildInfo;
CtsBuildHelper ctsBuildHelper = getBuildHelper(ctsBuild);
mDeviceSerial = buildInfo.getDeviceSerial() == null ? "unknown_device" :
buildInfo.getDeviceSerial();
@@ -156,7 +157,7 @@
mSuiteName = ctsBuildHelper.getSuiteName();
mReporter = new ResultReporter(mResultServer, mSuiteName);
- ctsBuild.setResultDir(mReportDir);
+ ctsBuild.addBuildAttribute(CTS_RESULT_DIR, mReportDir.getAbsolutePath());
// TODO: allow customization of log dir
// create a unique directory for saving logs, with same name as result dir
@@ -202,7 +203,7 @@
* Helper method to retrieve the {@link CtsBuildHelper}.
* @param ctsBuild
*/
- CtsBuildHelper getBuildHelper(ICtsBuildInfo ctsBuild) {
+ CtsBuildHelper getBuildHelper(IFolderBuildInfo ctsBuild) {
CtsBuildHelper buildHelper = new CtsBuildHelper(ctsBuild.getRootDir());
try {
buildHelper.validateStructure();
@@ -415,7 +416,7 @@
serializer.attribute(ns, "endtime", endTime);
serializer.attribute(ns, "version", CTS_RESULT_FILE_VERSION);
serializer.attribute(ns, "suite", mSuiteName);
- mResults.serialize(serializer);
+ mResults.serialize(serializer, mBuildInfo.getBuildId());
// TODO: not sure why, but the serializer doesn't like this statement
//serializer.endTag(ns, RESULT_TAG);
}
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/result/TestResults.java b/tools/tradefed-host/src/com/android/cts/tradefed/result/TestResults.java
index 68cd1c0..9f67f2d 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/result/TestResults.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/result/TestResults.java
@@ -104,9 +104,9 @@
* @param serializer
* @throws IOException
*/
- public void serialize(KXmlSerializer serializer) throws IOException {
+ public void serialize(KXmlSerializer serializer, String buildId) throws IOException {
mDeviceInfo.serialize(serializer);
- serializeHostInfo(serializer);
+ serializeHostInfo(serializer, buildId);
serializeTestSummary(serializer);
// sort before serializing
List<TestPackageResult> pkgs = new ArrayList<TestPackageResult>(mPackageResults.values());
@@ -121,7 +121,7 @@
*
* @param serializer
*/
- private void serializeHostInfo(KXmlSerializer serializer) throws IOException {
+ private void serializeHostInfo(KXmlSerializer serializer, String buildId) throws IOException {
serializer.startTag(ns, "HostInfo");
String hostName = "";
@@ -143,7 +143,7 @@
serializer.startTag(ns, "Cts");
serializer.attribute(ns, "version", CtsBuildProvider.CTS_BUILD_VERSION);
- serializer.attribute(ns, "build", CtsBuildProvider.getBuildNumber());
+ serializer.attribute(ns, "build", buildId);
// TODO: consider outputting other tradefed options here
serializer.startTag(ns, "IntValue");
serializer.attribute(ns, "name", "testStatusTimeoutMs");
diff --git a/tools/tradefed-host/tests/src/com/android/cts/tradefed/device/DeviceInfoCollectorFuncTest.java b/tools/tradefed-host/tests/src/com/android/cts/tradefed/device/DeviceInfoCollectorFuncTest.java
index f60dc03..a202083 100644
--- a/tools/tradefed-host/tests/src/com/android/cts/tradefed/device/DeviceInfoCollectorFuncTest.java
+++ b/tools/tradefed-host/tests/src/com/android/cts/tradefed/device/DeviceInfoCollectorFuncTest.java
@@ -50,7 +50,9 @@
buildInfo = new BuildInfo();
mResultDir = FileUtil.createTempDir("cts-result-dir");
mMockCtsBuildInfo = EasyMock.createMock(ICtsBuildInfo.class);
- EasyMock.expect(mMockCtsBuildInfo.getResultDir()).andStubReturn(mResultDir);
+ Map<String, String> attributes = new HashMap<>();
+ attributes.put(CtsXmlResultReporter.CTS_RESULT_DIR, mResultDir);
+ EasyMock.expect(mMockCtsBuildInfo.getBuildAttributes()).andStubReturn(attributes);
EasyMock.replay(mMockCtsBuildInfo);
assertNotNull(getDevice().getSerialNumber());