add tests to makefile and run_tests

This commit is contained in:
Josh Williams
2025-01-24 20:25:40 -08:00
committed by 4lDO2
parent 2bc44dba9d
commit 2d3374f176
8 changed files with 77 additions and 78 deletions
+6
View File
@@ -195,6 +195,12 @@ NAMES=\
signals/raise-compliance \
signals/sigismember-invalid \
signals/sigismember-valid \
signals/signal-handle_return \
signals/signal-handler \
signals/signal-handler2 \
signals/signal-ignore \
signals/signal-invalid \
signals/signal-uncatchable \
signals/sigprocmask-6 \
signals/sigprocmask-7 \
signals/sigprocmask-8 \
+6
View File
@@ -180,6 +180,12 @@ STATUS_NAMES=(\
signals/raise-compliance \
signals/sigismember-invalid \
signals/sigismember-valid \
signals/signal-handle_return \
signals/signal-handler \
signals/signal-handler2 \
signals/signal-ignore \
signals/signal-invalid \
signals/signal-uncatchable \
signals/sigprocmask-6 \
signals/sigprocmask-7 \
signals/sigprocmask-8 \
+13 -13
View File
@@ -1,6 +1,7 @@
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include "../test_helpers.h"
void SIGUSR1_handler(int signo)
{
@@ -16,20 +17,19 @@ void SIGUSR2_handler(int signo)
int main()
{
if (signal(SIGUSR1, SIGUSR1_handler) == SIG_ERR) {
perror("Unexpected error while using signal()");
exit(EXIT_FAILURE);
}
void (*status) (int);
status = signal(SIGUSR1, SIGUSR1_handler);
ERROR_IF(signal, status, == SIG_ERR);
if (signal(SIGUSR2, SIGUSR2_handler) == SIG_ERR) {
perror("Unexpected error while using signal()");
exit(EXIT_FAILURE);
}
status = signal(SIGUSR2, SIGUSR2_handler);
ERROR_IF(signal, status, == SIG_ERR);
status = signal(SIGUSR1,SIG_IGN);
// printf("status is %d\n", status);
// printf("SIGUSR1_handler is %d\n", SIGUSR1_handler);
ERROR_IF(signal, status, != SIGUSR1_handler);
//this seems to be a weird comparison error
if (signal(SIGUSR1,SIG_IGN) != SIGUSR1_handler) {
printf("signal did not return the last handler that was associated with SIGUSR1\n");
exit(EXIT_FAILURE);
}
printf("test passed\n");
return EXIT_SUCCESS;
}
+11 -13
View File
@@ -1,6 +1,7 @@
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include "../test_helpers.h"
int handler_called = 0;
@@ -13,23 +14,20 @@ void sig_handler(int signo)
int main()
{
if (signal(SIGCHLD, sig_handler) == SIG_ERR) {
perror("Unexpected error while using signal()");
exit(1);
}
void (*status) (int);
status = signal(SIGCHLD, sig_handler);
ERROR_IF(signal, status, == SIG_ERR);
if (signal(SIGCHLD,SIG_DFL) != sig_handler) {
perror("Unexpected error while using signal()");
exit(1);
}
status = signal(SIGCHLD,SIG_DFL);
ERROR_IF(signal, status, != sig_handler);
//same comparison error from handle_return
raise(SIGCHLD);
if (handler_called == 1) {
printf("Test FAILED: handler was called even though default was expected\n");
exit(1);
}
printf("test passed \n");
return EXIT_FAILURE;
}
handler_called = 0;
return 0;
return EXIT_SUCCESS;
}
+12 -17
View File
@@ -8,35 +8,30 @@ int handler_called = 0;
void sig_handler(int signo)
{
printf("%d called. Inside handler\n", signo);
(void) signo;
// printf("%d called. Inside handler\n", signo);
handler_called = 1;
}
int signal_test3(int signum)
{
if (signal(signum, sig_handler) == SIG_ERR) {
perror("Unexpected error while using signal()");
exit(EXIT_FAILURE);
}
void (*status) (int);
status = signal(signum, sig_handler);
ERROR_IF(signal, status, == SIG_ERR);
raise(signum);
if (handler_called != 1) {
printf("Test FAILED: handler wasn't called even though it should have been\n");
exit(1);
}
printf("test %d passed\n", signum);
ERROR_IF(raise, handler_called, != 1);
return EXIT_SUCCESS;
}
int main(){
for (int i=1; i<N_SIGNALS; i++){
if (i == SIGKILL || i == SIGSTOP){
for (unsigned int i = 0; i < sizeof(signals_list)/sizeof(signals_list[0]); i++){
int sig = signals_list[i].signal;
if (sig == SIGKILL || sig == SIGSTOP){
continue;
}
signal_test3(i);
signal_test3(sig);
}
return EXIT_SUCCESS;
}
}
+15 -17
View File
@@ -14,34 +14,32 @@ void sig_handler(int signo)
int signal_test2(int signum)
{
if (signal(signum, sig_handler) == SIG_ERR) {
perror("Unexpected error while using signal()");
exit(EXIT_FAILURE);
}
void (*status) (int);
status = signal(signum, sig_handler);
ERROR_IF(signal, status, == SIG_ERR);
status = signal(signum, SIG_IGN);
ERROR_IF(signal, status, != sig_handler);
if (signal(signum,SIG_IGN) != sig_handler) {
perror("Unexpected error while using signal()");
exit(EXIT_FAILURE);
}
// same issue as handle_return
raise(signum);
if (handler_called == 1) {
printf("Test FAILED: handler was called even though ingore was expected\n");
exit(EXIT_FAILURE);
}
printf("test %d passed\n", signum);
ERROR_IF(raise, handler_called, == 1);
handler_called = 0;
return EXIT_SUCCESS;
}
int main(){
for (int i=1; i<N_SIGNALS; i++){
if (i == SIGKILL || i == SIGSTOP){
for (unsigned int i = 0; i < sizeof(signals_list)/sizeof(signals_list[0]); i++){
int sig = signals_list[i].signal;
if (sig == SIGKILL || sig == SIGSTOP){
continue;
}
signal_test2(i);
signal_test2(sig);
}
return EXIT_SUCCESS;
}
+7 -9
View File
@@ -2,6 +2,9 @@
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include "../test_helpers.h"
// test to make sure sending an invalid signal sets errno
void sig_handler(int signo)
{
@@ -13,15 +16,10 @@ int main()
{
errno = -1;
if (signal(-1, sig_handler) != SIG_ERR) {
printf("Test FAILED: signal() didn't return SIG_ERR even though invalid signal number was passed to it\n");
exit(EXIT_FAILURE);
}
void (*status) (int);
status = signal(-1, sig_handler);
ERROR_IF(signal, status, != SIG_ERR);
ERROR_IF(signal, errno, <= 0);
if (errno <= 0) {
printf("Test FAILED: errno wasn't set to a positive number even though invalid signal number was passed to the signal() function\n");
exit(EXIT_FAILURE);
}
printf("test passed\n");
return EXIT_SUCCESS;
}
+7 -9
View File
@@ -2,6 +2,9 @@
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include "../test_helpers.h"
//make sure you can't catch uncatchable signals
void sig_handler(int signo)
{
@@ -12,16 +15,11 @@ void sig_handler(int signo)
int main()
{
errno = -1;
void (*status) (int);
status = signal(SIGKILL, sig_handler);
ERROR_IF(signal, status, != SIG_ERR);
if (signal(SIGKILL, sig_handler) != SIG_ERR) {
printf("Test FAILED: signal() didn't return SIG_ERR even though a non-catchable signal was passed to it\n");
exit(EXIT_FAILURE);
}
ERROR_IF(signal, errno, <= 0);
if (errno <= 0) {
printf("Test FAILED: errno wasn't set to a positive number even though a non-catchable signal was passed to the signal() function\n");
exit(EXIT_FAILURE);
}
printf("test passed\n");
return EXIT_SUCCESS;
}