diff options
Diffstat (limited to 'src/tests')
-rw-r--r-- | src/tests/test_fileutils.c | 10 | ||||
-rw-r--r-- | src/tests/test_process.c | 115 | ||||
-rw-r--r-- | src/tests/test_shm.c | 69 | ||||
-rw-r--r-- | src/tests/test_strtod_nol.c | 51 | ||||
-rw-r--r-- | src/tests/test_strutils.c | 38 |
5 files changed, 283 insertions, 0 deletions
diff --git a/src/tests/test_fileutils.c b/src/tests/test_fileutils.c new file mode 100644 index 0000000..ebfc5e2 --- /dev/null +++ b/src/tests/test_fileutils.c @@ -0,0 +1,10 @@ +#include <stdio.h> +#include <stdlib.h> +#include "fileutils.h" + +int main(int argc, char *argv[]) +{ + atexit(close_stdout); + printf("Hello, World!\n"); + return EXIT_SUCCESS; +} diff --git a/src/tests/test_process.c b/src/tests/test_process.c new file mode 100644 index 0000000..ef2582e --- /dev/null +++ b/src/tests/test_process.c @@ -0,0 +1,115 @@ +/* + * test_procps -- program to create a process to test procps + * + * Copyright 2015 Craig Small <csmall@dropbear.xyz> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <signal.h> +#ifdef __linux__ +#include <sys/prctl.h> +#endif +#include "c.h" + +#define DEFAULT_SLEEPTIME 300 +#define MY_NAME "spcorp" + +static void usage(void) +{ + fprintf(stderr, " %s [options]\n", program_invocation_short_name); + fprintf(stderr, " -s <seconds>\n"); + exit(EXIT_FAILURE); +} + + +void +signal_handler(int signum, siginfo_t *siginfo, void *ucontext) +{ + char *signame = NULL; + + switch(signum) { + case SIGUSR1: + signame = strdup("SIGUSR1"); + break; + case SIGUSR2: + signame = strdup("SIGUSR2"); + break; + default: + printf("SIG unknown\n"); + exit(EXIT_FAILURE); + } + if (signame == NULL) { + printf("SIG malloc error\n"); + exit(EXIT_FAILURE); + } + switch (siginfo->si_code) { + case SI_USER: + printf("SIG %s\n", signame); + break; + case SI_QUEUE: +#ifdef HAVE_SIGINFO_T_SI_INT + printf("SIG %s value=%d\n", signame, siginfo->si_int); +#else + printf("case SI_QUEUE: SIG %s siginfo->si_int undefined\n", signame); +#endif + break; + default: + printf("Unknown si_code %d\n", siginfo->si_code); + exit(EXIT_FAILURE); + } + + free(signame); +} + +int main(int argc, char *argv[]) +{ + int sleep_time, opt; + struct sigaction signal_action; + + sleep_time = DEFAULT_SLEEPTIME; + while ((opt = getopt(argc, argv, "s:")) != -1) { + switch(opt) { + case 's': + sleep_time = atoi(optarg); + if (sleep_time < 1) { + fprintf(stderr, "sleep time must be 1 second or more\n"); + usage(); + } + break; + default: + usage(); + } + } + + /* Setup signal handling */ + signal_action.sa_sigaction = signal_handler; + sigemptyset (&signal_action.sa_mask); + signal_action.sa_flags = SA_SIGINFO; + sigaction(SIGUSR1, &signal_action, NULL); + sigaction(SIGUSR2, &signal_action, NULL); + +#ifdef __linux__ + /* set process name */ + prctl(PR_SET_NAME, MY_NAME, NULL, NULL, NULL); +#endif + + while (sleep_time > 0) { + sleep_time = sleep(sleep_time); + } + return EXIT_SUCCESS; +} diff --git a/src/tests/test_shm.c b/src/tests/test_shm.c new file mode 100644 index 0000000..3917379 --- /dev/null +++ b/src/tests/test_shm.c @@ -0,0 +1,69 @@ +/* + * test_shm -- program to create a shared memory segment for testing + * + * Copyright 2022 Craig Small <csmall@dropbear.xyz> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/shm.h> +#include "c.h" + +#define DEFAULT_SLEEPTIME 300 +#define SHM_SIZE 50 + +static void usage(void) +{ + fprintf(stderr, " %s [options]\n", program_invocation_short_name); + fprintf(stderr, " -s <seconds>\n"); + exit(EXIT_FAILURE); +} + +int main(int argc, char *argv[]) +{ + int sleep_time, opt; + int shm_id; + void *shm_addr; + + sleep_time = DEFAULT_SLEEPTIME; + while ((opt = getopt(argc, argv, "s:")) != -1) + { + switch(opt) + { + case 's': + sleep_time = atoi(optarg); + if (sleep_time < 1) + { + fprintf(stderr, "sleep time must be 1 second or more\n"); + usage(); + } + break; + default: + usage(); + } + } + + /* get some shared memory */ + if ( (shm_id = shmget(IPC_PRIVATE, SHM_SIZE, IPC_CREAT | 0666)) < 0) + xerr(EXIT_FAILURE, "Unable to shmget()"); + if ( (shm_addr = shmat(shm_id, NULL, SHM_RDONLY)) < 0) + xerr(EXIT_FAILURE, "Unable to shmat()"); + printf("SHMID: %x\n", shm_id); + sleep(sleep_time); + return EXIT_SUCCESS; +} + diff --git a/src/tests/test_strtod_nol.c b/src/tests/test_strtod_nol.c new file mode 100644 index 0000000..408cf46 --- /dev/null +++ b/src/tests/test_strtod_nol.c @@ -0,0 +1,51 @@ + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include "strutils.h" + +struct strtod_tests { + char *string; + double result; +}; + +struct strtod_tests tests[] = { + {"123", 123.0}, + {"-123", -123.0}, + {"12.34", 12.34}, + {"-12.34", -12.34}, + {".34", 0.34}, + {"-.34", -0.34}, + {"12,34", 12.34}, + {"-12,34", -12.34}, + {",34", 0.34}, + {"-,34", -0.34}, + {"0", 0.0}, + {".0", 0.0}, + {"0.0", 0.0}, + {NULL, 0.0} +}; + +#define EPSILON 1.0 // Really not trying for precision here +int dequal(const double d1, const double d2) +{ + return fabs(d1-d2) < EPSILON; +} + + +int main(int argc, char *argv[]) +{ + int i; + double val; + + for(i=0; tests[i].string != NULL; i++) { + if(!dequal (strtod_nol_or_err(tests[i].string, "Cannot parse number"), + tests[i].result)) { + fprintf(stderr, "FAIL: strtod_nol_or_err(\"%s\") != %f\n", + tests[i].string, tests[i].result); + return EXIT_FAILURE; + } + //fprintf(stderr, "PASS: strtod_nol for %s\n", tests[i].string); + } + return EXIT_SUCCESS; +} diff --git a/src/tests/test_strutils.c b/src/tests/test_strutils.c new file mode 100644 index 0000000..4a7c7aa --- /dev/null +++ b/src/tests/test_strutils.c @@ -0,0 +1,38 @@ +/* + * test_strutils.c - tests for strutils.c routines + * This file was copied from util-linux at fall 2011. + * + * Copyright (C) 2010 Karel Zak <kzak@redhat.com> + * Copyright (C) 2010 Davidlohr Bueso <dave@gnu.org> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include <stdlib.h> + +#include "c.h" +#include "strutils.h" + +int main(int argc, char *argv[]) +{ + if (argc < 2) { + error(EXIT_FAILURE, 0, "no arguments"); + } else if (argc < 3) { + printf("%ld\n", strtol_or_err(argv[1], "strtol_or_err")); + } else { + printf("%lf\n", strtod_or_err(argv[2], "strtod_or_err")); + } + return EXIT_SUCCESS; +} |