]> granicus.if.org Git - check/commitdiff
Completed implementation of CK_NOFORK
authoramalec <amalec@64e312b2-a51f-0410-8e61-82d0ca0eb02a>
Fri, 14 Sep 2001 23:15:28 +0000 (23:15 +0000)
committeramalec <amalec@64e312b2-a51f-0410-8e61-82d0ca0eb02a>
Fri, 14 Sep 2001 23:15:28 +0000 (23:15 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/check/code/trunk@93 64e312b2-a51f-0410-8e61-82d0ca0eb02a

check/tests/check_check.h
check/tests/check_check_fork.c [new file with mode: 0644]
check/tests/check_check_main.c

index 7005084c633ad549246d45fe54ba4ee640181f96..0542cd8cbf299fb33f4add8daebe912eb3974688 100644 (file)
@@ -4,6 +4,8 @@
 int sub_nfailed;
 int sub_ntests;
 
+void fork_setup (void);
+void fork_teardown (void);
 void setup (void);
 void cleanup (void);
 Suite *make_sub_suite(void);
diff --git a/check/tests/check_check_fork.c b/check/tests/check_check_fork.c
new file mode 100644 (file)
index 0000000..c241df9
--- /dev/null
@@ -0,0 +1,121 @@
+#include <sys/types.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <check.h>
+#include "check_check.h"
+
+
+static int counter;
+static pid_t mypid;
+
+static void fork_sub_setup (void)
+{
+  counter = 0;
+  mypid = getpid();
+}
+
+START_TEST(test_inc)
+{
+  counter++;
+}
+END_TEST
+
+START_TEST(test_nofork_sideeffects)
+{
+  fail_unless(counter == 1,
+             "Side effects not seen across tests");
+}
+END_TEST
+
+START_TEST(test_nofork_pid)
+{
+  fail_unless(mypid == getpid(),
+             "Unit test is in a different adresss space from setup code");
+}
+END_TEST
+
+static Suite *make_fork_sub_suite (void)
+{
+
+  Suite *s;
+  TCase *tc;
+
+  s = suite_create("Fork Sub");
+  tc = tcase_create("Core");
+
+  suite_add_tcase (s, tc);
+  tcase_set_fixture(tc, fork_sub_setup,NULL);
+  tcase_add_test(tc,test_inc);
+  tcase_add_test(tc,test_nofork_sideeffects);
+  tcase_add_test(tc,test_nofork_pid);
+
+  return s;
+}
+
+static SRunner *fork_sr;
+static Suite *fork_s;
+static SRunner *fork_dummy_sr;
+
+void fork_setup (void)
+{
+
+  fork_s = make_fork_sub_suite();
+  fork_sr = srunner_create(fork_s);
+  fork_dummy_sr = srunner_create (fork_s);
+  srunner_set_fork_status(fork_sr,CK_NOFORK);
+  srunner_run_all(fork_sr,CRSILENT);
+}
+
+void fork_teardown (void)
+{
+  srunner_free(fork_sr);
+  suite_free(fork_s);
+}
+
+START_TEST(test_default_fork)
+{
+  fail_unless(srunner_fork_status(fork_dummy_sr) == CK_FORK,
+             "Default fork status not set correctly");
+}
+END_TEST
+
+START_TEST(test_set_fork)
+{
+  srunner_set_fork_status(fork_dummy_sr, CK_NOFORK);
+  fail_unless(srunner_fork_status(fork_dummy_sr) == CK_NOFORK,
+             "Fork status not changed correctly");
+}
+END_TEST
+
+START_TEST(test_env)
+{
+  putenv("CK_FORK=no");
+  fail_unless(srunner_fork_status(fork_dummy_sr) == CK_NOFORK,
+             "Fork status does not obey environment variable");
+}
+END_TEST
+
+
+START_TEST(test_nofork)
+{
+  fail_unless(srunner_ntests_failed(fork_sr) == 0,
+             "Errors on nofork test");
+}
+END_TEST
+
+Suite *make_fork_suite(void)
+{
+  Suite *s;
+  TCase *tc;
+
+  s = suite_create("Fork");
+  tc = tcase_create("Core");
+
+  suite_add_tcase(s, tc);
+  tcase_add_test(tc,test_default_fork);
+  tcase_add_test(tc,test_set_fork);
+  tcase_add_test(tc,test_env);
+  tcase_add_test(tc,test_nofork);
+  
+  return s;
+}
index b65180033470e3a5bfa148fd6fa6b85b91c24d15..610556e1b63919ec4596ca721bc412b034b0cae1 100644 (file)
@@ -6,9 +6,9 @@
 int main (void)
 {
   int n;
-
-
   SRunner *sr;
+
+  fork_setup();
   sr = srunner_create (make_master_suite());
   srunner_add_suite(sr, make_list_suite());
   srunner_add_suite(sr, make_msg_suite());
@@ -20,6 +20,7 @@ int main (void)
   printf ("Ran %d tests in subordinate suite\n", sub_nfailed);
   srunner_run_all (sr, CRNORMAL);
   cleanup();
+  fork_teardown();
   n = srunner_ntests_failed(sr);
   srunner_free(sr);
   return (n == 0) ? EXIT_SUCCESS : EXIT_FAILURE;