blob: b3989d7bd5fb5fb0ec9a53c2dd5b63b062afc43f [file] [log] [blame]
# Copyright 2015 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 re
from autotest_lib.client.bin import test, utils
from autotest_lib.client.common_lib import error
class _Matcher(object):
"""Extends regular expression with a match/do not match bit and
a saner definition of "match".
"""
def __init__(self, pattern):
self._pattern = pattern
# If the pattern starts with !, it means "do not match".
if pattern[0] == '!':
self._positive_match = False
pattern = pattern[1:]
else:
self._positive_match = True
# re.match() forces the RE to match from the beginning, but doesn't
# require that the RE matches the entire string, so wrap with ^$ even
# though the ^ is not strictly needed.
self._regexp = re.compile("^" + pattern + "$")
def match(self, string):
return bool(self._regexp.match(string)) == self._positive_match
_ALPHANUM = _Matcher("[\d\w]+")
_NUM = _Matcher("[\d]+")
_HEXNUM = _Matcher("0x[\da-fA-F]+")
_BIT = _Matcher("[01]")
_ANYTHING = _Matcher("!(\(error\))|") # anything but "(error)" or ""
def check(var, matcher):
"""
Runs "crossystem @var" and raises an error
if the output does not match @matcher
@param var: the name of a crossystem variable
@param matcher: a matcher that must match the output of crossystem @var
"""
output = utils.system_output("crossystem %s" % var).strip()
if not matcher.match(output):
raise error.TestFail("crossystem %s = \"%s\", does not match \"%s\"" %
(var, output, matcher._pattern))
class platform_Crossystem(test.test):
"""See control file for doc"""
version = 2
def run_once(self):
"""Checks that crossystem works and returns plausible values for
a set of variables that are implemented on all platforms.
"""
for var, matcher in (
("arch", _ALPHANUM),
("cros_debug", _BIT),
("debug_build", _BIT),
("devsw_boot", _BIT),
("devsw_cur", _BIT),
("fwid", _ANYTHING),
("hwid", _ANYTHING),
("loc_idx", _NUM),
("mainfw_act", _ALPHANUM),
("mainfw_type", _ALPHANUM),
("ro_fwid", _ANYTHING),
("tpm_fwver", _HEXNUM),
("tpm_kernver", _HEXNUM),
("wpsw_boot", _BIT),
("wpsw_cur", _BIT),
):
check(var, matcher)