Update CompatibilityBuildProvider to populate testsDir
Ensure the DeviceBuildInfo populate the testsDir.
Test: unit tests
./cts-tradefed run cts-dev -m CtsBackupHostTestCases
Bug: 62084954
Change-Id: I5d571b2cce45784cd0f4650aa25d8dc45090ee09
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 286f53f..75e8f3d 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
@@ -15,17 +15,18 @@
*/
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;
import com.android.tradefed.build.IBuildInfo;
import com.android.tradefed.build.IBuildProvider;
+import com.android.tradefed.build.IDeviceBuildInfo;
import com.android.tradefed.build.IDeviceBuildProvider;
-import com.android.tradefed.build.IFolderBuildInfo;
import com.android.tradefed.config.Option;
-import com.android.tradefed.config.OptionClass;
import com.android.tradefed.config.Option.Importance;
+import com.android.tradefed.config.OptionClass;
import com.android.tradefed.device.DeviceNotAvailableException;
import com.android.tradefed.device.ITestDevice;
@@ -165,14 +166,7 @@
info.addBuildAttribute(SUITE_PLAN, mSuitePlan);
info.addBuildAttribute(START_TIME_MS, Long.toString(startTimeMs));
info.addBuildAttribute(RESULT_DIR, getDirSuffix(startTimeMs));
- String rootDirPath = null;
- if (info instanceof IFolderBuildInfo) {
- File rootDir = ((IFolderBuildInfo) info).getRootDir();
- if (rootDir != null) {
- rootDirPath = rootDir.getAbsolutePath();
- }
- }
- rootDirPath = System.getProperty(String.format("%s_ROOT", getSuiteInfoName()), rootDirPath);
+ String rootDirPath = getRootDirPath();
if (rootDirPath == null || rootDirPath.trim().equals("")) {
throw new IllegalArgumentException(
String.format("Missing install path property %s_ROOT", getSuiteInfoName()));
@@ -183,6 +177,12 @@
String.format("Root directory doesn't exist %s", rootDir.getAbsolutePath()));
}
info.addBuildAttribute(ROOT_DIR, rootDir.getAbsolutePath());
+ // For DeviceBuildInfo we populate the testsDir folder of the build info.
+ if (info instanceof IDeviceBuildInfo) {
+ File testDir = new File(rootDir, String.format("android-%s/testcases/",
+ getSuiteInfoName().toLowerCase()));
+ ((IDeviceBuildInfo) info).setTestsDir(testDir, "0");
+ }
if (mURL != null && !mURL.isEmpty()) {
info.addBuildAttribute(DYNAMIC_CONFIG_OVERRIDE_URL,
mURL.replace("{suite-name}", getSuiteInfoName()));
@@ -190,6 +190,14 @@
}
/**
+ * Returns the CTS_ROOT variable that the harness was started with.
+ */
+ @VisibleForTesting
+ String getRootDirPath() {
+ return System.getProperty(String.format("%s_ROOT", getSuiteInfoName()));
+ }
+
+ /**
* Return the SuiteInfo name generated at build time. Exposed for testing.
*/
protected String getSuiteInfoName() {
diff --git a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/UnitTests.java b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/UnitTests.java
index 63ed9e8..f807818 100644
--- a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/UnitTests.java
+++ b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/UnitTests.java
@@ -16,6 +16,7 @@
package com.android.compatibility.common.tradefed;
import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelperTest;
+import com.android.compatibility.common.tradefed.build.CompatibilityBuildProviderTest;
import com.android.compatibility.common.tradefed.command.CompatibilityConsoleTest;
import com.android.compatibility.common.tradefed.config.ConfigurationFactoryTest;
import com.android.compatibility.common.tradefed.presubmit.ApkPackageNameCheck;
@@ -56,6 +57,7 @@
@SuiteClasses({
// build
CompatibilityBuildHelperTest.class,
+ CompatibilityBuildProviderTest.class,
// command
CompatibilityConsoleTest.class,
diff --git a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/build/CompatibilityBuildProviderTest.java b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/build/CompatibilityBuildProviderTest.java
new file mode 100644
index 0000000..a142081
--- /dev/null
+++ b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/build/CompatibilityBuildProviderTest.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2017 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.compatibility.common.tradefed.build;
+
+import static org.junit.Assert.*;
+
+import com.android.tradefed.build.IBuildInfo;
+import com.android.tradefed.build.IDeviceBuildInfo;
+import com.android.tradefed.config.OptionSetter;
+import com.android.tradefed.device.ITestDevice;
+import com.android.tradefed.util.FileUtil;
+
+import org.easymock.EasyMock;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import java.io.File;
+
+/**
+ * Unit tests for {@link CompatibilityBuildProvider}.
+ */
+@RunWith(JUnit4.class)
+public class CompatibilityBuildProviderTest {
+
+ private CompatibilityBuildProvider mProvider;
+ private ITestDevice mMockDevice;
+ private File mRootDir;
+
+ @Before
+ public void setUp() throws Exception {
+ mMockDevice = EasyMock.createMock(ITestDevice.class);
+ mRootDir = FileUtil.createTempDir("cts-root-dir");
+ mProvider = new CompatibilityBuildProvider() {
+ @Override
+ String getRootDirPath() {
+ return mRootDir.getAbsolutePath();
+ }
+ };
+ }
+
+ @After
+ public void tearDown() {
+ FileUtil.recursiveDelete(mRootDir);
+ }
+
+ /**
+ * Tests getting the build info without using the device information.
+ */
+ @Test
+ public void testBaseGetBuild() throws Exception {
+ EasyMock.replay(mMockDevice);
+ IBuildInfo info = mProvider.getBuild(mMockDevice);
+ EasyMock.verify(mMockDevice);
+ assertFalse(info instanceof IDeviceBuildInfo);
+ }
+
+ /**
+ * Tests building build infos using the device information.
+ */
+ @Test
+ public void testBaseGetBuild_withDevice() throws Exception {
+ OptionSetter setter = new OptionSetter(mProvider);
+ setter.setOptionValue("use-device-build-info", "true");
+ setter.setOptionValue("branch", "build_branch");
+ EasyMock.expect(mMockDevice.getBuildId()).andReturn("8888");
+ EasyMock.expect(mMockDevice.getBuildFlavor()).andReturn("flavor");
+ EasyMock.expect(mMockDevice.getBuildAlias()).andReturn("alias");
+ EasyMock.replay(mMockDevice);
+ IBuildInfo info = mProvider.getBuild(mMockDevice);
+ EasyMock.verify(mMockDevice);
+ assertTrue(info instanceof IDeviceBuildInfo);
+ // tests dir should be populated
+ assertNotNull(((IDeviceBuildInfo)info).getTestsDir());
+ }
+}