91 lines
3.5 KiB
Python
91 lines
3.5 KiB
Python
# Copyright (c) 2010 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.common_lib import error
|
|
from autotest_lib.client.cros import service_stopper
|
|
from autotest_lib.client.cros.power import power_utils
|
|
|
|
|
|
class hardware_Backlight(test.test):
|
|
version = 1
|
|
|
|
def initialize(self):
|
|
"""Perform necessary initialization prior to test run.
|
|
|
|
Private Attributes:
|
|
_backlight: power_utils.Backlight object
|
|
_services: service_stopper.ServiceStopper object
|
|
"""
|
|
super(hardware_Backlight, self).initialize()
|
|
self._backlight = None
|
|
# Stop powerd to avoid it adjusting backlight levels
|
|
self._services = service_stopper.ServiceStopper(['powerd'])
|
|
self._services.stop_services()
|
|
|
|
|
|
def run_once(self):
|
|
# optionally test keyboard backlight
|
|
kblight = None
|
|
kblight_errs = 0
|
|
try:
|
|
kblight = power_utils.KbdBacklight()
|
|
except power_utils.KbdBacklightException as e:
|
|
logging.info("Assuming no keyboard backlight due to %s", str(e))
|
|
|
|
if kblight:
|
|
init_percent = kblight.get_percent()
|
|
try:
|
|
for i in xrange(100, -1, -1):
|
|
kblight.set_percent(i)
|
|
result = int(kblight.get_percent())
|
|
if i != result:
|
|
logging.error('keyboard backlight set %d != %d get',
|
|
i, result)
|
|
kblight_errs += 1
|
|
finally:
|
|
kblight.set_percent(init_percent)
|
|
|
|
if kblight_errs:
|
|
raise error.TestFail("%d errors testing keyboard backlight." % \
|
|
kblight_errs)
|
|
|
|
self._backlight = power_utils.Backlight()
|
|
backlight_errs = 0
|
|
backlight_max = self._backlight.get_max_level()
|
|
for i in xrange(backlight_max + 1):
|
|
self._backlight.set_level(i)
|
|
result = self._backlight.get_level()
|
|
if i != result:
|
|
# The kernel Documentation/ABI/stable/sysfs-class-backlight
|
|
# states that the requested brightness may not be the
|
|
# actual_brightness.
|
|
# Although not specified in the docs, let's allow the difference
|
|
# between requested brightness and actual_brightness percent be
|
|
# within a tolerance of 1 of each other.
|
|
actual_percent = self._backlight.get_percent()
|
|
expected_percent = float(i) / float(backlight_max) * 100.0
|
|
diff_percent = abs(actual_percent - expected_percent)
|
|
log_level_func = logging.warn
|
|
if diff_percent > 1:
|
|
backlight_errs += 1
|
|
log_level_func = logging.error
|
|
log_level_func('backlight expected vs. actual exceeds error'
|
|
'tolerance')
|
|
log_level_func('backlight set %d != %d get', i, result)
|
|
log_level_func('backlight percent difference is %f%%',
|
|
diff_percent)
|
|
|
|
if backlight_errs:
|
|
raise error.TestFail("%d errors testing backlight." % \
|
|
backlight_errs)
|
|
|
|
|
|
def cleanup(self):
|
|
if self._backlight:
|
|
self._backlight.restore()
|
|
self._services.restore_services()
|
|
super(hardware_Backlight, self).cleanup()
|