Skip to content

Commit

Permalink
Iteration 3
Browse files Browse the repository at this point in the history
  • Loading branch information
Sloox authored and mergify-bot committed Apr 26, 2021
1 parent 2775d68 commit 16848ef
Show file tree
Hide file tree
Showing 10 changed files with 26 additions and 41 deletions.
4 changes: 4 additions & 0 deletions test_runner/src/main/kotlin/ftl/adapter/GcStorageDownload.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,14 @@ package ftl.adapter
import ftl.adapter.google.toApiModel
import ftl.api.FileReference
import ftl.client.google.gcStorageDownload
import ftl.run.exception.FlankGeneralError

object GcStorageDownload :
FileReference.Download,
(FileReference, Boolean, Boolean) -> FileReference by { fileReference, ifNeeded, ignoreErrors ->
if (!ignoreErrors) {
if (fileReference.local.isBlank() && fileReference.remote.isBlank()) throw FlankGeneralError("Cannot create empty FileReference")
}
if (ifNeeded) {
if (fileReference.local.isNotBlank()) fileReference
else gcStorageDownload(fileReference.remote, ignoreErrors).toApiModel(fileReference)
Expand Down
4 changes: 0 additions & 4 deletions test_runner/src/main/kotlin/ftl/api/FileReference.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package ftl.api

import ftl.adapter.GcStorageDownload
import ftl.run.exception.FlankGeneralError

val downloadFileReference: FileReference.Download get() = GcStorageDownload
val uploadFileReference: FileReference.Download get() = TODO()
Expand All @@ -11,9 +10,6 @@ data class FileReference(
val local: String = "",
val remote: String = ""
) {
init {
if (local.isBlank() && remote.isBlank()) throw FlankGeneralError("Cannot create empty FileReference")
}

interface Download : (FileReference, Boolean, Boolean) -> FileReference
interface Upload : (FileReference, Boolean) -> FileReference
Expand Down
31 changes: 13 additions & 18 deletions test_runner/src/main/kotlin/ftl/client/google/FileReference.kt
Original file line number Diff line number Diff line change
@@ -1,26 +1,16 @@
package ftl.client.google

import ftl.adapter.google.asFileReference
import ftl.api.FileReference
import ftl.api.RemoteStorage
import ftl.api.downloadFileReference
import ftl.api.uploadToRemoteStorage
import ftl.args.IArgs
import ftl.run.exception.FlankGeneralError
import ftl.reports.xml.model.JUnitTestResult
import ftl.reports.xml.parseAllSuitesXml
import java.nio.file.Files
import java.nio.file.Paths

data class FileReference(
val local: String = "",
val gcs: String = ""
) {
init {
assertNotEmpty()
}
}

private fun FileReference.assertNotEmpty() {
if (local.isBlank() && gcs.isBlank())
throw FlankGeneralError("Cannot create empty FileReference")
}

fun IArgs.uploadIfNeeded(file: FileReference): FileReference =
file.uploadIfNeeded(
rootGcsBucket = resultsBucket,
Expand All @@ -30,13 +20,18 @@ fun IArgs.uploadIfNeeded(file: FileReference): FileReference =
fun FileReference.uploadIfNeeded(
rootGcsBucket: String,
runGcsPath: String
): FileReference =
if (gcs.isNotBlank()) this
else copy(gcs = upload(local, rootGcsBucket, runGcsPath))
): FileReference = if (remote.isNotBlank()) this else copy(remote = upload(local, rootGcsBucket, runGcsPath))

fun upload(file: String, rootGcsBucket: String, runGcsPath: String): String {
return uploadToRemoteStorage(
RemoteStorage.Dir(rootGcsBucket, runGcsPath),
RemoteStorage.Data(file, Files.readAllBytes(Paths.get(file)))
)
}

internal fun downloadAsJunitXml(args: IArgs): JUnitTestResult? =
downloadFileReference(args.smartFlankGcsPath.asFileReference(), false, true)
.local.takeIf { it.isNotEmpty() }
?.let { parseAllSuitesXml(Paths.get(it)) }

internal fun FileReference.downloadIfNeeded() = downloadFileReference(this, true, false)
10 changes: 0 additions & 10 deletions test_runner/src/main/kotlin/ftl/client/google/GcStorage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,7 @@ import com.google.cloud.storage.StorageOptions
import com.google.cloud.storage.contrib.nio.testing.LocalStorageHelper
import com.google.common.annotations.VisibleForTesting
import flank.common.join
import ftl.adapter.google.asFileReference
import ftl.adapter.google.credential
import ftl.api.FileReference
import ftl.api.downloadFileReference
import ftl.args.IArgs
import ftl.config.FtlConstants
import ftl.config.FtlConstants.GCS_PREFIX
Expand Down Expand Up @@ -175,13 +172,6 @@ internal fun gcStorageExist(rootGcsBucket: String, runGcsPath: String) = GcStora
internal fun gcStorageDownload(gcsUriString: String, ignoreError: Boolean = false) =
GcStorage.download(gcsUriString, ignoreError)

internal fun downloadAsJunitXml(args: IArgs): JUnitTestResult? =
downloadFileReference(args.smartFlankGcsPath.asFileReference(), false, true)
.local.takeIf { it.isNotEmpty() }
?.let { parseAllSuitesXml(Paths.get(it)) }

internal fun FileReference.downloadIfNeeded() = downloadFileReference(this, true, false)

object TestStorageProvider {
init {
require(FtlConstants.useMock) { "Storage provider can be used only during tests" }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ package ftl.run.platform.android
import ftl.adapter.google.asFileReference
import ftl.args.AndroidArgs
import ftl.args.IosArgs
import ftl.client.google.uploadIfNeeded
import ftl.run.model.AndroidTestContext
import ftl.run.model.GameLoopContext
import ftl.run.model.InstrumentationTestContext
import ftl.run.model.RoboTestContext
import ftl.run.model.SanityRoboTestContext
import ftl.util.uploadIfNeeded
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
Expand Down Expand Up @@ -58,6 +58,6 @@ private suspend fun List<String>.uploadToGcloudIfNeeded(
resultsBucket: String
) = coroutineScope {
map {
async { it.asFileReference().uploadIfNeeded(resultsBucket, runGcsPath).gcs }
async { it.asFileReference().uploadIfNeeded(resultsBucket, runGcsPath).remote }
}.awaitAll()
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@ package ftl.run.platform.ios
import flank.common.join
import ftl.adapter.google.asFileReference
import ftl.args.IosArgs
import ftl.client.google.uploadIfNeeded
import ftl.run.model.GameloopTestContext
import ftl.run.model.IosTestContext
import ftl.util.ShardCounter
import ftl.util.uploadIfNeeded
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flowOf

internal fun IosArgs.createGameloopTestContexts(): Flow<IosTestContext> {
val shardCounter = ShardCounter()
val appGcsPath = uploadIfNeeded(app.asFileReference()).gcs
val appGcsPath = uploadIfNeeded(app.asFileReference()).remote
val gcsBucket = resultsBucket
val shardName = shardCounter.next()
val matrixGcsSuffix = join(resultsDir, shardName)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,17 @@ import ftl.adapter.google.asFileReference
import ftl.api.RemoteStorage
import ftl.api.uploadToRemoteStorage
import ftl.args.IosArgs
import ftl.client.google.uploadIfNeeded
import ftl.ios.xctest.xcTestRunFlow
import ftl.run.model.IosTestContext
import ftl.run.model.XcTestContext
import ftl.util.ShardCounter
import ftl.util.uploadIfNeeded
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map

internal fun IosArgs.createXcTestContexts(): Flow<IosTestContext> {
val shardCounter = ShardCounter()
val xcTestGcsPath = uploadIfNeeded(xctestrunZip.asFileReference()).gcs
val xcTestGcsPath = uploadIfNeeded(xctestrunZip.asFileReference()).remote
val gcsBucket = resultsBucket
return xcTestRunFlow().map { xcTestRun ->
val shardName = shardCounter.next()
Expand Down
2 changes: 1 addition & 1 deletion test_runner/src/test/kotlin/ftl/args/AndroidArgsTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package ftl.args

import com.google.common.truth.Truth.assertThat
import com.google.testing.model.TestSpecification
import ftl.adapter.google.asFileReference
import ftl.args.IArgs.Companion.AVAILABLE_PHYSICAL_SHARD_COUNT_RANGE
import ftl.args.IArgs.Companion.AVAILABLE_VIRTUAL_SHARD_COUNT_RANGE
import ftl.args.yml.AppTestPair
Expand Down Expand Up @@ -30,7 +31,6 @@ import ftl.test.util.TestHelper.assert
import ftl.test.util.TestHelper.getPath
import ftl.test.util.TestHelper.getThrowable
import ftl.test.util.assertThrowsWithMessage
import ftl.util.asFileReference
import io.mockk.every
import io.mockk.mockkObject
import io.mockk.mockkStatic
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.linkedin.dex.parser.DexParser
import com.linkedin.dex.parser.DexParser.Companion.findTestMethods
import com.linkedin.dex.parser.TestMethod
import flank.common.isWindows
import ftl.api.FileReference
import ftl.args.AndroidArgs
import ftl.args.normalizeFilePath
import ftl.filter.TestFilter
Expand All @@ -16,7 +17,6 @@ import ftl.run.model.InstrumentationTestContext
import ftl.run.model.RoboTestContext
import ftl.test.util.mixedConfigYaml
import ftl.test.util.should
import ftl.util.FileReference
import ftl.util.FlankTestMethod
import io.mockk.every
import io.mockk.mockk
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package ftl.run.platform.android

import ftl.adapter.google.asFileReference
import ftl.args.AndroidArgs
import ftl.args.yml.AppTestPair
import ftl.args.yml.Type
import ftl.run.exception.FlankGeneralError
import ftl.run.model.InstrumentationTestContext
import ftl.run.model.SanityRoboTestContext
import ftl.util.asFileReference
import io.mockk.every
import io.mockk.mockk
import io.mockk.unmockkAll
Expand Down

0 comments on commit 16848ef

Please sign in to comment.