1
package com.avito.instrumentation
3
import com.avito.test.gradle.TestProjectGenerator
4
import com.avito.test.gradle.ciRun
5
import com.avito.test.gradle.gradlew
6
import com.avito.test.gradle.module.AndroidAppModule
7
import com.avito.test.gradle.module.AndroidLibModule
8
import com.avito.test.gradle.module.Module
9
import com.avito.test.gradle.plugin.plugins
10
import org.junit.jupiter.api.Disabled
11
import org.junit.jupiter.api.Test
12
import org.junit.jupiter.api.io.TempDir
15
internal class InstrumentationTestsPluginTest {
18
fun `configuration - ok - empty instrumentation block`(@TempDir projectDir: File) {
20
projectDir = projectDir,
21
module = AndroidAppModule(
24
id(instrumentationPluginId)
26
buildGradleExtra = """
34
gradlew(projectDir, "help", dryRun = true).assertThat().buildSuccessful()
38
fun `tasks resolution - ok - empty instrumentation block`(@TempDir projectDir: File) {
40
projectDir = projectDir,
41
module = AndroidAppModule(
44
id(instrumentationPluginId)
46
buildGradleExtra = """
54
gradlew(projectDir, "tasks", dryRun = false).assertThat().buildSuccessful()
58
* IDE will turn red resolving script with plugin applied, it uses tasks or some equivalent in process
60
* todo Parameter: teamcityBuildId is required (must be digit)
64
fun `tasks resolution - ok - with configurations set and no args`(@TempDir projectDir: File) {
66
projectDir = projectDir,
67
module = AndroidAppModule(
70
id(instrumentationPluginId)
72
buildGradleExtra = instrumentationConfiguration(),
77
gradlew(projectDir, "tasks", dryRun = false).assertThat().buildSuccessful()
81
fun `run instrumentation by name - ok - in application project`(@TempDir projectDir: File) {
82
val moduleName = "app"
85
projectDir = projectDir,
86
module = AndroidAppModule(
89
id(instrumentationPluginId)
91
buildGradleExtra = instrumentationConfiguration(),
96
runGradle(projectDir, ":$moduleName:instrumentationTwoTest", "-PrunOnlyFailedTests=false").assertThat()
98
tasksShouldBeTriggered(":$moduleName:instrumentationTwoTest")
103
fun `run instrumentation by name - ok - in application project with flavors`(@TempDir projectDir: File) {
104
val moduleName = "app"
107
projectDir = projectDir,
108
module = AndroidAppModule(
111
id(instrumentationPluginId)
113
buildGradleExtra = """
114
|${instrumentationConfiguration()}
117
| flavorDimensions("version")
120
| setDimension("version")
123
| setDimension("version")
134
":$moduleName:instrumentationDemoTwoTest",
135
":$moduleName:instrumentationFullTwoTest",
136
"-PrunOnlyFailedTests=false"
139
tasksShouldBeTriggered(
140
":$moduleName:instrumentationDemoTwoTest",
141
":$moduleName:instrumentationFullTwoTest"
147
fun `run instrumentation by name - ok - in application project with multidimensional flavors`(
148
@TempDir projectDir: File
150
val moduleName = "app"
153
projectDir = projectDir,
154
module = AndroidAppModule(
157
id(instrumentationPluginId)
159
buildGradleExtra = """
160
|${instrumentationConfiguration()}
163
| flavorDimensions("version", "monetization")
166
| setDimension("version")
169
| setDimension("version")
172
| setDimension("monetization")
175
| setDimension("monetization")
186
":$moduleName:instrumentationDemoFreeTwoTest",
187
":$moduleName:instrumentationFullPaidTwoTest",
188
"-PrunOnlyFailedTests=false"
191
tasksShouldBeTriggered(
192
":$moduleName:instrumentationDemoFreeTwoTest",
193
":$moduleName:instrumentationFullPaidTwoTest"
199
fun `run instrumentation by name - ok - in library project`(@TempDir projectDir: File) {
200
val moduleName = "lib"
203
projectDir = projectDir,
204
module = AndroidLibModule(
207
id(instrumentationPluginId)
209
buildGradleExtra = instrumentationConfiguration(),
214
runGradle(projectDir, ":$moduleName:instrumentationTwoTest", "-PrunOnlyFailedTests=false").assertThat()
216
tasksShouldBeTriggered(":$moduleName:instrumentationTwoTest")
220
private fun createProject(projectDir: File, module: Module) {
221
TestProjectGenerator(
223
id("com.avito.android.gradle-logger")
225
modules = listOf(module)
226
).generateIn(projectDir)
229
private fun runGradle(projectDir: File, vararg args: String) =
232
"-PdeviceName=LOCAL",
233
"-PteamcityBuildId=0",
234
"-Papp.versionName=1",
235
"-Papp.versionCode=1",
236
"-Pavito.bitbucket.url=http://bitbucket",
237
"-Pavito.bitbucket.projectKey=AA",
238
"-Pavito.bitbucket.repositorySlug=android",
239
"-Pavito.stats.enabled=false",
240
"-Pavito.stats.host=http://stats",
241
"-Pavito.stats.fallbackHost=http://stats",
242
"-Pavito.stats.port=80",
243
"-Pavito.stats.namespace=android",
248
internal fun instrumentationConfiguration(): String = """
249
|import com.avito.instrumentation.reservation.request.Device
250
|import com.avito.instrumentation.configuration.KubernetesViaCredentials
251
|import com.avito.kotlin.dsl.getOptionalStringProperty
252
|import com.avito.instrumentation.configuration.report.ReportConfig
255
| outputDir.set(project.file("outputs"))
256
| report.set(ReportConfig.NoOp)
258
| register<KubernetesViaCredentials>("test") {
259
| url.set("http://stub")
260
| namespace.set("android-emulator")
261
| token.set(getOptionalStringProperty("kubernetesToken"))
265
| instrumentationParams = mapOf(
266
| "jobSlug" to "FunctionalTests"
271
| register("functional") {
272
| instrumentationParams = mapOf(
273
| "deviceName" to "api22"
277
| register("api22") {
278
| deviceName = "api22"
282
| minimumSuccessCount = 1
285
| staticDevicesReservation {
286
| device = Device.LocalEmulator.device(27)
295
| instrumentationParams = mapOf(
296
| "deviceName" to "api22"
300
| register("api22") {
301
| deviceName = "api22"
305
| minimumSuccessCount = 1
308
| staticDevicesReservation {
309
| device = Device.LocalEmulator.device(27)
321
| testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
322
| testInstrumentationRunnerArguments(mapOf("planSlug" to "AvitoAndroid"))