unplugged-system/external/autotest/server/site_tests/firmware_Cr50FIPSDS/firmware_Cr50FIPSDS.py

55 lines
1.8 KiB
Python

# Copyright 2022 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
import time
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_Cr50FIPSDS(Cr50Test):
"""
Verify cr50 fips works after coming out of deep sleep.
"""
version = 1
def apshutdown(self):
"""Shutdown the AP and give cr50 enough time to enter deep sleep."""
self.cr50.ccd_disable()
self.set_ap_off_power_mode('shutdown')
self.cr50.clear_deep_sleep_count()
time.sleep(30)
def check_ds_resume(self):
"""Check the system resumed ok."""
if not self.cr50.fips_crypto_allowed():
raise error.TestFail('Crypto not allowed after deep sleep')
# Make sure the EC jumped to RW. This could catch ec-efs issues.
logging.info(
self.ec.send_command_get_output('sysinfo', ['Jumped: yes']))
if not self.cr50.get_deep_sleep_count():
raise error.TestError('Cr50 did not enter deep sleep')
# Make sure the DUT fully booted and is sshable.
logging.info('Running %r', cr50_utils.GetRunningVersion(self.host))
def run_once(self, host):
"""Verify FIPS after deep sleep."""
if not self.cr50.has_command('fips'):
raise error.TestNAError('Cr50 does not support fips')
# Verify EC sysjump works on deep sleep resume.
self.apshutdown()
self.ec.reboot()
time.sleep(7)
self.check_ds_resume()
# Verify the AP can boot after resume without EC reset.
self.apshutdown()
self.servo.power_normal_press()
time.sleep(7)
self.check_ds_resume()