1097e7d37STamas Ban /* 2097e7d37STamas Ban * Copyright (c) 2022, Arm Ltd. All rights reserved. 3097e7d37STamas Ban * 4097e7d37STamas Ban * SPDX-License-Identifier: BSD-3-Clause 5097e7d37STamas Ban */ 6097e7d37STamas Ban 7097e7d37STamas Ban #include <assert.h> 8097e7d37STamas Ban #include <stdio.h> 9097e7d37STamas Ban 10097e7d37STamas Ban #include <mbedtls_common.h> 11097e7d37STamas Ban #include <plat/common/platform.h> 12097e7d37STamas Ban #include <psa/crypto.h> 13*7f8589cdSTamas Ban #include <rse_comms.h> 14097e7d37STamas Ban 15*7f8589cdSTamas Ban #include "rse_ap_testsuites.h" 16097e7d37STamas Ban 17097e7d37STamas Ban static struct test_suite_t test_suites[] = { 18097e7d37STamas Ban {.freg = register_testsuite_delegated_attest}, 19097e7d37STamas Ban {.freg = register_testsuite_measured_boot}, 20097e7d37STamas Ban }; 21097e7d37STamas Ban 22097e7d37STamas Ban /* 23097e7d37STamas Ban * Return 0 if we could run all tests. 24097e7d37STamas Ban * Note that this does not mean that all tests passed - only that they all run. 25097e7d37STamas Ban * One should then look at each individual test result inside the 26097e7d37STamas Ban * test_suites[].val field. 27097e7d37STamas Ban */ 28097e7d37STamas Ban static int run_tests(void) 29097e7d37STamas Ban { 30097e7d37STamas Ban enum test_suite_err_t ret; 31097e7d37STamas Ban psa_status_t status; 32097e7d37STamas Ban size_t i; 33097e7d37STamas Ban 34097e7d37STamas Ban /* Initialize test environment. */ 35*7f8589cdSTamas Ban rse_comms_init(PLAT_RSE_AP_SND_MHU_BASE, PLAT_RSE_AP_RCV_MHU_BASE); 36097e7d37STamas Ban mbedtls_init(); 37097e7d37STamas Ban status = psa_crypto_init(); 38097e7d37STamas Ban if (status != PSA_SUCCESS) { 39097e7d37STamas Ban printf("\n\npsa_crypto_init failed (status = %d)\n", status); 40097e7d37STamas Ban return -1; 41097e7d37STamas Ban } 42097e7d37STamas Ban 43097e7d37STamas Ban /* Run all tests. */ 44097e7d37STamas Ban for (i = 0; i < ARRAY_SIZE(test_suites); ++i) { 45097e7d37STamas Ban struct test_suite_t *suite = &(test_suites[i]); 46097e7d37STamas Ban 47097e7d37STamas Ban suite->freg(suite); 48097e7d37STamas Ban ret = run_testsuite(suite); 49097e7d37STamas Ban if (ret != TEST_SUITE_ERR_NO_ERROR) { 50097e7d37STamas Ban printf("\n\nError during executing testsuite '%s'.\n", suite->name); 51097e7d37STamas Ban return -1; 52097e7d37STamas Ban } 53097e7d37STamas Ban } 54097e7d37STamas Ban printf("\nAll tests are run.\n"); 55097e7d37STamas Ban 56097e7d37STamas Ban return 0; 57097e7d37STamas Ban } 58097e7d37STamas Ban 59097e7d37STamas Ban int run_platform_tests(void) 60097e7d37STamas Ban { 61097e7d37STamas Ban size_t i; 62097e7d37STamas Ban int ret; 63097e7d37STamas Ban int failures = 0; 64097e7d37STamas Ban 65097e7d37STamas Ban ret = run_tests(); 66097e7d37STamas Ban if (ret != 0) { 67097e7d37STamas Ban /* For some reason, we could not run all tests. */ 68097e7d37STamas Ban return ret; 69097e7d37STamas Ban } 70097e7d37STamas Ban 71097e7d37STamas Ban printf("\n\n"); 72097e7d37STamas Ban 73097e7d37STamas Ban /* 74097e7d37STamas Ban * Print a summary of all the tests that had been run. 75097e7d37STamas Ban * Also count the number of tests failure and report that back to the 76097e7d37STamas Ban * caller. 77097e7d37STamas Ban */ 78097e7d37STamas Ban printf("SUMMARY:\n"); 79097e7d37STamas Ban for (i = 0; i < ARRAY_SIZE(test_suites); ++i) { 80097e7d37STamas Ban 81097e7d37STamas Ban struct test_suite_t *suite = &(test_suites[i]); 82097e7d37STamas Ban 83097e7d37STamas Ban switch (suite->val) { 84097e7d37STamas Ban case TEST_PASSED: 85097e7d37STamas Ban printf(" %s PASSED.\n", suite->name); 86097e7d37STamas Ban break; 87097e7d37STamas Ban case TEST_FAILED: 88097e7d37STamas Ban failures++; 89097e7d37STamas Ban printf(" %s FAILED.\n", suite->name); 90097e7d37STamas Ban break; 91097e7d37STamas Ban case TEST_SKIPPED: 92097e7d37STamas Ban printf(" %s SKIPPED.\n", suite->name); 93097e7d37STamas Ban break; 94097e7d37STamas Ban default: 95097e7d37STamas Ban assert(false); 96097e7d37STamas Ban break; 97097e7d37STamas Ban } 98097e7d37STamas Ban } 99097e7d37STamas Ban 100097e7d37STamas Ban printf("\n\n"); 101097e7d37STamas Ban 102097e7d37STamas Ban return failures; 103097e7d37STamas Ban } 104