Modify IBuildInfo API to more correctly describe its usage.
Add explict methods for branch and build-flavor, and rename
existing methods for clarity.
Bug 5097202
Change-Id: I8c751becdcbab6efbae2ac54ca9f353df0f891f7
diff --git a/src/com/android/tradefed/build/AppDeviceBuildInfo.java b/src/com/android/tradefed/build/AppDeviceBuildInfo.java
index 625022e..c4ee0b6 100644
--- a/src/com/android/tradefed/build/AppDeviceBuildInfo.java
+++ b/src/com/android/tradefed/build/AppDeviceBuildInfo.java
@@ -197,9 +197,9 @@
*/
@Override
public IBuildInfo clone() {
- AppDeviceBuildInfo copy = new AppDeviceBuildInfo(getBuildId(), getTestTarget(),
- getBuildName());
- copy.addAllBuildAttributes(getAttributesMultiMap());
+ AppDeviceBuildInfo copy = new AppDeviceBuildInfo(getBuildId(), getTestTag(),
+ getBuildTargetName());
+ copy.addAllBuildAttributes(this);
IDeviceBuildInfo deviceBuildClone = (IDeviceBuildInfo)mDeviceBuild.clone();
copy.setDeviceBuild(deviceBuildClone);
IAppBuildInfo appBuildClone = (IAppBuildInfo)mAppBuildInfo.clone();
diff --git a/src/com/android/tradefed/build/BuildInfo.java b/src/com/android/tradefed/build/BuildInfo.java
index 4385a18..a2dd189 100644
--- a/src/com/android/tradefed/build/BuildInfo.java
+++ b/src/com/android/tradefed/build/BuildInfo.java
@@ -26,9 +26,11 @@
public class BuildInfo implements IBuildInfo {
private int mBuildInfo = 0;
- private String mTestTarget = "stub";
- private String mBuildName = "stub";
+ private String mTestTag = "stub";
+ private String mBuildTargetName = "stub";
private UniqueMultiMap<String, String> mBuildAttributes = new UniqueMultiMap<String, String>();
+ private String mBuildFlavor = null;
+ private String mBuildBranch = null;
/**
* Creates a {@link BuildInfo} using default attribute values.
@@ -40,29 +42,35 @@
* Creates a {@link BuildInfo}
*
* @param buildId the build id
- * @param testTarget the test target name
- * @param buildName the build name
+ * @param testTag the test tag name
+ * @param buildTargetName the build target name
*/
- public BuildInfo(int buildId, String testTarget, String buildName) {
+ public BuildInfo(int buildId, String testTag, String buildTargetName) {
mBuildInfo = buildId;
- mTestTarget = testTarget;
- mBuildName = buildName;
+ mTestTag = testTag;
+ mBuildTargetName = buildTargetName;
}
/**
* {@inheritDoc}
*/
+ @Override
public int getBuildId() {
return mBuildInfo;
}
- public String getTestTarget() {
- return mTestTarget;
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getTestTag() {
+ return mTestTag;
}
/**
* {@inheritDoc}
*/
+ @Override
public Map<String, String> getBuildAttributes() {
return mBuildAttributes.getUniqueMap();
}
@@ -70,8 +78,9 @@
/**
* {@inheritDoc}
*/
- public String getBuildName() {
- return mBuildName;
+ @Override
+ public String getBuildTargetName() {
+ return mBuildTargetName;
}
/**
@@ -81,8 +90,13 @@
mBuildAttributes.put(attributeName, attributeValue);
}
- protected void addAllBuildAttributes(MultiMap<String, String> attributes) {
- mBuildAttributes.putAll(attributes);
+ /**
+ * Helper method to copy build attributes, branch, and flavor from other build.
+ */
+ protected void addAllBuildAttributes(BuildInfo build) {
+ mBuildAttributes.putAll(build.getAttributesMultiMap());
+ setBuildFlavor(build.getBuildFlavor());
+ setBuildBranch(build.getBuildBranch());
}
protected MultiMap<String, String> getAttributesMultiMap() {
@@ -97,10 +111,45 @@
// ignore
}
+ /**
+ * {@inheritDoc}
+ */
@Override
public IBuildInfo clone() {
- BuildInfo copy = new BuildInfo(mBuildInfo, mTestTarget, mBuildName);
- copy.addAllBuildAttributes(mBuildAttributes);
+ BuildInfo copy = new BuildInfo(mBuildInfo, mTestTag, mBuildTargetName);
+ copy.addAllBuildAttributes(this);
return copy;
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getBuildFlavor() {
+ return mBuildFlavor ;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setBuildFlavor(String buildFlavor) {
+ mBuildFlavor = buildFlavor;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getBuildBranch() {
+ return mBuildBranch;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setBuildBranch(String branch) {
+ mBuildBranch = branch;
+ }
}
diff --git a/src/com/android/tradefed/build/DeviceBuildInfo.java b/src/com/android/tradefed/build/DeviceBuildInfo.java
index cfaa555..33c6ea7 100644
--- a/src/com/android/tradefed/build/DeviceBuildInfo.java
+++ b/src/com/android/tradefed/build/DeviceBuildInfo.java
@@ -227,9 +227,9 @@
@Override
public IBuildInfo clone() {
try {
- DeviceBuildInfo copy = new DeviceBuildInfo(getBuildId(), getTestTarget(),
- getBuildName());
- copy.addAllBuildAttributes(getAttributesMultiMap());
+ DeviceBuildInfo copy = new DeviceBuildInfo(getBuildId(), getTestTag(),
+ getBuildTargetName());
+ copy.addAllBuildAttributes(this);
for (Map.Entry<String, ImageFile> fileEntry : mImageFileMap.entrySet()) {
File origImageFile = fileEntry.getValue().getImageFile();
File hardlinkFile;
diff --git a/src/com/android/tradefed/build/DeviceFolderBuildInfo.java b/src/com/android/tradefed/build/DeviceFolderBuildInfo.java
index c8409c8..c45131d 100644
--- a/src/com/android/tradefed/build/DeviceFolderBuildInfo.java
+++ b/src/com/android/tradefed/build/DeviceFolderBuildInfo.java
@@ -203,9 +203,9 @@
*/
@Override
public IBuildInfo clone() {
- DeviceFolderBuildInfo copy = new DeviceFolderBuildInfo(getBuildId(), getTestTarget(),
- getBuildName());
- copy.addAllBuildAttributes(getAttributesMultiMap());
+ DeviceFolderBuildInfo copy = new DeviceFolderBuildInfo(getBuildId(), getTestTag(),
+ getBuildTargetName());
+ copy.addAllBuildAttributes(this);
IDeviceBuildInfo deviceBuildClone = (IDeviceBuildInfo)mDeviceBuild.clone();
copy.setDeviceBuild(deviceBuildClone);
IFolderBuildInfo folderBuildClone = (IFolderBuildInfo)mFolderBuild.clone();
diff --git a/src/com/android/tradefed/build/FolderBuildInfo.java b/src/com/android/tradefed/build/FolderBuildInfo.java
index 8d69904..0477f08 100644
--- a/src/com/android/tradefed/build/FolderBuildInfo.java
+++ b/src/com/android/tradefed/build/FolderBuildInfo.java
@@ -61,8 +61,8 @@
@Override
public IBuildInfo clone() {
- FolderBuildInfo copy = new FolderBuildInfo(getBuildId(), getTestTarget(), getBuildName());
- copy.addAllBuildAttributes(getAttributesMultiMap());
+ FolderBuildInfo copy = new FolderBuildInfo(getBuildId(), getTestTag(), getBuildTargetName());
+ copy.addAllBuildAttributes(this);
try {
File copyDir = FileUtil.createTempDir("foldercopy");
FileUtil.recursiveCopy(mRootDir, copyDir);
diff --git a/src/com/android/tradefed/build/IBuildInfo.java b/src/com/android/tradefed/build/IBuildInfo.java
index da0378b..498db89 100644
--- a/src/com/android/tradefed/build/IBuildInfo.java
+++ b/src/com/android/tradefed/build/IBuildInfo.java
@@ -28,17 +28,53 @@
public int getBuildId();
/**
- * Return a unique description of the tests being run.
+ * Return a unique name for the tests being run.
*/
- public String getTestTarget();
+ public String getTestTag();
/**
- * Return a unique description of the type of build.
+ * Return complete name for the build being tested.
+ * <p/>
+ * A common implementation is to construct the build target name from a combination of
+ * the build flavor and branch name. (ie <branch name>-<build flavor>)
*/
- public String getBuildName();
+ public String getBuildTargetName();
/**
- * Get a set of name-value pairs of attributes describing the build.
+ * Optional method to return the type of build being tested.
+ * <p/>
+ * A common implementation for Android platform builds is to return
+ * <build product>-<build os>-<build variant>.
+ * ie generic-linux-userdebug
+ *
+ * @return the build flavor or <code>null</code> if unset/not applicable
+ */
+ public String getBuildFlavor();
+
+ /**
+ * Set the build flavor.
+ *
+ * @param buildFlavor
+ */
+ public void setBuildFlavor(String buildFlavor);
+
+ /**
+ * Optional method to return the source control branch that the build being tested was
+ * produced from.
+ *
+ * @return the build branch or <code>null</code> if unset/not applicable
+ */
+ public String getBuildBranch();
+
+ /**
+ * Set the build branch
+ *
+ * @param branch
+ */
+ public void setBuildBranch(String branch);
+
+ /**
+ * Get a set of name-value pairs of additional attributes describing the build.
*
* @return a {@link Map} of build attributes. Will not be <code>null</code>, but may be empty.
*/
diff --git a/src/com/android/tradefed/build/SdkBuildInfo.java b/src/com/android/tradefed/build/SdkBuildInfo.java
index c469d47..f1ab38a 100644
--- a/src/com/android/tradefed/build/SdkBuildInfo.java
+++ b/src/com/android/tradefed/build/SdkBuildInfo.java
@@ -112,8 +112,8 @@
@Override
public IBuildInfo clone() {
- SdkBuildInfo cloneBuild = new SdkBuildInfo(getBuildId(), getTestTarget(), getBuildName());
- cloneBuild.addAllBuildAttributes(getAttributesMultiMap());
+ SdkBuildInfo cloneBuild = new SdkBuildInfo(getBuildId(), getTestTag(), getBuildTargetName());
+ cloneBuild.addAllBuildAttributes(this);
try {
File cloneAdtDir = null;
if (getAdtDir() != null) {
diff --git a/src/com/android/tradefed/invoker/TestInvocation.java b/src/com/android/tradefed/invoker/TestInvocation.java
index 3576f53..b56a88b 100644
--- a/src/com/android/tradefed/invoker/TestInvocation.java
+++ b/src/com/android/tradefed/invoker/TestInvocation.java
@@ -245,7 +245,7 @@
*/
private void logStartInvocation(IBuildInfo info, ITestDevice device) {
StringBuilder msg = new StringBuilder("Starting invocation for target ");
- msg.append(info.getTestTarget());
+ msg.append(info.getTestTag());
msg.append(" on build ");
msg.append(info.getBuildId());
for (String buildAttr : info.getBuildAttributes().values()) {
@@ -255,7 +255,7 @@
msg.append(" on device ");
msg.append(device.getSerialNumber());
Log.logAndDisplay(LogLevel.INFO, LOG_TAG, msg.toString());
- mStatus = String.format("running %s on build %d", info.getTestTarget(), info.getBuildId());
+ mStatus = String.format("running %s on build %d", info.getTestTag(), info.getBuildId());
}
/**
diff --git a/src/com/android/tradefed/result/EmailResultReporter.java b/src/com/android/tradefed/result/EmailResultReporter.java
index 1a9f0fb..36be3a4 100644
--- a/src/com/android/tradefed/result/EmailResultReporter.java
+++ b/src/com/android/tradefed/result/EmailResultReporter.java
@@ -138,7 +138,7 @@
*/
protected String generateEmailSubject() {
return String.format("%s result for %s on build %d: %s", mSubjectTag,
- getBuildInfo().getTestTarget(), getBuildInfo().getBuildId(), getInvocationStatus());
+ getBuildInfo().getTestTag(), getBuildInfo().getBuildId(), getInvocationStatus());
}
/**
diff --git a/src/com/android/tradefed/result/XmlResultReporter.java b/src/com/android/tradefed/result/XmlResultReporter.java
index 4d1a721..a5923fe 100644
--- a/src/com/android/tradefed/result/XmlResultReporter.java
+++ b/src/com/android/tradefed/result/XmlResultReporter.java
@@ -175,7 +175,7 @@
void printTestResults(KXmlSerializer serializer, String timestamp, long elapsedTime)
throws IOException {
serializer.startTag(ns, TESTSUITE);
- serializer.attribute(ns, ATTR_NAME, mBuildInfo.getTestTarget());
+ serializer.attribute(ns, ATTR_NAME, mBuildInfo.getTestTag());
serializer.attribute(ns, ATTR_TESTS, Integer.toString(getNumTotalTests()));
serializer.attribute(ns, ATTR_FAILURES, Integer.toString(getNumFailedTests()));
serializer.attribute(ns, ATTR_ERRORS, Integer.toString(getNumErrorTests()));
diff --git a/tests/src/com/android/tradefed/invoker/TestInvocationTest.java b/tests/src/com/android/tradefed/invoker/TestInvocationTest.java
index 1362f4c..87dad4a 100644
--- a/tests/src/com/android/tradefed/invoker/TestInvocationTest.java
+++ b/tests/src/com/android/tradefed/invoker/TestInvocationTest.java
@@ -111,7 +111,7 @@
EasyMock.expect(mMockBuildInfo.getBuildId()).andStubReturn(1);
EasyMock.expect(mMockBuildInfo.getBuildAttributes()).andStubReturn(EMPTY_MAP);
- EasyMock.expect(mMockBuildInfo.getTestTarget()).andStubReturn("");
+ EasyMock.expect(mMockBuildInfo.getTestTag()).andStubReturn("");
// always expect logger initialization and cleanup calls
mMockLogRegistry.registerLogger(mMockLogger);
mMockLogger.init();