Index: client/site_tests/power_ARMSettings/power_ARMSettings.py |
diff --git a/client/site_tests/power_ARMSettings/power_ARMSettings.py b/client/site_tests/power_ARMSettings/power_ARMSettings.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0e3ccdd2582a842932589360a01c19b32d37e123 |
--- /dev/null |
+++ b/client/site_tests/power_ARMSettings/power_ARMSettings.py |
@@ -0,0 +1,91 @@ |
+# Copyright (c) 2011 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 glob, logging, os, re |
+from autotest_lib.client.bin import test |
+from autotest_lib.client.common_lib import error, site_power_status, utils |
+ |
+class power_ARMSettings(test.test): |
+ version = 1 |
+ |
+ def run_once(self): |
+ if not self._check_cpu_type(): |
+ raise error.TestNAError('Unsupported CPU') |
+ |
+ power_status = site_power_status.get_status() |
+ if power_status.linepower[0].online: |
+ logging.info('AC Power is online') |
+ self._on_ac = True |
+ else: |
+ logging.info('AC Power is offline') |
+ self._on_ac = False |
+ |
+ failures = '' |
+ |
+ fail_count = self._verify_wifi_power_settings() |
+ if fail_count: |
+ failures += 'wifi_failures(%d) ' % fail_count |
+ |
+ fail_count = self._verify_usb_power_settings() |
+ if fail_count: |
+ failures += 'usb_failures(%d) ' % fail_count |
+ |
+ if failures: |
+ raise error.TestFail(failures) |
+ |
+ |
+ def _check_cpu_type(self): |
+ cpuinfo = utils.read_file('/proc/cpuinfo') |
+ |
+ # Look for ARM |
+ match = re.search(r'ARMv[4-7]', cpuinfo) |
+ if match: |
+ return True |
+ |
+ logging.info(cpuinfo) |
+ return False |
+ |
+ |
+ def _verify_wifi_power_settings(self): |
+ if self._on_ac: |
+ expected_state = 'off' |
+ else: |
+ expected_state = 'on' |
+ |
+ iwconfig_out = utils.system_output('iwconfig', retain_output=True) |
+ match = re.search(r'Power Management:(.*)', iwconfig_out) |
+ if match and match.group(1) == expected_state: |
+ return 0 |
+ |
+ logging.info(iwconfig_out) |
+ return 1 |
+ |
+ |
+ def _verify_usb_power_settings(self): |
+ if self._on_ac: |
+ expected_state = 'on' |
+ else: |
+ expected_state = 'auto' |
+ |
+ dirs_path = '/sys/bus/usb/devices/*/power' |
+ dirs = glob.glob(dirs_path) |
+ if not dirs: |
+ logging.info('USB power path not found') |
+ return 1 |
+ |
+ errors = 0 |
+ for dir in dirs: |
+ level_file = os.path.join(dir, 'level') |
+ if not os.path.exists(level_file): |
+ logging.info('USB: power level file not found for %s', dir) |
+ continue |
+ |
+ out = utils.read_one_line(level_file) |
+ logging.debug('USB: path set to %s for %s', |
+ out, level_file) |
+ if out != expected_state: |
+ logging.info(level_file) |
+ errors += 1 |
+ |
+ return errors |