blob: 7c8f79514f6a83d75a8a3d71126c6ca1f79bd4d1 [file] [log] [blame]
# Copyright (c) 2014 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 utils
from autotest_lib.client.common_lib import error
from autotest_lib.client.cros import touch_playback_test_base
class touch_UpdateErrors(touch_playback_test_base.touch_playback_test_base):
"""Check that touch update is tried and that there are no update errors."""
version = 1
# Older devices with Synaptics touchpads do not report firmware updates.
_INVALID_BOARDS = ['x86-alex', 'x86-alex_he', 'x86-zgb', 'x86-zgb_he',
'x86-mario', 'stout']
def _check_updates(self):
"""Fail the test if device has problems with touch firmware update.
@raises: TestFail if no update attempt occurs or if there is an error.
"""
log_cmd = 'grep -i touch /var/log/messages'
pass_terms = ['chromeos-touch-firmware-update']
fail_terms = ['error']
# Check for key terms in touch logs.
for term in pass_terms + fail_terms:
search_cmd = '%s | grep -i %s' % (log_cmd, term)
log_entries = utils.run(search_cmd, ignore_status=True).stdout
if term in fail_terms and len(log_entries) > 0:
raise error.TestFail('Error: %s.' % log_entries.split('\n')[0])
if term in pass_terms and len(log_entries) == 0:
raise error.TestFail('Touch firmware did not attempt update.')
def run_once(self):
"""Entry point of this test."""
# Skip run on devices which do not have touch inputs.
if not self._has_touchpad and not self._has_touchscreen:
logging.info('This device does not have a touch input source.')
return
# Skip run on invalid touch inputs.
device = utils.get_board()
if device.find('freon') >= 0:
device = device[:-len('_freon')]
if device in self._INVALID_BOARDS:
logging.info('This touchpad is not supported for this test.')
return
self._check_updates()