/* * Copyright (c) 2022, Arm Ltd. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include #include #include #include #include #include "rss_ap_testsuites.h" static struct test_suite_t test_suites[] = { {.freg = register_testsuite_delegated_attest}, {.freg = register_testsuite_measured_boot}, }; /* * Return 0 if we could run all tests. * Note that this does not mean that all tests passed - only that they all run. * One should then look at each individual test result inside the * test_suites[].val field. */ static int run_tests(void) { enum test_suite_err_t ret; psa_status_t status; size_t i; /* Initialize test environment. */ rss_comms_init(PLAT_RSS_AP_SND_MHU_BASE, PLAT_RSS_AP_RCV_MHU_BASE); mbedtls_init(); status = psa_crypto_init(); if (status != PSA_SUCCESS) { printf("\n\npsa_crypto_init failed (status = %d)\n", status); return -1; } /* Run all tests. */ for (i = 0; i < ARRAY_SIZE(test_suites); ++i) { struct test_suite_t *suite = &(test_suites[i]); suite->freg(suite); ret = run_testsuite(suite); if (ret != TEST_SUITE_ERR_NO_ERROR) { printf("\n\nError during executing testsuite '%s'.\n", suite->name); return -1; } } printf("\nAll tests are run.\n"); return 0; } int run_platform_tests(void) { size_t i; int ret; int failures = 0; ret = run_tests(); if (ret != 0) { /* For some reason, we could not run all tests. */ return ret; } printf("\n\n"); /* * Print a summary of all the tests that had been run. * Also count the number of tests failure and report that back to the * caller. */ printf("SUMMARY:\n"); for (i = 0; i < ARRAY_SIZE(test_suites); ++i) { struct test_suite_t *suite = &(test_suites[i]); switch (suite->val) { case TEST_PASSED: printf(" %s PASSED.\n", suite->name); break; case TEST_FAILED: failures++; printf(" %s FAILED.\n", suite->name); break; case TEST_SKIPPED: printf(" %s SKIPPED.\n", suite->name); break; default: assert(false); break; } } printf("\n\n"); return failures; }