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