Skip to content

Commit

Permalink
unix: test: Add test for child process env vars
Browse files Browse the repository at this point in the history
Test if the env is preserved when `options.env` is explicitly set to NULL.
  • Loading branch information
AvianFlu committed Nov 2, 2012
1 parent 5b9b3a7 commit 7ac4649
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 0 deletions.
13 changes: 13 additions & 0 deletions test/run-tests.c
Original file line number Diff line number Diff line change
Expand Up @@ -134,5 +134,18 @@ static int maybe_run_test(int argc, char **argv) {
return 1;
}

if (strcmp(argv[1], "spawn_helper7") == 0) {
int r;
char *test;
/* Test if the test value from the parent is still set */
test = getenv("ENV_TEST");
ASSERT(test != NULL);

r = fprintf(stdout, "%s", test);
ASSERT(r > 0);

return 1;
}

return run_test(argv[1], TEST_TIMEOUT, 0);
}
2 changes: 2 additions & 0 deletions test/test-list.h
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ TEST_DECLARE (spawn_and_kill)
TEST_DECLARE (spawn_detached)
TEST_DECLARE (spawn_and_kill_with_std)
TEST_DECLARE (spawn_and_ping)
TEST_DECLARE (spawn_preserve_env)
TEST_DECLARE (spawn_setuid_fails)
TEST_DECLARE (spawn_setgid_fails)
TEST_DECLARE (spawn_stdout_to_file)
Expand Down Expand Up @@ -395,6 +396,7 @@ TASK_LIST_START
TEST_ENTRY (spawn_detached)
TEST_ENTRY (spawn_and_kill_with_std)
TEST_ENTRY (spawn_and_ping)
TEST_ENTRY (spawn_preserve_env)
TEST_ENTRY (spawn_setuid_fails)
TEST_ENTRY (spawn_setgid_fails)
TEST_ENTRY (spawn_stdout_to_file)
Expand Down
37 changes: 37 additions & 0 deletions test/test-spawn.c
Original file line number Diff line number Diff line change
Expand Up @@ -387,6 +387,43 @@ TEST_IMPL(spawn_and_kill) {
return 0;
}

TEST_IMPL(spawn_preserve_env) {
int r;
uv_pipe_t out;
uv_stdio_container_t stdio[2];

init_process_options("spawn_helper7", exit_cb);

uv_pipe_init(uv_default_loop(), &out, 0);
options.stdio = stdio;
options.stdio[0].flags = UV_IGNORE;
options.stdio[1].flags = UV_CREATE_PIPE | UV_WRITABLE_PIPE;
options.stdio[1].data.stream = (uv_stream_t*)&out;
options.stdio_count = 2;

ASSERT(setenv("ENV_TEST", "testval", 1) == 0);
/* Explicitly set options.env to NULL to test for env clobbering. */
options.env = NULL;

r = uv_spawn(uv_default_loop(), &process, options);
ASSERT(r == 0);

r = uv_read_start((uv_stream_t*) &out, on_alloc, on_read);
ASSERT(r == 0);

r = uv_run(uv_default_loop());
ASSERT(r == 0);

ASSERT(exit_cb_called == 1);
ASSERT(close_cb_called == 2);

printf("output is: %s", output);
ASSERT(strcmp("testval", output) == 0);

MAKE_VALGRIND_HAPPY();
return 0;
}

TEST_IMPL(spawn_detached) {
int r;
uv_err_t err;
Expand Down

0 comments on commit 7ac4649

Please sign in to comment.