xref: /rk3399_ARM-atf/plat/arm/board/tc/rse_ap_tests.c (revision 097e7d37e2bdd643b85bdbe468f259bffd745988)
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