blob: 134e823ce5ade59ec63192784f84bf725aa1fd9d [file] [log] [blame]
#!/usr/bin/env python3
#
# Copyright 2023, 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.
"""A collection of integration test cases for atest."""
import os
from typing import Any, Callable
import atest_integration_test
# Note: The following constants should ideally be imported from their
# corresponding prod source code, but this makes local execution of the
# integration test harder due to some special dependencies in the prod
# code. Therefore we copy the definition here for now in favor of easier
# local integration test execution. If value changes in the source code
# breaking the integration test becomes a problem in the future, we can
# reconsider importing these constants.
# Log prefix for dry-run run command. Defined in atest/atest_main.py
_DRY_RUN_COMMAND_LOG_PREFIX = 'Internal run command from dry-run: '
class CommandVerificationTests(atest_integration_test.AtestTestCase):
"""Checks atest tradefed commands."""
@atest_integration_test.run_in_parallel
def test_animator_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = 'AnimatorTest'
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --module CtsAnimationTestCases'
' --atest-include-filter'
' CtsAnimationTestCases:android.animation.cts.AnimatorTest'
' --skip-loading-config-jar --log-level-display VERBOSE --log-level'
' VERBOSE --no-early-device-release --test-arg'
' com.android.tradefed.testtype.AndroidJUnitTest:exclude-annotation:android.platform.test.annotations.AppModeInstant'
' --enable-parameterized-modules --exclude-module-parameters'
' secondary_user --exclude-module-parameters instant_app'
' --exclude-module-parameters multi_abi'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_cts_animation_test_cases_animator_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = 'CtsAnimationTestCases:AnimatorTest'
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --module CtsAnimationTestCases'
' --atest-include-filter'
' CtsAnimationTestCases:android.animation.cts.AnimatorTest'
' --skip-loading-config-jar --log-level-display VERBOSE --log-level'
' VERBOSE --no-early-device-release --test-arg'
' com.android.tradefed.testtype.AndroidJUnitTest:exclude-annotation:android.platform.test.annotations.AppModeInstant'
' --enable-parameterized-modules --exclude-module-parameters multi_abi'
' --exclude-module-parameters instant_app --exclude-module-parameters'
' secondary_user'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_cts_sample_device_cases_shared_prefs_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = (
'CtsSampleDeviceTestCases:SampleDeviceTest#testSharedPreferences'
)
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest'
' --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --include-filter'
' CtsSampleDeviceTestCases --atest-include-filter'
' CtsSampleDeviceTestCases:android.sample.cts.SampleDeviceTest#testSharedPreferences'
' --skip-loading-config-jar --log-level-display VERBOSE --log-level'
' VERBOSE --no-early-device-release --test-arg'
' com.android.tradefed.testtype.AndroidJUnitTest:exclude-annotation:android.platform.test.annotations.AppModeInstant'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_cts_sample_device_cases_android_sample_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = 'CtsSampleDeviceTestCases:android.sample.cts'
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest'
' --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --include-filter'
' CtsSampleDeviceTestCases --atest-include-filter'
' CtsSampleDeviceTestCases:android.sample.cts --skip-loading-config-jar'
' --log-level-display VERBOSE --log-level VERBOSE'
' --no-early-device-release --test-arg'
' com.android.tradefed.testtype.AndroidJUnitTest:exclude-annotation:android.platform.test.annotations.AppModeInstant'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_cts_sample_device_cases_device_report_log_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = (
'CtsSampleDeviceTestCases:android.sample.cts.SampleDeviceReportLogTest'
)
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest'
' --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --include-filter'
' CtsSampleDeviceTestCases --atest-include-filter'
' CtsSampleDeviceTestCases:android.sample.cts.SampleDeviceReportLogTest'
' --skip-loading-config-jar --log-level-display VERBOSE --log-level'
' VERBOSE --no-early-device-release --test-arg'
' com.android.tradefed.testtype.AndroidJUnitTest:exclude-annotation:android.platform.test.annotations.AppModeInstant'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_cts_animation_cases_sample_device_cases_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = 'CtsAnimationTestCases CtsSampleDeviceTestCases'
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest'
' --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --include-filter CtsAnimationTestCases'
' --include-filter CtsSampleDeviceTestCases --skip-loading-config-jar'
' --log-level-display VERBOSE --log-level VERBOSE'
' --no-early-device-release --test-arg'
' com.android.tradefed.testtype.AndroidJUnitTest:exclude-annotation:android.platform.test.annotations.AppModeInstant'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_hello_world_tests_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = 'HelloWorldTests'
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --include-filter HelloWorldTests'
' --include-filter hallo-welt --skip-loading-config-jar'
' --log-level-display VERBOSE --log-level VERBOSE'
' --no-early-device-release'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_perinstance_camerahidl_config_injection_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = (
'PerInstance/CameraHidlTest#'
'configureInjectionStreamsAvailableOutputs/0_internal_0'
)
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --include-filter'
' VtsHalCameraProviderV2_4TargetTest --atest-include-filter'
' VtsHalCameraProviderV2_4TargetTest:PerInstance/CameraHidlTest.configureInjectionStreamsAvailableOutputs/0_internal_0'
' --skip-loading-config-jar --log-level-display VERBOSE --log-level'
' VERBOSE --no-early-device-release'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_vts_hal_camera_provider_config_injection_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = (
'VtsHalCameraProviderV2_4TargetTest:PerInstance/'
'CameraHidlTest#configureInjectionStreamsAvailableOutputs/'
'0_internal_0'
)
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --include-filter'
' VtsHalCameraProviderV2_4TargetTest --atest-include-filter'
' VtsHalCameraProviderV2_4TargetTest:PerInstance/CameraHidlTest.configureInjectionStreamsAvailableOutputs/0_internal_0'
' --skip-loading-config-jar --log-level-display VERBOSE --log-level'
' VERBOSE --no-early-device-release'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_android_animation_cts_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = 'android.animation.cts'
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --module CtsAnimationTestCases'
' --atest-include-filter CtsAnimationTestCases:android.animation.cts'
' --skip-loading-config-jar --log-level-display VERBOSE --log-level'
' VERBOSE --no-early-device-release --test-arg'
' com.android.tradefed.testtype.AndroidJUnitTest:exclude-annotation:android.platform.test.annotations.AppModeInstant'
' --enable-parameterized-modules --exclude-module-parameters multi_abi'
' --exclude-module-parameters instant_app --exclude-module-parameters'
' secondary_user'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_android_sample_cts_device_report_log_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = 'android.sample.cts.SampleDeviceReportLogTest'
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest'
' --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --include-filter'
' CtsSampleDeviceTestCases --atest-include-filter'
' CtsSampleDeviceTestCases:android.sample.cts.SampleDeviceReportLogTest'
' --skip-loading-config-jar --log-level-display VERBOSE --log-level'
' VERBOSE --no-early-device-release --test-arg'
' com.android.tradefed.testtype.AndroidJUnitTest:exclude-annotation:android.platform.test.annotations.AppModeInstant'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_android_sample_cts_shared_prefs_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = 'android.sample.cts.SampleDeviceTest#testSharedPreferences'
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest'
' --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --include-filter'
' CtsSampleDeviceTestCases --atest-include-filter'
' CtsSampleDeviceTestCases:android.sample.cts.SampleDeviceTest#testSharedPreferences'
' --skip-loading-config-jar --log-level-display VERBOSE --log-level'
' VERBOSE --no-early-device-release --test-arg'
' com.android.tradefed.testtype.AndroidJUnitTest:exclude-annotation:android.platform.test.annotations.AppModeInstant'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_hello_world_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = 'hello_world_test'
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --include-filter hello_world_test'
' --skip-loading-config-jar --log-level-display VERBOSE --log-level'
' VERBOSE --no-early-device-release'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_native_benchmark_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = 'native-benchmark'
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --include-filter native-benchmark'
' --log-level-display VERBOSE --log-level VERBOSE'
' --no-early-device-release'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_platform_native_example_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = 'platform_testing/tests/example/native'
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --include-filter hello_world_test'
' --skip-loading-config-jar --log-level-display VERBOSE --log-level'
' VERBOSE --no-early-device-release'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_platform_android_example_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = 'platform_testing/tests/example/native/Android.bp'
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --include-filter hello_world_test'
' --skip-loading-config-jar --log-level-display VERBOSE --log-level'
' VERBOSE --no-early-device-release'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_tf_core_config_native_benchmark_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = 'tools/tradefederation/core/res/config/native-benchmark.xml'
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --include-filter native-benchmark'
' --log-level-display VERBOSE --log-level VERBOSE'
' --no-early-device-release'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_quick_access_wallet_robo_test(self):
"""Verify that the test's command runs correctly."""
test_cmd = 'QuickAccessWalletRoboTests'
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --include-filter'
' QuickAccessWalletRoboTests --skip-loading-config-jar'
' --log-level-display VERBOSE --log-level VERBOSE'
' --no-early-device-release'
)
self._verify_atest_internal_runner_command(
test_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_quick_access_wallet_robo_host_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = 'QuickAccessWalletRoboTests --host'
expected_cmd = (
'atest_tradefed.sh template/atest_deviceless_test_base --template:map'
' test=atest --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --include-filter'
' QuickAccessWalletRoboTests --skip-loading-config-jar'
' --log-level-display VERBOSE --log-level VERBOSE'
' --no-early-device-release -n --prioritize-host-config'
' --skip-host-arch-check'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_cts_wifi_aware_cases_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = 'CtsWifiAwareTestCases'
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --include-filter CtsWifiAwareTestCases'
' --skip-loading-config-jar --log-level-display VERBOSE --log-level'
' VERBOSE --no-early-device-release --replicate-parent-setup'
' --multi-device-count 2'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_pts_bot_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = 'pts-bot:PAN/GN/MISC/UUID/BV-01-C'
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --include-filter pts-bot'
' --atest-include-filter pts-bot:PAN/GN/MISC/UUID/BV-01-C'
' --skip-loading-config-jar --log-level-display VERBOSE --log-level'
' VERBOSE --no-early-device-release'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_tee_ui_utils_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = 'TeeUIUtilsTest'
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --include-filter teeui_unit_tests'
' --atest-include-filter teeui_unit_tests:TeeUIUtilsTest.*'
' --skip-loading-config-jar --log-level-display VERBOSE --log-level'
' VERBOSE --no-early-device-release'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_tee_ui_utils_intersect_convext_obj_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = (
'TeeUIUtilsTest#intersectTest,ConvexObjectConstruction,'
'ConvexObjectLineIntersection'
)
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --include-filter teeui_unit_tests'
' --atest-include-filter'
' teeui_unit_tests:TeeUIUtilsTest.ConvexObjectConstruction:TeeUIUtilsTest.ConvexObjectLineIntersection:TeeUIUtilsTest.intersectTest'
' --skip-loading-config-jar --log-level-display VERBOSE --log-level'
' VERBOSE --no-early-device-release'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_cts_activity_mgr_register_ui_change_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = (
'CtsSecurityTestCases:android.security.cts.'
'ActivityManagerTest#testActivityManager_'
'registerUidChangeObserver_allPermission'
)
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --module CtsSecurityTestCases'
' --atest-include-filter'
' CtsSecurityTestCases:android.security.cts.ActivityManagerTest#testActivityManager_registerUidChangeObserver_allPermission'
' --skip-loading-config-jar --log-level-display VERBOSE --log-level'
' VERBOSE --no-early-device-release --enable-parameterized-modules'
' --exclude-module-parameters instant_app --exclude-module-parameters'
' secondary_user --exclude-module-parameters multi_abi'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_cts_activity_mgr_register_ui_change_java_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = (
'cts/tests/tests/security/src/android/security/cts/'
'ActivityManagerTest.java#testActivityManager_'
'registerUidChangeObserver_allPermission'
)
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --module CtsSecurityTestCases'
' --atest-include-filter'
' CtsSecurityTestCases:android.security.cts.ActivityManagerTest#testActivityManager_registerUidChangeObserver_allPermission'
' --skip-loading-config-jar --log-level-display VERBOSE --log-level'
' VERBOSE --no-early-device-release --enable-parameterized-modules'
' --exclude-module-parameters instant_app --exclude-module-parameters'
' secondary_user --exclude-module-parameters multi_abi'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_permission_memory_footprint_apps_size_kt_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = (
'cts/tests/tests/security/src/android/security/cts/'
'PermissionMemoryFootprintTest.kt#'
'checkAppsCantIncreasePermissionSizeAfterCreating'
)
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --module CtsSecurityTestCases'
' --atest-include-filter'
' CtsSecurityTestCases:android.security.cts.PermissionMemoryFootprintTest#checkAppsCantIncreasePermissionSizeAfterCreating'
' --skip-loading-config-jar --log-level-display VERBOSE --log-level'
' VERBOSE --no-early-device-release --enable-parameterized-modules'
' --exclude-module-parameters instant_app --exclude-module-parameters'
' multi_abi --exclude-module-parameters secondary_user'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_permission_memory_footprint_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = 'android.security.cts.PermissionMemoryFootprintTest'
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --module CtsSecurityTestCases'
' --atest-include-filter'
' CtsSecurityTestCases:android.security.cts.PermissionMemoryFootprintTest'
' --skip-loading-config-jar --log-level-display VERBOSE --log-level'
' VERBOSE --no-early-device-release --enable-parameterized-modules'
' --exclude-module-parameters multi_abi --exclude-module-parameters'
' instant_app --exclude-module-parameters secondary_user'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@atest_integration_test.run_in_parallel
def test_permission_memory_footprint_apps_size_test(self):
"""Verify that the test's command runs correctly."""
atest_cmd = (
'android.security.cts.PermissionMemoryFootprintTest#'
'checkAppsCantIncreasePermissionSizeAfterCreating'
)
expected_cmd = (
'atest_tradefed.sh template/atest_device_test_base --template:map'
' test=atest --template:map log_saver=template/log/atest_log_saver'
' --no-enable-granular-attempts --module CtsSecurityTestCases'
' --atest-include-filter'
' CtsSecurityTestCases:android.security.cts.PermissionMemoryFootprintTest#checkAppsCantIncreasePermissionSizeAfterCreating'
' --skip-loading-config-jar --log-level-display VERBOSE --log-level'
' VERBOSE --no-early-device-release --enable-parameterized-modules'
' --exclude-module-parameters secondary_user'
' --exclude-module-parameters multi_abi --exclude-module-parameters'
' instant_app'
)
self._verify_atest_internal_runner_command(
atest_cmd,
self._assert_equivalent_cmds,
expected_cmd=expected_cmd,
)
@classmethod
@atest_integration_test.setup_parallel_in_build_env
def setUpClassForParallelInBuild(cls):
"""Setup method for parallel run in build env.
This setup executes an initial run of atest on a simple method,
disregarding the results. This is needed so that atest will build any
dependencies required before the parallel run starts. Without this
setup, on certain build environment the parallel run may trigger
parallel soong build which will result in lock timeout.
"""
cls.run_atest_command(
'hello_world_test --dry-run -cit',
atest_integration_test.StepInput(
os.environ, os.environ['ANDROID_BUILD_TOP'], cls.get_config(), {}
),
include_device_serial=False,
print_output=False,
).check_returncode()
def _sanitize_runner_command(self, cmd: str) -> str:
"""Sanitize an atest runner command by removing non-essential args."""
remove_args_starting_with = [
'--skip-all-system-status-check',
'--atest-log-file-path',
'LD_LIBRARY_PATH=',
'--proto-output-file=',
'--log-root-path',
]
remove_args_with_values = ['-s', '--serial']
build_command = 'build/soong/soong_ui.bash'
original_args = cmd.split()
result_args = []
for arg in original_args:
if arg == build_command:
result_args.append(f'./{build_command}')
continue
if not any(
(arg.startswith(prefix) for prefix in remove_args_starting_with)
):
result_args.append(arg)
for arg in remove_args_with_values:
while arg in result_args:
idx = result_args.index(arg)
# Delete value index first.
del result_args[idx + 1]
del result_args[idx]
return ' '.join(result_args)
def _assert_equivalent_cmds(
self,
atest_cmd: str,
actual_cmd: str,
expected_cmd: str,
) -> None:
"""Assert that the expected command is equivalent to the actual command.
Non-essential arguments such as log directory and serial will be ignored.
Args:
atest_cmd: The atest command string that is being tested.
actual_cmd: The actual atest internal runner command string.
expected_cmd: The expected atest internal runner command string.
Returns:
"""
actual_cmd = self._sanitize_runner_command(actual_cmd)
expected_cmd = self._sanitize_runner_command(expected_cmd)
self.assertEqual(
set(actual_cmd.split()),
set(expected_cmd.split()),
'Unexpected atest internal runner command generated for the'
' atest command `%s`.\nActual:\n`%s`\nExpected:\n`%s`'
% (atest_cmd, actual_cmd, expected_cmd),
)
def _verify_atest_internal_runner_command(
self,
atest_cmd: str,
assertion_func: Callable[str, None],
**assertion_func_params: dict[str, Any],
) -> None:
"""Verifies atest's runner command using the provided assertion function.
Args:
atest_cmd: The atest command to execute. Note: Do not add the atest
binary to the beginning of the command.
assertion_func: A function that takes a test command string and an atest
internal command string and runs assertions on it.
**assertion_func_params: Parameters for the assertion function.
"""
script = self.create_atest_script()
def build_step(
step_in: atest_integration_test.StepInput,
) -> atest_integration_test.StepOutput:
result = self.run_atest_command(
atest_cmd + ' --dry-run -cit', step_in, include_device_serial=False
)
result.check_returncode()
runner_cmd = result.get_atest_log_values_from_prefix(
_DRY_RUN_COMMAND_LOG_PREFIX
)[0]
step_out = self.create_step_output()
step_out.set_snapshot_include_paths([])
step_out.add_snapshot_obj('runner_cmd', runner_cmd)
return step_out
def test_step(step_in: atest_integration_test.StepInput) -> None:
runner_cmd = step_in.get_obj('runner_cmd')
assertion_func(atest_cmd, runner_cmd, **assertion_func_params)
script.add_build_step(build_step)
script.add_test_step(test_step)
script.run()
if __name__ == '__main__':
atest_integration_test.main()