]> git.notmuchmail.org Git - notmuch/blob - test/T590-libconfig.sh
lib: add stub for notmuch_database_open_with_config
[notmuch] / test / T590-libconfig.sh
1 #!/usr/bin/env bash
2 test_description="library config API"
3
4 . $(dirname "$0")/test-lib.sh || exit 1
5
6 add_email_corpus
7
8 cat <<EOF > c_head
9 #include <string.h>
10 #include <stdlib.h>
11 #include <notmuch-test.h>
12
13 int main (int argc, char** argv)
14 {
15    notmuch_database_t *db;
16    char *val;
17    notmuch_status_t stat;
18
19    EXPECT0(notmuch_database_open_with_config (argv[1],
20                                               NOTMUCH_DATABASE_MODE_READ_WRITE,
21                                               argv[2],
22                                               NULL,
23                                               &db,
24                                               NULL));
25
26 EOF
27
28 cat <<EOF > c_tail
29    EXPECT0(notmuch_database_destroy(db));
30 }
31 EOF
32
33 test_begin_subtest "notmuch_database_{set,get}_config"
34 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
35 {
36    EXPECT0(notmuch_database_set_config (db, "test.key1", "testvalue1"));
37    EXPECT0(notmuch_database_set_config (db, "test.key2", "testvalue2"));
38    EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
39    printf("test.key1 = %s\n", val);
40    EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
41    printf("test.key2 = %s\n", val);
42 }
43 EOF
44 cat <<'EOF' >EXPECTED
45 == stdout ==
46 test.key1 = testvalue1
47 test.key2 = testvalue2
48 == stderr ==
49 EOF
50 test_expect_equal_file EXPECTED OUTPUT
51
52
53 test_begin_subtest "notmuch_database_get_config_list: empty list"
54 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
55 {
56    notmuch_config_list_t *list;
57    EXPECT0(notmuch_database_get_config_list (db, "nonexistent", &list));
58    printf("valid = %d\n", notmuch_config_list_valid (list));
59    notmuch_config_list_destroy (list);
60 }
61 EOF
62 cat <<'EOF' >EXPECTED
63 == stdout ==
64 valid = 0
65 == stderr ==
66 EOF
67 test_expect_equal_file EXPECTED OUTPUT
68
69 test_begin_subtest "notmuch_database_get_config_list: closed db"
70 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
71 {
72    notmuch_config_list_t *list;
73    EXPECT0(notmuch_database_close (db));
74    stat = notmuch_database_get_config_list (db, "nonexistent", &list);
75    printf("%d\n", stat == NOTMUCH_STATUS_XAPIAN_EXCEPTION);
76 }
77 EOF
78 cat <<'EOF' >EXPECTED
79 == stdout ==
80 1
81 == stderr ==
82 EOF
83 test_expect_equal_file EXPECTED OUTPUT
84
85 test_begin_subtest "notmuch_database_get_config_list: all pairs"
86 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
87 {
88    notmuch_config_list_t *list;
89    EXPECT0(notmuch_database_set_config (db, "zzzafter", "afterval"));
90    EXPECT0(notmuch_database_set_config (db, "aaabefore", "beforeval"));
91    EXPECT0(notmuch_database_get_config_list (db, "", &list));
92    for (; notmuch_config_list_valid (list); notmuch_config_list_move_to_next (list)) {
93       printf("%s %s\n", notmuch_config_list_key (list), notmuch_config_list_value(list));
94    }
95    notmuch_config_list_destroy (list);
96 }
97 EOF
98 cat <<'EOF' >EXPECTED
99 == stdout ==
100 aaabefore beforeval
101 test.key1 testvalue1
102 test.key2 testvalue2
103 zzzafter afterval
104 == stderr ==
105 EOF
106 test_expect_equal_file EXPECTED OUTPUT
107
108 test_begin_subtest "notmuch_database_get_config_list: all pairs (closed db)"
109 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
110 {
111    notmuch_config_list_t *list;
112    EXPECT0(notmuch_database_get_config_list (db, "", &list));
113    EXPECT0(notmuch_database_close (db));
114    for (; notmuch_config_list_valid (list); notmuch_config_list_move_to_next (list)) {
115       printf("%s %d\n", notmuch_config_list_key (list), NULL == notmuch_config_list_value(list));
116    }
117    notmuch_config_list_destroy (list);
118 }
119 EOF
120 cat <<'EOF' >EXPECTED
121 == stdout ==
122 aaabefore 1
123 test.key1 1
124 test.key2 1
125 zzzafter 1
126 == stderr ==
127 EOF
128 test_expect_equal_file EXPECTED OUTPUT
129
130 test_begin_subtest "notmuch_database_get_config_list: one prefix"
131 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
132 {
133    notmuch_config_list_t *list;
134    EXPECT0(notmuch_database_get_config_list (db, "test.key", &list));
135    for (; notmuch_config_list_valid (list); notmuch_config_list_move_to_next (list)) {
136       printf("%s %s\n", notmuch_config_list_key (list), notmuch_config_list_value(list));
137    }
138    notmuch_config_list_destroy (list);
139 }
140 EOF
141 cat <<'EOF' >EXPECTED
142 == stdout ==
143 test.key1 testvalue1
144 test.key2 testvalue2
145 == stderr ==
146 EOF
147 test_expect_equal_file EXPECTED OUTPUT
148
149 test_begin_subtest "dump config"
150 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
151 {
152     EXPECT0(notmuch_database_set_config (db, "key with spaces", "value, with, spaces!"));
153 }
154 EOF
155 notmuch dump --include=config >OUTPUT
156 cat <<'EOF' >EXPECTED
157 #notmuch-dump batch-tag:3 config
158 #@ aaabefore beforeval
159 #@ key%20with%20spaces value,%20with,%20spaces%21
160 #@ test.key1 testvalue1
161 #@ test.key2 testvalue2
162 #@ zzzafter afterval
163 EOF
164 test_expect_equal_file EXPECTED OUTPUT
165
166 test_begin_subtest "restore config"
167 notmuch dump --include=config >EXPECTED
168 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
169 {
170     EXPECT0(notmuch_database_set_config (db, "test.key1", "mutatedvalue"));
171 }
172 EOF
173 notmuch restore --include=config <EXPECTED
174 notmuch dump --include=config >OUTPUT
175 test_expect_equal_file EXPECTED OUTPUT
176
177 backup_database
178 test_begin_subtest "override config from file"
179 notmuch config set test.key1 overridden
180 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
181 {
182    EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
183    printf("test.key1 = %s\n", val);
184    EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
185    printf("test.key2 = %s\n", val);
186 }
187 EOF
188 cat <<'EOF' >EXPECTED
189 == stdout ==
190 test.key1 = overridden
191 test.key2 = testvalue2
192 == stderr ==
193 EOF
194 test_expect_equal_file EXPECTED OUTPUT
195 restore_database
196
197 test_done