1df7e0e0dSStefan Hajnoczi // SPDX-License-Identifier: GPL-2.0-only 2df7e0e0dSStefan Hajnoczi /* 3df7e0e0dSStefan Hajnoczi * vsock test utilities 4df7e0e0dSStefan Hajnoczi * 5df7e0e0dSStefan Hajnoczi * Copyright (C) 2017 Red Hat, Inc. 6df7e0e0dSStefan Hajnoczi * 7df7e0e0dSStefan Hajnoczi * Author: Stefan Hajnoczi <stefanha@redhat.com> 8df7e0e0dSStefan Hajnoczi */ 9df7e0e0dSStefan Hajnoczi 10df7e0e0dSStefan Hajnoczi #include <errno.h> 11df7e0e0dSStefan Hajnoczi #include <stdio.h> 12df7e0e0dSStefan Hajnoczi #include <stdlib.h> 13df7e0e0dSStefan Hajnoczi #include <signal.h> 14df7e0e0dSStefan Hajnoczi 15df7e0e0dSStefan Hajnoczi #include "timeout.h" 16df7e0e0dSStefan Hajnoczi #include "util.h" 17df7e0e0dSStefan Hajnoczi 18df7e0e0dSStefan Hajnoczi /* Install signal handlers */ 19df7e0e0dSStefan Hajnoczi void init_signals(void) 20df7e0e0dSStefan Hajnoczi { 21df7e0e0dSStefan Hajnoczi struct sigaction act = { 22df7e0e0dSStefan Hajnoczi .sa_handler = sigalrm, 23df7e0e0dSStefan Hajnoczi }; 24df7e0e0dSStefan Hajnoczi 25df7e0e0dSStefan Hajnoczi sigaction(SIGALRM, &act, NULL); 26df7e0e0dSStefan Hajnoczi signal(SIGPIPE, SIG_IGN); 27df7e0e0dSStefan Hajnoczi } 28df7e0e0dSStefan Hajnoczi 29df7e0e0dSStefan Hajnoczi /* Parse a CID in string representation */ 30df7e0e0dSStefan Hajnoczi unsigned int parse_cid(const char *str) 31df7e0e0dSStefan Hajnoczi { 32df7e0e0dSStefan Hajnoczi char *endptr = NULL; 33df7e0e0dSStefan Hajnoczi unsigned long n; 34df7e0e0dSStefan Hajnoczi 35df7e0e0dSStefan Hajnoczi errno = 0; 36df7e0e0dSStefan Hajnoczi n = strtoul(str, &endptr, 10); 37df7e0e0dSStefan Hajnoczi if (errno || *endptr != '\0') { 38df7e0e0dSStefan Hajnoczi fprintf(stderr, "malformed CID \"%s\"\n", str); 39df7e0e0dSStefan Hajnoczi exit(EXIT_FAILURE); 40df7e0e0dSStefan Hajnoczi } 41df7e0e0dSStefan Hajnoczi return n; 42df7e0e0dSStefan Hajnoczi } 43df7e0e0dSStefan Hajnoczi 44df7e0e0dSStefan Hajnoczi /* Run test cases. The program terminates if a failure occurs. */ 45df7e0e0dSStefan Hajnoczi void run_tests(const struct test_case *test_cases, 46df7e0e0dSStefan Hajnoczi const struct test_opts *opts) 47df7e0e0dSStefan Hajnoczi { 48df7e0e0dSStefan Hajnoczi int i; 49df7e0e0dSStefan Hajnoczi 50df7e0e0dSStefan Hajnoczi for (i = 0; test_cases[i].name; i++) { 51df7e0e0dSStefan Hajnoczi void (*run)(const struct test_opts *opts); 52df7e0e0dSStefan Hajnoczi 53df7e0e0dSStefan Hajnoczi printf("%s...", test_cases[i].name); 54df7e0e0dSStefan Hajnoczi fflush(stdout); 55df7e0e0dSStefan Hajnoczi 56df7e0e0dSStefan Hajnoczi if (opts->mode == TEST_MODE_CLIENT) 57df7e0e0dSStefan Hajnoczi run = test_cases[i].run_client; 58df7e0e0dSStefan Hajnoczi else 59df7e0e0dSStefan Hajnoczi run = test_cases[i].run_server; 60df7e0e0dSStefan Hajnoczi 61df7e0e0dSStefan Hajnoczi if (run) 62df7e0e0dSStefan Hajnoczi run(opts); 63df7e0e0dSStefan Hajnoczi 64df7e0e0dSStefan Hajnoczi printf("ok\n"); 65df7e0e0dSStefan Hajnoczi } 66df7e0e0dSStefan Hajnoczi } 67