diff --git a/corellium/cli/src/main/kotlin/flank/corellium/cli/RunTestCorelliumAndroidCommand.kt b/corellium/cli/src/main/kotlin/flank/corellium/cli/TestAndroidCommand.kt similarity index 87% rename from corellium/cli/src/main/kotlin/flank/corellium/cli/RunTestCorelliumAndroidCommand.kt rename to corellium/cli/src/main/kotlin/flank/corellium/cli/TestAndroidCommand.kt index 6847119f6a..c920a01cb4 100644 --- a/corellium/cli/src/main/kotlin/flank/corellium/cli/RunTestCorelliumAndroidCommand.kt +++ b/corellium/cli/src/main/kotlin/flank/corellium/cli/TestAndroidCommand.kt @@ -5,15 +5,15 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties import com.fasterxml.jackson.annotation.JsonProperty import flank.config.ConfigMap import flank.config.emptyConfigMap -import flank.corellium.cli.run.test.android.format -import flank.corellium.cli.run.test.android.task.apkApi -import flank.corellium.cli.run.test.android.task.args -import flank.corellium.cli.run.test.android.task.config -import flank.corellium.cli.run.test.android.task.corelliumApi -import flank.corellium.cli.run.test.android.task.jUnitApi -import flank.corellium.domain.RunTestCorelliumAndroid.Args -import flank.corellium.domain.RunTestCorelliumAndroid.CompleteTests -import flank.corellium.domain.RunTestCorelliumAndroid.execute +import flank.corellium.cli.test.android.format +import flank.corellium.cli.test.android.task.apkApi +import flank.corellium.cli.test.android.task.args +import flank.corellium.cli.test.android.task.config +import flank.corellium.cli.test.android.task.corelliumApi +import flank.corellium.cli.test.android.task.jUnitApi +import flank.corellium.domain.TestAndroid.Args +import flank.corellium.domain.TestAndroid.CompleteTests +import flank.corellium.domain.TestAndroid.execute import flank.exection.parallel.Parallel import flank.exection.parallel.ParallelState import flank.exection.parallel.invoke @@ -34,11 +34,11 @@ import picocli.CommandLine header = ["Run tests on Corellium Android instances"], usageHelpAutoWidth = true ) -class RunTestCorelliumAndroidCommand : +class TestAndroidCommand : Runnable { class Context : Parallel.Context() { - val command by !RunTestCorelliumAndroidCommand + val command by !TestAndroidCommand val config by -Config } @@ -159,7 +159,7 @@ class RunTestCorelliumAndroidCommand : override fun run() { val seed: ParallelState = mapOf( - RunTestCorelliumAndroidCommand to this, + TestAndroidCommand to this, Parallel.Logger to format.output, ) runBlocking { @@ -169,9 +169,9 @@ class RunTestCorelliumAndroidCommand : } } - internal companion object : Parallel.Type { + internal companion object : Parallel.Type { - val context = Parallel.Function(RunTestCorelliumAndroidCommand::Context) + val context = Parallel.Function(TestAndroidCommand::Context) // Needs to be evaluated lazy due to strange NullPointerException when RunTestCorelliumAndroidCommandTest is run after ArgsKtTest. val resolve by lazy { diff --git a/corellium/cli/src/main/kotlin/flank/corellium/cli/run/test/android/Format.kt b/corellium/cli/src/main/kotlin/flank/corellium/cli/test/android/Format.kt similarity index 50% rename from corellium/cli/src/main/kotlin/flank/corellium/cli/run/test/android/Format.kt rename to corellium/cli/src/main/kotlin/flank/corellium/cli/test/android/Format.kt index b0fb63f5a2..58abdac73a 100644 --- a/corellium/cli/src/main/kotlin/flank/corellium/cli/run/test/android/Format.kt +++ b/corellium/cli/src/main/kotlin/flank/corellium/cli/test/android/Format.kt @@ -1,10 +1,10 @@ -package flank.corellium.cli.run.test.android +package flank.corellium.cli.test.android import flank.corellium.api.AndroidApps import flank.corellium.api.AndroidInstance import flank.corellium.api.CorelliumApi -import flank.corellium.cli.RunTestCorelliumAndroidCommand -import flank.corellium.domain.RunTestCorelliumAndroid +import flank.corellium.cli.TestAndroidCommand +import flank.corellium.domain.TestAndroid import flank.exection.parallel.type import flank.instrument.log.Instrument import flank.log.Event @@ -12,27 +12,27 @@ import flank.log.buildFormatter internal val format = buildFormatter { - Event.Start(RunTestCorelliumAndroidCommand.Config) { "* Loading configuration" } - Event.Start(RunTestCorelliumAndroid.Args) { "* Preparing arguments" } + Event.Start(TestAndroidCommand.Config) { "* Loading configuration" } + Event.Start(TestAndroid.Args) { "* Preparing arguments" } Event.Start(type()) { "* Resolving Corellium API" } - Event.Start(RunTestCorelliumAndroid.Authorize) { "* Authorizing" } - Event.Start(RunTestCorelliumAndroid.Authorize) { "* Authorizing" } - Event.Start(RunTestCorelliumAndroid.CleanUp) { "* Cleaning instances" } - Event.Start(RunTestCorelliumAndroid.OutputDir) { "* Preparing output directory" } - Event.Start(RunTestCorelliumAndroid.DumpShards) { "* Dumping shards" } - Event.Start(RunTestCorelliumAndroid.ExecuteTests) { "* Executing tests" } - Event.Start(RunTestCorelliumAndroid.CompleteTests) { "* Finish" } - Event.Start(RunTestCorelliumAndroid.GenerateReport) { "* Generating report" } - Event.Start(RunTestCorelliumAndroid.InstallApks) { "* Installing apks" } - Event.Start(RunTestCorelliumAndroid.InvokeDevices) { "* Invoking devices" } - Event.Start(RunTestCorelliumAndroid.LoadPreviousDurations) { "* Obtaining previous test cases durations" } - Event.Start(RunTestCorelliumAndroid.ParseApkInfo) { "* Parsing apk info" } - Event.Start(RunTestCorelliumAndroid.ParseTestCases) { "* Parsing test cases" } - Event.Start(RunTestCorelliumAndroid.PrepareShards) { "* Calculating shards" } + Event.Start(TestAndroid.Authorize) { "* Authorizing" } + Event.Start(TestAndroid.Authorize) { "* Authorizing" } + Event.Start(TestAndroid.CleanUp) { "* Cleaning instances" } + Event.Start(TestAndroid.OutputDir) { "* Preparing output directory" } + Event.Start(TestAndroid.DumpShards) { "* Dumping shards" } + Event.Start(TestAndroid.ExecuteTests) { "* Executing tests" } + Event.Start(TestAndroid.CompleteTests) { "* Finish" } + Event.Start(TestAndroid.GenerateReport) { "* Generating report" } + Event.Start(TestAndroid.InstallApks) { "* Installing apks" } + Event.Start(TestAndroid.InvokeDevices) { "* Invoking devices" } + Event.Start(TestAndroid.LoadPreviousDurations) { "* Obtaining previous test cases durations" } + Event.Start(TestAndroid.ParseApkInfo) { "* Parsing apk info" } + Event.Start(TestAndroid.ParseTestCases) { "* Parsing test cases" } + Event.Start(TestAndroid.PrepareShards) { "* Calculating shards" } - RunTestCorelliumAndroid.LoadPreviousDurations.Searching { "Searching in $this JUnitReport.xml files..." } - RunTestCorelliumAndroid.LoadPreviousDurations.Summary::class { "For $required test cases, found $matching matching and $unknown unknown" } - RunTestCorelliumAndroid.InstallApks.Status { + TestAndroid.LoadPreviousDurations.Searching { "Searching in $this JUnitReport.xml files..." } + TestAndroid.LoadPreviousDurations.Summary::class { "For $required test cases, found $matching matching and $unknown unknown" } + TestAndroid.InstallApks.Status { when (this) { is AndroidApps.Event.Connecting.Agent -> "$instanceId: Connecting agent" is AndroidApps.Event.Connecting.Console -> "$instanceId: Connecting console" @@ -40,7 +40,7 @@ internal val format = buildFormatter { is AndroidApps.Event.Apk.Installing -> "$instanceId: Installing apk $path" } } - RunTestCorelliumAndroid.InvokeDevices.Status { + TestAndroid.InvokeDevices.Status { when (this) { is AndroidInstance.Event.GettingAlreadyCreated -> "Getting instances already created by flank." is AndroidInstance.Event.Obtained -> "Obtained $size already created devices" @@ -52,26 +52,26 @@ internal val format = buildFormatter { is AndroidInstance.Event.AllReady -> "All instances invoked and ready to use." } } - RunTestCorelliumAndroid.ExecuteTests.Plan { + TestAndroid.ExecuteTests.Plan { instances.toList().joinToString("\n") { (id, commands) -> "$id:\n" + commands.joinToString("\n") { " - $it" } } } - RunTestCorelliumAndroid.ExecuteTests.Status::class { + TestAndroid.ExecuteTests.Status::class { when (val status = status) { is Instrument.Status -> "$id: " + status.details.run { "$className#$testName" } + " - " + status.code else -> null } } - RunTestCorelliumAndroid.ExecuteTests.Error::class { + TestAndroid.ExecuteTests.Error::class { """ Error while parsing results from instance $id. For details check $logFile lines $lines. """.trimIndent() + cause.stackTraceToString() } - RunTestCorelliumAndroid.Created { "Created $path" } - RunTestCorelliumAndroid.AlreadyExist { "Already exist $path" } + TestAndroid.Created { "Created $path" } + TestAndroid.AlreadyExist { "Already exist $path" } match { it as? String } to { this } } diff --git a/corellium/cli/src/main/kotlin/flank/corellium/cli/run/test/android/task/Apk.kt b/corellium/cli/src/main/kotlin/flank/corellium/cli/test/android/task/Apk.kt similarity index 75% rename from corellium/cli/src/main/kotlin/flank/corellium/cli/run/test/android/task/Apk.kt rename to corellium/cli/src/main/kotlin/flank/corellium/cli/test/android/task/Apk.kt index 62fd347625..a22cba5dd4 100644 --- a/corellium/cli/src/main/kotlin/flank/corellium/cli/run/test/android/task/Apk.kt +++ b/corellium/cli/src/main/kotlin/flank/corellium/cli/test/android/task/Apk.kt @@ -1,4 +1,4 @@ -package flank.corellium.cli.run.test.android.task +package flank.corellium.cli.test.android.task import flank.apk.Apk import flank.exection.parallel.type diff --git a/corellium/cli/src/main/kotlin/flank/corellium/cli/run/test/android/task/Args.kt b/corellium/cli/src/main/kotlin/flank/corellium/cli/test/android/task/Args.kt similarity index 69% rename from corellium/cli/src/main/kotlin/flank/corellium/cli/run/test/android/task/Args.kt rename to corellium/cli/src/main/kotlin/flank/corellium/cli/test/android/task/Args.kt index 2bfc7ccc9b..2808bf9c09 100644 --- a/corellium/cli/src/main/kotlin/flank/corellium/cli/run/test/android/task/Args.kt +++ b/corellium/cli/src/main/kotlin/flank/corellium/cli/test/android/task/Args.kt @@ -1,9 +1,9 @@ -package flank.corellium.cli.run.test.android.task +package flank.corellium.cli.test.android.task import flank.config.loadYaml -import flank.corellium.cli.RunTestCorelliumAndroidCommand.Companion.context -import flank.corellium.cli.RunTestCorelliumAndroidCommand.Config -import flank.corellium.domain.RunTestCorelliumAndroid.Args +import flank.corellium.cli.TestAndroidCommand.Companion.context +import flank.corellium.cli.TestAndroidCommand.Config +import flank.corellium.domain.TestAndroid.Args import flank.exection.parallel.from import flank.exection.parallel.using diff --git a/corellium/cli/src/main/kotlin/flank/corellium/cli/run/test/android/task/Config.kt b/corellium/cli/src/main/kotlin/flank/corellium/cli/test/android/task/Config.kt similarity index 58% rename from corellium/cli/src/main/kotlin/flank/corellium/cli/run/test/android/task/Config.kt rename to corellium/cli/src/main/kotlin/flank/corellium/cli/test/android/task/Config.kt index a00076e882..9f133f0650 100644 --- a/corellium/cli/src/main/kotlin/flank/corellium/cli/run/test/android/task/Config.kt +++ b/corellium/cli/src/main/kotlin/flank/corellium/cli/test/android/task/Config.kt @@ -1,10 +1,10 @@ -package flank.corellium.cli.run.test.android.task +package flank.corellium.cli.test.android.task import flank.config.loadYaml import flank.config.merge -import flank.corellium.cli.RunTestCorelliumAndroidCommand.Companion.context -import flank.corellium.cli.RunTestCorelliumAndroidCommand.Config -import flank.corellium.domain.RunTestCorelliumAndroid +import flank.corellium.cli.TestAndroidCommand.Companion.context +import flank.corellium.cli.TestAndroidCommand.Config +import flank.corellium.domain.TestAndroid import flank.exection.parallel.using internal val config = Config using context { @@ -16,12 +16,12 @@ internal val config = Config using context { } private fun defaultConfig() = Config().apply { - project = RunTestCorelliumAndroid.Args.DEFAULT_PROJECT - auth = RunTestCorelliumAndroid.Args.AUTH_FILE - this += RunTestCorelliumAndroid.Args.Default + project = TestAndroid.Args.DEFAULT_PROJECT + auth = TestAndroid.Args.AUTH_FILE + this += TestAndroid.Args.Default } -private operator fun Config.plusAssign(args: RunTestCorelliumAndroid.Args) { +private operator fun Config.plusAssign(args: TestAndroid.Args) { apks = args.apks testTargets = args.testTargets maxTestShards = args.maxShardsCount diff --git a/corellium/cli/src/main/kotlin/flank/corellium/cli/run/test/android/task/Corellium.kt b/corellium/cli/src/main/kotlin/flank/corellium/cli/test/android/task/Corellium.kt similarity index 61% rename from corellium/cli/src/main/kotlin/flank/corellium/cli/run/test/android/task/Corellium.kt rename to corellium/cli/src/main/kotlin/flank/corellium/cli/test/android/task/Corellium.kt index d2205853c4..6c71df967f 100644 --- a/corellium/cli/src/main/kotlin/flank/corellium/cli/run/test/android/task/Corellium.kt +++ b/corellium/cli/src/main/kotlin/flank/corellium/cli/test/android/task/Corellium.kt @@ -1,8 +1,8 @@ -package flank.corellium.cli.run.test.android.task +package flank.corellium.cli.test.android.task import flank.corellium.api.CorelliumApi -import flank.corellium.cli.RunTestCorelliumAndroidCommand.Companion.context -import flank.corellium.cli.RunTestCorelliumAndroidCommand.Config +import flank.corellium.cli.TestAndroidCommand.Companion.context +import flank.corellium.cli.TestAndroidCommand.Config import flank.corellium.corelliumApi import flank.exection.parallel.from import flank.exection.parallel.type diff --git a/corellium/cli/src/main/kotlin/flank/corellium/cli/run/test/android/task/JUnit.kt b/corellium/cli/src/main/kotlin/flank/corellium/cli/test/android/task/JUnit.kt similarity index 76% rename from corellium/cli/src/main/kotlin/flank/corellium/cli/run/test/android/task/JUnit.kt rename to corellium/cli/src/main/kotlin/flank/corellium/cli/test/android/task/JUnit.kt index c8ed6568e7..473befbd48 100644 --- a/corellium/cli/src/main/kotlin/flank/corellium/cli/run/test/android/task/JUnit.kt +++ b/corellium/cli/src/main/kotlin/flank/corellium/cli/test/android/task/JUnit.kt @@ -1,4 +1,4 @@ -package flank.corellium.cli.run.test.android.task +package flank.corellium.cli.test.android.task import flank.exection.parallel.type import flank.exection.parallel.using diff --git a/corellium/cli/src/test/kotlin/flank/corellium/cli/RunTestCorelliumAndroidCommandTest.kt b/corellium/cli/src/test/kotlin/flank/corellium/cli/RunTestCorelliumAndroidCommandTest.kt index 59b432e992..682b7be11c 100644 --- a/corellium/cli/src/test/kotlin/flank/corellium/cli/RunTestCorelliumAndroidCommandTest.kt +++ b/corellium/cli/src/test/kotlin/flank/corellium/cli/RunTestCorelliumAndroidCommandTest.kt @@ -1,6 +1,6 @@ package flank.corellium.cli -import flank.corellium.cli.RunTestCorelliumAndroidCommand.Companion.resolve +import flank.corellium.cli.TestAndroidCommand.Companion.resolve import flank.exection.parallel.ParallelState import flank.exection.parallel.validate import org.junit.Test @@ -10,7 +10,7 @@ class RunTestCorelliumAndroidCommandTest { @Test fun validate() { val initial: ParallelState = mapOf( - RunTestCorelliumAndroidCommand to RunTestCorelliumAndroidCommand() + TestAndroidCommand to TestAndroidCommand() ) resolve.validate(initial) diff --git a/corellium/cli/src/test/kotlin/flank/corellium/cli/run/test/android/FormatKtTest.kt b/corellium/cli/src/test/kotlin/flank/corellium/cli/run/test/android/FormatKtTest.kt deleted file mode 100644 index 2acd4cf105..0000000000 --- a/corellium/cli/src/test/kotlin/flank/corellium/cli/run/test/android/FormatKtTest.kt +++ /dev/null @@ -1,82 +0,0 @@ -package flank.corellium.cli.run.test.android - -import flank.corellium.api.AndroidApps -import flank.corellium.api.AndroidInstance -import flank.corellium.domain.RunTestCorelliumAndroid -import flank.instrument.log.Instrument -import flank.log.Event -import flank.log.event -import flank.log.invoke -import flank.log.output -import org.junit.Assert -import org.junit.Test -import java.io.File - -class FormatKtTest { - - /** - * Test is checking if all specified events have registered dedicated formatters. - * Also, the specified events should be formatted and printed to console output. - */ - @Test - fun test() { - // ======================== GIVEN ======================== - - val events = listOf( - RunTestCorelliumAndroid.Authorize event Event.Start, - RunTestCorelliumAndroid.CleanUp event Event.Start, - RunTestCorelliumAndroid.OutputDir event Event.Start, - RunTestCorelliumAndroid.DumpShards event Event.Start, - RunTestCorelliumAndroid.ExecuteTests event Event.Start, - RunTestCorelliumAndroid.CompleteTests event Event.Start, - RunTestCorelliumAndroid.GenerateReport event Event.Start, - RunTestCorelliumAndroid.InstallApks event Event.Start, - RunTestCorelliumAndroid.InvokeDevices event Event.Start, - RunTestCorelliumAndroid.LoadPreviousDurations event Event.Start, - RunTestCorelliumAndroid.ParseApkInfo event Event.Start, - RunTestCorelliumAndroid.ParseTestCases event Event.Start, - RunTestCorelliumAndroid.PrepareShards event Event.Start, - Unit event RunTestCorelliumAndroid.LoadPreviousDurations.Searching(5), - Unit event RunTestCorelliumAndroid.LoadPreviousDurations.Summary(1, 2, 3), - Unit event RunTestCorelliumAndroid.InstallApks.Status(AndroidApps.Event.Connecting.Agent("123456")), - Unit event RunTestCorelliumAndroid.InstallApks.Status(AndroidApps.Event.Connecting.Console("123456")), - Unit event RunTestCorelliumAndroid.InstallApks.Status(AndroidApps.Event.Apk.Uploading("123456", "path/to/apk.apk")), - Unit event RunTestCorelliumAndroid.InstallApks.Status(AndroidApps.Event.Apk.Installing("123456", "path/to/apk.apk")), - Unit event RunTestCorelliumAndroid.InvokeDevices.Status(AndroidInstance.Event.GettingAlreadyCreated), - Unit event RunTestCorelliumAndroid.InvokeDevices.Status(AndroidInstance.Event.Obtained(5)), - Unit event RunTestCorelliumAndroid.InvokeDevices.Status(AndroidInstance.Event.Starting(6)), - Unit event RunTestCorelliumAndroid.InvokeDevices.Status(AndroidInstance.Event.Started("123456", "AndroidDevice")), - Unit event RunTestCorelliumAndroid.InvokeDevices.Status(AndroidInstance.Event.Creating(7)), - Unit event RunTestCorelliumAndroid.InvokeDevices.Status(AndroidInstance.Event.Waiting), - Unit event RunTestCorelliumAndroid.InvokeDevices.Status(AndroidInstance.Event.Ready("123456")), - Unit event RunTestCorelliumAndroid.ExecuteTests.Status( - id = "123456", - status = Instrument.Status( - code = 0, - startTime = 1, - endTime = 2, - details = Instrument.Status.Details(emptyMap(), "Class", "Test", null) - ) - ), - Unit event RunTestCorelliumAndroid.ExecuteTests.Error("1", Exception(), "path/to/log/1", 5..10), - Unit event RunTestCorelliumAndroid.Created(File("path/to/apk.apk")), - Unit event RunTestCorelliumAndroid.AlreadyExist(File("path/to/apk.apk")), - ) - - val printLog = format.output - - // ======================== WHEN ======================== - - val nulls = events - .onEach(printLog) - .associateWith { format(it) } - .filterValues { it == null } - - // ======================== THEN ======================== - - Assert.assertTrue( - nulls.keys.joinToString("\n", "Missing formatters for:\n"), - nulls.isEmpty() - ) - } -} diff --git a/corellium/cli/src/test/kotlin/flank/corellium/cli/test/android/FormatKtTest.kt b/corellium/cli/src/test/kotlin/flank/corellium/cli/test/android/FormatKtTest.kt new file mode 100644 index 0000000000..1b65536c0a --- /dev/null +++ b/corellium/cli/src/test/kotlin/flank/corellium/cli/test/android/FormatKtTest.kt @@ -0,0 +1,82 @@ +package flank.corellium.cli.test.android + +import flank.corellium.api.AndroidApps +import flank.corellium.api.AndroidInstance +import flank.corellium.domain.TestAndroid +import flank.instrument.log.Instrument +import flank.log.Event +import flank.log.event +import flank.log.invoke +import flank.log.output +import org.junit.Assert +import org.junit.Test +import java.io.File + +class FormatKtTest { + + /** + * Test is checking if all specified events have registered dedicated formatters. + * Also, the specified events should be formatted and printed to console output. + */ + @Test + fun test() { + // ======================== GIVEN ======================== + + val events = listOf( + TestAndroid.Authorize event Event.Start, + TestAndroid.CleanUp event Event.Start, + TestAndroid.OutputDir event Event.Start, + TestAndroid.DumpShards event Event.Start, + TestAndroid.ExecuteTests event Event.Start, + TestAndroid.CompleteTests event Event.Start, + TestAndroid.GenerateReport event Event.Start, + TestAndroid.InstallApks event Event.Start, + TestAndroid.InvokeDevices event Event.Start, + TestAndroid.LoadPreviousDurations event Event.Start, + TestAndroid.ParseApkInfo event Event.Start, + TestAndroid.ParseTestCases event Event.Start, + TestAndroid.PrepareShards event Event.Start, + Unit event TestAndroid.LoadPreviousDurations.Searching(5), + Unit event TestAndroid.LoadPreviousDurations.Summary(1, 2, 3), + Unit event TestAndroid.InstallApks.Status(AndroidApps.Event.Connecting.Agent("123456")), + Unit event TestAndroid.InstallApks.Status(AndroidApps.Event.Connecting.Console("123456")), + Unit event TestAndroid.InstallApks.Status(AndroidApps.Event.Apk.Uploading("123456", "path/to/apk.apk")), + Unit event TestAndroid.InstallApks.Status(AndroidApps.Event.Apk.Installing("123456", "path/to/apk.apk")), + Unit event TestAndroid.InvokeDevices.Status(AndroidInstance.Event.GettingAlreadyCreated), + Unit event TestAndroid.InvokeDevices.Status(AndroidInstance.Event.Obtained(5)), + Unit event TestAndroid.InvokeDevices.Status(AndroidInstance.Event.Starting(6)), + Unit event TestAndroid.InvokeDevices.Status(AndroidInstance.Event.Started("123456", "AndroidDevice")), + Unit event TestAndroid.InvokeDevices.Status(AndroidInstance.Event.Creating(7)), + Unit event TestAndroid.InvokeDevices.Status(AndroidInstance.Event.Waiting), + Unit event TestAndroid.InvokeDevices.Status(AndroidInstance.Event.Ready("123456")), + Unit event TestAndroid.ExecuteTests.Status( + id = "123456", + status = Instrument.Status( + code = 0, + startTime = 1, + endTime = 2, + details = Instrument.Status.Details(emptyMap(), "Class", "Test", null) + ) + ), + Unit event TestAndroid.ExecuteTests.Error("1", Exception(), "path/to/log/1", 5..10), + Unit event TestAndroid.Created(File("path/to/apk.apk")), + Unit event TestAndroid.AlreadyExist(File("path/to/apk.apk")), + ) + + val printLog = format.output + + // ======================== WHEN ======================== + + val nulls = events + .onEach(printLog) + .associateWith { format(it) } + .filterValues { it == null } + + // ======================== THEN ======================== + + Assert.assertTrue( + nulls.keys.joinToString("\n", "Missing formatters for:\n"), + nulls.isEmpty() + ) + } +} diff --git a/corellium/cli/src/test/kotlin/flank/corellium/cli/run/test/android/task/ArgsKtTest.kt b/corellium/cli/src/test/kotlin/flank/corellium/cli/test/android/task/ArgsKtTest.kt similarity index 75% rename from corellium/cli/src/test/kotlin/flank/corellium/cli/run/test/android/task/ArgsKtTest.kt rename to corellium/cli/src/test/kotlin/flank/corellium/cli/test/android/task/ArgsKtTest.kt index 036882194f..8260afddda 100644 --- a/corellium/cli/src/test/kotlin/flank/corellium/cli/run/test/android/task/ArgsKtTest.kt +++ b/corellium/cli/src/test/kotlin/flank/corellium/cli/test/android/task/ArgsKtTest.kt @@ -1,8 +1,8 @@ -package flank.corellium.cli.run.test.android.task +package flank.corellium.cli.test.android.task import flank.corellium.api.Authorization -import flank.corellium.cli.RunTestCorelliumAndroidCommand -import flank.corellium.domain.RunTestCorelliumAndroid.Args +import flank.corellium.cli.TestAndroidCommand +import flank.corellium.domain.TestAndroid.Args import flank.exection.parallel.invoke import flank.exection.parallel.select import kotlinx.coroutines.flow.last @@ -14,13 +14,13 @@ import java.io.File class ArgsKtTest { /** - * The test is checking if args [RunTestCorelliumAndroidCommand.args] are generated correctly, basing on the given [RunTestCorelliumAndroidCommand.Config] + * The test is checking if args [TestAndroidCommand.args] are generated correctly, basing on the given [TestAndroidCommand.Config] */ @Test fun test() { // ======================== GIVEN ======================== - val testConfig = RunTestCorelliumAndroidCommand.Config().applyTestValues() + val testConfig = TestAndroidCommand.Config().applyTestValues() val expectedCredentials = Authorization.Credentials( host = "api.host.io", @@ -58,7 +58,7 @@ password: $password // ======================== WHEN ======================== val actual = runBlocking { - setOf(args)(RunTestCorelliumAndroidCommand.Config to testConfig).last().select(Args) + setOf(args)(TestAndroidCommand.Config to testConfig).last().select(Args) } // ======================== THEN ======================== diff --git a/corellium/cli/src/test/kotlin/flank/corellium/cli/run/test/android/task/ConfigKtTest.kt b/corellium/cli/src/test/kotlin/flank/corellium/cli/test/android/task/ConfigKtTest.kt similarity index 85% rename from corellium/cli/src/test/kotlin/flank/corellium/cli/run/test/android/task/ConfigKtTest.kt rename to corellium/cli/src/test/kotlin/flank/corellium/cli/test/android/task/ConfigKtTest.kt index 3d160ae22b..f95cca0efd 100644 --- a/corellium/cli/src/test/kotlin/flank/corellium/cli/run/test/android/task/ConfigKtTest.kt +++ b/corellium/cli/src/test/kotlin/flank/corellium/cli/test/android/task/ConfigKtTest.kt @@ -1,7 +1,7 @@ -package flank.corellium.cli.run.test.android.task +package flank.corellium.cli.test.android.task -import flank.corellium.cli.RunTestCorelliumAndroidCommand -import flank.corellium.cli.RunTestCorelliumAndroidCommand.Config +import flank.corellium.cli.TestAndroidCommand +import flank.corellium.cli.TestAndroidCommand.Config import flank.exection.parallel.invoke import flank.exection.parallel.select import kotlinx.coroutines.flow.last @@ -63,22 +63,22 @@ scan-previous-durations: $scanPreviousDurations """.trimIndent() } - fun RunTestCorelliumAndroidCommand.loadConfig() = runBlocking { - setOf(config)(RunTestCorelliumAndroidCommand to this@loadConfig).last().select(Config) + fun TestAndroidCommand.loadConfig() = runBlocking { + setOf(config)(TestAndroidCommand to this@loadConfig).last().select(Config) } // ======================== WHEN ======================== // Obtain default config for assertions - val defaultConfig = RunTestCorelliumAndroidCommand().loadConfig() + val defaultConfig = TestAndroidCommand().loadConfig() // Parse config from the CLI arguments. - val parsedConfig = RunTestCorelliumAndroidCommand().also { command -> + val parsedConfig = TestAndroidCommand().also { command -> CommandLine(command).parseArgs(*cliArgs) }.loadConfig() // Load config from file. - val loadedConfig = RunTestCorelliumAndroidCommand().apply { + val loadedConfig = TestAndroidCommand().apply { // Manually set path to yaml config file yamlConfigPath = File("test_config_${System.nanoTime()}.yml").apply { writeText(yamlConfig) // Create YAML config file for test diff --git a/corellium/cli/src/test/kotlin/flank/corellium/cli/run/test/android/task/Util.kt b/corellium/cli/src/test/kotlin/flank/corellium/cli/test/android/task/Util.kt similarity index 50% rename from corellium/cli/src/test/kotlin/flank/corellium/cli/run/test/android/task/Util.kt rename to corellium/cli/src/test/kotlin/flank/corellium/cli/test/android/task/Util.kt index e63191bd4f..1f9597d860 100644 --- a/corellium/cli/src/test/kotlin/flank/corellium/cli/run/test/android/task/Util.kt +++ b/corellium/cli/src/test/kotlin/flank/corellium/cli/test/android/task/Util.kt @@ -1,26 +1,26 @@ -package flank.corellium.cli.run.test.android.task +package flank.corellium.cli.test.android.task -import flank.corellium.cli.RunTestCorelliumAndroidCommand -import flank.corellium.domain.RunTestCorelliumAndroid +import flank.corellium.cli.TestAndroidCommand +import flank.corellium.domain.TestAndroid /** * Apply test values to config. Each value should be different than default. */ -fun RunTestCorelliumAndroidCommand.Config.applyTestValues() = apply { +fun TestAndroidCommand.Config.applyTestValues() = apply { auth = "test_auth.yml" project = "test project" apks = listOf( - RunTestCorelliumAndroid.Args.Apk.App( + TestAndroid.Args.Apk.App( "app1.apk", tests = listOf( - RunTestCorelliumAndroid.Args.Apk.Test("app1-test1.apk"), + TestAndroid.Args.Apk.Test("app1-test1.apk"), ) ), - RunTestCorelliumAndroid.Args.Apk.App( + TestAndroid.Args.Apk.App( "app2.apk", tests = listOf( - RunTestCorelliumAndroid.Args.Apk.Test("app2-test1.apk"), - RunTestCorelliumAndroid.Args.Apk.Test("app2-test2.apk"), + TestAndroid.Args.Apk.Test("app2-test1.apk"), + TestAndroid.Args.Apk.Test("app2-test2.apk"), ) ), ) diff --git a/corellium/domain/src/main/kotlin/flank/corellium/domain/RunTestCorelliumAndroid.kt b/corellium/domain/src/main/kotlin/flank/corellium/domain/TestAndroid.kt similarity index 87% rename from corellium/domain/src/main/kotlin/flank/corellium/domain/RunTestCorelliumAndroid.kt rename to corellium/domain/src/main/kotlin/flank/corellium/domain/TestAndroid.kt index 19a36728c0..1b9d1c11bf 100644 --- a/corellium/domain/src/main/kotlin/flank/corellium/domain/RunTestCorelliumAndroid.kt +++ b/corellium/domain/src/main/kotlin/flank/corellium/domain/TestAndroid.kt @@ -6,20 +6,20 @@ import flank.corellium.api.AndroidInstance import flank.corellium.api.AndroidTestPlan import flank.corellium.api.Authorization import flank.corellium.api.CorelliumApi -import flank.corellium.domain.RunTestCorelliumAndroid.Args.DefaultOutputDir -import flank.corellium.domain.RunTestCorelliumAndroid.Args.DefaultOutputDir.new -import flank.corellium.domain.run.test.android.step.authorize -import flank.corellium.domain.run.test.android.step.createOutputDir -import flank.corellium.domain.run.test.android.step.dumpShards -import flank.corellium.domain.run.test.android.step.executeTests -import flank.corellium.domain.run.test.android.step.finish -import flank.corellium.domain.run.test.android.step.generateReport -import flank.corellium.domain.run.test.android.step.installApks -import flank.corellium.domain.run.test.android.step.invokeDevices -import flank.corellium.domain.run.test.android.step.loadPreviousDurations -import flank.corellium.domain.run.test.android.step.parseApksInfo -import flank.corellium.domain.run.test.android.step.parseTestCasesFromApks -import flank.corellium.domain.run.test.android.step.prepareShards +import flank.corellium.domain.TestAndroid.Args.DefaultOutputDir +import flank.corellium.domain.TestAndroid.Args.DefaultOutputDir.new +import flank.corellium.domain.test.android.task.authorize +import flank.corellium.domain.test.android.task.createOutputDir +import flank.corellium.domain.test.android.task.dumpShards +import flank.corellium.domain.test.android.task.executeTests +import flank.corellium.domain.test.android.task.finish +import flank.corellium.domain.test.android.task.generateReport +import flank.corellium.domain.test.android.task.installApks +import flank.corellium.domain.test.android.task.invokeDevices +import flank.corellium.domain.test.android.task.loadPreviousDurations +import flank.corellium.domain.test.android.task.parseApksInfo +import flank.corellium.domain.test.android.task.parseTestCasesFromApks +import flank.corellium.domain.test.android.task.prepareShards import flank.exection.parallel.Parallel import flank.exection.parallel.type import flank.instrument.log.Instrument @@ -33,7 +33,7 @@ import java.text.SimpleDateFormat /** * Use case for running android tests on corellium virtual devices. */ -object RunTestCorelliumAndroid { +object TestAndroid { /** * The user arguments for the test execution. diff --git a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/Finish.kt b/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/Finish.kt deleted file mode 100644 index 2ee644b47e..0000000000 --- a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/Finish.kt +++ /dev/null @@ -1,15 +0,0 @@ -package flank.corellium.domain.run.test.android.step - -import flank.corellium.domain.RunTestCorelliumAndroid.CompleteTests -import flank.corellium.domain.RunTestCorelliumAndroid.DumpShards -import flank.corellium.domain.RunTestCorelliumAndroid.GenerateReport -import flank.exection.parallel.from -import flank.exection.parallel.using - -/** - * The final step, notifies that execution completes without exceptions. - */ -internal val finish = CompleteTests from setOf( - GenerateReport, - DumpShards -) using { } diff --git a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/Authorize.kt b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/Authorize.kt similarity index 57% rename from corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/Authorize.kt rename to corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/Authorize.kt index 47ecc81823..b795e95e89 100644 --- a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/Authorize.kt +++ b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/Authorize.kt @@ -1,7 +1,7 @@ -package flank.corellium.domain.run.test.android.step +package flank.corellium.domain.test.android.task -import flank.corellium.domain.RunTestCorelliumAndroid.Authorize -import flank.corellium.domain.RunTestCorelliumAndroid.context +import flank.corellium.domain.TestAndroid.Authorize +import flank.corellium.domain.TestAndroid.context import flank.exection.parallel.using /** diff --git a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/CreateOutputDir.kt b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/CreateOutputDir.kt similarity index 65% rename from corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/CreateOutputDir.kt rename to corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/CreateOutputDir.kt index fae399855e..3dbd18267c 100644 --- a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/CreateOutputDir.kt +++ b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/CreateOutputDir.kt @@ -1,9 +1,9 @@ -package flank.corellium.domain.run.test.android.step +package flank.corellium.domain.test.android.task -import flank.corellium.domain.RunTestCorelliumAndroid.AlreadyExist -import flank.corellium.domain.RunTestCorelliumAndroid.Created -import flank.corellium.domain.RunTestCorelliumAndroid.OutputDir -import flank.corellium.domain.RunTestCorelliumAndroid.context +import flank.corellium.domain.TestAndroid.AlreadyExist +import flank.corellium.domain.TestAndroid.Created +import flank.corellium.domain.TestAndroid.OutputDir +import flank.corellium.domain.TestAndroid.context import flank.exection.parallel.using import java.io.File diff --git a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/DumpShards.kt b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/DumpShards.kt similarity index 58% rename from corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/DumpShards.kt rename to corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/DumpShards.kt index 7303454016..55d3fcb269 100644 --- a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/DumpShards.kt +++ b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/DumpShards.kt @@ -1,10 +1,10 @@ -package flank.corellium.domain.run.test.android.step +package flank.corellium.domain.test.android.task -import flank.corellium.domain.RunTestCorelliumAndroid -import flank.corellium.domain.RunTestCorelliumAndroid.DumpShards -import flank.corellium.domain.RunTestCorelliumAndroid.OutputDir -import flank.corellium.domain.RunTestCorelliumAndroid.PrepareShards -import flank.corellium.domain.RunTestCorelliumAndroid.context +import flank.corellium.domain.TestAndroid +import flank.corellium.domain.TestAndroid.DumpShards +import flank.corellium.domain.TestAndroid.OutputDir +import flank.corellium.domain.TestAndroid.PrepareShards +import flank.corellium.domain.TestAndroid.context import flank.exection.parallel.from import flank.exection.parallel.using import flank.shard.dumpTo @@ -23,7 +23,7 @@ internal val dumpShards = DumpShards from setOf( true -> obfuscate(shards) else -> shards } dumpTo file.writer() - RunTestCorelliumAndroid.Created(file).out() + TestAndroid.Created(file).out() } private const val ANDROID_SHARD_FILENAME = "android-shards.json" diff --git a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/ExecuteTests.kt b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/ExecuteTests.kt similarity index 76% rename from corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/ExecuteTests.kt rename to corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/ExecuteTests.kt index fe6a857ef6..a3275c0f2f 100644 --- a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/ExecuteTests.kt +++ b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/ExecuteTests.kt @@ -1,14 +1,14 @@ -package flank.corellium.domain.run.test.android.step +package flank.corellium.domain.test.android.task import flank.corellium.api.AndroidTestPlan -import flank.corellium.domain.RunTestCorelliumAndroid -import flank.corellium.domain.RunTestCorelliumAndroid.Authorize -import flank.corellium.domain.RunTestCorelliumAndroid.ExecuteTests -import flank.corellium.domain.RunTestCorelliumAndroid.InstallApks -import flank.corellium.domain.RunTestCorelliumAndroid.InvokeDevices -import flank.corellium.domain.RunTestCorelliumAndroid.ParseApkInfo -import flank.corellium.domain.RunTestCorelliumAndroid.PrepareShards -import flank.corellium.domain.RunTestCorelliumAndroid.context +import flank.corellium.domain.TestAndroid +import flank.corellium.domain.TestAndroid.Authorize +import flank.corellium.domain.TestAndroid.ExecuteTests +import flank.corellium.domain.TestAndroid.InstallApks +import flank.corellium.domain.TestAndroid.InvokeDevices +import flank.corellium.domain.TestAndroid.ParseApkInfo +import flank.corellium.domain.TestAndroid.PrepareShards +import flank.corellium.domain.TestAndroid.context import flank.exection.parallel.from import flank.exection.parallel.using import flank.instrument.command.formatAmInstrumentCommand @@ -31,9 +31,9 @@ import java.io.File /** * The step is executing tests on previously invoked devices, and returning the test results. * - * The side effect is console logs from `am instrument` saved inside [RunTestCorelliumAndroid.ExecuteTests.ADB_LOG] output subdirectory. + * The side effect is console logs from `am instrument` saved inside [TestAndroid.ExecuteTests.ADB_LOG] output subdirectory. * - * The optional parsing errors are sent through [RunTestCorelliumAndroid.Context.out]. + * The optional parsing errors are sent through [TestAndroid.Context.out]. */ internal val executeTests = ExecuteTests from setOf( PrepareShards, @@ -74,7 +74,7 @@ internal val executeTests = ExecuteTests from setOf( * Prepare [AndroidTestPlan.Config] for test execution. * It is just mapping and formatting the data collected in state. */ -private fun RunTestCorelliumAndroid.Context.prepareTestPlan(): AndroidTestPlan.Config = +private fun TestAndroid.Context.prepareTestPlan(): AndroidTestPlan.Config = AndroidTestPlan.Config( shards.mapIndexed { index, shards -> ids[index] to shards.flatMap { shard: Shard.App -> @@ -89,5 +89,5 @@ private fun RunTestCorelliumAndroid.Context.prepareTestPlan(): AndroidTestPlan.C }.toMap() ) -private fun RunTestCorelliumAndroid.Context.expectedResultsCountFor(id: String): Int = +private fun TestAndroid.Context.expectedResultsCountFor(id: String): Int = shards[ids.indexOf(id)].size diff --git a/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/Finish.kt b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/Finish.kt new file mode 100644 index 0000000000..e5a64c91f1 --- /dev/null +++ b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/Finish.kt @@ -0,0 +1,15 @@ +package flank.corellium.domain.test.android.task + +import flank.corellium.domain.TestAndroid.CompleteTests +import flank.corellium.domain.TestAndroid.DumpShards +import flank.corellium.domain.TestAndroid.GenerateReport +import flank.exection.parallel.from +import flank.exection.parallel.using + +/** + * The final step, notifies that execution completes without exceptions. + */ +internal val finish = CompleteTests from setOf( + GenerateReport, + DumpShards +) using { } diff --git a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/GenerateReport.kt b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/GenerateReport.kt similarity index 82% rename from corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/GenerateReport.kt rename to corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/GenerateReport.kt index 0eeaf4d027..5517766f8d 100644 --- a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/GenerateReport.kt +++ b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/GenerateReport.kt @@ -1,10 +1,10 @@ -package flank.corellium.domain.run.test.android.step +package flank.corellium.domain.test.android.task -import flank.corellium.domain.RunTestCorelliumAndroid -import flank.corellium.domain.RunTestCorelliumAndroid.ExecuteTests -import flank.corellium.domain.RunTestCorelliumAndroid.GenerateReport -import flank.corellium.domain.RunTestCorelliumAndroid.OutputDir -import flank.corellium.domain.RunTestCorelliumAndroid.context +import flank.corellium.domain.TestAndroid +import flank.corellium.domain.TestAndroid.ExecuteTests +import flank.corellium.domain.TestAndroid.GenerateReport +import flank.corellium.domain.TestAndroid.OutputDir +import flank.corellium.domain.TestAndroid.context import flank.exection.parallel.from import flank.exection.parallel.using import flank.instrument.log.Instrument @@ -26,7 +26,7 @@ internal val generateReport = GenerateReport from setOf( .prepareInputForJUnit() .generateJUnitReport() .writeAsXml(file.bufferedWriter()) - RunTestCorelliumAndroid.Created(file).out() + TestAndroid.Created(file).out() } /** diff --git a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/InstallApks.kt b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/InstallApks.kt similarity index 65% rename from corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/InstallApks.kt rename to corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/InstallApks.kt index 4795cdbf55..a1ea248197 100644 --- a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/InstallApks.kt +++ b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/InstallApks.kt @@ -1,12 +1,12 @@ -package flank.corellium.domain.run.test.android.step +package flank.corellium.domain.test.android.task import flank.corellium.api.AndroidApps -import flank.corellium.domain.RunTestCorelliumAndroid -import flank.corellium.domain.RunTestCorelliumAndroid.Authorize -import flank.corellium.domain.RunTestCorelliumAndroid.InstallApks -import flank.corellium.domain.RunTestCorelliumAndroid.InvokeDevices -import flank.corellium.domain.RunTestCorelliumAndroid.PrepareShards -import flank.corellium.domain.RunTestCorelliumAndroid.context +import flank.corellium.domain.TestAndroid +import flank.corellium.domain.TestAndroid.Authorize +import flank.corellium.domain.TestAndroid.InstallApks +import flank.corellium.domain.TestAndroid.InvokeDevices +import flank.corellium.domain.TestAndroid.PrepareShards +import flank.corellium.domain.TestAndroid.context import flank.exection.parallel.from import flank.exection.parallel.using import flank.shard.Shard @@ -28,7 +28,7 @@ internal val installApks = InstallApks from setOf( // delay(4_000) TODO: for verification } -private fun RunTestCorelliumAndroid.Context.prepareApkToInstall(): List = +private fun TestAndroid.Context.prepareApkToInstall(): List = shards.mapIndexed { index, list: List -> AndroidApps( instanceId = ids[index], diff --git a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/InvokeDevices.kt b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/InvokeDevices.kt similarity index 73% rename from corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/InvokeDevices.kt rename to corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/InvokeDevices.kt index 9189870a0a..57a5c8565d 100644 --- a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/InvokeDevices.kt +++ b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/InvokeDevices.kt @@ -1,10 +1,10 @@ -package flank.corellium.domain.run.test.android.step +package flank.corellium.domain.test.android.task import flank.corellium.api.AndroidInstance -import flank.corellium.domain.RunTestCorelliumAndroid.Authorize -import flank.corellium.domain.RunTestCorelliumAndroid.InvokeDevices -import flank.corellium.domain.RunTestCorelliumAndroid.PrepareShards -import flank.corellium.domain.RunTestCorelliumAndroid.context +import flank.corellium.domain.TestAndroid.Authorize +import flank.corellium.domain.TestAndroid.InvokeDevices +import flank.corellium.domain.TestAndroid.PrepareShards +import flank.corellium.domain.TestAndroid.context import flank.exection.parallel.from import flank.exection.parallel.using import kotlinx.coroutines.flow.filterIsInstance diff --git a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/LoadPreviousDurations.kt b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/LoadPreviousDurations.kt similarity index 71% rename from corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/LoadPreviousDurations.kt rename to corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/LoadPreviousDurations.kt index f9b3c2aa24..ae0c8df95d 100644 --- a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/LoadPreviousDurations.kt +++ b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/LoadPreviousDurations.kt @@ -1,11 +1,11 @@ -package flank.corellium.domain.run.test.android.step +package flank.corellium.domain.test.android.task -import flank.corellium.domain.RunTestCorelliumAndroid -import flank.corellium.domain.RunTestCorelliumAndroid.Args.DefaultOutputDir.ROOT -import flank.corellium.domain.RunTestCorelliumAndroid.DEFAULT_TEST_CASE_DURATION -import flank.corellium.domain.RunTestCorelliumAndroid.LoadPreviousDurations -import flank.corellium.domain.RunTestCorelliumAndroid.ParseTestCases -import flank.corellium.domain.RunTestCorelliumAndroid.context +import flank.corellium.domain.TestAndroid +import flank.corellium.domain.TestAndroid.Args.DefaultOutputDir.ROOT +import flank.corellium.domain.TestAndroid.DEFAULT_TEST_CASE_DURATION +import flank.corellium.domain.TestAndroid.LoadPreviousDurations +import flank.corellium.domain.TestAndroid.ParseTestCases +import flank.corellium.domain.TestAndroid.context import flank.exection.parallel.from import flank.exection.parallel.using import flank.junit.calculateTestCaseDurations @@ -38,7 +38,7 @@ internal val loadPreviousDurations = LoadPreviousDurations from setOf( .apply { printStats(keys).out() } } -private fun RunTestCorelliumAndroid.Context.printStats(obtainedDurations: Set): LoadPreviousDurations.Summary { +private fun TestAndroid.Context.printStats(obtainedDurations: Set): LoadPreviousDurations.Summary { val testCasesNames = testCases.flatMap { (_, cases) -> cases }.toSet() val unknown: Int = (obtainedDurations - testCasesNames).size val matching: Int = obtainedDurations.size - unknown diff --git a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/ParseApkInfo.kt b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/ParseApkInfo.kt similarity index 70% rename from corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/ParseApkInfo.kt rename to corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/ParseApkInfo.kt index fb2eef3e57..1bde722f32 100644 --- a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/ParseApkInfo.kt +++ b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/ParseApkInfo.kt @@ -1,8 +1,8 @@ -package flank.corellium.domain.run.test.android.step +package flank.corellium.domain.test.android.task -import flank.corellium.domain.RunTestCorelliumAndroid -import flank.corellium.domain.RunTestCorelliumAndroid.ParseApkInfo -import flank.corellium.domain.RunTestCorelliumAndroid.context +import flank.corellium.domain.TestAndroid +import flank.corellium.domain.TestAndroid.ParseApkInfo +import flank.corellium.domain.TestAndroid.context import flank.exection.parallel.using /** @@ -20,7 +20,7 @@ internal val parseApksInfo = ParseApkInfo using context { testRunners[test.path] = info.testRunner } } - RunTestCorelliumAndroid.Info( + TestAndroid.Info( packageNames = packageNames, testRunners = testRunners ) diff --git a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/ParseTestCases.kt b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/ParseTestCases.kt similarity index 78% rename from corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/ParseTestCases.kt rename to corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/ParseTestCases.kt index 7fca8fc9b0..d7d11749fb 100644 --- a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/ParseTestCases.kt +++ b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/ParseTestCases.kt @@ -1,8 +1,8 @@ -package flank.corellium.domain.run.test.android.step +package flank.corellium.domain.test.android.task import flank.apk.Apk -import flank.corellium.domain.RunTestCorelliumAndroid.ParseTestCases -import flank.corellium.domain.RunTestCorelliumAndroid.context +import flank.corellium.domain.TestAndroid.ParseTestCases +import flank.corellium.domain.TestAndroid.context import flank.exection.parallel.using import flank.filter.createTestCasesFilter diff --git a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/PrepareShards.kt b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/PrepareShards.kt similarity index 75% rename from corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/PrepareShards.kt rename to corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/PrepareShards.kt index c50fb2860f..cb3d723dc6 100644 --- a/corellium/domain/src/main/kotlin/flank/corellium/domain/run/test/android/step/PrepareShards.kt +++ b/corellium/domain/src/main/kotlin/flank/corellium/domain/test/android/task/PrepareShards.kt @@ -1,10 +1,10 @@ -package flank.corellium.domain.run.test.android.step +package flank.corellium.domain.test.android.task -import flank.corellium.domain.RunTestCorelliumAndroid -import flank.corellium.domain.RunTestCorelliumAndroid.LoadPreviousDurations -import flank.corellium.domain.RunTestCorelliumAndroid.ParseTestCases -import flank.corellium.domain.RunTestCorelliumAndroid.PrepareShards -import flank.corellium.domain.RunTestCorelliumAndroid.context +import flank.corellium.domain.TestAndroid +import flank.corellium.domain.TestAndroid.LoadPreviousDurations +import flank.corellium.domain.TestAndroid.ParseTestCases +import flank.corellium.domain.TestAndroid.PrepareShards +import flank.corellium.domain.TestAndroid.context import flank.exection.parallel.from import flank.exection.parallel.using import flank.shard.Shard @@ -32,7 +32,7 @@ internal val prepareShards = PrepareShards from setOf( * It's a simple data mapping, no API calls or logical operations. */ private fun prepareDataForSharding( - apks: List, + apks: List, testCases: Map>, durations: Map, ): List = diff --git a/corellium/domain/src/test/kotlin/flank/corellium/domain/RunTestAndroidCorelliumExample.kt b/corellium/domain/src/test/kotlin/flank/corellium/domain/RunTestAndroidExample.kt similarity index 81% rename from corellium/domain/src/test/kotlin/flank/corellium/domain/RunTestAndroidCorelliumExample.kt rename to corellium/domain/src/test/kotlin/flank/corellium/domain/RunTestAndroidExample.kt index 07955f102f..6f10cb8a60 100644 --- a/corellium/domain/src/test/kotlin/flank/corellium/domain/RunTestAndroidCorelliumExample.kt +++ b/corellium/domain/src/test/kotlin/flank/corellium/domain/RunTestAndroidExample.kt @@ -3,9 +3,9 @@ package flank.corellium.domain import flank.apk.Apk import flank.corellium.api.CorelliumApi import flank.corellium.corelliumApi -import flank.corellium.domain.RunTestCorelliumAndroid.Args -import flank.corellium.domain.RunTestCorelliumAndroid.CompleteTests -import flank.corellium.domain.RunTestCorelliumAndroid.execute +import flank.corellium.domain.TestAndroid.Args +import flank.corellium.domain.TestAndroid.CompleteTests +import flank.corellium.domain.TestAndroid.execute import flank.exection.parallel.Parallel import flank.exection.parallel.invoke import flank.exection.parallel.type diff --git a/corellium/domain/src/test/kotlin/flank/corellium/domain/RunTestAndroidCorelliumTestMockApiAndroid.kt b/corellium/domain/src/test/kotlin/flank/corellium/domain/TestAndroidMockApiTest.kt similarity index 93% rename from corellium/domain/src/test/kotlin/flank/corellium/domain/RunTestAndroidCorelliumTestMockApiAndroid.kt rename to corellium/domain/src/test/kotlin/flank/corellium/domain/TestAndroidMockApiTest.kt index 84fd4e0cac..44c852276a 100644 --- a/corellium/domain/src/test/kotlin/flank/corellium/domain/RunTestAndroidCorelliumTestMockApiAndroid.kt +++ b/corellium/domain/src/test/kotlin/flank/corellium/domain/TestAndroidMockApiTest.kt @@ -3,9 +3,9 @@ package flank.corellium.domain import flank.apk.Apk import flank.corellium.api.AndroidInstance import flank.corellium.api.CorelliumApi -import flank.corellium.domain.RunTestCorelliumAndroid.Args -import flank.corellium.domain.RunTestCorelliumAndroid.CompleteTests -import flank.corellium.domain.RunTestCorelliumAndroid.execute +import flank.corellium.domain.TestAndroid.Args +import flank.corellium.domain.TestAndroid.CompleteTests +import flank.corellium.domain.TestAndroid.execute import flank.exection.parallel.Parallel import flank.exection.parallel.invoke import flank.exection.parallel.type @@ -21,7 +21,7 @@ import org.junit.Assert.assertEquals import org.junit.Test import java.io.File -class RunTestAndroidCorelliumTestMockApiAndroid { +class TestAndroidMockApiTest { private val expectedShardsCount = 4 diff --git a/corellium/domain/src/test/kotlin/flank/corellium/domain/RunTestAndroidCorelliumTestParsingAndroid.kt b/corellium/domain/src/test/kotlin/flank/corellium/domain/TestAndroidParsingTest.kt similarity index 90% rename from corellium/domain/src/test/kotlin/flank/corellium/domain/RunTestAndroidCorelliumTestParsingAndroid.kt rename to corellium/domain/src/test/kotlin/flank/corellium/domain/TestAndroidParsingTest.kt index c52257c4e0..2a9dfbabe7 100644 --- a/corellium/domain/src/test/kotlin/flank/corellium/domain/RunTestAndroidCorelliumTestParsingAndroid.kt +++ b/corellium/domain/src/test/kotlin/flank/corellium/domain/TestAndroidParsingTest.kt @@ -3,8 +3,8 @@ package flank.corellium.domain import flank.apk.Apk import flank.corellium.api.AndroidInstance import flank.corellium.api.CorelliumApi -import flank.corellium.domain.RunTestCorelliumAndroid.CompleteTests -import flank.corellium.domain.RunTestCorelliumAndroid.execute +import flank.corellium.domain.TestAndroid.CompleteTests +import flank.corellium.domain.TestAndroid.execute import flank.exection.parallel.Parallel import flank.exection.parallel.invoke import flank.exection.parallel.type @@ -20,12 +20,12 @@ import org.junit.Assert.assertEquals import org.junit.Test import java.io.File -class RunTestAndroidCorelliumTestParsingAndroid { +class TestAndroidParsingTest { private val expectedShardsCount = 20 private val args by lazy { - RunTestCorelliumAndroid.Args( + TestAndroid.Args( credentials = stubCredentials, apks = manyTestArtifactsApks(APK_PATH_TEST), maxShardsCount = expectedShardsCount, @@ -34,7 +34,7 @@ class RunTestAndroidCorelliumTestParsingAndroid { } private val initial = mapOf( - RunTestCorelliumAndroid.Args to args, + TestAndroid.Args to args, type() to CorelliumApi( authorize = { credentials -> diff --git a/corellium/domain/src/test/kotlin/flank/corellium/domain/Utils.kt b/corellium/domain/src/test/kotlin/flank/corellium/domain/Utils.kt index 2ef57606f4..bced30a720 100644 --- a/corellium/domain/src/test/kotlin/flank/corellium/domain/Utils.kt +++ b/corellium/domain/src/test/kotlin/flank/corellium/domain/Utils.kt @@ -1,7 +1,7 @@ package flank.corellium.domain import flank.corellium.api.Authorization -import flank.corellium.domain.RunTestCorelliumAndroid.Args +import flank.corellium.domain.TestAndroid.Args import kotlinx.coroutines.Job import java.util.Properties diff --git a/corellium/domain/src/test/kotlin/flank/corellium/domain/run/test/android/step/ExecuteTestsKtTest.kt b/corellium/domain/src/test/kotlin/flank/corellium/domain/test/android/task/ExecuteTestsKtTest.kt similarity index 82% rename from corellium/domain/src/test/kotlin/flank/corellium/domain/run/test/android/step/ExecuteTestsKtTest.kt rename to corellium/domain/src/test/kotlin/flank/corellium/domain/test/android/task/ExecuteTestsKtTest.kt index cfdf4db82c..e6a5345b87 100644 --- a/corellium/domain/src/test/kotlin/flank/corellium/domain/run/test/android/step/ExecuteTestsKtTest.kt +++ b/corellium/domain/src/test/kotlin/flank/corellium/domain/test/android/task/ExecuteTestsKtTest.kt @@ -1,15 +1,15 @@ -package flank.corellium.domain.run.test.android.step +package flank.corellium.domain.test.android.task import flank.corellium.api.CorelliumApi -import flank.corellium.domain.RunTestCorelliumAndroid -import flank.corellium.domain.RunTestCorelliumAndroid.Args -import flank.corellium.domain.RunTestCorelliumAndroid.Authorize -import flank.corellium.domain.RunTestCorelliumAndroid.ExecuteTests -import flank.corellium.domain.RunTestCorelliumAndroid.ExecuteTests.ADB_LOG -import flank.corellium.domain.RunTestCorelliumAndroid.InstallApks -import flank.corellium.domain.RunTestCorelliumAndroid.InvokeDevices -import flank.corellium.domain.RunTestCorelliumAndroid.ParseApkInfo -import flank.corellium.domain.RunTestCorelliumAndroid.PrepareShards +import flank.corellium.domain.TestAndroid +import flank.corellium.domain.TestAndroid.Args +import flank.corellium.domain.TestAndroid.Authorize +import flank.corellium.domain.TestAndroid.ExecuteTests +import flank.corellium.domain.TestAndroid.ExecuteTests.ADB_LOG +import flank.corellium.domain.TestAndroid.InstallApks +import flank.corellium.domain.TestAndroid.InvokeDevices +import flank.corellium.domain.TestAndroid.ParseApkInfo +import flank.corellium.domain.TestAndroid.PrepareShards import flank.corellium.domain.invalidLog import flank.corellium.domain.stubCredentials import flank.corellium.domain.validLog @@ -48,7 +48,7 @@ class ExecuteTestsKtTest { outputDir = dir.path ), PrepareShards to listOf((0..2).map { Shard.App("$it", emptyList()) }), - ParseApkInfo to RunTestCorelliumAndroid.Info(), + ParseApkInfo to TestAndroid.Info(), Authorize to Unit, InvokeDevices to listOf(instanceId), InstallApks to Unit, @@ -100,7 +100,7 @@ class ExecuteTestsKtTest { } /** - * On parsing error, the task will send the [RunTestCorelliumAndroid.ExecuteTests.Error] through [Output]. + * On parsing error, the task will send the [TestAndroid.ExecuteTests.Error] through [Output]. */ @Test fun error() { diff --git a/test_runner/src/main/kotlin/ftl/presentation/cli/corellium/test/AndroidCommand.kt b/test_runner/src/main/kotlin/ftl/presentation/cli/corellium/test/AndroidCommand.kt index 89f6ee3988..487b3e42aa 100644 --- a/test_runner/src/main/kotlin/ftl/presentation/cli/corellium/test/AndroidCommand.kt +++ b/test_runner/src/main/kotlin/ftl/presentation/cli/corellium/test/AndroidCommand.kt @@ -1,6 +1,6 @@ package ftl.presentation.cli.corellium.test -import flank.corellium.cli.RunTestCorelliumAndroidCommand +import flank.corellium.cli.TestAndroidCommand import ftl.util.PrintHelpCommand import picocli.CommandLine.Command @@ -8,7 +8,7 @@ import picocli.CommandLine.Command name = "android", synopsisHeading = "", subcommands = [ - RunTestCorelliumAndroidCommand::class + TestAndroidCommand::class ], usageHelpAutoWidth = true )