diff options
author | Erwin Jansen <jansene@google.com> | 2023-04-04 15:45:16 -0700 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-04-12 02:29:36 +0000 |
commit | 3dd39398da1540b85f46750c0ae71e543b3f9c14 (patch) | |
tree | 0ba8cfb2ada63f33d5cd87848958c93ecf16b18e | |
parent | 84a3f0c1500e5a9e4c8f0208b740fb4d2fb7813f (diff) | |
download | base-3dd39398da1540b85f46750c0ae71e543b3f9c14.tar.gz |
Hide emulator control behind a proeprty flag
Add new BooleanOption ENABLE_EMULATOR_CONTROL, the property:
android.experimental.enableEmulatorControl=true
needs to be present for the feature to be enabled. This indicates that
a user understand it is an experimental feature.
* EmulatorControlConfig is enabled only if both emulatorControl.enable
and ENABLE_EMULATOR_CONTROL are true
* Add new test cases for EmulatorControlConfig
Test: Additional unit tests
Test:
Starting a Gradle Daemon, 4 incompatible and 2 stopped Daemons could not
be reused, use --status for details
FAILURE: Build failed with an exception.
* What went wrong:
Could not determine the dependencies of task
':app:connectedAndroidTest'.
> Could not create task ':app:connectedDebugAndroidTest'.
> EmulatorControl is an experimental feature and it is disabled by
default. Please add
android.experimental.androidTest.enableEmulatorControl=true in your
gradle.properties to opt-in to this feature.
Bug: 276981739
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:1d1df569c8ba8916bb98426e85f0898028f6c1ef)
Merged-In: I8c17c12fe71329f48c449194d62293d2da416cab
Change-Id: I8c17c12fe71329f48c449194d62293d2da416cab
3 files changed, 36 insertions, 11 deletions
diff --git a/build-system/gradle-core/src/main/java/com/android/build/gradle/internal/testing/utp/emulatorcontrol/EmulatorControlConfig.kt b/build-system/gradle-core/src/main/java/com/android/build/gradle/internal/testing/utp/emulatorcontrol/EmulatorControlConfig.kt index 560859c311..3abc425a12 100644 --- a/build-system/gradle-core/src/main/java/com/android/build/gradle/internal/testing/utp/emulatorcontrol/EmulatorControlConfig.kt +++ b/build-system/gradle-core/src/main/java/com/android/build/gradle/internal/testing/utp/emulatorcontrol/EmulatorControlConfig.kt @@ -17,6 +17,7 @@ package com.android.build.gradle.internal.testing.utp import com.android.build.gradle.internal.dsl.EmulatorControl +import com.android.build.gradle.options.BooleanOption import com.android.build.gradle.options.ProjectOptions import java.io.Serializable @@ -28,8 +29,15 @@ data class EmulatorControlConfig( fun createEmulatorControlConfig( projectOptions: ProjectOptions, emulatorControl: EmulatorControl ): EmulatorControlConfig { + check( + !emulatorControl.enable || projectOptions.get(BooleanOption.ENABLE_EMULATOR_CONTROL) + ) { + "EmulatorControl is an experimental feature and it is disabled by default. " + + "Please add android.experimental.androidTest.enableEmulatorControl=true " + + "in your gradle.properties to opt-in to this feature." + } return EmulatorControlConfig( - emulatorControl.enable, + emulatorControl.enable && projectOptions.get(BooleanOption.ENABLE_EMULATOR_CONTROL), emulatorControl.allowedEndpoints.toSet(), emulatorControl.secondsValid ) diff --git a/build-system/gradle-core/src/main/java/com/android/build/gradle/options/BooleanOption.kt b/build-system/gradle-core/src/main/java/com/android/build/gradle/options/BooleanOption.kt index 471fa6e152..ac2d13214a 100644 --- a/build-system/gradle-core/src/main/java/com/android/build/gradle/options/BooleanOption.kt +++ b/build-system/gradle-core/src/main/java/com/android/build/gradle/options/BooleanOption.kt @@ -133,7 +133,7 @@ enum class BooleanOption( ENABLE_LOCAL_TESTING("android.bundletool.enableLocalTesting", false, FeatureStage.Experimental), DISABLE_MINSDKLIBRARY_CHECK("android.unsafe.disable.minSdkLibraryCheck", false, FeatureStage.Experimental), ENABLE_INSTRUMENTATION_TEST_DESUGARING("android.experimental.library.desugarAndroidTest", false, FeatureStage.Experimental), - + ENABLE_EMULATOR_CONTROL("android.experimental.androidTest.enableEmulatorControl", false, FeatureStage.Experimental), /** * When enabled, incompatible APKs installed on a testing device will be uninstalled automatically * during an instrumentation test run (e.g. When INSTALL_FAILED_UPDATE_INCOMPATIBLE error happens diff --git a/build-system/gradle-core/src/test/java/com/android/build/gradle/internal/testing/utp/emulatorcontrol/EmulatorControlConfigTest.kt b/build-system/gradle-core/src/test/java/com/android/build/gradle/internal/testing/utp/emulatorcontrol/EmulatorControlConfigTest.kt index 1505560aaf..8d63a2915a 100644 --- a/build-system/gradle-core/src/test/java/com/android/build/gradle/internal/testing/utp/emulatorcontrol/EmulatorControlConfigTest.kt +++ b/build-system/gradle-core/src/test/java/com/android/build/gradle/internal/testing/utp/emulatorcontrol/EmulatorControlConfigTest.kt @@ -24,14 +24,17 @@ import com.android.build.gradle.internal.services.DslServices import com.android.build.gradle.internal.services.createDslServices import com.android.build.gradle.internal.testing.utp.createEmulatorControlConfig import com.android.build.gradle.internal.testing.utp.createEmulatorControlConfig +import com.android.build.gradle.options.BooleanOption import com.android.build.gradle.options.IntegerOption import com.android.build.gradle.options.OptionalBooleanOption import com.android.build.gradle.options.ProjectOptions +import com.android.testutils.MockitoKt.whenever import com.google.common.collect.ImmutableMap import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Test import org.mockito.Mockito +import kotlin.test.assertFailsWith class EmulatorControlConfigTest { private lateinit var dslServices: DslServices @@ -52,36 +55,50 @@ class EmulatorControlConfigTest { } @Test + fun defaultExperimentalEnableEmulatorControlBooleanIsFalse() { + assertThat(emptyProjectOptions.get(BooleanOption.ENABLE_EMULATOR_CONTROL)).isFalse() + } + + @Test fun disableByDefault() { val emulatorControlConfig = createEmulatorControlConfig(emptyProjectOptions, emulatorControl) assertThat(emulatorControlConfig.enabled).isFalse() } + @Test + fun emulatorEnableEmulatorControlRequiresGradleProperty() { + emulatorControl.enable = true + assertFailsWith<IllegalStateException>( + message = "EmulatorControl is an experimental feature and it is disabled by default. Please add android.experimental.androidTest.enableEmulatorControl=true in your gradle.properties to opt-in to this feature.", + block = { + createEmulatorControlConfig(emptyProjectOptions, emulatorControl) + } + ) + } + @Test - fun enableByDslWithDefaultSetup() { + fun emulatorEnableEmulatorControlWithGradleProperty() { + val fakeProjectOptions = Mockito.mock(ProjectOptions::class.java) + whenever(fakeProjectOptions.get(BooleanOption.ENABLE_EMULATOR_CONTROL)).thenReturn(true) + emulatorControl.enable = true - val emulatorControlConfig = createEmulatorControlConfig(emptyProjectOptions, emulatorControl) + val emulatorControlConfig = createEmulatorControlConfig(fakeProjectOptions, emulatorControl) assertThat(emulatorControlConfig.enabled).isTrue() - assertThat(emulatorControlConfig.secondsValid).isEqualTo(3600) - assertThat(emulatorControlConfig.allowedEndpoints).isEmpty() - } + } + @Test fun setSecondsValidByDsl() { - emulatorControl.enable = true emulatorControl.secondsValid = 30 val emulatorControlConfig = createEmulatorControlConfig(emptyProjectOptions, emulatorControl) - assertThat(emulatorControlConfig.enabled).isTrue() assertThat(emulatorControlConfig.secondsValid).isEqualTo(30) assertThat(emulatorControlConfig.allowedEndpoints).isEmpty() } @Test fun setAllowEndpointsByDsl() { - emulatorControl.enable = true emulatorControl.allowedEndpoints.add("a") val emulatorControlConfig = createEmulatorControlConfig(emptyProjectOptions, emulatorControl) - assertThat(emulatorControlConfig.secondsValid).isEqualTo(3600) assertThat(emulatorControlConfig.allowedEndpoints).contains("a") assertThat(emulatorControlConfig.allowedEndpoints).hasSize(1) } |