Branch data Line data Source code
1 : : /*
2 : : Copyright (c) 2021 Fraunhofer AISEC. See the COPYRIGHT
3 : : file at the top-level directory of this distribution.
4 : :
5 : : Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 : : http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 : : <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 : : option. This file may not be copied, modified, or distributed
9 : : except according to those terms.
10 : : */
11 : :
12 : : #include <zephyr/kernel.h>
13 : : #include <zephyr/ztest.h>
14 : : #include "edhoc_integration_tests/edhoc_tests.h"
15 : : #include "oscore_tests.h"
16 : :
17 : : #define TEST_EDHOC_EXPORTER 1
18 : : #define TEST_INITIATOR_RESPONDER_INTERACTION1 2
19 : : #define TEST_INITIATOR_RESPONDER_INTERACTION2 3
20 : : #define T1_OSCORE_CLIENT_REQUEST_RESPONSE 4
21 : : #define T2_OSCORE_SERVER_REQUEST_RESPONSE 5
22 : : #define T3_OSCORE_CLIENT_REQUEST 6
23 : : #define T4_OSCORE_SERVER_KEY_DERIVATION 7
24 : : #define T5_OSCORE_CLIENT_REQUEST 8
25 : : #define T6_OSCORE_SERVER_KEY_DERIVATION 9
26 : : #define T8_OSCORE_SERVER_RESPONSE_SIMPLE_ACK 10
27 : : #define T9_OSCORE_CLIENT_SERVER_OBSERVE 11
28 : : #define T10_OSCORE_CLIENT_SERVER_AFTER_REBOOT 12
29 : : #define T100_INNER_OUTER_OPTION_SPLIT__NO_SPECIAL_OPTIONS 13
30 : : #define T101_INNER_OUTER_OPTION_SPLIT__WITH_OBSERVE_NOTIFICATION 14
31 : : #define T102_INNER_OUTER_OPTION_SPLIT__WITH_OBSERVE_REGISTRATION 15
32 : : #define T103_OSCORE_PKG_GENERATE__REQUEST_WITH_OBSERVE_REGISTRATION 16
33 : : #define T104_OSCORE_PKG_GENERATE__REQUEST_WITH_OBSERVE_NOTIFICATION 17
34 : : #define T105_INNER_OUTER_OPTION_SPLIT__TOO_MANY_OPTIONS 18
35 : : #define T106_OSCORE_OPTION_GENERATE_NO_PIV 19
36 : : #define T200_OPTIONS_SERIALIZE_DESERIALIZE 20
37 : : #define T201_COAP_SERIALIZE_DESERIALIZE 21
38 : : #define T202_OPTIONS_DESERIALIZE_CORNER_CASES 22
39 : : #define T300_OSCORE_OPTION_PARSER_NO_PIV 23
40 : : #define T301_OSCORE_OPTION_PARSER_WRONG_N 24
41 : : #define T302_OSCORE_OPTION_PARSER_NO_KID 25
42 : : #define T303_OPTIONS_REORDER 26
43 : : #define T400_IS_CLASS_E 27
44 : : #define T401_CACHE_ECHO_VAL 28
45 : : #define T402_ECHO_VAL_IS_FRESH 29
46 : : #define T500_OSCORE_CONTEXT_INIT_CORNER_CASES 30
47 : : #define T501_PIV2SSN 31
48 : : #define T502_SSN2PIV 32
49 : : #define T503_DERIVE_CORNER_CASE 33
50 : : #define T600_SERVER_REPLAY_INIT_TEST 34
51 : : #define T601_SERVER_REPLAY_REINIT_TEST 35
52 : : #define T602_SERVER_REPLAY_CHECK_AT_START_TEST 36
53 : : #define T603_SERVER_REPLAY_CHECK_IN_PROGRESS_TEST 37
54 : : #define T604_SERVER_REPLAY_INSERT_ZERO_TEST 38
55 : : #define T605_SERVER_REPLAY_INSERT_TEST 39
56 : : #define T606_SERVER_REPLAY_STANDARD_SCENARIO_TEST 40
57 : : #define T800_OSCORE_LATENCY_TEST 41
58 : : #define TEST_EDHOC_INITIATOR_X509_X5T_RFC9529 42
59 : : #define TEST_EDHOC_RESPONDER_X509_X5T_RFC9529 43
60 : :
61 : : // if this macro is defined all tests will be executed
62 : : #define EXECUTE_ALL_TESTS
63 : :
64 : : // in order to execute only a specific tes set this macro to a specific
65 : : // test macro and comment out EXECUTE_ALL_TESTS
66 : : #define EXECUTE_ONLY_TEST TEST_EDHOC_RESPONDER_X509_X5T_RFC9529
67 : :
68 : : /**
69 : : * @brief This function allows to skip a given test if only one other test
70 : : * needs to be executed.
71 : : *
72 : : * @param test_name_macro
73 : : */
74 : 42 : static void skip(int test_name_macro, void (*test_function)())
75 : : {
76 : : #if !defined EXECUTE_ALL_TESTS
77 : : if (EXECUTE_ONLY_TEST == test_name_macro) {
78 : : test_function();
79 : : } else {
80 : : ztest_test_skip();
81 : : }
82 : : #else
83 : 42 : test_function();
84 : : #endif
85 : 42 : }
86 : :
87 : : ZTEST_SUITE(uoscore_uedhoc, NULL, NULL, NULL, NULL, NULL);
88 : :
89 : 2 : ZTEST(uoscore_uedhoc, test_edhoc_exporter)
90 : : {
91 : 1 : skip(TEST_EDHOC_EXPORTER, test_exporter);
92 : 1 : };
93 : :
94 : 2 : ZTEST(uoscore_uedhoc, test_initiator_responder_interaction1)
95 : : {
96 : 1 : skip(TEST_INITIATOR_RESPONDER_INTERACTION1,
97 : : t_initiator_responder_interaction1);
98 : 1 : };
99 : :
100 : 2 : ZTEST(uoscore_uedhoc, test_initiator_responder_interaction2)
101 : : {
102 : 1 : skip(TEST_INITIATOR_RESPONDER_INTERACTION2,
103 : : t_initiator_responder_interaction2);
104 : 1 : };
105 : :
106 : 2 : ZTEST(uoscore_uedhoc, t1_oscore)
107 : : {
108 : 1 : skip(T1_OSCORE_CLIENT_REQUEST_RESPONSE,
109 : : t1_oscore_client_request_response);
110 : 1 : }
111 : :
112 : 2 : ZTEST(uoscore_uedhoc, t2_oscore)
113 : : {
114 : 1 : skip(T2_OSCORE_SERVER_REQUEST_RESPONSE,
115 : : t2_oscore_server_request_response);
116 : 1 : }
117 : :
118 : 2 : ZTEST(uoscore_uedhoc, t3_oscore)
119 : : {
120 : 1 : skip(T3_OSCORE_CLIENT_REQUEST, t3_oscore_client_request);
121 : 1 : }
122 : :
123 : 2 : ZTEST(uoscore_uedhoc, t4_oscore)
124 : : {
125 : 1 : skip(T4_OSCORE_SERVER_KEY_DERIVATION, t4_oscore_server_key_derivation);
126 : 1 : }
127 : :
128 : 2 : ZTEST(uoscore_uedhoc, t5_oscore)
129 : : {
130 : 1 : skip(T5_OSCORE_CLIENT_REQUEST, t5_oscore_client_request);
131 : 1 : }
132 : :
133 : 2 : ZTEST(uoscore_uedhoc, t6_oscore)
134 : : {
135 : 1 : skip(T6_OSCORE_SERVER_KEY_DERIVATION, t6_oscore_server_key_derivation);
136 : 1 : }
137 : :
138 : 2 : ZTEST(uoscore_uedhoc, t8_oscore)
139 : : {
140 : 1 : skip(T8_OSCORE_SERVER_RESPONSE_SIMPLE_ACK,
141 : : t8_oscore_server_response_simple_ack);
142 : 1 : }
143 : :
144 : 2 : ZTEST(uoscore_uedhoc, t9_oscore)
145 : : {
146 : 1 : skip(T9_OSCORE_CLIENT_SERVER_OBSERVE, t9_oscore_client_server_observe);
147 : 1 : }
148 : :
149 : 2 : ZTEST(uoscore_uedhoc, t10_oscore)
150 : : {
151 : 1 : skip(T10_OSCORE_CLIENT_SERVER_AFTER_REBOOT,
152 : : t10_oscore_client_server_after_reboot);
153 : 1 : }
154 : :
155 : 2 : ZTEST(uoscore_uedhoc, t100_oscore)
156 : : {
157 : 1 : skip(T100_INNER_OUTER_OPTION_SPLIT__NO_SPECIAL_OPTIONS,
158 : : t100_inner_outer_option_split__no_special_options);
159 : 1 : }
160 : :
161 : 2 : ZTEST(uoscore_uedhoc, t101_oscore)
162 : : {
163 : 1 : skip(T101_INNER_OUTER_OPTION_SPLIT__WITH_OBSERVE_NOTIFICATION,
164 : : t101_inner_outer_option_split__with_observe_notification);
165 : 1 : }
166 : :
167 : 2 : ZTEST(uoscore_uedhoc, t102_oscore)
168 : : {
169 : 1 : skip(T102_INNER_OUTER_OPTION_SPLIT__WITH_OBSERVE_REGISTRATION,
170 : : t102_inner_outer_option_split__with_observe_registration);
171 : 1 : }
172 : :
173 : 2 : ZTEST(uoscore_uedhoc, t103_oscore)
174 : : {
175 : 1 : skip(T103_OSCORE_PKG_GENERATE__REQUEST_WITH_OBSERVE_REGISTRATION,
176 : : t103_oscore_pkg_generate__request_with_observe_registration);
177 : 1 : }
178 : :
179 : 2 : ZTEST(uoscore_uedhoc, t104_oscore)
180 : : {
181 : 1 : skip(T104_OSCORE_PKG_GENERATE__REQUEST_WITH_OBSERVE_NOTIFICATION,
182 : : t104_oscore_pkg_generate__request_with_observe_notification);
183 : 1 : }
184 : :
185 : 2 : ZTEST(uoscore_uedhoc, t105_oscore)
186 : : {
187 : 1 : skip(T105_INNER_OUTER_OPTION_SPLIT__TOO_MANY_OPTIONS,
188 : : t105_inner_outer_option_split__too_many_options);
189 : 1 : }
190 : :
191 : 2 : ZTEST(uoscore_uedhoc, t106_oscore)
192 : : {
193 : 1 : skip(T106_OSCORE_OPTION_GENERATE_NO_PIV,
194 : : t106_oscore_option_generate_no_piv);
195 : 1 : }
196 : :
197 : 2 : ZTEST(uoscore_uedhoc, t200_oscore)
198 : : {
199 : 1 : skip(T200_OPTIONS_SERIALIZE_DESERIALIZE,
200 : : t200_options_serialize_deserialize);
201 : 1 : }
202 : :
203 : 2 : ZTEST(uoscore_uedhoc, t201_oscore)
204 : : {
205 : 1 : skip(T201_COAP_SERIALIZE_DESERIALIZE, t201_coap_serialize_deserialize);
206 : 1 : }
207 : :
208 : 2 : ZTEST(uoscore_uedhoc, t202_oscore)
209 : : {
210 : 1 : skip(T202_OPTIONS_DESERIALIZE_CORNER_CASES,
211 : : t202_options_deserialize_corner_cases);
212 : 1 : }
213 : :
214 : 2 : ZTEST(uoscore_uedhoc, t300_oscore)
215 : : {
216 : 1 : skip(T300_OSCORE_OPTION_PARSER_NO_PIV,
217 : : t300_oscore_option_parser_no_piv);
218 : 1 : }
219 : :
220 : 2 : ZTEST(uoscore_uedhoc, t301_oscore)
221 : : {
222 : 1 : skip(T301_OSCORE_OPTION_PARSER_WRONG_N,
223 : : t301_oscore_option_parser_wrong_n);
224 : 1 : }
225 : :
226 : 2 : ZTEST(uoscore_uedhoc, t302_oscore)
227 : : {
228 : 1 : skip(T302_OSCORE_OPTION_PARSER_NO_KID,
229 : : t302_oscore_option_parser_no_kid);
230 : 1 : }
231 : :
232 : 2 : ZTEST(uoscore_uedhoc, t303_oscore)
233 : : {
234 : 1 : skip(T303_OPTIONS_REORDER, t303_options_reorder);
235 : 1 : }
236 : :
237 : 2 : ZTEST(uoscore_uedhoc, t400_oscore)
238 : : {
239 : 1 : skip(T400_IS_CLASS_E, t400_is_class_e);
240 : 1 : }
241 : :
242 : 2 : ZTEST(uoscore_uedhoc, t401_oscore)
243 : : {
244 : 1 : skip(T401_CACHE_ECHO_VAL, t401_cache_echo_val);
245 : 1 : }
246 : :
247 : 2 : ZTEST(uoscore_uedhoc, t402_oscore)
248 : : {
249 : 1 : skip(T402_ECHO_VAL_IS_FRESH, t402_echo_val_is_fresh);
250 : 1 : }
251 : :
252 : 2 : ZTEST(uoscore_uedhoc, t500_oscore)
253 : : {
254 : 1 : skip(T500_OSCORE_CONTEXT_INIT_CORNER_CASES,
255 : : t500_oscore_context_init_corner_cases);
256 : 1 : }
257 : :
258 : 2 : ZTEST(uoscore_uedhoc, t501_oscore)
259 : : {
260 : 1 : skip(T501_PIV2SSN, t501_piv2ssn);
261 : 1 : }
262 : :
263 : 2 : ZTEST(uoscore_uedhoc, t502_oscore)
264 : : {
265 : 1 : skip(T502_SSN2PIV, t502_ssn2piv);
266 : 1 : }
267 : :
268 : 2 : ZTEST(uoscore_uedhoc, t503_oscore)
269 : : {
270 : 1 : skip(T503_DERIVE_CORNER_CASE, t503_derive_corner_case);
271 : 1 : }
272 : :
273 : 2 : ZTEST(uoscore_uedhoc, t600_oscore)
274 : : {
275 : 1 : skip(T600_SERVER_REPLAY_INIT_TEST, t600_server_replay_init_test);
276 : 1 : }
277 : :
278 : 2 : ZTEST(uoscore_uedhoc, t601_oscore)
279 : : {
280 : 1 : skip(T601_SERVER_REPLAY_REINIT_TEST, t601_server_replay_reinit_test);
281 : 1 : }
282 : :
283 : 2 : ZTEST(uoscore_uedhoc, t602_oscore)
284 : : {
285 : 1 : skip(T602_SERVER_REPLAY_CHECK_AT_START_TEST,
286 : : t602_server_replay_check_at_start_test);
287 : 1 : }
288 : :
289 : 2 : ZTEST(uoscore_uedhoc, t603_oscore)
290 : : {
291 : 1 : skip(T603_SERVER_REPLAY_CHECK_IN_PROGRESS_TEST,
292 : : t603_server_replay_check_in_progress_test);
293 : 1 : }
294 : :
295 : 2 : ZTEST(uoscore_uedhoc, t604_oscore)
296 : : {
297 : 1 : skip(T604_SERVER_REPLAY_INSERT_ZERO_TEST,
298 : : t604_server_replay_insert_zero_test);
299 : 1 : }
300 : :
301 : 2 : ZTEST(uoscore_uedhoc, t605_oscore)
302 : : {
303 : 1 : skip(T605_SERVER_REPLAY_INSERT_TEST, t605_server_replay_insert_test);
304 : 1 : }
305 : :
306 : 2 : ZTEST(uoscore_uedhoc, t606_oscore)
307 : : {
308 : 1 : skip(T606_SERVER_REPLAY_STANDARD_SCENARIO_TEST,
309 : : t606_server_replay_standard_scenario_test);
310 : 1 : }
311 : :
312 : 2 : ZTEST(uoscore_uedhoc, test_edhoc_initiator_x509_x5t_rfc9529)
313 : : {
314 : 1 : skip(TEST_EDHOC_INITIATOR_X509_X5T_RFC9529,
315 : : test_edhoc_initiator_x509_x5t_rfc9529);
316 : 1 : }
317 : :
318 : 2 : ZTEST(uoscore_uedhoc, test_edhoc_responder_x509_x5t_rfc9529)
319 : : {
320 : 1 : skip(TEST_EDHOC_RESPONDER_X509_X5T_RFC9529,
321 : : test_edhoc_responder_x509_x5t_rfc9529);
322 : 1 : }
323 : :
324 : : /*
325 : : * In order to measure the latency of coap2oscore, oscore2coap,
326 : : * edhoc_responder_run, edhoc_initiator_run you need one of the supported boards
327 : : * by Zephyr OS, see https://docs.zephyrproject.org/latest/boards/index.html
328 : : * Make sure that MEASURE_LATENCY_ON is enabled in CMakeLists.txt
329 : : * Build flash the test project for your board e.g.,
330 : : * west build -b=nrf9160dk_nrf9160; west flash.
331 : : * make also sure that DEBUG_PRINT is disabled
332 : : */
333 : : #ifdef MEASURE_LATENCY_ON
334 : : ZTEST(uoscore_uedhoc, t800_oscore)
335 : : {
336 : : skip(T800_OSCORE_LATENCY_TEST, t800_oscore_latency_test);
337 : : }
338 : : #endif /*MEASURE_LATENCY_ON*/
|