xref: /arm-trusted-firmware/plat/arm/board/tc/rss_ap_tests.c (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
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