]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: Add unit tests to env-util
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Wed, 5 May 2021 15:18:29 +0000 (18:18 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Mon, 10 May 2021 06:30:45 +0000 (09:30 +0300)
src/lib/Makefile.am
src/lib/test-env-util.c [new file with mode: 0644]
src/lib/test-lib.inc

index d9f4345ce0f95364d324f62fd94e4240bafd86e2..8884f371276c0fbb26d740c2fa8063dd1d737833 100644 (file)
@@ -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 (file)
index 0000000..5762bfc
--- /dev/null
@@ -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;
+       }
+}
index b85edcd081e39662d757bdf195acee5bd8d70d58..07ad5765653cb1f67d99391f3a8110cc8a2b3884 100644 (file)
@@ -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)