Home | History | Annotate | Download | only in firmware_Cr50Update
      1 # Copyright 2017 The Chromium OS Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 AUTHOR = "mruthven"
      6 NAME = "firmware_Cr50Update.post_install"
      7 PURPOSE = "Verify Cr50 update"
      8 ATTRIBUTES = "suite:cr50_stress_experimental"
      9 TIME = "SHORT"
     10 TEST_TYPE = "server"
     11 DEPENDENCIES = "servo"
     12 
     13 DOC = """
     14 This test verifies Cr50 update works or recovery from erased nvmem.
     15 
     16 To test postinstall cr50 update script set test to "post_install" or use
     17 firmware_Cr50Update.post_install. To test the startup script leave the test arg
     18 blank
     19 
     20 The test will rollback to the oldest Cr50 image and then verify each update to
     21 the next newest image runs successfully. If testing post install, the test will
     22 update using cr50-update.sh. If testing the startup script the updates will be
     23 run with cr50-update.conf after reboot..
     24 
     25 The old release needs to have a version lower than the release image. The
     26 release image needs to have a version lower than the dev image. The dev image
     27 has to be newer than all of the images including the original cr50 image on
     28 the dut to be able to guarantee that the original state can be restored.
     29 
     30 If no_release path or old_release_path are given, the test will use
     31 old_release_ver and release_ver to fetch the images from gs://.
     32 
     33 If a valid path is given the version will be ignored. For example
     34 release_path='/tmp/cr50.bin.prod' or release_ver='0.0.23/ZZAF:ffffffff:7f00'
     35 could be used. The test will attempt to get the cr50 image from
     36 /tmp/cr50.bin.prod first. If that doesn't exist then it will download the
     37 version .23 image stored in google cloud storage. The version string needs to
     38 contain the epoch, major, and minor versions separated by '.' and the image
     39 board id. The image board id is optional. The tests can be run against all
     40 versions since '0.0.13'.
     41 
     42 If dev_path is not specified, then the test will get the cr50 devids and
     43 attempt to get the debug image from gs://.
     44 
     45 After the test is complete the original Cr50 image will be reflashed onto the
     46 device.
     47 
     48 @param iterations: the number of iterations to run
     49 @param dev_path: the location of the dev image. Must be built with CR50_DEV=1
     50 @param release_path: the location of the release image
     51 @param release_ver: RW and BID version string used to fetch the image from gs
     52 @param old_release_path: the location of the old release image.
     53 @param old_release_ver: RW version string used to fetch the image from gs
     54 @param test: string representing the update type. use "post_install" if the test
     55              should verify the cr50-update.sh post install script. Anything else
     56              the test will run using the cr50-update.conf startup script.
     57 """
     58 
     59 from autotest_lib.client.common_lib import error
     60 from autotest_lib.server import utils
     61 
     62 if 'args_dict' not in locals():
     63     args_dict = {}
     64 
     65 args_dict.update(utils.args_to_dict(args))
     66 servo_args = hosts.CrosHost.get_servo_arguments(args_dict)
     67 
     68 iterations = int(args_dict.get("iterations", 1))
     69 old_release_path = args_dict.get("old_release_path", "")
     70 old_release_ver = args_dict.get("old_release_ver", "")
     71 release_path = args_dict.get("release_path", "")
     72 release_ver = args_dict.get("release_ver", "")
     73 dev_path = args_dict.get("dev_path", "")
     74 
     75 def run(machine):
     76     host = hosts.create_host(machine, servo_args=servo_args)
     77 
     78     job.run_test("firmware_Cr50Update", host=host, cmdline_args=args,
     79                  release_path=release_path, release_ver=release_ver,
     80                  old_release_path=old_release_path,
     81                  old_release_ver=old_release_ver, dev_path=dev_path,
     82                  test="post_install", iterations=iterations,
     83                  full_args=args_dict)
     84 
     85 parallel_simple(run, machines)
     86