Cross Reference: /dovecot/src/lib/test-var-expand.c
test-var-expand.c revision 5a580c3a38ced62d4bcc95b8ac7c4f2935b5d294
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
5a580c3a38ced62d4bcc95b8ac7c4f2935b5d294Timo Sirainen/* Copyright (c) 2009-2013 Dovecot authors, see the included COPYING file */
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen#include "test-lib.h"
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen#include "str.h"
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen#include "env-util.h"
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen#include "hostpid.h"
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen#include "var-expand.h"
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainenstruct var_expand_test {
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen const char *in;
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen const char *out;
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen};
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainenstruct var_get_key_range_test {
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen const char *in;
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen unsigned int idx, size;
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen};
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainenstatic void test_var_expand_builtin(void)
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen{
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen static struct var_expand_test tests[] = {
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen { "%{hostname}", NULL },
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen { "%{pid}", NULL },
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen { "a%{env:FOO}b", "abaRb" }
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen };
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen static struct var_expand_table table[] = {
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen { '\0', NULL, NULL }
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen };
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen string_t *str = t_str_new(128);
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen unsigned int i;
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen tests[0].out = my_hostname;
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen tests[1].out = my_pid;
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen env_put("FOO=baR");
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen test_begin("var_expand");
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen for (i = 0; i < N_ELEMENTS(tests); i++) {
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen str_truncate(str, 0);
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen var_expand(str, tests[i].in, table);
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen test_assert(strcmp(tests[i].out, str_c(str)) == 0);
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen }
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen test_end();
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen}
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainenstatic void test_var_get_key_range(void)
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen{
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen static struct var_get_key_range_test tests[] = {
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen { "", 0, 0 },
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen { "{", 1, 0 },
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen { "k", 0, 1 },
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen { "{key}", 1, 3 },
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen { "5.5Rk", 4, 1 },
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen { "5.5R{key}", 5, 3 },
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen { "{key", 1, 3 }
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen };
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen unsigned int i, idx, size;
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen test_begin("var_get_key_range");
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen for (i = 0; i < N_ELEMENTS(tests); i++) {
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen var_get_key_range(tests[i].in, &idx, &size);
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen test_assert(tests[i].idx == idx);
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen test_assert(tests[i].size == size);
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen if (tests[i].size == 1)
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen test_assert(tests[i].in[idx] == var_get_key(tests[i].in));
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen }
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen test_end();
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen}
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainenvoid test_var_expand(void)
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen{
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen test_var_expand_builtin();
b58cb4b59ccd78ee1c3e0df0bc13c300d1bec380Timo Sirainen test_var_get_key_range();
927d3977d5598f12ae18d4fa3f22b9e913f7dd46Timo Sirainen}