blob: 49d9b6ce5fd53871c1b578c9ecb6b701d88b43f2 [file] [log] [blame]
# 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, commands
from autotest_lib.client.bin import test, utils
from autotest_lib.client.common_lib import error
from autotest_lib.client.cros import power_status
class power_ARMSettings(test.test):
version = 1
def run_once(self):
if not self._check_cpu_type():
raise error.TestNAError('Unsupported CPU')
status = power_status.get_status()
if 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
fail_count = self._verify_filesystem_power_settings()
if fail_count:
failures += 'filesystem_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
def _verify_filesystem_power_settings(self):
mount_output = commands.getoutput('mount | fgrep commit=').split('\n')
if len(mount_output) == 0:
logging.debug('No file system entries with commit intervals found.')
return 1
errors = 0
# Parse for 'commit' param
for line in mount_output:
try:
commit = int(re.search(r'(commit=)([0-9]*)', line).group(2))
except:
logging.debug('Error reading commit value from \'%s\'', line)
errors += 1
continue
# Check for the correct commit interval.
if commit != 600:
logging.debug('File System: Incorrect commit interval %d', \
commit)
errors += 1
return errors