You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
4.8 KiB
114 lines
4.8 KiB
# Copyright (c) 2014 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
|
|
|
|
from autotest_lib.client.bin import test
|
|
from autotest_lib.client.bin import utils
|
|
from autotest_lib.client.common_lib import error
|
|
|
|
from autotest_lib.client.cros.cellular import mm1_constants
|
|
from autotest_lib.client.cros.cellular import test_environment
|
|
from autotest_lib.client.cros.networking import cellular_proxy
|
|
from autotest_lib.client.cros.networking import pm_proxy
|
|
from autotest_lib.client.cros.networking import shill_context
|
|
|
|
SHORT_TIMEOUT = 10
|
|
|
|
|
|
class cellular_OutOfCreditsSubscriptionState(test.test):
|
|
"""
|
|
This test verifies that shill out-of-credits behavior works properly based
|
|
on the modem subscription state.
|
|
|
|
"""
|
|
version = 1
|
|
|
|
def _initialize_modem(self, subscription_state):
|
|
# Simulate an Altair 3100 modem since that modem supports subscription
|
|
# state information.
|
|
self.test_env.shill.disable_modem_for_test_setup()
|
|
# TODO(thieule): Set the modem model using the pseudomodem testing
|
|
# interface (crbug.com/343258).
|
|
self.modem.iface_properties.Set(
|
|
mm1_constants.I_MODEM,
|
|
mm1_constants.MM_MODEM_PROPERTY_NAME_PLUGIN,
|
|
'Altair LTE')
|
|
self.pseudomm.iface_testing.SetSubscriptionState(
|
|
subscription_state)
|
|
self.test_env.shill.manager.EnableTechnology(
|
|
cellular_proxy.CellularProxy.TECHNOLOGY_CELLULAR)
|
|
# Wait for a registered state.
|
|
self.modem.wait_for_states([mm1_constants.MM_MODEM_STATE_REGISTERED,
|
|
mm1_constants.MM_MODEM_STATE_CONNECTED])
|
|
|
|
|
|
def _is_out_of_credits(self, cellular_service):
|
|
properties = cellular_service.GetProperties(utf8_strings=True)
|
|
return properties[cellular_proxy.CellularProxy.
|
|
DEVICE_PROPERTY_OUT_OF_CREDITS]
|
|
|
|
|
|
def _test_provisioned(self):
|
|
logging.info('Initialize modem with provisioned state')
|
|
self._initialize_modem(
|
|
mm1_constants.MM_MODEM_3GPP_SUBSCRIPTION_STATE_PROVISIONED)
|
|
logging.info('Verify out-of-credits is not set in cellular service')
|
|
cellular_service = \
|
|
self.test_env.shill.wait_for_cellular_service_object()
|
|
if self._is_out_of_credits(cellular_service):
|
|
error_msg = 'Service marked as out-of-credits when it ' \
|
|
'should not be.'
|
|
logging.error(error_msg)
|
|
raise error.TestFail(error_msg)
|
|
|
|
|
|
def _test_out_of_credits_at_start(self):
|
|
logging.info('Initialize modem with out-of-credits state')
|
|
self._initialize_modem(
|
|
mm1_constants.MM_MODEM_3GPP_SUBSCRIPTION_STATE_OUT_OF_DATA)
|
|
logging.info('Verify out-of-credits is set in cellular service')
|
|
cellular_service = \
|
|
self.test_env.shill.wait_for_cellular_service_object()
|
|
if not self._is_out_of_credits(cellular_service):
|
|
error_msg = 'Service not marked out-of-credits when it ' \
|
|
'should be.'
|
|
logging.error(error_msg)
|
|
raise error.TestFail(error_msg)
|
|
|
|
|
|
def _test_out_of_credits_while_connected(self):
|
|
logging.info('Initialize modem with provisioned state')
|
|
self._initialize_modem(
|
|
mm1_constants.MM_MODEM_3GPP_SUBSCRIPTION_STATE_PROVISIONED)
|
|
cellular_service = \
|
|
self.test_env.shill.wait_for_cellular_service_object()
|
|
logging.info('Mark modem as out-of-credits')
|
|
self.pseudomm.iface_testing.SetSubscriptionState(
|
|
mm1_constants.MM_MODEM_3GPP_SUBSCRIPTION_STATE_OUT_OF_DATA)
|
|
logging.info('Verify out-of-credits set in cellular service')
|
|
try:
|
|
utils.poll_for_condition(
|
|
lambda: self._is_out_of_credits(cellular_service),
|
|
exception=error.TestFail('Service failed to be marked as '
|
|
'out-of-credits.'),
|
|
timeout=SHORT_TIMEOUT)
|
|
except error.TestFail as e:
|
|
logging.error(repr(e))
|
|
raise e
|
|
|
|
|
|
def run_once(self):
|
|
"""Calls by autotest to run this test."""
|
|
self.test_env = test_environment.CellularPseudoMMTestEnvironment(
|
|
pseudomm_args=({'family': '3GPP'},))
|
|
with self.test_env, shill_context.ServiceAutoConnectContext(
|
|
self.test_env.shill.wait_for_cellular_service_object, False):
|
|
self.pseudomm = pm_proxy.PseudoMMProxy.get_proxy()
|
|
self.modem = self.pseudomm.get_modem()
|
|
|
|
self._test_provisioned()
|
|
self._test_out_of_credits_at_start()
|
|
self._test_out_of_credits_while_connected()
|