1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2022, Arm Ltd. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #include <assert.h> 8*91f16700Schasinglulu #include <stdio.h> 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include <mbedtls_common.h> 11*91f16700Schasinglulu #include <plat/common/platform.h> 12*91f16700Schasinglulu #include <psa/crypto.h> 13*91f16700Schasinglulu #include <rss_comms.h> 14*91f16700Schasinglulu 15*91f16700Schasinglulu #include "rss_ap_testsuites.h" 16*91f16700Schasinglulu 17*91f16700Schasinglulu static struct test_suite_t test_suites[] = { 18*91f16700Schasinglulu {.freg = register_testsuite_delegated_attest}, 19*91f16700Schasinglulu {.freg = register_testsuite_measured_boot}, 20*91f16700Schasinglulu }; 21*91f16700Schasinglulu 22*91f16700Schasinglulu /* 23*91f16700Schasinglulu * Return 0 if we could run all tests. 24*91f16700Schasinglulu * Note that this does not mean that all tests passed - only that they all run. 25*91f16700Schasinglulu * One should then look at each individual test result inside the 26*91f16700Schasinglulu * test_suites[].val field. 27*91f16700Schasinglulu */ 28*91f16700Schasinglulu static int run_tests(void) 29*91f16700Schasinglulu { 30*91f16700Schasinglulu enum test_suite_err_t ret; 31*91f16700Schasinglulu psa_status_t status; 32*91f16700Schasinglulu size_t i; 33*91f16700Schasinglulu 34*91f16700Schasinglulu /* Initialize test environment. */ 35*91f16700Schasinglulu rss_comms_init(PLAT_RSS_AP_SND_MHU_BASE, PLAT_RSS_AP_RCV_MHU_BASE); 36*91f16700Schasinglulu mbedtls_init(); 37*91f16700Schasinglulu status = psa_crypto_init(); 38*91f16700Schasinglulu if (status != PSA_SUCCESS) { 39*91f16700Schasinglulu printf("\n\npsa_crypto_init failed (status = %d)\n", status); 40*91f16700Schasinglulu return -1; 41*91f16700Schasinglulu } 42*91f16700Schasinglulu 43*91f16700Schasinglulu /* Run all tests. */ 44*91f16700Schasinglulu for (i = 0; i < ARRAY_SIZE(test_suites); ++i) { 45*91f16700Schasinglulu struct test_suite_t *suite = &(test_suites[i]); 46*91f16700Schasinglulu 47*91f16700Schasinglulu suite->freg(suite); 48*91f16700Schasinglulu ret = run_testsuite(suite); 49*91f16700Schasinglulu if (ret != TEST_SUITE_ERR_NO_ERROR) { 50*91f16700Schasinglulu printf("\n\nError during executing testsuite '%s'.\n", suite->name); 51*91f16700Schasinglulu return -1; 52*91f16700Schasinglulu } 53*91f16700Schasinglulu } 54*91f16700Schasinglulu printf("\nAll tests are run.\n"); 55*91f16700Schasinglulu 56*91f16700Schasinglulu return 0; 57*91f16700Schasinglulu } 58*91f16700Schasinglulu 59*91f16700Schasinglulu int run_platform_tests(void) 60*91f16700Schasinglulu { 61*91f16700Schasinglulu size_t i; 62*91f16700Schasinglulu int ret; 63*91f16700Schasinglulu int failures = 0; 64*91f16700Schasinglulu 65*91f16700Schasinglulu ret = run_tests(); 66*91f16700Schasinglulu if (ret != 0) { 67*91f16700Schasinglulu /* For some reason, we could not run all tests. */ 68*91f16700Schasinglulu return ret; 69*91f16700Schasinglulu } 70*91f16700Schasinglulu 71*91f16700Schasinglulu printf("\n\n"); 72*91f16700Schasinglulu 73*91f16700Schasinglulu /* 74*91f16700Schasinglulu * Print a summary of all the tests that had been run. 75*91f16700Schasinglulu * Also count the number of tests failure and report that back to the 76*91f16700Schasinglulu * caller. 77*91f16700Schasinglulu */ 78*91f16700Schasinglulu printf("SUMMARY:\n"); 79*91f16700Schasinglulu for (i = 0; i < ARRAY_SIZE(test_suites); ++i) { 80*91f16700Schasinglulu 81*91f16700Schasinglulu struct test_suite_t *suite = &(test_suites[i]); 82*91f16700Schasinglulu 83*91f16700Schasinglulu switch (suite->val) { 84*91f16700Schasinglulu case TEST_PASSED: 85*91f16700Schasinglulu printf(" %s PASSED.\n", suite->name); 86*91f16700Schasinglulu break; 87*91f16700Schasinglulu case TEST_FAILED: 88*91f16700Schasinglulu failures++; 89*91f16700Schasinglulu printf(" %s FAILED.\n", suite->name); 90*91f16700Schasinglulu break; 91*91f16700Schasinglulu case TEST_SKIPPED: 92*91f16700Schasinglulu printf(" %s SKIPPED.\n", suite->name); 93*91f16700Schasinglulu break; 94*91f16700Schasinglulu default: 95*91f16700Schasinglulu assert(false); 96*91f16700Schasinglulu break; 97*91f16700Schasinglulu } 98*91f16700Schasinglulu } 99*91f16700Schasinglulu 100*91f16700Schasinglulu printf("\n\n"); 101*91f16700Schasinglulu 102*91f16700Schasinglulu return failures; 103*91f16700Schasinglulu } 104