| Index: autotest/firmware_VbootCrypto/firmware_VbootCrypto.py
|
| diff --git a/autotest/firmware_VbootCrypto/firmware_VbootCrypto.py b/autotest/firmware_VbootCrypto/firmware_VbootCrypto.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ff8b8e412f3cfd299a74a1b0d6e6b77d0643d838
|
| --- /dev/null
|
| +++ b/autotest/firmware_VbootCrypto/firmware_VbootCrypto.py
|
| @@ -0,0 +1,190 @@
|
| +# Copyright (c) 2010 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 os
|
| +
|
| +from autotest_lib.client.bin import test, utils
|
| +from autotest_lib.client.common_lib import error
|
| +
|
| +class firmware_VbootCrypto(test.test):
|
| + """
|
| + Tests for correctness of verified boot reference crypto implementation.
|
| + """
|
| + version = 1
|
| + preserve_srcdir = True
|
| +
|
| + # TODO(gauravsh): Disable this autotest until we have a way
|
| + # of running these in a 64-bit environment (since for x86, this
|
| + # code is run in 64-bit mode.
|
| + #
|
| + # This issue is tracked as Issue 3792 on the Chromium OS Bug Tracker.
|
| + # http://code.google.com/p/chromium-os/issues/detail?id=3792
|
| + def setup_Disabled(self):
|
| + os.chdir(self.srcdir)
|
| + utils.make('clean all')
|
| +
|
| +
|
| + # Parses the [result] and output the key-value pairs.
|
| + def __output_result_keyvals(self, results):
|
| + for keyval in results.splitlines():
|
| + if keyval.strip().startswith('#'):
|
| + continue
|
| + key, val = keyval.split(':')
|
| + self.keyvals[key.strip()] = float(val)
|
| +
|
| +
|
| + def __generate_test_cases(self):
|
| + gen_test_case_cmd = os.path.join(self.srcdir, "tests",
|
| + "gen_test_cases.sh")
|
| + return_code = utils.system(gen_test_case_cmd, ignore_status = True)
|
| + if return_code == 255:
|
| + return False
|
| + if return_code == 1:
|
| + raise error.TestError("Couldn't generate test cases")
|
| + return True
|
| +
|
| +
|
| + def __sha_test(self):
|
| + sha_test_cmd = os.path.join(self.srcdir, "tests", "sha_tests")
|
| + return_code = utils.system(sha_test_cmd, ignore_status=True)
|
| + if return_code == 255:
|
| + return False
|
| + if return_code == 1:
|
| + raise error.TestError("SHA Test Error")
|
| + return True
|
| +
|
| +
|
| + def __rsa_test(self):
|
| + os.chdir(self.srcdir)
|
| + rsa_test_cmd = os.path.join(self.srcdir, "tests",
|
| + "run_rsa_tests.sh")
|
| + return_code = utils.system(rsa_test_cmd, ignore_status=True)
|
| + if return_code == 255:
|
| + return False
|
| + if return_code == 1:
|
| + raise error.TestError("RSA Test Error")
|
| + return True
|
| +
|
| +
|
| + def __image_verification_test(self):
|
| + image_verification_cmd = "cd %s && ./run_image_verification_tests.sh" \
|
| + % os.path.join(self.srcdir, "tests")
|
| + return_code = utils.system(image_verification_cmd,
|
| + ignore_status=True)
|
| + if return_code == 255:
|
| + return False
|
| + if return_code == 1:
|
| + raise error.TestError("Image Verification Test Error")
|
| + return True
|
| +
|
| +
|
| + def __sha_benchmark(self):
|
| + sha_benchmark_cmd = os.path.join(self.srcdir, "tests",
|
| + "sha_benchmark")
|
| + self.results = utils.system_output(sha_benchmark_cmd,
|
| + retain_output=True)
|
| + self.__output_result_keyvals(self.results)
|
| +
|
| +
|
| + def __rsa_benchmark(self):
|
| + rsa_benchmark_cmd = "cd %s && ./rsa_verify_benchmark" % \
|
| + os.path.join(self.srcdir, "tests")
|
| + self.results = utils.system_output(rsa_benchmark_cmd,
|
| + retain_output=True)
|
| + self.__output_result_keyvals(self.results)
|
| +
|
| +
|
| + def __verify_image_benchmark(self):
|
| + firmware_benchmark_cmd = "cd %s && ./firmware_verify_benchmark" % \
|
| + os.path.join(self.srcdir, "tests")
|
| + kernel_benchmark_cmd = "cd %s && ./kernel_verify_benchmark" % \
|
| + os.path.join(self.srcdir, "tests")
|
| + self.results = utils.system_output(firmware_benchmark_cmd,
|
| + retain_output=True)
|
| + self.__output_result_keyvals(self.results)
|
| + self.results = utils.system_output(kernel_benchmark_cmd,
|
| + retain_output=True)
|
| + self.__output_result_keyvals(self.results)
|
| +
|
| +
|
| + def __rollback_tests(self):
|
| + firmware_rollback_test_cmd = "cd %s && ./firmware_rollback_tests" % \
|
| + os.path.join(self.srcdir, "tests")
|
| + kernel_rollback_test_cmd = "cd %s && ./kernel_rollback_tests" % \
|
| + os.path.join(self.srcdir, "tests")
|
| + return_code = utils.system(firmware_rollback_test_cmd,
|
| + ignore_status=True)
|
| + if return_code == 255:
|
| + return False
|
| + if return_code == 1:
|
| + raise error.TestError("Firmware Rollback Test Error")
|
| +
|
| + return_code = utils.system(kernel_rollback_test_cmd,
|
| + ignore_status=True)
|
| + if return_code == 255:
|
| + return False
|
| + if return_code == 1:
|
| + raise error.TestError("KernelRollback Test Error")
|
| + return True
|
| +
|
| +
|
| + def __splicing_tests(self):
|
| + firmware_splicing_test_cmd = "cd %s && ./firmware_splicing_tests" % \
|
| + os.path.join(self.srcdir, "tests")
|
| + kernel_splicing_test_cmd = "cd %s && ./kernel_splicing_tests" % \
|
| + os.path.join(self.srcdir, "tests")
|
| + return_code = utils.system(firmware_splicing_test_cmd,
|
| + ignore_status=True)
|
| + if return_code == 255:
|
| + return False
|
| + if return_code == 1:
|
| + raise error.TestError("Firmware Splicing Test Error")
|
| +
|
| + return_code = utils.system(kernel_splicing_test_cmd,
|
| + ignore_status=True)
|
| + if return_code == 255:
|
| + return False
|
| + if return_code == 1:
|
| + raise error.TestError("Kernel Splicing Test Error")
|
| + return True
|
| +
|
| +
|
| + def run_crypto(self):
|
| + success = self.__sha_test()
|
| + if not success:
|
| + raise error.TestFail("SHA Test Failed")
|
| + success = self.__rsa_test()
|
| + if not success:
|
| + raise error.TestFail("RSA Test Failed")
|
| +
|
| +
|
| + def run_verification(self):
|
| + success = self.__image_verification_test()
|
| + if not success:
|
| + raise error.TestFail("Image Verification Test Failed")
|
| +
|
| +
|
| + def run_benchmarks(self):
|
| + self.keyvals = {}
|
| + self.__sha_benchmark()
|
| + self.__rsa_benchmark()
|
| + self.__verify_image_benchmark()
|
| + self.write_perf_keyval(self.keyvals)
|
| +
|
| +
|
| + def run_rollback(self):
|
| + success = self.__rollback_tests()
|
| + if not success:
|
| + raise error.TestFail("Rollback Tests Failed")
|
| +
|
| +
|
| + def run_splicing(self):
|
| + success = self.__splicing_tests()
|
| + if not success:
|
| + raise error.TestFail("Splicing Tests Failed")
|
| +
|
| +
|
| + def run_once(self, suite='crypto'):
|
| + self.__generate_test_cases()
|
| + getattr(self, 'run_' + suite)()
|
|
|