Skip to content

Commit 8e77af3

Browse files
committed
tests: net: socket: tls_ext: Extract common code into functions
Extract server configuration, client configuration and test shutdown into separate functions so that they're reusable in other tests. Signed-off-by: Robert Lubos <[email protected]>
1 parent 7ff1eed commit 8e77af3

File tree

1 file changed

+132
-132
lines changed
  • tests/net/socket/tls_ext/src

1 file changed

+132
-132
lines changed

tests/net/socket/tls_ext/src/main.c

Lines changed: 132 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -191,85 +191,65 @@ static void server_thread_fn(void *arg0, void *arg1, void *arg2)
191191
zassert_not_equal(r, -1, "close() failed on the server fd (%d)", errno);
192192
}
193193

194-
static void test_common(int peer_verify)
194+
static int test_configure_server(k_tid_t *server_thread_id, int peer_verify)
195195
{
196-
const int yes = true;
196+
static const sec_tag_t server_tag_list_verify_none[] = {
197+
SERVER_CERTIFICATE_TAG,
198+
};
199+
200+
static const sec_tag_t server_tag_list_verify[] = {
201+
CA_CERTIFICATE_TAG,
202+
SERVER_CERTIFICATE_TAG,
203+
};
197204

198-
int r;
199-
int server_fd;
200-
int client_fd;
201-
int proto = IPPROTO_TCP;
202-
char *addrstrp;
203-
k_tid_t server_thread_id;
204-
struct sockaddr_in sa;
205205
char addrstr[INET_ADDRSTRLEN];
206+
const sec_tag_t *sec_tag_list;
207+
size_t sec_tag_list_size;
208+
struct sockaddr_in sa;
209+
const int yes = true;
210+
char *addrstrp;
211+
int server_fd;
212+
int r;
206213

207214
k_sem_init(&server_sem, 0, 1);
208215

209-
/* set the common protocol for both client and server */
210-
if (IS_ENABLED(CONFIG_NET_SOCKETS_SOCKOPT_TLS)) {
211-
proto = IPPROTO_TLS_1_2;
212-
}
213-
/*
214-
* Server socket setup
215-
*/
216-
217216
NET_DBG("Creating server socket");
218-
r = socket(AF_INET, SOCK_STREAM, proto);
217+
r = socket(AF_INET, SOCK_STREAM, IPPROTO_TLS_1_2);
219218
zassert_not_equal(r, -1, "failed to create server socket (%d)", errno);
220219
server_fd = r;
221220

222221
r = setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes));
223222
zassert_not_equal(r, -1, "failed to set SO_REUSEADDR (%d)", errno);
224223

