[DO NOT MERGE] Test that scanFile after rename updates right MIME type
Test that scanFile() after renaming the file extension updates the
correct MIME type from the file metadata.
Bug: 176522651
Test: atest
android.scopedstorage.cts.device.ScopedStorageDeviceTest#testScanUpdatesMimeTypeForRenameFileExtension
Change-Id: Ifaae5b8d08d7ec7188046f072c5777390700fa50
diff --git a/hostsidetests/scopedstorage/device/src/android/scopedstorage/cts/device/ScopedStorageDeviceTest.java b/hostsidetests/scopedstorage/device/src/android/scopedstorage/cts/device/ScopedStorageDeviceTest.java
index 9e47f10..6bd7afd 100644
--- a/hostsidetests/scopedstorage/device/src/android/scopedstorage/cts/device/ScopedStorageDeviceTest.java
+++ b/hostsidetests/scopedstorage/device/src/android/scopedstorage/cts/device/ScopedStorageDeviceTest.java
@@ -1544,6 +1544,39 @@
}
/**
+ * Test that ScanFile() after renaming file extension updates the right
+ * MIME type from the file metadata.
+ */
+ @Test
+ public void testScanUpdatesMimeTypeForRenameFileExtension() throws Exception {
+ final String audioFileName = "ScopedStorageDeviceTest_" + NONCE;
+ final File mpegFile = new File(getMusicDir(), audioFileName + ".mp3");
+ final File nonMpegFile = new File(getMusicDir(), audioFileName + ".snd");
+ try {
+ // Copy audio content to mpegFile
+ try (InputStream in =
+ getContext().getResources().openRawResource(R.raw.test_audio);
+ FileOutputStream out = new FileOutputStream(mpegFile)) {
+ FileUtils.copy(in, out);
+ out.getFD().sync();
+ }
+ assertThat(MediaStore.scanFile(getContentResolver(), mpegFile)).isNotNull();
+ assertThat(getFileMimeTypeFromDatabase(mpegFile)).isEqualTo("audio/mpeg");
+
+ // This rename changes MIME type from audio/mpeg to audio/basic
+ assertCanRenameFile(mpegFile, nonMpegFile);
+ assertThat(getFileMimeTypeFromDatabase(nonMpegFile)).isNotEqualTo("audio/mpeg");
+
+ assertThat(MediaStore.scanFile(getContentResolver(), nonMpegFile)).isNotNull();
+ // Above scan should read file metadata and update the MIME type to audio/mpeg
+ assertThat(getFileMimeTypeFromDatabase(nonMpegFile)).isEqualTo("audio/mpeg");
+ } finally {
+ mpegFile.delete();
+ nonMpegFile.delete();
+ }
+ }
+
+ /**
* Test that app without write permission for file can't update the file.
*/
@Test
diff --git a/hostsidetests/scopedstorage/res/raw/test_audio.mp3 b/hostsidetests/scopedstorage/res/raw/test_audio.mp3
new file mode 100644
index 0000000..4fe9228
--- /dev/null
+++ b/hostsidetests/scopedstorage/res/raw/test_audio.mp3
Binary files differ