2 test_description="library config API"
4 . $(dirname "$0")/test-lib.sh || exit 1
11 #include <notmuch-test.h>
13 int main (int argc, char** argv)
15 notmuch_database_t *db;
17 notmuch_status_t stat;
19 EXPECT0(notmuch_database_open_with_config (argv[1],
20 NOTMUCH_DATABASE_MODE_READ_WRITE,
29 EXPECT0(notmuch_database_destroy(db));
33 test_begin_subtest "notmuch_database_{set,get}_config"
34 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
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);
46 test.key1 = testvalue1
47 test.key2 = testvalue2
50 test_expect_equal_file EXPECTED OUTPUT
53 test_begin_subtest "notmuch_database_get_config_list: empty list"
54 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
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);
67 test_expect_equal_file EXPECTED OUTPUT
69 test_begin_subtest "notmuch_database_get_config_list: closed db"
70 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
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);
83 test_expect_equal_file EXPECTED OUTPUT
85 test_begin_subtest "notmuch_database_get_config_list: all pairs"
86 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
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));
95 notmuch_config_list_destroy (list);
106 test_expect_equal_file EXPECTED OUTPUT
108 test_begin_subtest "notmuch_database_get_config_list: all pairs (closed db)"
109 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
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));
117 notmuch_config_list_destroy (list);
120 cat <<'EOF' >EXPECTED
128 test_expect_equal_file EXPECTED OUTPUT
130 test_begin_subtest "notmuch_database_get_config_list: one prefix"
131 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
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));
138 notmuch_config_list_destroy (list);
141 cat <<'EOF' >EXPECTED
147 test_expect_equal_file EXPECTED OUTPUT
149 test_begin_subtest "dump config"
150 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
152 EXPECT0(notmuch_database_set_config (db, "key with spaces", "value, with, spaces!"));
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
164 test_expect_equal_file EXPECTED OUTPUT
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}
170 EXPECT0(notmuch_database_set_config (db, "test.key1", "mutatedvalue"));
173 notmuch restore --include=config <EXPECTED
174 notmuch dump --include=config >OUTPUT
175 test_expect_equal_file EXPECTED OUTPUT
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}
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);
188 cat <<'EOF' >EXPECTED
190 test.key1 = overridden
191 test.key2 = testvalue2
194 test_expect_equal_file EXPECTED OUTPUT