225-
if (IS_ENABLED(CONFIG_TLS_CREDENTIALS)
226-
&& IS_ENABLED(CONFIG_NET_SOCKETS_SOCKOPT_TLS)) {
227-
228-
static const sec_tag_t server_tag_list_verify_none[] = {
229-
SERVER_CERTIFICATE_TAG,
230-
};
231-
232-
static const sec_tag_t server_tag_list_verify[] = {
233-
CA_CERTIFICATE_TAG,
234-
SERVER_CERTIFICATE_TAG,
235-
};
236-
237-
const sec_tag_t *sec_tag_list;
238-
size_t sec_tag_list_size;
239-
240-
switch (peer_verify) {
241-
case TLS_PEER_VERIFY_NONE:
242-
sec_tag_list = server_tag_list_verify_none;
243-
sec_tag_list_size = sizeof(server_tag_list_verify_none);
244-
break;
245-
case TLS_PEER_VERIFY_OPTIONAL:
246-
case TLS_PEER_VERIFY_REQUIRED:
247-
sec_tag_list = server_tag_list_verify;
248-
sec_tag_list_size = sizeof(server_tag_list_verify);
249-
250-
r = setsockopt(server_fd, SOL_TLS, TLS_PEER_VERIFY,
251-
&peer_verify, sizeof(peer_verify));
252-
zassert_not_equal(r, -1,
253-
"failed to set TLS_PEER_VERIFY (%d)", errno);
254-
break;
255-
default:
256-
zassert_true(false,
257-
"unrecognized TLS peer verify type %d",
258-
peer_verify);
259-
return;
260-
}
261-
262-
r = setsockopt(server_fd, SOL_TLS, TLS_SEC_TAG_LIST,
263-
sec_tag_list, sec_tag_list_size);
264-
zassert_not_equal(r, -1, "failed to set TLS_SEC_TAG_LIST (%d)",
265-
errno);
266-
267-
r = setsockopt(server_fd, SOL_TLS, TLS_HOSTNAME, "localhost",
268-
sizeof("localhost"));
269-
zassert_not_equal(r, -1, "failed to set TLS_HOSTNAME (%d)",
224+
switch (peer_verify) {
225+
case TLS_PEER_VERIFY_NONE:
226+
sec_tag_list = server_tag_list_verify_none;
227+
sec_tag_list_size = sizeof(server_tag_list_verify_none);
228+
break;
229+
case TLS_PEER_VERIFY_OPTIONAL:
230+
case TLS_PEER_VERIFY_REQUIRED:
231+
sec_tag_list = server_tag_list_verify;
232+
sec_tag_list_size = sizeof(server_tag_list_verify);
233+
234+
r = setsockopt(server_fd, SOL_TLS, TLS_PEER_VERIFY,
235+
&peer_verify, sizeof(peer_verify));
236+
zassert_not_equal(r, -1, "failed to set TLS_PEER_VERIFY (%d)",
270237
errno);
238+
break;
239+
default:
240+
zassert_true(false, "unrecognized TLS peer verify type %d",
241+
peer_verify);
242+
return -1;
271243
}
272244

245+
r = setsockopt(server_fd, SOL_TLS, TLS_SEC_TAG_LIST,
246+
sec_tag_list, sec_tag_list_size);
247+
zassert_not_equal(r, -1, "failed to set TLS_SEC_TAG_LIST (%d)", errno);
248+
249+
r = setsockopt(server_fd, SOL_TLS, TLS_HOSTNAME, "localhost",
250+
sizeof("localhost"));
251+
zassert_not_equal(r, -1, "failed to set TLS_HOSTNAME (%d)", errno);
252+
273253
memset(&sa, 0, sizeof(sa));
274254
/* The server listens on all network interfaces */
275255
sa.sin_addr.s_addr = INADDR_ANY;
@@ -291,116 +271,136 @@ static void test_common(int peer_verify)
291271
addrstr, ntohs(sa.sin_port), server_fd);
292272

293273
NET_DBG("Creating server thread");
294-
server_thread_id = k_thread_create(&server_thread, server_stack,
295-
STACK_SIZE, server_thread_fn,
296-
INT_TO_POINTER(server_fd), NULL, NULL,
297-
K_PRIO_PREEMPT(8), 0, K_NO_WAIT);
274+
*server_thread_id = k_thread_create(&server_thread, server_stack,
275+
STACK_SIZE, server_thread_fn,
276+
INT_TO_POINTER(server_fd), NULL, NULL,
277+
K_PRIO_PREEMPT(8), 0, K_NO_WAIT);
298278

299279
r = k_sem_take(&server_sem, K_MSEC(TIMEOUT));
300280
zassert_equal(0, r, "failed to synchronize with server thread (%d)", r);
301281

302-
/*
303-
* Client socket setup
304-
*/
282+
return server_fd;
283+
}
284+
285+
static int test_configure_client(struct sockaddr_in *sa, bool own_cert)
286+
{
287+
static const sec_tag_t client_tag_list_verify_none[] = {
288+
CA_CERTIFICATE_TAG,
289+
};
290+
291+
static const sec_tag_t client_tag_list_verify[] = {
292+
CA_CERTIFICATE_TAG,
293+
CLIENT_CERTIFICATE_TAG,
294+
};
295+
296+
char addrstr[INET_ADDRSTRLEN];
297+
const sec_tag_t *sec_tag_list;
298+
size_t sec_tag_list_size;
299+
char *addrstrp;
300+
int client_fd;
301+
int r;
305302

306303
k_thread_name_set(k_current_get(), "client");
307304

308305
NET_DBG("Creating client socket");
309-
r = socket(AF_INET, SOCK_STREAM, proto);
306+
r = socket(AF_INET, SOCK_STREAM, IPPROTO_TLS_1_2);
310307
zassert_not_equal(r, -1, "failed to create client socket (%d)", errno);
311308
client_fd = r;
312309

313-
if (IS_ENABLED(CONFIG_TLS_CREDENTIALS)
314-
&& IS_ENABLED(CONFIG_NET_SOCKETS_SOCKOPT_TLS)) {
315-
316-
static const sec_tag_t client_tag_list_verify_none[] = {
317-
CA_CERTIFICATE_TAG,
318-
};
319-
320-
static const sec_tag_t client_tag_list_verify[] = {
321-
CA_CERTIFICATE_TAG,
322-
CLIENT_CERTIFICATE_TAG,
323-
};
324-
325-
const sec_tag_t *sec_tag_list;
326-
size_t sec_tag_list_size;
327-
328-
switch (peer_verify) {
329-
case TLS_PEER_VERIFY_NONE:
330-
sec_tag_list = client_tag_list_verify_none;
331-
sec_tag_list_size = sizeof(client_tag_list_verify_none);
332-
break;
333-
case TLS_PEER_VERIFY_OPTIONAL:
334-
case TLS_PEER_VERIFY_REQUIRED:
335-
sec_tag_list = client_tag_list_verify;
336-
sec_tag_list_size = sizeof(client_tag_list_verify);
337-
break;
338-
default:
339-
zassert_true(false, "unrecognized TLS peer verify type %d",
340-
peer_verify);
341-
return;
342-
}
343-
344-
r = setsockopt(client_fd, SOL_TLS, TLS_SEC_TAG_LIST,
345-
sec_tag_list, sec_tag_list_size);
346-
zassert_not_equal(r, -1, "failed to set TLS_SEC_TAG_LIST (%d)",
347-
errno);
310+
if (own_cert) {
311+
sec_tag_list = client_tag_list_verify;
312+
sec_tag_list_size = sizeof(client_tag_list_verify);
313+
} else {
314+
sec_tag_list = client_tag_list_verify_none;
315+
sec_tag_list_size = sizeof(client_tag_list_verify_none);
316+
}
317+
318+
r = setsockopt(client_fd, SOL_TLS, TLS_SEC_TAG_LIST,
319+
sec_tag_list, sec_tag_list_size);
320+
zassert_not_equal(r, -1, "failed to set TLS_SEC_TAG_LIST (%d)", errno);
348321

349-
r = setsockopt(client_fd, SOL_TLS, TLS_HOSTNAME, "localhost",
322+
r = setsockopt(client_fd, SOL_TLS, TLS_HOSTNAME, "localhost",
350323
sizeof("localhost"));
351-
zassert_not_equal(r, -1, "failed to set TLS_HOSTNAME (%d)", errno);
352-
}
324+
zassert_not_equal(r, -1, "failed to set TLS_HOSTNAME (%d)", errno);
353325

354-
r = inet_pton(AF_INET, MY_IPV4_ADDR, &sa.sin_addr.s_addr);
326+
sa->sin_family = AF_INET;
327+
sa->sin_port = htons(PORT);
328+
r = inet_pton(AF_INET, MY_IPV4_ADDR, &sa->sin_addr.s_addr);
355329
zassert_not_equal(-1, r, "inet_pton() failed (%d)", errno);
356330
zassert_not_equal(0, r, "%s is not a valid IPv4 address", MY_IPV4_ADDR);
357331
zassert_equal(1, r, "inet_pton() failed to convert %s", MY_IPV4_ADDR);
358332

359333
memset(addrstr, '\0', sizeof(addrstr));
360-
addrstrp = (char *)inet_ntop(AF_INET, &sa.sin_addr,
334+
addrstrp = (char *)inet_ntop(AF_INET, &sa->sin_addr,
361335
addrstr, sizeof(addrstr));
362336
zassert_not_equal(addrstrp, NULL, "inet_ntop() failed (%d)", errno);
363337

364338
NET_DBG("connecting to [%s]:%d with fd %d",
365-
addrstr, ntohs(sa.sin_port), client_fd);
339+
addrstr, ntohs(sa->sin_port), client_fd);
366340

367-
r = connect(client_fd, (struct sockaddr *)&sa, sizeof(sa));
368-
zassert_not_equal(r, -1, "failed to connect (%d)", errno);
341+
return client_fd;
342+
}
343+
static void test_shutdown(int client_fd, int server_fd, k_tid_t server_thread_id)
344+
{
345+
int r;
346+
347+
NET_DBG("closing client fd");
348+
r = close(client_fd);
349+
zassert_not_equal(-1, r, "close() failed on the client fd (%d)", errno);
350+
351+
NET_DBG("closing server fd");
352+
r = close(server_fd);
353+
zassert_not_equal(-1, r, "close() failed on the server fd (%d)", errno);
354+
355+
r = k_thread_join(&server_thread, K_FOREVER);
356+
zassert_equal(0, r, "k_thread_join() failed (%d)", r);
357+
358+
k_yield();
359+
}
360+
361+
static void test_common(int peer_verify)
362+
{
363+
k_tid_t server_thread_id;
364+
struct sockaddr_in sa;
365+
uint8_t rx_buf[16];
366+
int server_fd;
367+
int client_fd;
368+
int r;
369+
370+
/*
371+
* Server socket setup
372+
*/
373+
server_fd = test_configure_server(&server_thread_id, peer_verify);
374+
375+
/*
376+
* Client socket setup
377+
*/
378+
client_fd = test_configure_client(&sa, peer_verify != TLS_PEER_VERIFY_NONE);
369379

370380
/*
371381
* The main part of the test
372382
*/
373383

384+
r = connect(client_fd, (struct sockaddr *)&sa, sizeof(sa));
385+
zassert_not_equal(r, -1, "failed to connect (%d)", errno);
386+
374387
NET_DBG("Calling send()");
375388
r = send(client_fd, SECRET, SECRET_SIZE, 0);
376389
zassert_not_equal(r, -1, "send() failed (%d)", errno);
377390
zassert_equal(SECRET_SIZE, r, "expected: %zu actual: %d", SECRET_SIZE, r);
378391

379392
NET_DBG("Calling recv()");
380-
memset(addrstr, 0, sizeof(addrstr));
381-
r = recv(client_fd, addrstr, sizeof(addrstr), 0);
393+
memset(rx_buf, 0, sizeof(rx_buf));
394+
r = recv(client_fd, rx_buf, sizeof(rx_buf), 0);
382395
zassert_not_equal(r, -1, "recv() failed (%d)", errno);
383396
zassert_equal(SECRET_SIZE, r, "expected: %zu actual: %d", SECRET_SIZE, r);
384-
385-
zassert_mem_equal(SECRET, addrstr, SECRET_SIZE,
386-
"expected: %s actual: %s", SECRET, addrstr);
397+
zassert_mem_equal(SECRET, rx_buf, SECRET_SIZE,
398+
"expected: %s actual: %s", SECRET, rx_buf);
387399

388400
/*
389401
* Cleanup resources
390402
*/
391-
392-
NET_DBG("closing client fd");
393-
r = close(client_fd);
394-
zassert_not_equal(-1, r, "close() failed on the client fd (%d)", errno);
395-
396-
NET_DBG("closing server fd");
397-
r = close(server_fd);
398-
zassert_not_equal(-1, r, "close() failed on the server fd (%d)", errno);
399-
400-
r = k_thread_join(&server_thread, K_FOREVER);
401-
zassert_equal(0, r, "k_thread_join() failed (%d)", r);
402-
403-
k_yield();
403+
test_shutdown(client_fd, server_fd, server_thread_id);
404404
}
405405

406406
ZTEST(net_socket_tls_api_extension, test_tls_peer_verify_none)

0 commit comments

Comments
 (0)