56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
# Copyright (c) 2012 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 dbus
|
|
import logging
|
|
import time
|
|
|
|
from autotest_lib.client.bin import test
|
|
from autotest_lib.client.common_lib import error
|
|
from autotest_lib.client.cros.networking import shill_context
|
|
from autotest_lib.client.cros.networking import shill_proxy
|
|
|
|
|
|
class cellular_StressEnable(test.test):
|
|
"""
|
|
Stress-tests enabling and disabling a technology at short intervals.
|
|
|
|
"""
|
|
version = 1
|
|
|
|
okerrors = [
|
|
shill_proxy.ShillProxy.ERROR_IN_PROGRESS
|
|
]
|
|
|
|
def _enable_device(self, enable):
|
|
try:
|
|
timeout = shill_proxy.ShillProxy.DEVICE_ENABLE_DISABLE_TIMEOUT
|
|
if enable:
|
|
self.device.Enable(timeout=timeout)
|
|
else:
|
|
self.device.Disable(timeout=timeout)
|
|
except dbus.exceptions.DBusException, err:
|
|
if err.get_dbus_name() in cellular_StressEnable.okerrors:
|
|
return
|
|
raise error.TestFail(err)
|
|
|
|
|
|
def _test(self, settle):
|
|
self._enable_device(False)
|
|
time.sleep(settle)
|
|
self._enable_device(True)
|
|
time.sleep(settle)
|
|
|
|
|
|
def run_once(self, test_env, cycles=3, min=15, max=25):
|
|
with test_env, shill_context.ServiceAutoConnectContext(
|
|
test_env.shill.wait_for_cellular_service_object, False):
|
|
self.device = test_env.shill.find_cellular_device_object()
|
|
for t in xrange(max, min, -1):
|
|
for n in xrange(cycles):
|
|
# deciseconds are an awesome unit.
|
|
logging.info('Cycle %d: %f seconds delay.', n, t / 10.0)
|
|
self._test(t / 10.0)
|
|
logging.info('Done.')
|