Add an official deleteFile API for device
This will allow to hook the Content provider for deleting
files too.
Bug: 123529934
Test: unit tests
Bug: 121326701
Change-Id: I4a6a401638d2407ec68ee60eafb8d5f34fffeca0
Merged-In: I4a6a401638d2407ec68ee60eafb8d5f34fffeca0
diff --git a/src/com/android/tradefed/device/INativeDevice.java b/src/com/android/tradefed/device/INativeDevice.java
index cea6d8d..99a2ecb 100644
--- a/src/com/android/tradefed/device/INativeDevice.java
+++ b/src/com/android/tradefed/device/INativeDevice.java
@@ -604,6 +604,14 @@
public boolean doesFileExist(String deviceFilePath) throws DeviceNotAvailableException;
/**
+ * Helper method to delete a file or directory on the device.
+ *
+ * @param deviceFilePath The absolute path of the file on the device.
+ * @throws DeviceNotAvailableException
+ */
+ public void deleteFile(String deviceFilePath) throws DeviceNotAvailableException;
+
+ /**
* Retrieve a reference to a remote file on device.
*
* @param path the file path to retrieve. Can be an absolute path or path relative to '/'. (ie
diff --git a/src/com/android/tradefed/device/NativeDevice.java b/src/com/android/tradefed/device/NativeDevice.java
index da887cf..d35fc4a 100644
--- a/src/com/android/tradefed/device/NativeDevice.java
+++ b/src/com/android/tradefed/device/NativeDevice.java
@@ -1096,15 +1096,19 @@
}
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
@Override
- public boolean doesFileExist(String destPath) throws DeviceNotAvailableException {
- String lsGrep = executeShellCommand(String.format("ls \"%s\"", destPath));
+ public boolean doesFileExist(String deviceFilePath) throws DeviceNotAvailableException {
+ String lsGrep = executeShellCommand(String.format("ls \"%s\"", deviceFilePath));
return !lsGrep.contains("No such file or directory");
}
+ /** {@inheritDoc} */
+ @Override
+ public void deleteFile(String deviceFilePath) throws DeviceNotAvailableException {
+ executeShellCommand(String.format("rm -rf \"%s\"", deviceFilePath));
+ }
+
/**
* {@inheritDoc}
*/
@@ -2307,7 +2311,7 @@
remoteFilePath.substring(0, remoteFilePath.lastIndexOf('/'));
if (!bugreportDir.isEmpty()) {
// clean bugreport files directory on device
- executeShellCommand(String.format("rm %s/*", bugreportDir));
+ deleteFile(String.format("%s/*", bugreportDir));
}
return zipFile;
diff --git a/src/com/android/tradefed/device/metric/AtraceCollector.java b/src/com/android/tradefed/device/metric/AtraceCollector.java
index 3b29f57..0199e4d 100644
--- a/src/com/android/tradefed/device/metric/AtraceCollector.java
+++ b/src/com/android/tradefed/device/metric/AtraceCollector.java
@@ -219,7 +219,7 @@
}
if (!mPreserveOndeviceLog) {
- device.executeShellCommand("rm -f " + fullLogPath());
+ device.deleteFile(fullLogPath());
}
else {
CLog.w("preserving ondevice atrace log: %s", fullLogPath());
diff --git a/src/com/android/tradefed/targetprep/DeviceSetup.java b/src/com/android/tradefed/targetprep/DeviceSetup.java
index fd59eaa..880d2fd 100644
--- a/src/com/android/tradefed/targetprep/DeviceSetup.java
+++ b/src/com/android/tradefed/targetprep/DeviceSetup.java
@@ -483,7 +483,7 @@
if (mPreviousProperties != null) {
device.pushFile(mPreviousProperties, "/data/local.prop");
} else {
- device.executeShellCommand("rm -f /data/local.prop");
+ device.deleteFile("/data/local.prop");
}
device.reboot();
}
diff --git a/src/com/android/tradefed/testtype/AndroidJUnitTest.java b/src/com/android/tradefed/testtype/AndroidJUnitTest.java
index e1f984a..1a59ea0 100644
--- a/src/com/android/tradefed/testtype/AndroidJUnitTest.java
+++ b/src/com/android/tradefed/testtype/AndroidJUnitTest.java
@@ -373,8 +373,7 @@
}
private void removeTestFilterDir() throws DeviceNotAvailableException {
- ITestDevice device = getDevice();
- device.executeShellCommand(String.format("rm -r %s", mTestFilterDir));
+ getDevice().deleteFile(mTestFilterDir);
}
private void reportEarlyFailure(ITestInvocationListener listener, String errorMessage) {
diff --git a/src/com/android/tradefed/testtype/GTest.java b/src/com/android/tradefed/testtype/GTest.java
index aa23040..3e50ada 100644
--- a/src/com/android/tradefed/testtype/GTest.java
+++ b/src/com/android/tradefed/testtype/GTest.java
@@ -525,7 +525,7 @@
testDevice.executeShellCommand(String.format("sh %s", tmpFileDevice),
resultParser, mMaxTestTimeMs /* maxTimeToShellOutputResponse */,
TimeUnit.MILLISECONDS, 0 /* retry attempts */);
- testDevice.executeShellCommand(String.format("rm %s", tmpFileDevice));
+ testDevice.deleteFile(tmpFileDevice);
}
/**
diff --git a/tests/src/com/android/tradefed/device/NativeDeviceTest.java b/tests/src/com/android/tradefed/device/NativeDeviceTest.java
index 23f0e94..abb27b1 100644
--- a/tests/src/com/android/tradefed/device/NativeDeviceTest.java
+++ b/tests/src/com/android/tradefed/device/NativeDeviceTest.java
@@ -1181,34 +1181,44 @@
* Unit test for {@link NativeDevice#getBugreportz()}.
*/
public void testGetBugreportz() throws IOException {
- mTestDevice = new TestableAndroidNativeDevice() {
- @Override
- public void executeShellCommand(
- String command, IShellOutputReceiver receiver,
- long maxTimeToOutputShellResponse, TimeUnit timeUnit, int retryAttempts)
+ mTestDevice =
+ new TestableAndroidNativeDevice() {
+ @Override
+ public void executeShellCommand(
+ String command,
+ IShellOutputReceiver receiver,
+ long maxTimeToOutputShellResponse,
+ TimeUnit timeUnit,
+ int retryAttempts)
throws DeviceNotAvailableException {
- String fakeRep = "OK:/data/0/com.android.shell/bugreports/bugreport1970-10-27.zip";
- receiver.addOutput(fakeRep.getBytes(), 0, fakeRep.getBytes().length);
- }
- @Override
- public boolean doesFileExist(String destPath) throws DeviceNotAvailableException {
- return true;
- }
- @Override
- public boolean pullFile(String remoteFilePath, File localFile)
- throws DeviceNotAvailableException {
- return true;
- }
- @Override
- public String executeShellCommand(String command) throws DeviceNotAvailableException {
- assertEquals("rm /data/0/com.android.shell/bugreports/*", command);
- return null;
- }
- @Override
- public int getApiLevel() throws DeviceNotAvailableException {
- return 24;
- }
- };
+ String fakeRep =
+ "OK:/data/0/com.android.shell/bugreports/bugreport1970-10-27.zip";
+ receiver.addOutput(fakeRep.getBytes(), 0, fakeRep.getBytes().length);
+ }
+
+ @Override
+ public boolean doesFileExist(String destPath)
+ throws DeviceNotAvailableException {
+ return true;
+ }
+
+ @Override
+ public boolean pullFile(String remoteFilePath, File localFile)
+ throws DeviceNotAvailableException {
+ return true;
+ }
+
+ @Override
+ public void deleteFile(String deviceFilePath)
+ throws DeviceNotAvailableException {
+ assertEquals("/data/0/com.android.shell/bugreports/*", deviceFilePath);
+ }
+
+ @Override
+ public int getApiLevel() throws DeviceNotAvailableException {
+ return 24;
+ }
+ };
FileInputStreamSource f = null;
try {
f = (FileInputStreamSource) mTestDevice.getBugreportz();
diff --git a/tests/src/com/android/tradefed/device/metric/AtraceCollectorTest.java b/tests/src/com/android/tradefed/device/metric/AtraceCollectorTest.java
index e7a6070..5ffd8d6 100644
--- a/tests/src/com/android/tradefed/device/metric/AtraceCollectorTest.java
+++ b/tests/src/com/android/tradefed/device/metric/AtraceCollectorTest.java
@@ -230,9 +230,7 @@
EasyMock.expect(mMockDevice.pullFile(EasyMock.eq(M_DEFAULT_LOG_PATH)))
.andReturn(new File("/tmp/potato"))
.once();
- EasyMock.expect(mMockDevice.executeShellCommand(EasyMock.eq("rm -f " + M_DEFAULT_LOG_PATH)))
- .andReturn("")
- .times(1);
+ mMockDevice.deleteFile(M_DEFAULT_LOG_PATH);
EasyMock.replay(mMockDevice);
mAtrace.onTestEnd(
diff --git a/tests/src/com/android/tradefed/targetprep/DeviceSetupTest.java b/tests/src/com/android/tradefed/targetprep/DeviceSetupTest.java
index 651371c..49fab4c 100644
--- a/tests/src/com/android/tradefed/targetprep/DeviceSetupTest.java
+++ b/tests/src/com/android/tradefed/targetprep/DeviceSetupTest.java
@@ -1037,9 +1037,7 @@
doSetupExpectations();
doCheckExternalStoreSpaceExpectations();
EasyMock.expect(mMockDevice.pullFile("/data/local.prop")).andReturn(null).once();
- EasyMock.expect(mMockDevice.executeShellCommand("rm -f /data/local.prop"))
- .andReturn(null)
- .once();
+ mMockDevice.deleteFile("/data/local.prop");
mMockDevice.reboot();
EasyMock.expectLastCall().once();
diff --git a/tests/src/com/android/tradefed/testtype/AndroidJUnitTestTest.java b/tests/src/com/android/tradefed/testtype/AndroidJUnitTestTest.java
index 893145d..b3f61d5 100644
--- a/tests/src/com/android/tradefed/testtype/AndroidJUnitTestTest.java
+++ b/tests/src/com/android/tradefed/testtype/AndroidJUnitTestTest.java
@@ -202,7 +202,8 @@
EasyMock.<File>anyObject(), EasyMock.<String>anyObject())).andReturn(Boolean.TRUE);
EasyMock.expect(mMockTestDevice.executeShellCommand(EasyMock.<String>anyObject()))
.andReturn("")
- .times(2);
+ .times(1);
+ mMockTestDevice.deleteFile("/data/local/tmp/ajur");
EasyMock.replay(mMockRemoteRunner, mMockTestDevice);
File tmpFile = FileUtil.createTempFile("testFile", ".txt");
@@ -227,7 +228,8 @@
EasyMock.<File>anyObject(), EasyMock.<String>anyObject())).andReturn(Boolean.TRUE);
EasyMock.expect(mMockTestDevice.executeShellCommand(EasyMock.<String>anyObject()))
.andReturn("")
- .times(2);
+ .times(1);
+ mMockTestDevice.deleteFile("/data/local/tmp/ajur");
EasyMock.replay(mMockRemoteRunner, mMockTestDevice);
File tmpFile = FileUtil.createTempFile("notTestFile", ".txt");
@@ -256,7 +258,8 @@
EasyMock.<String>anyObject())).andReturn(Boolean.TRUE).times(2);
EasyMock.expect(mMockTestDevice.executeShellCommand(EasyMock.<String>anyObject()))
.andReturn("")
- .times(3);
+ .times(2);
+ mMockTestDevice.deleteFile("/data/local/tmp/ajur");
EasyMock.replay(mMockRemoteRunner, mMockTestDevice);
File tmpFileInclude = FileUtil.createTempFile("includeFile", ".txt");
@@ -324,7 +327,8 @@
.times(2);
EasyMock.expect(mMockTestDevice.executeShellCommand(EasyMock.<String>anyObject()))
.andReturn("")
- .times(3);
+ .times(2);
+ mMockTestDevice.deleteFile("/data/local/tmp/ajur");
EasyMock.replay(mMockRemoteRunner, mMockTestDevice);
File tmpFileInclude = FileUtil.createTempFile("includeFile", ".txt");
diff --git a/tests/src/com/android/tradefed/testtype/GTestTest.java b/tests/src/com/android/tradefed/testtype/GTestTest.java
index 31018e0..5d636d3 100644
--- a/tests/src/com/android/tradefed/testtype/GTestTest.java
+++ b/tests/src/com/android/tradefed/testtype/GTestTest.java
@@ -316,8 +316,7 @@
EasyMock.same(mMockReceiver), EasyMock.anyLong(), (TimeUnit)EasyMock.anyObject(),
EasyMock.anyInt());
// Expect deletion of file on device
- EasyMock.expect(mMockITestDevice.executeShellCommand(
- EasyMock.eq(String.format("rm %s", deviceScriptPath)))).andReturn("");
+ mMockITestDevice.deleteFile(deviceScriptPath);
replayMocks();
mGTest.run(mMockInvocationListener);