Add a test for CP delete files
Add the CP logic to #deleteFile and a test for it to make
it sure we don't break it.
Bug: 123529934
Test: unit tests
atest TradefedContentProviderHostTest
Bug: 123528776
Change-Id: I8cbf340b7ab7487cafe0674f01e48f45fb5db8d9
Merged-In: I8cbf340b7ab7487cafe0674f01e48f45fb5db8d9
diff --git a/res/apks/contentprovider/TradefedContentProvider.apk b/res/apks/contentprovider/TradefedContentProvider.apk
index 49472b2..22a4569 100644
--- a/res/apks/contentprovider/TradefedContentProvider.apk
+++ b/res/apks/contentprovider/TradefedContentProvider.apk
Binary files differ
diff --git a/src/com/android/tradefed/device/NativeDevice.java b/src/com/android/tradefed/device/NativeDevice.java
index 77fb786..184dfd5 100644
--- a/src/com/android/tradefed/device/NativeDevice.java
+++ b/src/com/android/tradefed/device/NativeDevice.java
@@ -1141,6 +1141,15 @@
/** {@inheritDoc} */
@Override
public void deleteFile(String deviceFilePath) throws DeviceNotAvailableException {
+ if (deviceFilePath.startsWith(SD_CARD)) {
+ ContentProviderHandler handler = getContentProvider();
+ if (handler != null) {
+ if (handler.deleteFile(deviceFilePath)) {
+ return;
+ }
+ }
+ }
+ // Fallback to the direct command if content provider is unsuccessful
executeShellCommand(String.format("rm -rf \"%s\"", deviceFilePath));
}
diff --git a/util-apps/ContentProvider/hostsidetests/src/com/android/tradefed/contentprovider/ContentProviderTest.java b/util-apps/ContentProvider/hostsidetests/src/com/android/tradefed/contentprovider/ContentProviderTest.java
index 597a355..8b56fc7 100644
--- a/util-apps/ContentProvider/hostsidetests/src/com/android/tradefed/contentprovider/ContentProviderTest.java
+++ b/util-apps/ContentProvider/hostsidetests/src/com/android/tradefed/contentprovider/ContentProviderTest.java
@@ -30,6 +30,8 @@
import org.junit.runner.RunWith;
import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
/** Host tests for the Tradefed Content Provider. */
@RunWith(DeviceJUnit4ClassRunner.class)
@@ -38,6 +40,7 @@
private ContentProviderHandler mHandler;
private String mCurrentUserStoragePath;
+ private List<String> mToBeDeleted = new ArrayList<>();
@Before
public void setUp() throws Exception {
@@ -52,13 +55,19 @@
if (mHandler != null) {
mHandler.tearDown();
}
+ for (String delete : mToBeDeleted) {
+ getDevice().deleteFile(delete);
+ }
+ mToBeDeleted.clear();
}
@Test
public void testPushFile() throws Exception {
File tmpFile = FileUtil.createTempFile("tmpFileToPush", ".txt");
try {
- boolean res = mHandler.pushFile(tmpFile, "/sdcard/" + tmpFile.getName());
+ String devicePath = "/sdcard/" + tmpFile.getName();
+ mToBeDeleted.add(devicePath);
+ boolean res = mHandler.pushFile(tmpFile, devicePath);
assertTrue(res);
assertTrue(getDevice().doesFileExist(mCurrentUserStoragePath + tmpFile.getName()));
} finally {
@@ -66,6 +75,23 @@
}
}
+ /** Test that we can delete a file via Content Provider. */
+ @Test
+ public void testDeleteFile() throws Exception {
+ File tmpFile = FileUtil.createTempFile("tmpFileToPush", ".txt");
+ try {
+ String devicePath = "/sdcard/" + tmpFile.getName();
+ // Push the file first
+ boolean res = mHandler.pushFile(tmpFile, devicePath);
+ assertTrue(res);
+ assertTrue(getDevice().doesFileExist(mCurrentUserStoragePath + tmpFile.getName()));
+ // Attempt to delete it.
+ assertTrue(mHandler.deleteFile(devicePath));
+ } finally {
+ FileUtil.deleteFile(tmpFile);
+ }
+ }
+
@Test
public void testPullFile() throws Exception {
String fileContent = "some test content";
diff --git a/util-apps/ContentProvider/main/java/android/tradefed/contentprovider/ManagedFileContentProvider.java b/util-apps/ContentProvider/main/java/android/tradefed/contentprovider/ManagedFileContentProvider.java
index cb08e6f..c82b736 100644
--- a/util-apps/ContentProvider/main/java/android/tradefed/contentprovider/ManagedFileContentProvider.java
+++ b/util-apps/ContentProvider/main/java/android/tradefed/contentprovider/ManagedFileContentProvider.java
@@ -157,13 +157,11 @@
@Override
public int delete(
@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
- ContentValues values = mFileTracker.remove(uri);
- if (values == null) {
- return 0;
- }
+ // Stop Tracking the File of directory if it was tracked and delete it from the disk
+ mFileTracker.remove(uri);
File file = getFileForUri(uri);
int num = recursiveDelete(file);
- return 1;
+ return num;
}
@Override