Add test to reproduce the loading cursor phenomena with Nextcloud
See: https://commonsware.com/blog/2019/12/14/scoped-storage-stories-listfiles-woe.html
This commit is contained in:
parent
22aaaeb1fd
commit
131c5b6b29
1 changed files with 41 additions and 0 deletions
|
@ -62,6 +62,47 @@ class PluginTest : KoinComponent {
|
||||||
assertNotNull(backupPlugin.providerPackageName)
|
assertNotNull(backupPlugin.providerPackageName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This test initializes the storage three times while creating two new restore sets.
|
||||||
|
*
|
||||||
|
* If this is run against a Nextcloud storage backend,
|
||||||
|
* it has a high chance of getting a loading cursor in the underlying queries
|
||||||
|
* that needs to get re-queried to get real results.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
fun testInitializationAndRestoreSets() {
|
||||||
|
// no backups available initially
|
||||||
|
assertEquals(0, restorePlugin.getAvailableBackups()?.toList()?.size)
|
||||||
|
val uri = settingsManager.getStorage()?.getDocumentFile(context)?.uri ?: error("no storage")
|
||||||
|
assertFalse(restorePlugin.hasBackup(uri))
|
||||||
|
|
||||||
|
// define storage changing state for later
|
||||||
|
every {
|
||||||
|
mockedSettingsManager.getAndResetIsStorageChanging()
|
||||||
|
} returns true andThen true andThen false
|
||||||
|
|
||||||
|
// device needs initialization, because new and storage is changing
|
||||||
|
assertTrue(backupPlugin.initializeDevice(newToken = token))
|
||||||
|
|
||||||
|
// write metadata (needed for backup to be recognized)
|
||||||
|
backupPlugin.getMetadataOutputStream().writeAndClose(getRandomByteArray())
|
||||||
|
|
||||||
|
// one backup available now
|
||||||
|
assertEquals(1, restorePlugin.getAvailableBackups()?.toList()?.size)
|
||||||
|
assertTrue(restorePlugin.hasBackup(uri))
|
||||||
|
|
||||||
|
// initializing again (while changing storage) does add a restore set
|
||||||
|
assertTrue(backupPlugin.initializeDevice(newToken = token + 1))
|
||||||
|
backupPlugin.getMetadataOutputStream().writeAndClose(getRandomByteArray())
|
||||||
|
assertEquals(2, restorePlugin.getAvailableBackups()?.toList()?.size)
|
||||||
|
assertTrue(restorePlugin.hasBackup(uri))
|
||||||
|
|
||||||
|
// initializing again (without changing storage) doesn't change number of restore sets
|
||||||
|
assertFalse(backupPlugin.initializeDevice(newToken = token + 2))
|
||||||
|
backupPlugin.getMetadataOutputStream().writeAndClose(getRandomByteArray())
|
||||||
|
assertEquals(2, restorePlugin.getAvailableBackups()?.toList()?.size)
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testMetadataWriteRead() {
|
fun testMetadataWriteRead() {
|
||||||
every { mockedSettingsManager.getAndResetIsStorageChanging() } returns true andThen false
|
every { mockedSettingsManager.getAndResetIsStorageChanging() } returns true andThen false
|
||||||
|
|
Loading…
Reference in a new issue