Flatten DeviceFolderBuildInfo structure
Instead of relying on two sub-builds, keep everything in
the current instance. This avoids issue with special casing
properties and cloning. Everything is part of the parent
build directly.
Test: unit tests
run gsi tests
Bug: 112733423
Bug: 77241243
Change-Id: I3e2b162b6e033b36d8f70d8b92dd34448f221f92
diff --git a/src/com/android/tradefed/build/AppDeviceBuildInfo.java b/src/com/android/tradefed/build/AppDeviceBuildInfo.java
index 315dee7..5ccef4e 100644
--- a/src/com/android/tradefed/build/AppDeviceBuildInfo.java
+++ b/src/com/android/tradefed/build/AppDeviceBuildInfo.java
@@ -17,7 +17,6 @@
package com.android.tradefed.build;
import com.android.tradefed.build.BuildInfoKey.BuildInfoFileKey;
-import com.android.tradefed.util.MultiMap;
import java.io.File;
import java.util.ArrayList;
@@ -58,23 +57,11 @@
/** Copy all the files from the {@link IAppBuildInfo}. */
public void setAppBuild(IAppBuildInfo appBuild) {
- MultiMap<String, VersionedFile> versionedMap =
- ((BuildInfo) appBuild).getVersionedFileMapFull();
- for (String versionedFile : versionedMap.keySet()) {
- for (VersionedFile vFile : versionedMap.get(versionedFile)) {
- setFile(versionedFile, vFile.getFile(), vFile.getVersion());
- }
- }
+ copyAllFileFrom((BuildInfo) appBuild);
}
/** Copy all the files from the {@link IDeviceBuildInfo}. */
public void setDeviceBuild(IDeviceBuildInfo deviceBuild) {
- MultiMap<String, VersionedFile> versionedMap =
- ((BuildInfo) deviceBuild).getVersionedFileMapFull();
- for (String versionedFile : versionedMap.keySet()) {
- for (VersionedFile vFile : versionedMap.get(versionedFile)) {
- setFile(versionedFile, vFile.getFile(), vFile.getVersion());
- }
- }
+ copyAllFileFrom((BuildInfo) deviceBuild);
}
}
diff --git a/src/com/android/tradefed/build/BuildInfo.java b/src/com/android/tradefed/build/BuildInfo.java
index 99b8848..4459892 100644
--- a/src/com/android/tradefed/build/BuildInfo.java
+++ b/src/com/android/tradefed/build/BuildInfo.java
@@ -555,6 +555,16 @@
return protoBuilder.build();
}
+ /** Copy all the {@link VersionedFile} from a given build to this one. */
+ public final void copyAllFileFrom(BuildInfo build) {
+ MultiMap<String, VersionedFile> versionedMap = build.getVersionedFileMapFull();
+ for (String versionedFile : versionedMap.keySet()) {
+ for (VersionedFile vFile : versionedMap.get(versionedFile)) {
+ setFile(versionedFile, vFile.getFile(), vFile.getVersion());
+ }
+ }
+ }
+
/** Special serialization to handle the new underlying type. */
private void writeObject(ObjectOutputStream outputStream) throws IOException {
outputStream.defaultWriteObject();
diff --git a/src/com/android/tradefed/build/DeviceFolderBuildInfo.java b/src/com/android/tradefed/build/DeviceFolderBuildInfo.java
index cc4d78b..33b90ae 100644
--- a/src/com/android/tradefed/build/DeviceFolderBuildInfo.java
+++ b/src/com/android/tradefed/build/DeviceFolderBuildInfo.java
@@ -15,20 +15,18 @@
*/
package com.android.tradefed.build;
+import com.android.tradefed.build.BuildInfoKey.BuildInfoFileKey;
+
import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
/**
* A {@link IDeviceBuildInfo} that also contains other build artifacts contained in a directory on
* the local filesystem.
*/
-public class DeviceFolderBuildInfo extends BuildInfo implements IDeviceBuildInfo, IFolderBuildInfo {
+public class DeviceFolderBuildInfo extends DeviceBuildInfo
+ implements IDeviceBuildInfo, IFolderBuildInfo {
private static final long serialVersionUID = BuildSerializedVersion.VERSION;
- private IDeviceBuildInfo mDeviceBuild;
- private IFolderBuildInfo mFolderBuild;
/**
* @see DeviceBuildInfo#DeviceBuildInfo(String, String)
@@ -41,225 +39,7 @@
* @see DeviceBuildInfo#DeviceBuildInfo()
*/
public DeviceFolderBuildInfo() {
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getDeviceBuildId() {
- return mDeviceBuild.getDeviceBuildId();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getDeviceBuildFlavor() {
- return mDeviceBuild.getDeviceBuildFlavor();
- }
-
- /**
- * {@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();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getBasebandVersion() {
- return mDeviceBuild.getBasebandVersion();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setBasebandImage(File basebandFile, String version) {
- mDeviceBuild.setBasebandImage(basebandFile, version);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public File getBootloaderImageFile() {
- return mDeviceBuild.getBootloaderImageFile();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getBootloaderVersion() {
- return mDeviceBuild.getBootloaderVersion();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void setBootloaderImageFile(File bootloaderImgFile, String version) {
- mDeviceBuild.setBootloaderImageFile(bootloaderImgFile, version);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public File getOtaPackageFile() {
- return mDeviceBuild.getOtaPackageFile();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public String getOtaPackageVersion() {
- return mDeviceBuild.getOtaPackageVersion();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- 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);
- }
-
- /** {@inheritDoc} */
- @Override
- public Collection<VersionedFile> getFiles() {
- Collection<VersionedFile> rootFiles = super.getFiles();
- Collection<VersionedFile> deviceFiles = mDeviceBuild.getFiles();
- List<VersionedFile> combinedFiles = new ArrayList<VersionedFile>();
- combinedFiles.addAll(rootFiles);
- combinedFiles.addAll(deviceFiles);
- return combinedFiles;
+ super();
}
/**
@@ -267,7 +47,7 @@
*/
@Override
public File getRootDir() {
- return mFolderBuild.getRootDir();
+ return getFile(BuildInfoFileKey.ROOT_DIRECTORY);
}
/**
@@ -275,59 +55,19 @@
*/
@Override
public void setRootDir(File rootDir) {
- mFolderBuild.setRootDir(rootDir);
+ setFile(
+ BuildInfoFileKey.ROOT_DIRECTORY,
+ rootDir,
+ BuildInfoFileKey.ROOT_DIRECTORY.getFileKey());
}
- /**
- * @param folderBuild
- */
+ /** Copy all the files from the {@link IFolderBuildInfo}. */
public void setFolderBuild(IFolderBuildInfo folderBuild) {
- mFolderBuild = folderBuild;
+ copyAllFileFrom((BuildInfo) folderBuild);
}
- /**
- * @param deviceBuild
- */
+ /** Copy all the files from the {@link IDeviceBuildInfo}. */
public void setDeviceBuild(IDeviceBuildInfo deviceBuild) {
- mDeviceBuild = deviceBuild;
- }
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void cleanUp() {
- mDeviceBuild.cleanUp();
- mFolderBuild.cleanUp();
- }
-
- /** {@inheritDoc} */
- @Override
- public void setProperties(BuildInfoProperties... properties) {
- super.setProperties(properties);
- if (mDeviceBuild != null) {
- mDeviceBuild.setProperties(properties);
- }
- if (mFolderBuild != null) {
- mFolderBuild.setProperties(properties);
- }
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public IBuildInfo clone() {
- DeviceFolderBuildInfo copy = new DeviceFolderBuildInfo(getBuildId(), getBuildTargetName());
- copy.addAllBuildAttributes(this);
- copy.setProperties(this.getProperties().toArray(new BuildInfoProperties[0]));
-
- IDeviceBuildInfo deviceBuildClone = (IDeviceBuildInfo) mDeviceBuild.clone();
- copy.setDeviceBuild(deviceBuildClone);
- IFolderBuildInfo folderBuildClone = (IFolderBuildInfo) mFolderBuild.clone();
- copy.setFolderBuild(folderBuildClone);
-
- return copy;
+ copyAllFileFrom((BuildInfo) deviceBuild);
}
}
diff --git a/tests/src/com/android/tradefed/build/DeviceFolderBuildInfoTest.java b/tests/src/com/android/tradefed/build/DeviceFolderBuildInfoTest.java
index 50b60de..ee36c31 100644
--- a/tests/src/com/android/tradefed/build/DeviceFolderBuildInfoTest.java
+++ b/tests/src/com/android/tradefed/build/DeviceFolderBuildInfoTest.java
@@ -136,4 +136,28 @@
}
}
}
+
+ /**
+ * Test that when setting the device and folger build, the DeviceFolderBuildInfo gets all their
+ * file.
+ */
+ @Test
+ public void testSettingBuilds() {
+ IFolderBuildInfo folderBuilder = new FolderBuildInfo("5555", "build_target2");
+ folderBuilder.setRootDir(new File("package"));
+ assertNotNull(folderBuilder.getRootDir());
+ // Original build doesn't have the root dir yet.
+ assertNull(mDeviceFolderBuildInfo.getRootDir());
+ mDeviceFolderBuildInfo.setFolderBuild(folderBuilder);
+ // folderBuild gave its file to the main build
+ assertNotNull(mDeviceFolderBuildInfo.getRootDir());
+
+ IDeviceBuildInfo deviceBuild = new DeviceBuildInfo("3333", "build_target3");
+ deviceBuild.setBootloaderImageFile(new File("bootloader"), "v2");
+ assertNull(mDeviceFolderBuildInfo.getBootloaderImageFile());
+
+ mDeviceFolderBuildInfo.setDeviceBuild(deviceBuild);
+ // deviceBuild gave its file to the main build
+ assertNotNull(mDeviceFolderBuildInfo.getBootloaderImageFile());
+ }
}