Poll for external storage directory mounted before starting test.
FuseDaemonHostTest device test might start right after device is
booted, this makes test start I/O operation before external storage
directory is mounted. Poll for externalStorageMountState to change
to MEDIA_MOUNTED before starting the test.
Test: atest FuseDaemonHostTest
Bug: 149132662
Change-Id: I4499131fb80a91997ef412936179d3036a509ca8
diff --git a/tests/jni/FuseDaemonTest/Android.bp b/tests/jni/FuseDaemonTest/Android.bp
index 2f0c78f..1c4afe6 100644
--- a/tests/jni/FuseDaemonTest/Android.bp
+++ b/tests/jni/FuseDaemonTest/Android.bp
@@ -43,9 +43,10 @@
name: "FuseDaemonLegacyTest",
manifest: "legacy/AndroidManifest.xml",
srcs: ["legacy/src/**/*.java"],
- static_libs: ["androidx.test.rules", "truth-prebuilt"],
+ static_libs: ["androidx.test.rules", "truth-prebuilt", "tests-fusedaemon-lib"],
test_suites: ["general-tests", "mts"],
- sdk_version: "29"
+ sdk_version: "test_current",
+ target_sdk_version: "29"
}
java_test_host {
diff --git a/tests/jni/FuseDaemonTest/legacy/src/com/android/tests/fused/legacy/LegacyFileAccessTest.java b/tests/jni/FuseDaemonTest/legacy/src/com/android/tests/fused/legacy/LegacyFileAccessTest.java
index 151ec50..1b09f5e 100644
--- a/tests/jni/FuseDaemonTest/legacy/src/com/android/tests/fused/legacy/LegacyFileAccessTest.java
+++ b/tests/jni/FuseDaemonTest/legacy/src/com/android/tests/fused/legacy/LegacyFileAccessTest.java
@@ -16,6 +16,8 @@
package com.android.tests.fused.legacy;
+import static com.android.tests.fused.lib.TestUtils.pollForExternalStorageState;
+
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.fail;
@@ -31,6 +33,7 @@
import androidx.test.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;
+import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -56,6 +59,11 @@
private static final long POLLING_TIMEOUT_MILLIS = TimeUnit.SECONDS.toMillis(10);
private static final long POLLING_SLEEP_MILLIS = 100;
+ @Before
+ public void setUp() throws Exception {
+ pollForExternalStorageState();
+ }
+
/**
* Tests that legacy apps bypass the type-path conformity restrictions imposed by MediaProvider.
* <p> Assumes we have WRITE_EXTERNAL_STORAGE.
diff --git a/tests/jni/FuseDaemonTest/libs/FuseDaemonTestLib/src/com/android/tests/fused/lib/TestUtils.java b/tests/jni/FuseDaemonTest/libs/FuseDaemonTestLib/src/com/android/tests/fused/lib/TestUtils.java
index 25ccee2..e564915 100644
--- a/tests/jni/FuseDaemonTest/libs/FuseDaemonTestLib/src/com/android/tests/fused/lib/TestUtils.java
+++ b/tests/jni/FuseDaemonTest/libs/FuseDaemonTestLib/src/com/android/tests/fused/lib/TestUtils.java
@@ -38,6 +38,7 @@
import android.content.IntentFilter;
import android.database.Cursor;
import android.net.Uri;
+import android.os.Environment;
import android.os.ParcelFileDescriptor;
import android.provider.MediaStore;
import android.util.Log;
@@ -58,6 +59,7 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
/**
* General helper functions for FuseDaemon tests.
@@ -71,6 +73,9 @@
public static final String CREATE_FILE_QUERY = "com.android.tests.fused.createfile";
public static final String DELETE_FILE_QUERY = "com.android.tests.fused.deletefile";
+ private static final long POLLING_TIMEOUT_MILLIS = TimeUnit.SECONDS.toMillis(10);
+ private static final long POLLING_SLEEP_MILLIS = 100;
+
private static final UiAutomation sUiAutomation = InstrumentationRegistry.getInstrumentation()
.getUiAutomation();
@@ -380,6 +385,17 @@
return path.delete();
}
+ public static void pollForExternalStorageState() throws Exception {
+ for (int i = 0; i < POLLING_TIMEOUT_MILLIS / POLLING_SLEEP_MILLIS; i++) {
+ if(Environment.getExternalStorageState(Environment.getExternalStorageDirectory())
+ .equals(Environment.MEDIA_MOUNTED)) {
+ return;
+ }
+ Thread.sleep(POLLING_SLEEP_MILLIS);
+ }
+ fail("Timed out while waiting for ExternalStorageState to be MEDIA_MOUNTED");
+ }
+
/**
* <p>This method drops shell permission identity.
*/
diff --git a/tests/jni/FuseDaemonTest/src/com/android/tests/fused/FilePathAccessTest.java b/tests/jni/FuseDaemonTest/src/com/android/tests/fused/FilePathAccessTest.java
index a9b0274..00e698e 100644
--- a/tests/jni/FuseDaemonTest/src/com/android/tests/fused/FilePathAccessTest.java
+++ b/tests/jni/FuseDaemonTest/src/com/android/tests/fused/FilePathAccessTest.java
@@ -47,6 +47,7 @@
import static com.android.tests.fused.lib.TestUtils.uninstallApp;
import static com.android.tests.fused.lib.TestUtils.uninstallAppNoThrow;
import static com.android.tests.fused.lib.TestUtils.updateDisplayNameWithMediaProvider;
+import static com.android.tests.fused.lib.TestUtils.pollForExternalStorageState;
import static com.google.common.truth.Truth.assertThat;
@@ -131,10 +132,13 @@
private static final String[] SYSTEM_GALERY_APPOPS = { AppOpsManager.OPSTR_WRITE_MEDIA_IMAGES,
AppOpsManager.OPSTR_WRITE_MEDIA_VIDEO };
- // skips all test cases if FUSE is not active.
+
@Before
- public void assumeFuseIsOn() {
+ public void setUp() throws Exception {
+ // skips all test cases if FUSE is not active.
assumeTrue(getBoolean("persist.sys.fuse", false));
+
+ pollForExternalStorageState();
EXTERNAL_FILES_DIR.mkdirs();
}