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()
 |