[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Lost] [Patch] testlib: Tests für Signalfunktionen



Dieser Patch erweitert testlib um ein paar Signaltests.
Index: src/modules/testlib/test_signals.c
===================================================================
--- src/modules/testlib/test_signals.c	(Revision 0)
+++ src/modules/testlib/test_signals.c	(Revision 0)
@@ -0,0 +1,139 @@
+#include "string.h"
+#include <stdio.h>
+#include "test.h"
+#include <signal.h>
+#include <unistd.h>
+
+#define INVALID_SIGNAL 1337
+
+static bool sigusr1_raised = FALSE;
+static bool sigusr1_signum = 0;
+static bool sigusr2_raised = FALSE;
+static bool sigusr2_signum = 0;
+
+static void sigusr1_handler(int signum)
+{
+    sigusr1_signum = signum;
+    sigusr1_raised = TRUE;
+}
+
+static void sigusr2_handler(int signum)
+{
+    sigusr2_signum = signum;
+    sigusr2_raised = TRUE;
+}
+
+
+void test_signals()
+{
+    printf("\n\nsignals [1]: ");
+
+    // Zuerst veruchen wir mal einen Signal-Handler fuer SIGUSR1 zu
+    // registrieren, und pruefen, ob der vorherige Handler der Standard-Handler
+    // war
+    check(signal(SIGUSR1, &sigusr2_handler) == SIG_DFL);
+    
+    // Danach biegen wir den Handler mal um, zum Testen ob der Rueckgabewert
+    // korrekt ist
+    check(signal(SIGUSR1, &sigusr1_handler) == &sigusr2_handler);
+    
+    // Fuer SIGUSR2 brauchen wir jetzt aber trotzdem noch einen Handler damit
+    // wir sehen, ob auch der richtige aufgerufen wird
+    check(signal(SIGUSR2, &sigusr2_handler) == SIG_DFL);
+    
+    // Jetzt noch ein kleiner Test ob wir SIGKILL auch wirklich nicht
+    // umdefinieren koennen
+    check(signal(SIGKILL, &sigusr2_handler) == SIG_ERR);
+
+    // Noch versuchen ein Signal zu setzen, das nicht gueltig ist
+    check(signal(INVALID_SIGNAL, &sigusr2_handler) == SIG_ERR);
+    
+    printf(" ");
+
+    
+    // SIGUSR1 ausloesen mit raise() und kontrollieren ob der richtige Handler
+    // aufgerufen wurde.
+    raise(SIGUSR1);
+    check(sigusr1_raised == TRUE);
+    check(sigusr2_raised == FALSE);
+    check(sigusr1_signum == SIGUSR1);
+    sigusr1_raised = FALSE;
+    sigusr2_raised = FALSE;
+
+    printf(" ");
+
+    // Das selbe mit SIGUSR2
+    raise(SIGUSR2);
+    check(sigusr1_raised == FALSE);
+    check(sigusr2_raised == TRUE);
+    check(sigusr2_signum == SIGUSR2);
+    sigusr1_raised = FALSE;
+    sigusr2_raised = FALSE;
+    
+    printf(" ");
+
+    // Das ganze nochmal mit kill, aber diesmal nur mit SIGUSR1
+    kill(getpid(), SIGUSR1);
+    check(sigusr1_raised == TRUE);
+    check(sigusr2_raised == FALSE);
+    check(sigusr1_signum == SIGUSR1);
+
+    printf("\n");
+
+
+
+    printf("sigsets [1]:");
+    // Jetzt noch ein paar Tests fuer Sigsets
+    sigset_t sigset;
+    
+    // sigset zuerst leeren
+    check(sigemptyset(&sigset) == 0);
+
+    // Pruefen ob SIGUSR(1|2) nicht drin sind
+    check((sigismember(&sigset, SIGUSR1) == 0) && (sigismember(&sigset,
+        SIGUSR2) == 0));
+
+    // Versuchen ob ein ungueltiges Signal ausgelesen werden kann
+    check(sigismember(&sigset, INVALID_SIGNAL) == -1);
+    
+    printf(" ");
+
+    // SIGUSR1 aktivieren
+    check(sigaddset(&sigset, SIGUSR1) == 0);
+    check(sigismember(&sigset, SIGUSR1) == 1);
+    check(sigismember(&sigset, SIGUSR2) == 0);
+
+    // SIGUSR2 aktivieren
+    check(sigaddset(&sigset, SIGUSR2) == 0);
+    check(sigismember(&sigset, SIGUSR1) == 1);
+    check(sigismember(&sigset, SIGUSR2) == 1);
+    
+    // Versuchen ein ungueltiges Signal zu setzen
+    check(sigaddset(&sigset, INVALID_SIGNAL) == -1);
+
+    printf(" ");
+    
+    // So, jetzt auch noch die Signale wieder entfernen ;-)
+    check(sigdelset(&sigset, SIGUSR2) == 0);
+    check(sigismember(&sigset, SIGUSR1) == 1);
+    check(sigismember(&sigset, SIGUSR2) == 0);
+
+    // Und weils so schoen ist grad nochmal
+    check(sigdelset(&sigset, SIGUSR1) == 0);
+    check(sigismember(&sigset, SIGUSR1) == 0);
+    check(sigismember(&sigset, SIGUSR2) == 0);
+
+    // Versuchen ein ungueltiges Signal zu loeschen
+    check(sigdelset(&sigset, INVALID_SIGNAL) == -1);
+
+    printf(" ");
+
+    
+    // Jetzt noch schnell ein sigfillset, dann haben wirs
+    check(sigfillset(&sigset) == 0);
+    check(sigismember(&sigset, SIGUSR1) == 1);
+    check(sigismember(&sigset, SIGUSR2) == 1);
+    printf("\n");
+}
+
+    
Index: src/modules/testlib/tests.c
===================================================================
--- src/modules/testlib/tests.c	(Revision 631)
+++ src/modules/testlib/tests.c	(Arbeitskopie)
@@ -8,6 +8,7 @@
 extern void test_malloc();
 extern void test_printf();
 extern void test_fat();
+extern void test_signals();
 
 void passed()
 {
@@ -34,6 +35,7 @@
     test_list();
     test_malloc();
     test_printf();
+    test_signals();
     test_fat();
 
     return 0;