|
@@ -9,6 +9,7 @@
|
|
|
#include "orconfig.h"
|
|
|
#include "core/or/or.h"
|
|
|
#include "test/test.h"
|
|
|
+#include "lib/process/env.h"
|
|
|
|
|
|
#define PROCESS_PRIVATE
|
|
|
#include "lib/process/process.h"
|
|
@@ -172,6 +173,56 @@ test_default_values(void *arg)
|
|
|
process_free_all();
|
|
|
}
|
|
|
|
|
|
+static void
|
|
|
+test_environment(void *arg)
|
|
|
+{
|
|
|
+ (void)arg;
|
|
|
+ process_init();
|
|
|
+
|
|
|
+ process_t *process = process_new("");
|
|
|
+ process_environment_t *env = NULL;
|
|
|
+
|
|
|
+ process_set_environment(process, "E", "F");
|
|
|
+ process_set_environment(process, "C", "D");
|
|
|
+ process_set_environment(process, "A", "B");
|
|
|
+
|
|
|
+ env = process_get_environment(process);
|
|
|
+ tt_mem_op(env->windows_environment_block, OP_EQ,
|
|
|
+ "A=B\0C=D\0E=F\0", 12);
|
|
|
+ tt_str_op(env->unixoid_environment_block[0], OP_EQ,
|
|
|
+ "A=B");
|
|
|
+ tt_str_op(env->unixoid_environment_block[1], OP_EQ,
|
|
|
+ "C=D");
|
|
|
+ tt_str_op(env->unixoid_environment_block[2], OP_EQ,
|
|
|
+ "E=F");
|
|
|
+ tt_ptr_op(env->unixoid_environment_block[3], OP_EQ,
|
|
|
+ NULL);
|
|
|
+ process_environment_free(env);
|
|
|
+
|
|
|
+ /* Reset our environment. */
|
|
|
+ smartlist_t *new_env = smartlist_new();
|
|
|
+ smartlist_add(new_env, (char *)"FOO=bar");
|
|
|
+ smartlist_add(new_env, (char *)"HELLO=world");
|
|
|
+
|
|
|
+ process_reset_environment(process, new_env);
|
|
|
+ smartlist_free(new_env);
|
|
|
+
|
|
|
+ env = process_get_environment(process);
|
|
|
+ tt_mem_op(env->windows_environment_block, OP_EQ,
|
|
|
+ "FOO=bar\0HELLO=world\0", 20);
|
|
|
+ tt_str_op(env->unixoid_environment_block[0], OP_EQ,
|
|
|
+ "FOO=bar");
|
|
|
+ tt_str_op(env->unixoid_environment_block[1], OP_EQ,
|
|
|
+ "HELLO=world");
|
|
|
+ tt_ptr_op(env->unixoid_environment_block[2], OP_EQ,
|
|
|
+ NULL);
|
|
|
+
|
|
|
+ done:
|
|
|
+ process_environment_free(env);
|
|
|
+ process_free(process);
|
|
|
+ process_free_all();
|
|
|
+}
|
|
|
+
|
|
|
static void
|
|
|
test_stringified_types(void *arg)
|
|
|
{
|
|
@@ -589,6 +640,7 @@ test_win32(void *arg)
|
|
|
|
|
|
struct testcase_t process_tests[] = {
|
|
|
{ "default_values", test_default_values, TT_FORK, NULL, NULL },
|
|
|
+ { "environment", test_environment, TT_FORK, NULL, NULL },
|
|
|
{ "stringified_types", test_stringified_types, TT_FORK, NULL, NULL },
|
|
|
{ "line_protocol_simple", test_line_protocol_simple, TT_FORK, NULL, NULL },
|
|
|
{ "line_protocol_multi", test_line_protocol_multi, TT_FORK, NULL, NULL },
|