Add a simple instrumentation test for testing on real devices

This commit is contained in:
Torsten Grote 2019-08-06 08:16:37 +02:00
parent 2685f2b48a
commit e955e021fd
No known key found for this signature in database
GPG key ID: 3E5F77D92CF891FF
4 changed files with 78 additions and 2 deletions

View file

@ -20,6 +20,8 @@ before_cache:
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
- rm -fr $HOME/.gradle/caches/*/plugin-resolution/
script: ./gradlew check
cache:
directories:
- $HOME/.gradle/caches/

View file

@ -12,6 +12,7 @@ android {
defaultConfig {
minSdkVersion 26
targetSdkVersion 28
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
@ -108,4 +109,7 @@ dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.5.0'
testImplementation 'io.mockk:mockk:1.9.3'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.5.0'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test:rules:1.2.0'
}

View file

@ -0,0 +1,70 @@
package com.stevesoltys.backup
import androidx.documentfile.provider.DocumentFile
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.runner.AndroidJUnit4
import com.stevesoltys.backup.settings.getBackupFolderUri
import com.stevesoltys.backup.transport.backup.plugins.DocumentsStorage
import com.stevesoltys.backup.transport.backup.plugins.createOrGetFile
import org.junit.After
import org.junit.Assert.assertArrayEquals
import org.junit.Assert.assertNotNull
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import kotlin.random.Random
private const val filename = "test-file"
@RunWith(AndroidJUnit4::class)
class AndroidUnitTest {
private val context = InstrumentationRegistry.getInstrumentation().targetContext
private val folderUri = getBackupFolderUri(context)
private val deviceName = "device name"
private val storage = DocumentsStorage(context, folderUri, deviceName)
private lateinit var file: DocumentFile
@Before
fun setup() {
assertNotNull("Select a storage location in the app first!", storage.rootBackupDir)
file = storage.rootBackupDir?.createOrGetFile(filename)
?: throw RuntimeException("Could not create test file")
}
@After
fun tearDown() {
file.delete()
}
@Test
fun testWritingAndReadingFile() {
// write to output stream
val outputStream = storage.getOutputStream(file)
val content = ByteArray(1337).apply { Random.nextBytes(this) }
outputStream.write(content)
outputStream.flush()
outputStream.close()
// read written data from input stream
val inputStream = storage.getInputStream(file)
val readContent = inputStream.readBytes()
inputStream.close()
assertArrayEquals(content, readContent)
// write smaller content to same file
val outputStream2 = storage.getOutputStream(file)
val content2 = ByteArray(42).apply { Random.nextBytes(this) }
outputStream2.write(content2)
outputStream2.flush()
outputStream2.close()
// read written data from input stream
val inputStream2 = storage.getInputStream(file)
val readContent2 = inputStream2.readBytes()
inputStream2.close()
assertArrayEquals(content2, readContent2)
}
}

View file

@ -21,7 +21,7 @@ class DocumentsProviderBackupPlugin(
@Throws(IOException::class)
override fun initializeDevice() {
// get or create root backup dir
val rootDir = storage.rootBackupDir ?: throw IOException()
storage.rootBackupDir ?: throw IOException()
// create backup folders
val kvDir = storage.defaultKvBackupDir