blob: c35ac7c5e86ff5ec1dc272ceb3029e34b6c9d3dd [file] [log] [blame]
Pascal Brandc639ac82015-07-02 08:53:34 +02001/*
Jens Wiklander02389a92016-12-16 11:13:38 +01002 * Copyright (c) 2016, Linaro Limited
Pascal Brandc639ac82015-07-02 08:53:34 +02003 * Copyright (c) 2014, STMicroelectronics International N.V.
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License Version 2 as
7 * published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 */
14
Jens Wiklander02389a92016-12-16 11:13:38 +010015#include <err.h>
Etienne Carriere7d18f552017-04-04 09:46:29 +020016#include <inttypes.h>
Jens Wiklander02389a92016-12-16 11:13:38 +010017#include <signal.h>
Pascal Brandc639ac82015-07-02 08:53:34 +020018#include <stdio.h>
Cedric Chaumontc3b6c282015-09-25 03:05:18 +020019#include <stdlib.h>
Pascal Brandc639ac82015-07-02 08:53:34 +020020#include <string.h>
Cedric Chaumontc3b6c282015-09-25 03:05:18 +020021#include <unistd.h>
Pascal Brandc639ac82015-07-02 08:53:34 +020022
23#include <adbg.h>
24#include "xtest_test.h"
25#include "xtest_helpers.h"
Igor Opaniuk136644a2016-09-13 13:40:56 +030026
27/* include here shandalone tests */
Igor Opaniukf9b7fd22016-09-16 16:22:34 +030028#include "crypto_common.h"
Igor Opaniuk136644a2016-09-13 13:40:56 +030029
Pascal Brandc639ac82015-07-02 08:53:34 +020030
Jens Wiklander74abfe32017-01-03 14:17:47 +010031ADBG_SUITE_DEFINE(benchmark);
Jerome Forissier213ca8a2017-03-31 11:27:56 +020032#ifdef WITH_GP_TESTS
33ADBG_SUITE_DEFINE(gp);
34#endif
35ADBG_SUITE_DEFINE(regression);
Igor Opaniuk136644a2016-09-13 13:40:56 +030036
Jens Wiklander2190cdc2015-03-31 13:37:09 +020037char *_device = NULL;
Cedric Chaumontc3b6c282015-09-25 03:05:18 +020038unsigned int level = 0;
39static const char glevel[] = "0";
Jerome Forissier213ca8a2017-03-31 11:27:56 +020040#ifdef WITH_GP_TESTS
41static char gsuitename[] = "regression+gp";
42#else
43static char gsuitename[] = "regression";
44#endif
Cedric Chaumontc3b6c282015-09-25 03:05:18 +020045
46void usage(char *program);
47
48void usage(char *program)
49{
50 printf("Usage: %s <options> <test_id>\n", program);
51 printf("\n");
52 printf("options:\n");
Jerome Forissier213ca8a2017-03-31 11:27:56 +020053 printf("\t-d <device-type> TEE device path. Default not set (use any)\n");
54 printf("\t-l <level> Test level [0-15]. Values higher than 0 enable\n");
55 printf("\t optional tests. Default: 0. All tests: 15.\n");
56 printf("\t-t <test_suite> Available test suites: regression benchmark");
57#ifdef WITH_GP_TESTS
58 printf(" gp");
59#endif
60 printf("\n");
61 printf("\t To run several suites, use multiple names\n");
62 printf("\t separated by a '+')\n");
63 printf("\t Default value: '%s'\n", gsuitename);
64 printf("\t-h Show usage\n");
Igor Opaniuk136644a2016-09-13 13:40:56 +030065 printf("applets:\n");
Jerome Forissier213ca8a2017-03-31 11:27:56 +020066 printf("\t--sha-perf [opts] SHA performance testing tool (-h for usage)\n");
67 printf("\t--aes-perf [opts] AES performance testing tool (-h for usage)\n");
Etienne Carriere41343db2017-03-17 15:38:52 +010068#ifdef CFG_SECURE_DATA_PATH
Jerome Forissier213ca8a2017-03-31 11:27:56 +020069 printf("\t--sdp-basic [opts] Basic Secure Data Path test setup ('-h' for usage)\n");
Etienne Carriere41343db2017-03-17 15:38:52 +010070#endif
71 printf("\n");
Cedric Chaumontc3b6c282015-09-25 03:05:18 +020072}
Pascal Brandc639ac82015-07-02 08:53:34 +020073
74int main(int argc, char *argv[])
75{
Cedric Chaumontc3b6c282015-09-25 03:05:18 +020076 int opt;
77 int index;
Etienne Carriere69f914d2017-04-03 13:57:46 +020078 TEEC_Result tee_res;
Cedric Chaumontc3b6c282015-09-25 03:05:18 +020079 int ret;
80 char *p = (char *)glevel;
James Kung35b352d2015-09-07 18:01:16 +080081 char *test_suite = (char *)gsuitename;
Jerome Forissier213ca8a2017-03-31 11:27:56 +020082 char *token;
83 ADBG_Suite_Definition_t all = { .SuiteID_p = NULL,
84 .cases = TAILQ_HEAD_INITIALIZER(all.cases), };
Pascal Brandc639ac82015-07-02 08:53:34 +020085
James Kung35b352d2015-09-07 18:01:16 +080086 opterr = 0;
87
Jens Wiklander02389a92016-12-16 11:13:38 +010088 if (signal(SIGPIPE, SIG_IGN) == SIG_ERR)
89 warn("signal(SIGPIPE, SIG_IGN)");
90
91 if (signal(SIGHUP, SIG_IGN) == SIG_ERR)
92 warn("signal(SIGPIPE, SIG_IGN)");
93
Igor Opaniuk44aff4b2016-09-16 10:18:00 +030094 if (argc > 1 && !strcmp(argv[1], "--sha-perf"))
Igor Opaniuk136644a2016-09-13 13:40:56 +030095 return sha_perf_runner_cmd_parser(argc-1, &argv[1]);
Igor Opaniuk44aff4b2016-09-16 10:18:00 +030096 else if (argc > 1 && !strcmp(argv[1], "--aes-perf"))
97 return aes_perf_runner_cmd_parser(argc-1, &argv[1]);
Etienne Carriere41343db2017-03-17 15:38:52 +010098#ifdef CFG_SECURE_DATA_PATH
99 else if (argc > 1 && !strcmp(argv[1], "--sdp-basic"))
100 return sdp_basic_runner_cmd_parser(argc-1, &argv[1]);
101#endif
Igor Opaniuk136644a2016-09-13 13:40:56 +0300102
James Kung35b352d2015-09-07 18:01:16 +0800103 while ((opt = getopt(argc, argv, "d:l:t:h")) != -1)
Cedric Chaumontc3b6c282015-09-25 03:05:18 +0200104 switch (opt) {
105 case 'd':
106 _device = optarg;
107 break;
108 case 'l':
109 p = optarg;
110 break;
James Kung35b352d2015-09-07 18:01:16 +0800111 case 't':
112 test_suite = optarg;
113 break;
Cedric Chaumontc3b6c282015-09-25 03:05:18 +0200114 case 'h':
115 usage(argv[0]);
116 return 0;
117 default:
118 usage(argv[0]);
119 return -1;
120 }
Cedric Chaumontc3b6c282015-09-25 03:05:18 +0200121
122 for (index = optind; index < argc; index++)
123 printf("Test ID: %s\n", argv[index]);
124
125 if (p)
126 level = atoi(p);
127 else
128 level = 0;
129 printf("Run test suite with level=%d\n", level);
130
Pascal Brandc639ac82015-07-02 08:53:34 +0200131 printf("\nTEE test application started with device [%s]\n", _device);
132
Etienne Carriere69f914d2017-04-03 13:57:46 +0200133 tee_res = xtest_teec_ctx_init();
134 if (tee_res != TEEC_SUCCESS) {
Etienne Carriere7d18f552017-04-04 09:46:29 +0200135 fprintf(stderr, "Failed to open TEE context: 0x%" PRIx32 "\n",
136 tee_res);
Etienne Carriere69f914d2017-04-03 13:57:46 +0200137 return -1;
138 }
Pascal Brandc639ac82015-07-02 08:53:34 +0200139
Jerome Forissier213ca8a2017-03-31 11:27:56 +0200140 /* Concatenate all the selected suites into 'all' */
141 for (token = test_suite; ; token = NULL) {
142
143 token = strtok(token, "+");
144 if (!token)
145 break;
146
147 if (!strcmp(token, "regression"))
148 ret = Do_ADBG_AppendToSuite(&all, &ADBG_Suite_regression);
149 else if (!strcmp(token, "benchmark"))
150 ret = Do_ADBG_AppendToSuite(&all, &ADBG_Suite_benchmark);
151#ifdef WITH_GP_TESTS
152 else if (!strcmp(token, "gp"))
153 ret = Do_ADBG_AppendToSuite(&all, &ADBG_Suite_gp);
154#endif
155 else {
156 fprintf(stderr, "Unkown test suite: %s\n", token);
157 ret = -1;
158 }
159 if (ret < 0)
160 goto err;
James Kung35b352d2015-09-07 18:01:16 +0800161 }
Pascal Brandc639ac82015-07-02 08:53:34 +0200162
Jerome Forissier213ca8a2017-03-31 11:27:56 +0200163 /* Run the tests */
164 ret = Do_ADBG_RunSuite(&all, argc - optind, argv + optind);
165
166err:
167 free((void *)all.SuiteID_p);
Pascal Brandc639ac82015-07-02 08:53:34 +0200168 xtest_teec_ctx_deinit();
169
170 printf("TEE test application done!\n");
171 return ret;
172}