From: Timo Sirainen Date: Wed, 5 May 2021 15:18:29 +0000 (+0300) Subject: lib: Add unit tests to env-util X-Git-Tag: 2.3.16~172 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8b92cf375feac9d6ab5b16f5c096d728bc63b63c;p=thirdparty%2Fdovecot%2Fcore.git lib: Add unit tests to env-util --- diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index d9f4345ce0..8884f37127 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -380,6 +380,7 @@ test_lib_SOURCES = \ test-crc32.c \ test-cpu-limit.c \ test-data-stack.c \ + test-env-util.c \ test-event-category-register.c \ test-event-filter.c \ test-event-filter-expr.c \ diff --git a/src/lib/test-env-util.c b/src/lib/test-env-util.c new file mode 100644 index 0000000000..5762bfc8c5 --- /dev/null +++ b/src/lib/test-env-util.c @@ -0,0 +1,90 @@ +/* Copyright (c) 2021 Dovecot authors, see the included COPYING file */ + +#include "test-lib.h" +#include "env-util.h" + +void test_env_util(void) +{ + test_begin("env util"); + + env_put("ENVUTIL_BACKUP", "saved"); + struct env_backup *backup = env_backup_save(); + + /* test env_clean() */ + env_clean(); + char ***env = env_get_environ_p(); + test_assert(*env == NULL || **env == NULL); + test_assert(getenv("ENVUTIL_BACKUP") == NULL); + + /* test env_put_array() */ + const char *add_env[] = { "a=1", "b=1", "c=1", "d=1", NULL }; + env_put_array(add_env); + test_assert_strcmp(getenv("a"), "1"); + test_assert_strcmp(getenv("b"), "1"); + test_assert_strcmp(getenv("c"), "1"); + test_assert_strcmp(getenv("d"), "1"); + test_assert(getenv("e") == NULL); + const char *add_env2[] = { "b=", "e=2", NULL }; + env_put_array(add_env2); + test_assert_strcmp(getenv("a"), "1"); + test_assert_strcmp(getenv("b"), ""); + test_assert_strcmp(getenv("c"), "1"); + test_assert_strcmp(getenv("d"), "1"); + test_assert_strcmp(getenv("e"), "2"); + + /* test env_clean_except() */ + const char *preserve_env[] = { "a", "c", NULL }; + env_clean_except(preserve_env); + test_assert_strcmp(getenv("a"), "1"); + test_assert(getenv("b") == NULL); + test_assert_strcmp(getenv("c"), "1"); + test_assert(getenv("d") == NULL); + test_assert(strcmp((*env)[0], "a=1") == 0 || + strcmp((*env)[0], "c=1") == 0); + test_assert(strcmp((*env)[1], "a=1") == 0 || + strcmp((*env)[1], "c=1") == 0); + + /* test env_remove() */ + env_remove("a"); + test_assert(getenv("a") == NULL); + test_assert(getenv("c") != NULL); + env_remove("a"); + test_assert(getenv("a") == NULL); + test_assert(getenv("c") != NULL); + env_remove("c"); + test_assert(getenv("c") == NULL); + test_assert(*env == NULL || **env == NULL); + + /* test restoring */ + env_backup_restore(backup); + test_assert_strcmp(getenv("ENVUTIL_BACKUP"), "saved"); + env_put("ENVUTIL_BACKUP", "overwrite"); + test_assert_strcmp(getenv("ENVUTIL_BACKUP"), "overwrite"); + + /* test restoring again */ + env_backup_restore(backup); + test_assert_strcmp(getenv("ENVUTIL_BACKUP"), "saved"); + env_backup_free(&backup); + + test_end(); +} + +enum fatal_test_state fatal_env_util(unsigned int stage) +{ + switch (stage) { + case 0: + test_begin("env util fatals"); + + test_expect_fatal_string("strchr(name, '=') == NULL"); + env_put("key=bad", "value"); + return FATAL_TEST_FAILURE; + case 1: + test_expect_fatal_string("value != NULL"); + const char *const envs[] = { "key", NULL }; + env_put_array(envs); + return FATAL_TEST_FAILURE; + default: + test_end(); + return FATAL_TEST_FINISHED; + } +} diff --git a/src/lib/test-lib.inc b/src/lib/test-lib.inc index b85edcd081..07ad576565 100644 --- a/src/lib/test-lib.inc +++ b/src/lib/test-lib.inc @@ -19,6 +19,8 @@ TEST(test_crc32) TEST(test_cpu_limit) TEST(test_data_stack) FATAL(fatal_data_stack) +TEST(test_env_util) +FATAL(fatal_env_util) TEST(test_event_category_register) FATAL(fatal_event_category_register) TEST(test_event_filter)