Merge "Change IBuildInfo API."
diff --git a/src/com/android/tradefed/build/AppDeviceBuildInfo.java b/src/com/android/tradefed/build/AppDeviceBuildInfo.java
index 247961b..cbe5330 100644
--- a/src/com/android/tradefed/build/AppDeviceBuildInfo.java
+++ b/src/com/android/tradefed/build/AppDeviceBuildInfo.java
@@ -37,6 +37,86 @@
* {@inheritDoc}
*/
@Override
+ public String getDeviceBuildId() {
+ return mDeviceBuild.getDeviceBuildId();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public File getDeviceImageFile() {
+ return mDeviceBuild.getDeviceImageFile();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getDeviceImageVersion() {
+ return mDeviceBuild.getDeviceImageVersion();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setDeviceImageFile(File deviceImageFile, String version) {
+ mDeviceBuild.setDeviceImageFile(deviceImageFile, version);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public File getUserDataImageFile() {
+ return mDeviceBuild.getUserDataImageFile();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getUserDataImageVersion() {
+ return mDeviceBuild.getUserDataImageVersion();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setUserDataImageFile(File userDataFile, String version) {
+ mDeviceBuild.setUserDataImageFile(userDataFile, version);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public File getTestsDir() {
+ return mDeviceBuild.getTestsDir();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getTestsDirVersion() {
+ return mDeviceBuild.getTestsDirVersion();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setTestsDir(File testsDir, String version) {
+ mDeviceBuild.setTestsDir(testsDir, version);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public File getBasebandImageFile() {
return mDeviceBuild.getBasebandImageFile();
}
@@ -53,6 +133,14 @@
* {@inheritDoc}
*/
@Override
+ public void setBasebandImage(File basebandFile, String version) {
+ mDeviceBuild.setBasebandImage(basebandFile, version);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public File getBootloaderImageFile() {
return mDeviceBuild.getBootloaderImageFile();
}
@@ -69,54 +157,6 @@
* {@inheritDoc}
*/
@Override
- public File getDeviceImageFile() {
- return mDeviceBuild.getDeviceImageFile();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public File getFile(String name) {
- return mDeviceBuild.getFile(name);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getVersion(String name) {
- return mDeviceBuild.getVersion(name);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public File getTestsDir() {
- return mDeviceBuild.getTestsDir();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public File getUserDataImageFile() {
- return mDeviceBuild.getUserDataImageFile();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setBasebandImage(File basebandFile, String version) {
- mDeviceBuild.setBasebandImage(basebandFile, version);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
public void setBootloaderImageFile(File bootloaderImgFile, String version) {
mDeviceBuild.setBootloaderImageFile(bootloaderImgFile, version);
}
@@ -125,45 +165,6 @@
* {@inheritDoc}
*/
@Override
- public void setDeviceImageFile(File deviceImageFile) {
- mDeviceBuild.setDeviceImageFile(deviceImageFile);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setFile(String name, File file, String version) {
- mDeviceBuild.setFile(name, file, version);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setTestsDir(File testsDir) {
- mDeviceBuild.setTestsDir(testsDir);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setUserDataImageFile(File userDataFile) {
- mDeviceBuild.setUserDataImageFile(userDataFile);
- }
-
- /**
- * @param deviceBuild
- */
- public void setDeviceBuild(IDeviceBuildInfo deviceBuild) {
- mDeviceBuild = deviceBuild;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
public File getOtaPackageFile() {
return mDeviceBuild.getOtaPackageFile();
}
@@ -172,17 +173,71 @@
* {@inheritDoc}
*/
@Override
- public void setOtaPackageFile(File otaFile) {
- mDeviceBuild.setOtaPackageFile(otaFile);
+ public String getOtaPackageVersion() {
+ return mDeviceBuild.getOtaPackageVersion();
}
/**
* {@inheritDoc}
*/
@Override
- public void cleanUp() {
- mDeviceBuild.cleanUp();
- mAppBuildInfo.cleanUp();
+ public void setOtaPackageFile(File otaFile, String version) {
+ mDeviceBuild.setOtaPackageFile(otaFile, version);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public File getMkbootimgFile() {
+ return mDeviceBuild.getMkbootimgFile();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getMkbootimgVersion() {
+ return mDeviceBuild.getMkbootimgVersion();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setMkbootimgFile(File mkbootimg, String version) {
+ mDeviceBuild.setMkbootimgFile(mkbootimg, version);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public File getRamdiskFile() {
+ return mDeviceBuild.getRamdiskFile();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getRamdiskVersion() {
+ return mDeviceBuild.getRamdiskVersion();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setRamdiskFile(File ramdisk, String version) {
+ mDeviceBuild.setRamdiskFile(ramdisk, version);
+ }
+
+ /**
+ * @param deviceBuild
+ */
+ public void setDeviceBuild(IDeviceBuildInfo deviceBuild) {
+ mDeviceBuild = deviceBuild;
}
/**
@@ -212,6 +267,15 @@
* {@inheritDoc}
*/
@Override
+ public void cleanUp() {
+ mDeviceBuild.cleanUp();
+ mAppBuildInfo.cleanUp();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public IBuildInfo clone() {
AppDeviceBuildInfo copy = new AppDeviceBuildInfo(getBuildId(), getTestTag(),
getBuildTargetName());
diff --git a/src/com/android/tradefed/build/BuildInfo.java b/src/com/android/tradefed/build/BuildInfo.java
index f2ce892..49c65d0 100644
--- a/src/com/android/tradefed/build/BuildInfo.java
+++ b/src/com/android/tradefed/build/BuildInfo.java
@@ -15,30 +15,57 @@
*/
package com.android.tradefed.build;
+import com.android.tradefed.log.LogUtil.CLog;
+import com.android.tradefed.util.FileUtil;
import com.android.tradefed.util.MultiMap;
import com.android.tradefed.util.UniqueMultiMap;
import com.google.common.base.Objects;
+import java.io.File;
+import java.io.IOException;
+import java.util.Hashtable;
import java.util.Map;
/**
* Generic implementation of a {@link IBuildInfo}.
*/
public class BuildInfo implements IBuildInfo {
-
- private String mBuildInfo = "0";
+ private String mBuildId = "0";
private String mTestTag = "stub";
private String mBuildTargetName = "stub";
private final UniqueMultiMap<String, String> mBuildAttributes =
new UniqueMultiMap<String, String>();
+ private Map<String, VersionedFile> mVersionedFileMap;
private String mBuildFlavor = null;
private String mBuildBranch = null;
private String mDeviceSerial = null;
/**
+ * Data structure containing the image file and related metadata
+ */
+ private static class VersionedFile {
+ private final File mFile;
+ private final String mVersion;
+
+ VersionedFile(File file, String version) {
+ mFile = file;
+ mVersion = version;
+ }
+
+ File getFile() {
+ return mFile;
+ }
+
+ String getVersion() {
+ return mVersion;
+ }
+ }
+
+ /**
* Creates a {@link BuildInfo} using default attribute values.
*/
public BuildInfo() {
+ mVersionedFileMap = new Hashtable<String, VersionedFile>();
}
/**
@@ -49,9 +76,10 @@
* @param buildTargetName the build target name
*/
public BuildInfo(String buildId, String testTag, String buildTargetName) {
- mBuildInfo = buildId;
+ mBuildId = buildId;
mTestTag = testTag;
mBuildTargetName = buildTargetName;
+ mVersionedFileMap = new Hashtable<String, VersionedFile>();
}
/**
@@ -62,6 +90,11 @@
BuildInfo(BuildInfo buildToCopy) {
this(buildToCopy.getBuildId(), buildToCopy.getTestTag(), buildToCopy.getBuildTargetName());
addAllBuildAttributes(buildToCopy);
+ try {
+ addAllFiles(buildToCopy);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
}
/**
@@ -69,7 +102,7 @@
*/
@Override
public String getBuildId() {
- return mBuildInfo;
+ return mBuildId;
}
/**
@@ -115,7 +148,7 @@
/**
* Helper method to copy build attributes, branch, and flavor from other build.
*/
- public void addAllBuildAttributes(BuildInfo build) {
+ protected void addAllBuildAttributes(BuildInfo build) {
mBuildAttributes.putAll(build.getAttributesMultiMap());
setBuildFlavor(build.getBuildFlavor());
setBuildBranch(build.getBuildBranch());
@@ -126,11 +159,82 @@
}
/**
+ * Helper method to copy all files from the other build.
+ * <p>
+ * Creates new hardlinks to the files so that each build will have a unique file path to the
+ * file.
+ * </p>
+ *
+ * @throws IOException if an exception is thrown when creating the hardlinks.
+ */
+ protected void addAllFiles(BuildInfo build) throws IOException {
+ for (Map.Entry<String, VersionedFile> fileEntry : build.getVersionedFileMap().entrySet()) {
+ File origFile = fileEntry.getValue().getFile();
+ File copyFile;
+ if (origFile.isDirectory()) {
+ copyFile = FileUtil.createTempDir(fileEntry.getKey());
+ FileUtil.recursiveHardlink(origFile, copyFile);
+ } else {
+ // Only using createTempFile to create a unique dest filename
+ copyFile = FileUtil.createTempFile(fileEntry.getKey(),
+ FileUtil.getExtension(origFile.getName()));
+ copyFile.delete();
+ FileUtil.hardlinkFile(origFile, copyFile);
+ }
+ setFile(fileEntry.getKey(), copyFile, fileEntry.getValue().getVersion());
+ }
+ }
+
+ protected Map<String, VersionedFile> getVersionedFileMap() {
+ return mVersionedFileMap;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public File getFile(String name) {
+ VersionedFile fileRecord = mVersionedFileMap.get(name);
+ if (fileRecord != null) {
+ return fileRecord.getFile();
+ }
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getVersion(String name) {
+ VersionedFile fileRecord = mVersionedFileMap.get(name);
+ if (fileRecord != null) {
+ return fileRecord.getVersion();
+ }
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setFile(String name, File file, String version) {
+ if (mVersionedFileMap.containsKey(name)) {
+ CLog.e("Device build already contains a file for %s in thread %s", name,
+ Thread.currentThread().getName());
+ return;
+ }
+ mVersionedFileMap.put(name, new VersionedFile(file, version));
+ }
+
+ /**
* {@inheritDoc}
*/
@Override
public void cleanUp() {
- // ignore
+ for (VersionedFile fileRecord : mVersionedFileMap.values()) {
+ FileUtil.recursiveDelete(fileRecord.getFile());
+ }
+ mVersionedFileMap.clear();
}
/**
@@ -138,11 +242,16 @@
*/
@Override
public IBuildInfo clone() {
- BuildInfo copy = new BuildInfo(mBuildInfo, mTestTag, mBuildTargetName);
+ BuildInfo copy = new BuildInfo(mBuildId, mTestTag, mBuildTargetName);
copy.addAllBuildAttributes(this);
+ try {
+ copy.addAllFiles(this);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
copy.setBuildBranch(mBuildBranch);
copy.setBuildFlavor(mBuildFlavor);
- // don't copy device serial
+
return copy;
}
@@ -191,7 +300,7 @@
*/
@Override
public int hashCode() {
- return Objects.hashCode(mBuildAttributes, mBuildBranch, mBuildFlavor, mBuildInfo,
+ return Objects.hashCode(mBuildAttributes, mBuildBranch, mBuildFlavor, mBuildId,
mBuildTargetName, mTestTag, mDeviceSerial);
}
@@ -213,7 +322,7 @@
return Objects.equal(mBuildAttributes, other.mBuildAttributes) &&
Objects.equal(mBuildBranch, other.mBuildBranch) &&
Objects.equal(mBuildFlavor, other.mBuildFlavor) &&
- Objects.equal(mBuildInfo, other.mBuildInfo) &&
+ Objects.equal(mBuildId, other.mBuildId) &&
Objects.equal(mBuildTargetName, other.mBuildTargetName) &&
Objects.equal(mTestTag, other.mTestTag) &&
Objects.equal(mDeviceSerial, other.mDeviceSerial);
diff --git a/src/com/android/tradefed/build/DeviceBuildInfo.java b/src/com/android/tradefed/build/DeviceBuildInfo.java
index ac97850..e1f9e9e 100644
--- a/src/com/android/tradefed/build/DeviceBuildInfo.java
+++ b/src/com/android/tradefed/build/DeviceBuildInfo.java
@@ -16,103 +16,47 @@
package com.android.tradefed.build;
-import com.android.ddmlib.Log;
-import com.android.tradefed.util.FileUtil;
-
import java.io.File;
import java.io.IOException;
-import java.util.Hashtable;
-import java.util.Map;
/**
* A {@link IBuildInfo} that represents a complete Android device build and (optionally) its tests.
*/
public class DeviceBuildInfo extends BuildInfo implements IDeviceBuildInfo {
- private static final String LOG_TAG = "DeviceBuildInfo";
-
- private Map<String, VersionedFile> mVersionedFileMap;
-
private static final String DEVICE_IMAGE_NAME = "device";
private static final String USERDATA_IMAGE_NAME = "userdata";
private static final String TESTDIR_IMAGE_NAME = "testsdir";
private static final String BASEBAND_IMAGE_NAME = "baseband";
private static final String BOOTLOADER_IMAGE_NAME = "bootloader";
private static final String OTA_IMAGE_NAME = "ota";
-
- /**
- * Data structure containing the image file and related metadata
- */
- private static class VersionedFile {
- private final File mFile;
- private final String mVersion;
-
- VersionedFile(File file, String version) {
- mFile = file;
- mVersion = version;
- }
-
- File getFile() {
- return mFile;
- }
-
- String getVersion() {
- return mVersion;
- }
- }
+ private static final String MKBOOTIMG_IMAGE_NAME = "mkbootimg";
+ private static final String RAMDISK_IMAGE_NAME = "ramdisk";
public DeviceBuildInfo() {
- mVersionedFileMap = new Hashtable<String, VersionedFile>();
+ super();
+ }
+
+ public DeviceBuildInfo(String buildId, String testTag, String buildTargetName) {
+ super(buildId, testTag, buildTargetName);
+ }
+
+ public DeviceBuildInfo(BuildInfo buildInfo) {
+ super(buildInfo);
}
/**
- * Creates a {@link DeviceBuildInfo}.
+ * {@inheritDoc}
*
- * @param buildId the unique build id
- * @param testTarget the test target name
- * @param buildName the build name
- */
- public DeviceBuildInfo(String buildId, String testTarget, String buildName) {
- super(buildId, testTarget, buildName);
- mVersionedFileMap = new Hashtable<String, VersionedFile>();
- }
-
- /**
- * {@inheritDoc}
+ * @return {@link #getDeviceImageVersion()} if not {@code null}, else
+ * {@link IBuildInfo#UNKNOWN_BUILD_ID}
+ *
+ * @see #getDeviceImageVersion()
*/
@Override
- public File getFile(String name) {
- VersionedFile fileRecord = mVersionedFileMap.get(name);
- if (fileRecord != null) {
- return fileRecord.getFile();
- }
- return null;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getVersion(String name) {
- VersionedFile fileRecord = mVersionedFileMap.get(name);
- if (fileRecord != null) {
- return fileRecord.getVersion();
- }
- return null;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setFile(String name, File file, String version) {
- if (mVersionedFileMap.containsKey(name)) {
- Log.e(LOG_TAG, String.format(
- "Device build already contains a file for %s in thread %s", name,
- Thread.currentThread().getName()));
- return;
- }
- mVersionedFileMap.put(name, new VersionedFile(file, version));
+ public String getDeviceBuildId() {
+ String buildId = getDeviceImageVersion();
+ return buildId == null ? UNKNOWN_BUILD_ID : buildId;
}
/**
@@ -127,8 +71,16 @@
* {@inheritDoc}
*/
@Override
- public void setDeviceImageFile(File deviceImageFile) {
- setFile(DEVICE_IMAGE_NAME, deviceImageFile, getBuildId());
+ public String getDeviceImageVersion() {
+ return getVersion(DEVICE_IMAGE_NAME);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setDeviceImageFile(File deviceImageFile, String version) {
+ setFile(DEVICE_IMAGE_NAME, deviceImageFile, version);
}
/**
@@ -143,8 +95,16 @@
* {@inheritDoc}
*/
@Override
- public void setUserDataImageFile(File userDataFile) {
- setFile(USERDATA_IMAGE_NAME, userDataFile, getBuildId());
+ public String getUserDataImageVersion() {
+ return getVersion(USERDATA_IMAGE_NAME);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setUserDataImageFile(File userDataFile, String version) {
+ setFile(USERDATA_IMAGE_NAME, userDataFile, version);
}
/**
@@ -159,8 +119,16 @@
* {@inheritDoc}
*/
@Override
- public void setTestsDir(File testsDir) {
- setFile(TESTDIR_IMAGE_NAME, testsDir, getBuildId());
+ public String getTestsDirVersion() {
+ return getVersion(TESTDIR_IMAGE_NAME);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setTestsDir(File testsDir, String version) {
+ setFile(TESTDIR_IMAGE_NAME, testsDir, version);
}
/**
@@ -223,49 +191,82 @@
* {@inheritDoc}
*/
@Override
- public void setOtaPackageFile(File otaFile) {
- setFile(OTA_IMAGE_NAME, otaFile, getBuildId());
+ public String getOtaPackageVersion() {
+ return getVersion(OTA_IMAGE_NAME);
}
/**
* {@inheritDoc}
*/
@Override
- public void cleanUp() {
- for (VersionedFile fileRecord : mVersionedFileMap.values()) {
- FileUtil.recursiveDelete(fileRecord.getFile());
- }
- mVersionedFileMap.clear();
+ public void setOtaPackageFile(File otaFile, String version) {
+ setFile(OTA_IMAGE_NAME, otaFile, version);
}
/**
* {@inheritDoc}
*/
@Override
- public IBuildInfo clone() {
+ public File getMkbootimgFile() {
+ return getFile(MKBOOTIMG_IMAGE_NAME);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getMkbootimgVersion() {
+ return getVersion(MKBOOTIMG_IMAGE_NAME);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setMkbootimgFile(File mkbootimg, String version) {
+ setFile(MKBOOTIMG_IMAGE_NAME, mkbootimg, version);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public File getRamdiskFile() {
+ return getFile(RAMDISK_IMAGE_NAME);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getRamdiskVersion() {
+ return getVersion(RAMDISK_IMAGE_NAME);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setRamdiskFile(File ramdisk, String version) {
+ setFile(RAMDISK_IMAGE_NAME, ramdisk, version);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public IBuildInfo clone() {
+ DeviceBuildInfo copy = new DeviceBuildInfo(getBuildId(), getTestTag(),
+ getBuildTargetName());
+ copy.addAllBuildAttributes(this);
try {
- DeviceBuildInfo copy = new DeviceBuildInfo(getBuildId(), getTestTag(),
- getBuildTargetName());
- copy.addAllBuildAttributes(this);
- for (Map.Entry<String, VersionedFile> fileEntry : mVersionedFileMap.entrySet()) {
- File origFile = fileEntry.getValue().getFile();
- File hardlinkFile;
- if (origFile.isDirectory()) {
- hardlinkFile = FileUtil.createTempDir(fileEntry.getKey());
- FileUtil.recursiveHardlink(origFile, hardlinkFile);
- } else {
- // Only using createTempFile to create a unique dest filename
- hardlinkFile = FileUtil.createTempFile(fileEntry.getKey(),
- FileUtil.getExtension(origFile.getName()));
- hardlinkFile.delete();
- FileUtil.hardlinkFile(origFile, hardlinkFile);
- }
- copy.mVersionedFileMap.put(fileEntry.getKey(), new VersionedFile(hardlinkFile,
- fileEntry.getValue().getVersion()));
- }
- return copy;
+ copy.addAllFiles(this);
} catch (IOException e) {
throw new RuntimeException(e);
}
+ copy.setBuildBranch(getBuildBranch());
+ copy.setBuildFlavor(getBuildFlavor());
+
+ return copy;
}
}
diff --git a/src/com/android/tradefed/build/DeviceFolderBuildInfo.java b/src/com/android/tradefed/build/DeviceFolderBuildInfo.java
index 941308e..f21e454 100644
--- a/src/com/android/tradefed/build/DeviceFolderBuildInfo.java
+++ b/src/com/android/tradefed/build/DeviceFolderBuildInfo.java
@@ -43,6 +43,86 @@
* {@inheritDoc}
*/
@Override
+ public String getDeviceBuildId() {
+ return mDeviceBuild.getDeviceBuildId();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public File getDeviceImageFile() {
+ return mDeviceBuild.getDeviceImageFile();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getDeviceImageVersion() {
+ return mDeviceBuild.getDeviceImageVersion();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setDeviceImageFile(File deviceImageFile, String version) {
+ mDeviceBuild.setDeviceImageFile(deviceImageFile, version);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public File getUserDataImageFile() {
+ return mDeviceBuild.getUserDataImageFile();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getUserDataImageVersion() {
+ return mDeviceBuild.getUserDataImageVersion();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setUserDataImageFile(File userDataFile, String version) {
+ mDeviceBuild.setUserDataImageFile(userDataFile, version);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public File getTestsDir() {
+ return mDeviceBuild.getTestsDir();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getTestsDirVersion() {
+ return mDeviceBuild.getTestsDirVersion();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setTestsDir(File testsDir, String version) {
+ mDeviceBuild.setTestsDir(testsDir, version);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public File getBasebandImageFile() {
return mDeviceBuild.getBasebandImageFile();
}
@@ -59,6 +139,14 @@
* {@inheritDoc}
*/
@Override
+ public void setBasebandImage(File basebandFile, String version) {
+ mDeviceBuild.setBasebandImage(basebandFile, version);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public File getBootloaderImageFile() {
return mDeviceBuild.getBootloaderImageFile();
}
@@ -75,54 +163,6 @@
* {@inheritDoc}
*/
@Override
- public File getDeviceImageFile() {
- return mDeviceBuild.getDeviceImageFile();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public File getFile(String name) {
- return mDeviceBuild.getFile(name);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getVersion(String name) {
- return mDeviceBuild.getVersion(name);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public File getTestsDir() {
- return mDeviceBuild.getTestsDir();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public File getUserDataImageFile() {
- return mDeviceBuild.getUserDataImageFile();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setBasebandImage(File basebandFile, String version) {
- mDeviceBuild.setBasebandImage(basebandFile, version);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
public void setBootloaderImageFile(File bootloaderImgFile, String version) {
mDeviceBuild.setBootloaderImageFile(bootloaderImgFile, version);
}
@@ -131,38 +171,80 @@
* {@inheritDoc}
*/
@Override
- public void setDeviceImageFile(File deviceImageFile) {
- mDeviceBuild.setDeviceImageFile(deviceImageFile);
+ public File getOtaPackageFile() {
+ return mDeviceBuild.getOtaPackageFile();
}
/**
* {@inheritDoc}
*/
@Override
- public void setFile(String imageName, File file, String version) {
- mDeviceBuild.setFile(imageName, file, version);
+ public String getOtaPackageVersion() {
+ return mDeviceBuild.getOtaPackageVersion();
}
/**
* {@inheritDoc}
*/
@Override
- public void setTestsDir(File testsDir) {
- mDeviceBuild.setTestsDir(testsDir);
+ public void setOtaPackageFile(File otaFile, String version) {
+ mDeviceBuild.setOtaPackageFile(otaFile, version);
}
/**
* {@inheritDoc}
*/
@Override
- public void setUserDataImageFile(File userDataFile) {
- mDeviceBuild.setUserDataImageFile(userDataFile);
+ public File getMkbootimgFile() {
+ return mDeviceBuild.getMkbootimgFile();
}
/**
* {@inheritDoc}
*/
@Override
+ public String getMkbootimgVersion() {
+ return mDeviceBuild.getMkbootimgVersion();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setMkbootimgFile(File mkbootimg, String version) {
+ mDeviceBuild.setMkbootimgFile(mkbootimg, version);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public File getRamdiskFile() {
+ return mDeviceBuild.getRamdiskFile();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getRamdiskVersion() {
+ return mDeviceBuild.getRamdiskVersion();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void setRamdiskFile(File ramdisk, String version) {
+ mDeviceBuild.setRamdiskFile(ramdisk, version);
+ }
+
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public File getRootDir() {
return mFolderBuild.getRootDir();
}
@@ -189,21 +271,6 @@
mDeviceBuild = deviceBuild;
}
- /**
- * {@inheritDoc}
- */
- @Override
- public File getOtaPackageFile() {
- return mDeviceBuild.getOtaPackageFile();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setOtaPackageFile(File otaFile) {
- mDeviceBuild.setOtaPackageFile(otaFile);
- }
/**
* {@inheritDoc}
diff --git a/src/com/android/tradefed/build/IBuildInfo.java b/src/com/android/tradefed/build/IBuildInfo.java
index 7331040..cd71c8c 100644
--- a/src/com/android/tradefed/build/IBuildInfo.java
+++ b/src/com/android/tradefed/build/IBuildInfo.java
@@ -17,6 +17,7 @@
import com.android.tradefed.device.ITestDevice;
+import java.io.File;
import java.util.Map;
/**
@@ -109,13 +110,37 @@
*/
public void addBuildAttribute(String attributeName, String attributeValue);
+
+ /**
+ * Helper method to retrieve a file with given name.
+ * @param name
+ * @return the image file or <code>null</code> if not found
+ */
+ public File getFile(String name);
+
+ /**
+ * Helper method to retrieve a file version with given name.
+ * @param name
+ * @return the image version or <code>null</code> if not found
+ */
+ public String getVersion(String name);
+
+ /**
+ * Stores an file with given name in this build info.
+ *
+ * @param name the unique name of the file
+ * @param file the local {@link File}
+ * @param version the file version
+ */
+ public void setFile(String name, File file, String version);
+
/**
* Clean up any temporary build files
*/
public void cleanUp();
/**
- * @return
+ * Clones the {@link IBuildInfo} object.
*/
public IBuildInfo clone();
diff --git a/src/com/android/tradefed/build/IDeviceBuildInfo.java b/src/com/android/tradefed/build/IDeviceBuildInfo.java
index afcf2ff..3333409 100644
--- a/src/com/android/tradefed/build/IDeviceBuildInfo.java
+++ b/src/com/android/tradefed/build/IDeviceBuildInfo.java
@@ -24,27 +24,10 @@
public interface IDeviceBuildInfo extends IBuildInfo {
/**
- * Helper method to retrieve a file with given name.
- * @param name
- * @return the image file or <code>null</code> if not found
+ * Returns the unique identifier of platform build under test. Should never be null. Defaults to
+ * {@link #UNKNOWN_BUILD_ID}.
*/
- public File getFile(String name);
-
- /**
- * Helper method to retrieve a file version with given name.
- * @param name
- * @return the image version or <code>null</code> if not found
- */
- public String getVersion(String name);
-
- /**
- * Stores an file with given name in this build info
- *
- * @param name the unique name of the file
- * @param file the local {@link File}
- * @param version the file version
- */
- public void setFile(String name, File file, String version);
+ public String getDeviceBuildId();
/**
* Get the local device image zip file.
@@ -52,11 +35,16 @@
public File getDeviceImageFile();
/**
+ * Get the local device image zip version.
+ */
+ public String getDeviceImageVersion();
+
+ /**
* Set the device system image file to use.
*
* @param deviceImageFile
*/
- public void setDeviceImageFile(File deviceImageFile);
+ public void setDeviceImageFile(File deviceImageFile, String version);
/**
* Get the local test userdata image file.
@@ -64,11 +52,16 @@
public File getUserDataImageFile();
/**
+ * Get the local test userdata image version.
+ */
+ public String getUserDataImageVersion();
+
+ /**
* Set the user data image file to use.
*
* @param userDataFile
*/
- public void setUserDataImageFile(File userDataFile);
+ public void setUserDataImageFile(File userDataFile, String version);
/**
* Get the local path to the extracted tests.zip file contents.
@@ -76,11 +69,16 @@
public File getTestsDir();
/**
+ * Get the extracted tests.zip version.
+ */
+ public String getTestsDirVersion();
+
+ /**
* Set local path to the extracted tests.zip file contents.
*
* @param testsZipFile
*/
- public void setTestsDir(File testsZipFile);
+ public void setTestsDir(File testsZipFile, String version);
/**
* Get the local baseband image file.
@@ -119,17 +117,52 @@
public void setBootloaderImageFile(File bootloaderImgFile, String version);
/**
- * Get the device OTA package zip file
+ * Get the device OTA package zip file.
*/
public File getOtaPackageFile();
/**
- * Set the device OTA package zip file
+ * Get the device OTA package zip version.
*/
- public void setOtaPackageFile(File otaFile);
+ public String getOtaPackageVersion();
/**
- * Removes all temporary files
+ * Set the device OTA package zip file.
+ */
+ public void setOtaPackageFile(File otaFile, String version);
+
+ /**
+ * Gets the mkbootimg file used to create the kernel image.
+ */
+ public File getMkbootimgFile();
+
+ /**
+ * Gets the mkbootimg version.
+ */
+ public String getMkbootimgVersion();
+
+ /**
+ * Sets the mkbootimg file used to create the kernel image.
+ */
+ public void setMkbootimgFile(File mkbootimg, String version);
+
+ /**
+ * Gets the ramdisk file used to create the kernel image.
+ */
+ public File getRamdiskFile();
+
+ /**
+ * Gets the ramdisk version.
+ */
+ public String getRamdiskVersion();
+
+ /**
+ * Gets the ramdisk file used to create the kernel image.
+ */
+ public void setRamdiskFile(File ramdisk, String version);
+
+ /**
+ * Removes all temporary files.
*/
@Override
public void cleanUp();
diff --git a/src/com/android/tradefed/build/LocalBuildProvider.java b/src/com/android/tradefed/build/LocalBuildProvider.java
index 4a69bd0..658dc05 100644
--- a/src/com/android/tradefed/build/LocalBuildProvider.java
+++ b/src/com/android/tradefed/build/LocalBuildProvider.java
@@ -63,15 +63,15 @@
buildInfo.addAllBuildAttributes(stubBuild);
try {
- buildInfo.setDeviceImageFile(mDeviceImageFile);
+ buildInfo.setDeviceImageFile(mDeviceImageFile, stubBuild.getBuildId());
if (mTestsDir != null) {
- buildInfo.setTestsDir(mTestsDir);
+ buildInfo.setTestsDir(mTestsDir, stubBuild.getBuildId());
} else {
CLog.d("Null Test Dir, if you want to pass a test dir, use --%s",
TEST_DIR_OPTION_NAME);
}
if (mUserDataFile != null) {
- buildInfo.setUserDataImageFile(mUserDataFile);
+ buildInfo.setUserDataImageFile(mUserDataFile, stubBuild.getBuildId());
} else {
CLog.d("Null User Data File, if you want to pass a user data file, use --%s",
DATA_FILE_OPTION_NAME);
diff --git a/src/com/android/tradefed/build/OtaZipfileBuildProvider.java b/src/com/android/tradefed/build/OtaZipfileBuildProvider.java
index 050f160..74c5353 100644
--- a/src/com/android/tradefed/build/OtaZipfileBuildProvider.java
+++ b/src/com/android/tradefed/build/OtaZipfileBuildProvider.java
@@ -51,7 +51,7 @@
}
String bid = buildProp.getProperty("ro.build.version.incremental");
IDeviceBuildInfo buildInfo = new DeviceBuildInfo(bid, "flasher", bid);
- buildInfo.setOtaPackageFile(new File(getOtaPath()));
+ buildInfo.setOtaPackageFile(new File(getOtaPath()), bid);
return buildInfo;
}
diff --git a/src/com/android/tradefed/targetprep/DeviceFlashPreparer.java b/src/com/android/tradefed/targetprep/DeviceFlashPreparer.java
index 9436611..3710e1b 100644
--- a/src/com/android/tradefed/targetprep/DeviceFlashPreparer.java
+++ b/src/com/android/tradefed/targetprep/DeviceFlashPreparer.java
@@ -117,7 +117,7 @@
// assume this is a build problem
throw new BuildError(String.format(
"Device %s did not become available after flashing %s",
- device.getSerialNumber(), buildInfo.getBuildId()));
+ device.getSerialNumber(), deviceBuild.getDeviceBuildId()));
}
device.postBootSetup();
}
diff --git a/src/com/android/tradefed/targetprep/FastbootDeviceFlasher.java b/src/com/android/tradefed/targetprep/FastbootDeviceFlasher.java
index 188156a..32db264 100644
--- a/src/com/android/tradefed/targetprep/FastbootDeviceFlasher.java
+++ b/src/com/android/tradefed/targetprep/FastbootDeviceFlasher.java
@@ -85,7 +85,7 @@
DeviceNotAvailableException {
CLog.i("Flashing device %s with build %s", device.getSerialNumber(),
- deviceBuild.getBuildId());
+ deviceBuild.getDeviceBuildId());
// get system build id before booting into fastboot
String systemBuildId = device.getBuildId();
@@ -142,7 +142,7 @@
if (resourceParser.getRequiredBoards() == null) {
throw new TargetSetupError(String.format("Build %s is missing required board info.",
- localBuild.getBuildId()));
+ localBuild.getDeviceBuildId()));
}
String deviceProductType = device.getProductType();
if (deviceProductType == null) {
@@ -413,8 +413,8 @@
protected boolean checkAndFlashSystem(ITestDevice device, String systemBuildId,
IDeviceBuildInfo deviceBuild) throws DeviceNotAvailableException, TargetSetupError {
if (mForceSystemFlash ||
- (systemBuildId != null && ! systemBuildId.equals(deviceBuild.getBuildId()))) {
- CLog.i("Flashing system %s", deviceBuild.getBuildId());
+ (systemBuildId != null && !systemBuildId.equals(deviceBuild.getDeviceBuildId()))) {
+ CLog.i("Flashing system %s", deviceBuild.getDeviceBuildId());
flashSystem(device, deviceBuild);
return true;
} else {
diff --git a/src/com/android/tradefed/targetprep/SystemUpdaterDeviceFlasher.java b/src/com/android/tradefed/targetprep/SystemUpdaterDeviceFlasher.java
index 3c63a8a..f799915 100644
--- a/src/com/android/tradefed/targetprep/SystemUpdaterDeviceFlasher.java
+++ b/src/com/android/tradefed/targetprep/SystemUpdaterDeviceFlasher.java
@@ -21,6 +21,7 @@
import com.android.tradefed.device.DeviceNotAvailableException;
import com.android.tradefed.device.ITestDevice;
import com.android.tradefed.log.LogUtil.CLog;
+import com.android.tradefed.targetprep.IDeviceFlasher.UserDataFlashOption;
import java.io.File;
import java.util.Arrays;
@@ -61,8 +62,8 @@
@Override
public void flash(ITestDevice device, IDeviceBuildInfo deviceBuild)
throws DeviceNotAvailableException, TargetSetupError {
- CLog.i("Flashing device " + device.getSerialNumber() + " with build "
- + deviceBuild.getBuildId());
+ CLog.i("Flashing device %s with build %s", device.getSerialNumber(),
+ deviceBuild.getDeviceBuildId());
// TODO could add a check for bootloader versions and install
// the one produced by the build server @ the current build if the one
@@ -81,17 +82,17 @@
throws DeviceNotAvailableException, TargetSetupError {
// FIXME same high level logic as in
// FastbootDeviceFlasher#checkAndFlashSystem, could be de-duped
- if (!mForceSystemFlash && deviceBuild.getBuildId().equals(device.getBuildId())) {
- CLog.i("System is already version " + device.getBuildId() + ", skipping install");
+ if (!mForceSystemFlash && deviceBuild.getDeviceBuildId().equals(device.getBuildId())) {
+ CLog.i("System is already version %s, skipping install" , device.getBuildId());
// reboot
return false;
}
- CLog.i("Flashing system " + deviceBuild.getBuildId() + " on device "
- + device.getSerialNumber());
+ CLog.i("Flashing system %s on device %s", deviceBuild.getDeviceBuildId(),
+ device.getSerialNumber());
File otaPackageFile = deviceBuild.getOtaPackageFile();
if (otaPackageFile == null) {
throw new TargetSetupError("No OTA package file present for build "
- + deviceBuild.getBuildId());
+ + deviceBuild.getDeviceBuildId());
}
if (!device.pushFile(otaPackageFile, "/cache/update.zip")) {
throw new TargetSetupError("Could not push OTA file to the target.");
diff --git a/tests/src/com/android/tradefed/build/BuildInfoTest.java b/tests/src/com/android/tradefed/build/BuildInfoTest.java
new file mode 100644
index 0000000..98ea4cd
--- /dev/null
+++ b/tests/src/com/android/tradefed/build/BuildInfoTest.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2011 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.tradefed.build;
+
+import com.android.tradefed.util.FileUtil;
+
+import junit.framework.TestCase;
+
+import java.io.File;
+
+/**
+ * Unit tests for {@link BuildInfo}.
+ */
+public class BuildInfoTest extends TestCase {
+ private static final String VERSION = "2";
+ private static final String ATTRIBUTE_KEY = "attribute";
+ private static final String FILE_KEY = "file";
+
+ private BuildInfo mBuildInfo;
+ private File mFile;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ mBuildInfo = new BuildInfo("1", "build", "target");
+ mBuildInfo.addBuildAttribute(ATTRIBUTE_KEY, "value");
+ mFile = FileUtil.createTempFile("image", "tmp");
+ FileUtil.writeToFile("filedata", mFile);
+ mBuildInfo.setFile(FILE_KEY, mFile, VERSION);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ if (mFile != null && mFile.exists()) {
+ mFile.delete();
+ }
+ }
+
+ /**
+ * Test method for {@link BuildInfo#clone()}.
+ */
+ public void testClone() throws Exception {
+ BuildInfo copy = (BuildInfo) mBuildInfo.clone();
+ assertEquals(mBuildInfo.getBuildAttributes().get(ATTRIBUTE_KEY),
+ copy.getBuildAttributes().get(ATTRIBUTE_KEY));
+ try {
+ // ensure a copy of mImageFile was created
+ assertEquals(VERSION, copy.getVersion(FILE_KEY));
+ assertTrue(!mFile.getAbsolutePath().equals(copy.getFile(FILE_KEY)));
+ assertTrue(FileUtil.compareFileContents(mFile, copy.getFile(FILE_KEY)));
+ } finally {
+ FileUtil.deleteFile(copy.getFile(FILE_KEY));
+ }
+ }
+
+ /**
+ * Test method for {@link BuildInfo#cleanUp()}.
+ */
+ public void testCleanUp() {
+ assertTrue(mBuildInfo.getFile(FILE_KEY).exists());
+ mBuildInfo.cleanUp();
+ assertNull(mBuildInfo.getFile(FILE_KEY));
+ assertFalse(mFile.exists());
+ }
+}
diff --git a/tests/src/com/android/tradefed/build/DeviceBuildInfoTest.java b/tests/src/com/android/tradefed/build/DeviceBuildInfoTest.java
index d81407a..4e10d3a 100644
--- a/tests/src/com/android/tradefed/build/DeviceBuildInfoTest.java
+++ b/tests/src/com/android/tradefed/build/DeviceBuildInfoTest.java
@@ -64,6 +64,9 @@
}
}
+ /**
+ * Test method for {@link DeviceBuildInfo#cleanUp()}.
+ */
public void testCleanUp() {
assertTrue(mBuildInfo.getBasebandImageFile().exists());
mBuildInfo.cleanUp();
diff --git a/tests/src/com/android/tradefed/device/TestDeviceTest.java b/tests/src/com/android/tradefed/device/TestDeviceTest.java
index 6bbff9e..aa3cf8e 100644
--- a/tests/src/com/android/tradefed/device/TestDeviceTest.java
+++ b/tests/src/com/android/tradefed/device/TestDeviceTest.java
@@ -891,7 +891,6 @@
mMockIDevice);
setEnableAdbRootExpectations();
setEncryptedUnsupportedExpectations();
- setEncryptedUnsupportedExpectations();
EasyMock.expect(mMockMonitor.waitForDeviceAvailable(EasyMock.anyLong())).andReturn(null);
mMockRecovery.recoverDevice(mMockMonitor, false);
replayMocks();
diff --git a/tests/src/com/android/tradefed/targetprep/FastbootDeviceFlasherTest.java b/tests/src/com/android/tradefed/targetprep/FastbootDeviceFlasherTest.java
index 7350a02..0bae3be 100644
--- a/tests/src/com/android/tradefed/targetprep/FastbootDeviceFlasherTest.java
+++ b/tests/src/com/android/tradefed/targetprep/FastbootDeviceFlasherTest.java
@@ -57,8 +57,8 @@
EasyMock.expect(mMockDevice.getProductType()).andStubReturn(TEST_STRING);
EasyMock.expect(mMockDevice.getBuildId()).andStubReturn("1");
mMockBuildInfo = new DeviceBuildInfo("0", TEST_STRING, TEST_STRING);
- mMockBuildInfo.setDeviceImageFile(new File(TEST_STRING));
- mMockBuildInfo.setUserDataImageFile(new File(TEST_STRING));
+ mMockBuildInfo.setDeviceImageFile(new File(TEST_STRING), "0");
+ mMockBuildInfo.setUserDataImageFile(new File(TEST_STRING), "0");
mMockRetriever = EasyMock.createNiceMock(IFlashingResourcesRetriever.class);
mMockParser = EasyMock.createNiceMock(IFlashingResourcesParser.class);
diff --git a/tests/src/com/android/tradefed/targetprep/SystemUpdaterDeviceFlasherTest.java b/tests/src/com/android/tradefed/targetprep/SystemUpdaterDeviceFlasherTest.java
index 445f67e..3883058 100644
--- a/tests/src/com/android/tradefed/targetprep/SystemUpdaterDeviceFlasherTest.java
+++ b/tests/src/com/android/tradefed/targetprep/SystemUpdaterDeviceFlasherTest.java
@@ -99,7 +99,7 @@
private void yieldDifferentBuilds(boolean different) {
EasyMock.expect(mMockDevice.getBuildId()).andReturn(A_BUILD_ID).anyTimes();
- EasyMock.expect(mMockDeviceBuild.getBuildId()).andReturn(
+ EasyMock.expect(mMockDeviceBuild.getDeviceBuildId()).andReturn(
(different ? A_BUILD_ID + 1 : A_BUILD_ID)).anyTimes();
}
}