diff options
Diffstat (limited to 'javatests/com/google/android/libraries/mobiledatadownload/file/common/LockScopeTest.java')
-rw-r--r-- | javatests/com/google/android/libraries/mobiledatadownload/file/common/LockScopeTest.java | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/javatests/com/google/android/libraries/mobiledatadownload/file/common/LockScopeTest.java b/javatests/com/google/android/libraries/mobiledatadownload/file/common/LockScopeTest.java index 67fe88d..8e3cd1f 100644 --- a/javatests/com/google/android/libraries/mobiledatadownload/file/common/LockScopeTest.java +++ b/javatests/com/google/android/libraries/mobiledatadownload/file/common/LockScopeTest.java @@ -18,24 +18,40 @@ package com.google.android.libraries.mobiledatadownload.file.common; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertThrows; +import android.content.Context; import android.net.Uri; -import com.google.thirdparty.robolectric.GoogleRobolectricTestRunner; +import androidx.test.core.app.ApplicationProvider; +import com.google.android.libraries.mobiledatadownload.file.backends.FileUriAdapter; +import com.google.android.libraries.mobiledatadownload.file.common.testing.TemporaryUri; +import com.google.common.io.Files; +import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.Semaphore; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; -@RunWith(GoogleRobolectricTestRunner.class) +@RunWith(JUnit4.class) public class LockScopeTest { + // Keys to message data sent between main and service processes + private static final String URI_BUNDLE_KEY_1 = "uri1"; + private static final String URI_BUNDLE_KEY_2 = "uri2"; + + @Rule public final TemporaryUri tmpUri = new TemporaryUri(); + + private final Context mainContext = ApplicationProvider.getApplicationContext(); + @Test public void createWithSharedThreadLocks_sharesThreadLocksAcrossInstances() throws IOException { ConcurrentMap<String, Semaphore> lockMap = new ConcurrentHashMap<>(); LockScope lockScope = LockScope.createWithExistingThreadLocks(lockMap); LockScope otherLockScope = LockScope.createWithExistingThreadLocks(lockMap); - Uri uri = Uri.parse("file:///dummy"); + Uri uri = tmpUri.newUri(); try (Lock lock = lockScope.threadLock(uri)) { assertThat(otherLockScope.tryThreadLock(uri)).isNull(); @@ -47,9 +63,26 @@ public class LockScopeTest { @Test public void createWithFailingThreadLocks_willFailToAcquireThreadLocks() throws IOException { LockScope lockScope = LockScope.createWithFailingThreadLocks(); - Uri uri = Uri.parse("file:///dummy"); + Uri uri = tmpUri.newUri(); assertThrows(UnsupportedFileStorageOperation.class, () -> lockScope.threadLock(uri)); assertThat(lockScope.tryThreadLock(uri)).isNull(); } + + @Test + public void createFileLockSucceedsInSingleProcess() throws Exception { + LockScope lockScope = LockScope.create(); + Uri uri = tmpUri.newUri(); + + try (FileOutputStream stream = getStreamFromUri(uri); + Lock lock = lockScope.fileLock(stream.getChannel(), /* shared= */ false)) { + assertThat(lock).isNotNull(); + } + } + + private static FileOutputStream getStreamFromUri(Uri uri) throws IOException { + File file = FileUriAdapter.instance().toFile(uri); + Files.createParentDirs(file); + return new FileOutputStream(file); + } } |