ATF_TC_BODY(setenv_basic, tc) { const size_t numvars = 8192; size_t i, offset; char name[1024]; char value[1024]; offset = lrand48(); for (i = 0; i < numvars; i++) { (void)snprintf(name, sizeof(name), "var%zu", (i * 7 + offset) % numvars); (void)snprintf(value, sizeof(value), "value%ld", lrand48()); ATF_CHECK(setenv(name, value, 1) != -1); ATF_CHECK(setenv(name, "foo", 0) != -1); ATF_CHECK_STREQ(getenv(name), value); } offset = lrand48(); for (i = 0; i < numvars; i++) { (void)snprintf(name, sizeof(name), "var%zu", (i * 11 + offset) % numvars); ATF_CHECK(unsetenv(name) != -1); ATF_CHECK(getenv(name) == NULL); ATF_CHECK(unsetenv(name) != -1); } ATF_CHECK_ERRNO(EINVAL, setenv(NULL, "val", 1) == -1); ATF_CHECK_ERRNO(EINVAL, setenv("", "val", 1) == -1); ATF_CHECK_ERRNO(EINVAL, setenv("v=r", "val", 1) == -1); #ifdef __FreeBSD__ /* Both FreeBSD and OS/X does not validate the second argument to setenv(3) */ atf_tc_expect_signal(SIGSEGV, "FreeBSD does not validate the second " "argument to setenv(3); see bin/189805"); #endif ATF_CHECK_ERRNO(EINVAL, setenv("var", NULL, 1) == -1); ATF_CHECK(setenv("var", "=val", 1) == 0); ATF_CHECK_STREQ(getenv("var"), "=val"); }
ATF_TC_BODY(signal_any_and_signal, tc) { atf_tc_expect_signal(-1, "Call will signal"); kill(getpid(), SIGKILL); }
ATF_TC_BODY(signal_but_pass, tc) { atf_tc_expect_signal(-1, "Call won't signal"); }
ATF_TC_BODY(signal_no_and_signal, tc) { atf_tc_expect_signal(SIGHUP, "Call will signal"); kill(getpid(), SIGHUP); }