diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-11-22 00:25:00 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-11-22 00:25:00 +0000 |
commit | f113d302688b5dab7ff0bb4fe6bb4b817eb24a4d (patch) | |
tree | 94cdbabe213ffc07c4824918b8ef24948e8c4e37 | |
parent | dfede74d39387447c27315a01d1a55286f339e9c (diff) | |
parent | c27c457bbb9c4110ed22b75eaac4063651af9290 (diff) | |
download | csuite-f113d302688b5dab7ff0bb4fe6bb4b817eb24a4d.tar.gz |
Snap for 11130229 from c27c457bbb9c4110ed22b75eaac4063651af9290 to 24Q1-release
Change-Id: I5b2d437ca40b213ab3c9cd98ef15f4459144c977
7 files changed, 226 insertions, 18 deletions
diff --git a/harness/src/main/java/com/android/csuite/core/PackageModuleInfoProvider.java b/harness/src/main/java/com/android/csuite/core/PackageModuleInfoProvider.java index 56e34db..7fa0a2c 100644 --- a/harness/src/main/java/com/android/csuite/core/PackageModuleInfoProvider.java +++ b/harness/src/main/java/com/android/csuite/core/PackageModuleInfoProvider.java @@ -30,8 +30,25 @@ import java.util.stream.Stream; /** A module info provider that accepts package names and files that contains package names. */ public final class PackageModuleInfoProvider implements ModuleInfoProvider { + + @VisibleForTesting static final String ALT_PACKAGE_OPTION = "alt-package"; @VisibleForTesting static final String PACKAGE_OPTION = "package"; @VisibleForTesting static final String PACKAGE_PLACEHOLDER = "{package}"; + @VisibleForTesting static final String USE_ALT_PACKAGE_OPTION = "use-alt-package"; + + @Option( + name = USE_ALT_PACKAGE_OPTION, + description = "Use --alt-package to specify app package names.", + importance = Importance.NEVER) + private boolean mUseAltPackage = false; + + @Option( + name = ALT_PACKAGE_OPTION, + description = + "App package names. This is an alternative of '--package' in case of a name" + + " conflict of options.", + importance = Importance.NEVER) + private final Set<String> mAltPackages = new HashSet<>(); @Option( name = PACKAGE_OPTION, @@ -43,8 +60,9 @@ public final class PackageModuleInfoProvider implements ModuleInfoProvider { public Stream<ModuleInfoProvider.ModuleInfo> get(IConfiguration configuration) throws IOException { ModuleTemplate moduleTemplate = ModuleTemplate.loadFrom(configuration); + Set<String> packages = mUseAltPackage ? mAltPackages : mPackages; - return mPackages.stream() + return packages.stream() .distinct() .map( packageName -> diff --git a/harness/src/test/java/com/android/csuite/core/PackageModuleInfoProviderTest.java b/harness/src/test/java/com/android/csuite/core/PackageModuleInfoProviderTest.java index 9c1c360..c750d51 100644 --- a/harness/src/test/java/com/android/csuite/core/PackageModuleInfoProviderTest.java +++ b/harness/src/test/java/com/android/csuite/core/PackageModuleInfoProviderTest.java @@ -37,15 +37,16 @@ import java.util.stream.Stream; @RunWith(JUnit4.class) public final class PackageModuleInfoProviderTest { + private static final String PACKAGE_NAME_1 = "a"; + private static final String PACKAGE_NAME_2 = "b"; + @Rule public final TemporaryFolder tempFolder = new TemporaryFolder(); @Test public void get_templateContainsPlaceholders_replacesPlaceholdersInOutput() throws Exception { - String content = "hello placeholder%s%s world"; - String packageName1 = "a"; - String packageName2 = "b"; + final String content = "hello placeholder%s%s world"; PackageModuleInfoProvider provider = - new ProviderBuilder().addPackage(packageName1).addPackage(packageName2).build(); + new ProviderBuilder().addPackage(PACKAGE_NAME_1).addPackage(PACKAGE_NAME_2).build(); IConfiguration config = createIConfigWithTemplate( String.format( @@ -57,36 +58,90 @@ public final class PackageModuleInfoProviderTest { assertThat(collectModuleContentStrings(modulesInfo)) .containsExactly( - String.format(content, packageName1, packageName1), - String.format(content, packageName2, packageName2)); + String.format(content, PACKAGE_NAME_1, PACKAGE_NAME_1), + String.format(content, PACKAGE_NAME_2, PACKAGE_NAME_2)); } @Test public void get_containsDuplicatedPackageNames_ignoreDuplicates() throws Exception { - String packageName1 = "a"; - String packageName2 = "b"; PackageModuleInfoProvider provider = new ProviderBuilder() - .addPackage(packageName1) - .addPackage(packageName1) - .addPackage(packageName2) + .addPackage(PACKAGE_NAME_1) + .addPackage(PACKAGE_NAME_1) + .addPackage(PACKAGE_NAME_2) + .build(); + + Stream<ModuleInfoProvider.ModuleInfo> modulesInfo = provider.get(createIConfig()); + + assertThat(collectModuleNames(modulesInfo)).containsExactly(PACKAGE_NAME_1, PACKAGE_NAME_2); + } + + @Test + public void get_containsDuplicatedAltPackageNamesAndUseAlt_ignoreDuplicates() throws Exception { + PackageModuleInfoProvider provider = + new ProviderBuilder() + .setUseAltPackage(true) + .addAltPackage(PACKAGE_NAME_1) + .addAltPackage(PACKAGE_NAME_1) + .addAltPackage(PACKAGE_NAME_2) .build(); Stream<ModuleInfoProvider.ModuleInfo> modulesInfo = provider.get(createIConfig()); - assertThat(collectModuleNames(modulesInfo)).containsExactly(packageName1, packageName2); + assertThat(collectModuleNames(modulesInfo)).containsExactly(PACKAGE_NAME_1, PACKAGE_NAME_2); } @Test public void get_packageNamesProvided_returnsPackageNames() throws Exception { - String packageName1 = "a"; - String packageName2 = "b"; PackageModuleInfoProvider provider = - new ProviderBuilder().addPackage(packageName1).addPackage(packageName2).build(); + new ProviderBuilder().addPackage(PACKAGE_NAME_1).addPackage(PACKAGE_NAME_2).build(); + + Stream<ModuleInfoProvider.ModuleInfo> modulesInfo = provider.get(createIConfig()); + + assertThat(collectModuleNames(modulesInfo)).containsExactly(PACKAGE_NAME_1, PACKAGE_NAME_2); + } + + @Test + public void get_bothPackageNamesAndAltPackageNamesProvidedAndUseAlt_returnsAltPackageNames() + throws Exception { + PackageModuleInfoProvider provider = + new ProviderBuilder() + .setUseAltPackage(true) + .addPackage(PACKAGE_NAME_1) + .addAltPackage(PACKAGE_NAME_2) + .build(); + + Stream<ModuleInfoProvider.ModuleInfo> modulesInfo = provider.get(createIConfig()); + + assertThat(collectModuleNames(modulesInfo)).containsExactly(PACKAGE_NAME_2); + } + + @Test + public void get_bothPackageNamesAndAltPackageNamesProvided_returnsPackageNames() + throws Exception { + PackageModuleInfoProvider provider = + new ProviderBuilder() + .addPackage(PACKAGE_NAME_1) + .addAltPackage(PACKAGE_NAME_2) + .build(); Stream<ModuleInfoProvider.ModuleInfo> modulesInfo = provider.get(createIConfig()); - assertThat(collectModuleNames(modulesInfo)).containsExactly(packageName1, packageName2); + assertThat(collectModuleNames(modulesInfo)).containsExactly(PACKAGE_NAME_1); + } + + @Test + public void get_altPackageNamesProvidedAndUseAlt_returnsAltPackageNames() throws Exception { + PackageModuleInfoProvider provider = + new ProviderBuilder() + .setUseAltPackage(true) + .addAltPackage(PACKAGE_NAME_1) + .addAltPackage(PACKAGE_NAME_2) + .build(); + + Stream<ModuleInfoProvider.ModuleInfo> modulesInfo = provider.get(createIConfig()); + + assertThat(collectModuleNames(modulesInfo)).containsExactly(PACKAGE_NAME_1, PACKAGE_NAME_2); } private List<String> collectModuleContentStrings( @@ -102,16 +157,35 @@ public final class PackageModuleInfoProviderTest { private static final class ProviderBuilder { private final Set<String> mPackages = new HashSet<>(); + private final Set<String> mAltPackages = new HashSet<>(); + private boolean mUseAltPackage = false; ProviderBuilder addPackage(String packageName) { mPackages.add(packageName); return this; } + ProviderBuilder addAltPackage(String packageName) { + mAltPackages.add(packageName); + return this; + } + + ProviderBuilder setUseAltPackage(boolean useAltPackage) { + this.mUseAltPackage = useAltPackage; + return this; + } + PackageModuleInfoProvider build() throws Exception { + // Creates a new instance for each build() call. PackageModuleInfoProvider provider = new PackageModuleInfoProvider(); - OptionSetter optionSetter = new OptionSetter(provider); + if (mUseAltPackage) { + optionSetter.setOptionValue( + PackageModuleInfoProvider.USE_ALT_PACKAGE_OPTION, "true"); + } + for (String p : mAltPackages) { + optionSetter.setOptionValue(PackageModuleInfoProvider.ALT_PACKAGE_OPTION, p); + } for (String p : mPackages) { optionSetter.setOptionValue(PackageModuleInfoProvider.PACKAGE_OPTION, p); } diff --git a/test_targets/ats-app-crawl/Android.bp b/test_targets/ats-app-crawl/Android.bp new file mode 100644 index 0000000..b0b8e83 --- /dev/null +++ b/test_targets/ats-app-crawl/Android.bp @@ -0,0 +1,24 @@ +// Copyright (C) 2021 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package { + default_applicable_licenses: ["Android-Apache-2.0"], +} + +csuite_test { + name: "ats-app-crawl", + test_plan_include: "plan.xml", + test_config_template: "ui-automator-crawl.xml", + extra_test_config_templates: ["pre-installed-crawl.xml"], +} diff --git a/test_targets/ats-app-crawl/OWNERS b/test_targets/ats-app-crawl/OWNERS new file mode 100644 index 0000000..5834cd5 --- /dev/null +++ b/test_targets/ats-app-crawl/OWNERS @@ -0,0 +1 @@ +zhuyuecheng@google.com diff --git a/test_targets/ats-app-crawl/plan.xml b/test_targets/ats-app-crawl/plan.xml new file mode 100644 index 0000000..4ffe388 --- /dev/null +++ b/test_targets/ats-app-crawl/plan.xml @@ -0,0 +1,3 @@ +<configuration description="ATS C-Suite Crawler Test Plan"> + <target_preparer class="com.android.csuite.core.AppCrawlTesterHostPreparer"/> +</configuration> diff --git a/test_targets/ats-app-crawl/pre-installed-crawl.xml b/test_targets/ats-app-crawl/pre-installed-crawl.xml new file mode 100644 index 0000000..55808d7 --- /dev/null +++ b/test_targets/ats-app-crawl/pre-installed-crawl.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2021 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<configuration description="C-Suite Crawler test configuration"> + <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer"> + <option name="run-command" value="rm -rf /sdcard/device-info-files"/> + <option name="run-command" value="rm -rf /sdcard/report-log-files"/> + </target_preparer> + <target_preparer class="com.android.compatibility.common.tradefed.targetprep.DeviceInfoCollector"> + <option name="src-dir" value="/sdcard/device-info-files/"/> + <option name="dest-dir" value="device-info-files/"/> + <option name="temp-dir" value="temp-device-info-files/"/> + <option name="apk" value="CtsDeviceInfo.apk"/> + <option name="package" value="com.android.compatibility.common.deviceinfo"/> + <option name="throw-error" value="false"/> + </target_preparer> + <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller" /> + <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer"> + <option name="run-command" value="input keyevent KEYCODE_WAKEUP"/> + <option name="run-command" value="input keyevent KEYCODE_MENU"/> + <option name="run-command" value="input keyevent KEYCODE_HOME"/> + <option name="run-command" value="settings put global package_verifier_enable -1"/> + <option name="run-command" value="device_config put package_manager_service MinInstallableTargetSdk__min_installable_target_sdk 18" /> + <option name="teardown-command" value="settings put global package_verifier_enable 1"/> + </target_preparer> + <test class="com.android.tradefed.testtype.HostTest" > + <option name="set-option" value="package-name:{package}"/> + <option name="set-option" value="ui-automator-mode:true"/> + <option name="class" value="com.android.csuite.tests.AppCrawlTest" /> + </test> +</configuration> diff --git a/test_targets/ats-app-crawl/ui-automator-crawl.xml b/test_targets/ats-app-crawl/ui-automator-crawl.xml new file mode 100644 index 0000000..de03fb2 --- /dev/null +++ b/test_targets/ats-app-crawl/ui-automator-crawl.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2021 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<configuration description="C-Suite Crawler test configuration"> + <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer"> + <option name="run-command" value="rm -rf /sdcard/device-info-files"/> + <option name="run-command" value="rm -rf /sdcard/report-log-files"/> + </target_preparer> + <target_preparer class="com.android.compatibility.common.tradefed.targetprep.DeviceInfoCollector"> + <option name="src-dir" value="/sdcard/device-info-files/"/> + <option name="dest-dir" value="device-info-files/"/> + <option name="temp-dir" value="temp-device-info-files/"/> + <option name="apk" value="CtsDeviceInfo.apk"/> + <option name="package" value="com.android.compatibility.common.deviceinfo"/> + <option name="throw-error" value="false"/> + </target_preparer> + <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller" /> + <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer"> + <option name="run-command" value="input keyevent KEYCODE_WAKEUP"/> + <option name="run-command" value="input keyevent KEYCODE_MENU"/> + <option name="run-command" value="input keyevent KEYCODE_HOME"/> + <option name="run-command" value="settings put global package_verifier_enable -1"/> + <option name="run-command" value="device_config put package_manager_service MinInstallableTargetSdk__min_installable_target_sdk 18" /> + <option name="teardown-command" value="settings put global package_verifier_enable 1"/> + </target_preparer> + <test class="com.android.tradefed.testtype.HostTest" > + <option name="set-option" value="package-name:{package}"/> + <option name="set-option" value="install-apk:app\://{package}"/> + <option name="set-option" value="install-arg:-g"/> + <option name="set-option" value="ui-automator-mode:true"/> + <option name="class" value="com.android.csuite.tests.AppCrawlTest" /> + </test> +</configuration> |