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