blob: 2996634bc5b053ea2c07ee1e565bd71c5e6e9057 [file] [log] [blame]
# Lint as: python3
# Copyright 2023 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""firmware_GSCSetup test"""
import logging
import os
from autotest_lib.client.common_lib import error
from autotest_lib.client.common_lib.cros import cr50_utils
from autotest_lib.server.cros.faft.cr50_test import Cr50Test
class firmware_GSCSetup(Cr50Test):
"""Basic test to verify DUT is ready for FAFT GSC testing.
This test checks the following FAFT GSC hardware requirements
Universal:
- Servo v4 connected
- Cr50 console is accessible
Servo Micro / C2D2:
- EFI image is google storage
- Dev image is google storage
CCD:
- Testlab mode is enabled
"""
version = 1
TMP_PATH = '/tmp/test.gsc.bin'
def validate_image_devid(self, image):
"""Verify the image is signed with the right devid."""
devid = self.gsc.get_devid()
image_name = os.path.basename(image)
logging.info('Check %s is signed with the devid %s', image_name, devid)
dest = cr50_utils.InstallImage(self.host, image, self.TMP_PATH)[0]
output = cr50_utils.GSCTool(self.host, ['-b', dest]).stdout
if devid not in output:
raise error.TestFail('Sign %s with the devid %s' %
(image_name, devid))
logging.info('%s is signed with the devid %s', image_name, devid)
def validate_efi_image(self):
"""Verify the EFI image exists."""
logging.info('Check EFI image exists on google storage')
efi_image = self.download_cr50_eraseflashinfo_image()[0]
self.validate_image_devid(efi_image)
logging.info('EFI image ok')
def validate_dbg_image(self):
"""Verify the DBG image exists and has an ok version."""
logging.info('Check DBG image')
dbg_image, dbg_version = self.download_cr50_debug_image()
logging.info('Found DBG image with version %s', dbg_version)
if dbg_version[1].startswith('0.'):
raise error.TestFail('Sign DBG image with a epoch greater than 0')
self.validate_image_devid(dbg_image)
logging.info('DBG image ok')
def check_flex_setup(self):
"""Verify the necessary DBG and EFI images exist for the dut."""
logging.info('Verify flex setup')
self.validate_efi_image()
self.validate_dbg_image()
logging.info('flex setup is ok')
def check_testlab_enabled(self):
"""Verify testlab mode is enabled."""
logging.info('Check testlab mode')
if not self.gsc.testlab_is_on():
raise error.TestFail('Enable testlab mode for ccd setups')
logging.info('Testlab mode enabled')
def check_ccd_setup(self):
"""CCD devices just need testlab mode enabled. Verify it is."""
logging.info('Verify ccd setup')
self.check_testlab_enabled()
logging.info('ccd setup is ok')
def run_once(self):
"""Main test logic"""
logging.info('Check GSC console works')
if not self.gsc:
raise error.TestFail('GSC console does not work')
logging.info('Check Servo V4 is connected')
if 'servo_v4' not in self.servo.get_servo_version():
raise error.TestFail('Run with servo v4')
if self.servo.main_device_is_ccd():
# Running with ccd_cr50 or ccd_gsc.
self.check_ccd_setup()
elif self.servo.main_device_is_flex():
# Running with c2d2 or servo micro.
self.check_flex_setup()
else:
raise error.TestFail('Use servo micro, c2d2, or ccd with servo v4')