blob: 08c21204afdadcc43e3b58233d09f2f0429c9c90 [file] [log] [blame]
# Copyright (c) 2021 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import logging
import random
from autotest_lib.client.bin import test
from autotest_lib.client.common_lib import error
from autotest_lib.client.cros.cellular import cellular_logging
from autotest_lib.client.cros.cellular import hermes_utils
log = cellular_logging.SetupCellularLogging('HermesMultiProfile')
class cellular_Hermes_MultiProfile(test.test):
"""
Test that Hermes can perform enable/disable operations on multiple profiles
Prerequisites
1) For test CI:
Before running this test on test CI, two profiles need to be created on
go/stork-profile. The profiles required to be linked to the EID of the dut.
Profiles with class=operational and type=Android GTS test are known to work
well with this test.
We rely on the SMDS event to find the activation codes for the test.
There is a limit of 99 downloads before profiles to be deleted and
recreated.(b/181723689)
2) For prod CI:
Install two production profiles before running the test.
"""
version = 1
def run_once(self, test_env, is_prod_ci=False):
""" Enable/Disable a profile """
self.is_prod_ci = is_prod_ci
self.mm_proxy, self.hermes_manager, euicc_path = \
hermes_utils.initialize_test(is_prod_ci)
# separate testci and prodici procedure to get 2 iccids
if not is_prod_ci:
first_iccid = hermes_utils.install_profile_test(euicc_path, self.hermes_manager)
second_iccid = hermes_utils.install_profile_test(euicc_path, self.hermes_manager)
else:
_, installed_profiles = \
hermes_utils.request_installed_profiles(euicc_path, self.hermes_manager)
profiles_count = len(installed_profiles)
if profiles_count < 2:
raise error.TestError('Two distinct profiles need to be '
'installed before test begins but count is '+ profiles_count)
first_iccid = installed_profiles.values()[0].iccid
second_iccid = installed_profiles.values()[1].iccid
if not first_iccid or not second_iccid :
fail_iccid = 'first' if not first_iccid else 'second'
raise error.TestError('Could not get' + fail_iccid + ' iccid')
if first_iccid == second_iccid:
raise error.TestError('Two distinct profiles need to be installed '
'before test begins. Got only ' + first_iccid)
# first get two profiles, check first_iccid and disable if not disabled,
# also check second profile is enabled or not. if not enable 2nd one
logging.info('Disabling first profile to prevent enabling already '
'enabled profile in next stress loop. first_iccid:%s, '
'second_iccid:%s', first_iccid, second_iccid)
# get profile state to make sure to keep in expected state
first_state = hermes_utils.get_profile_state(
euicc_path, self.hermes_manager, first_iccid)
if first_state:
hermes_utils.set_profile_state(
False, euicc_path, self.hermes_manager, first_iccid, None)
second_state = hermes_utils.get_profile_state(
euicc_path, self.hermes_manager, second_iccid)
if not second_state:
hermes_utils.set_profile_state(
True, euicc_path, self.hermes_manager, second_iccid, None)
logging.info('Stress enable/disable profiles')
for i in range(1,5):
logging.info('Iteration :: %d', i)
for iccid in [first_iccid, second_iccid]:
if not hermes_utils.get_profile_state(
euicc_path, self.hermes_manager, iccid):
logging.info('Enabling profile:%s', iccid)
hermes_utils.enable_or_disable_profile_test(
euicc_path, self.hermes_manager, iccid, True)
explicitly_disable_profile = random.choice([True,False])
if (explicitly_disable_profile):
if hermes_utils.get_profile_state(
euicc_path, self.hermes_manager, iccid):
logging.info('Disabling profile:%s', iccid)
hermes_utils.enable_or_disable_profile_test(
euicc_path, self.hermes_manager, iccid, False)
logging.info('HermesMultiProfileTest Completed')