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