From: amalec Date: Fri, 14 Sep 2001 23:15:28 +0000 (+0000) Subject: Completed implementation of CK_NOFORK X-Git-Tag: 0.10.0~1054 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=eccf80db0276f62d43abcaf6750e1882950cffe0;p=check Completed implementation of CK_NOFORK git-svn-id: svn+ssh://svn.code.sf.net/p/check/code/trunk@93 64e312b2-a51f-0410-8e61-82d0ca0eb02a --- diff --git a/check/tests/check_check.h b/check/tests/check_check.h index 7005084..0542cd8 100644 --- a/check/tests/check_check.h +++ b/check/tests/check_check.h @@ -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 index 0000000..c241df9 --- /dev/null +++ b/check/tests/check_check_fork.c @@ -0,0 +1,121 @@ +#include +#include +#include +#include +#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; +} diff --git a/check/tests/check_check_main.c b/check/tests/check_check_main.c index b651800..610556e 100644 --- a/check/tests/check_check_main.c +++ b/check/tests/check_check_main.c @@ -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;