]> git.notmuchmail.org Git - notmuch/blob - test/T590-libconfig.sh
emacs: Various cosmetic changes
[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 (argv[1], NOTMUCH_DATABASE_MODE_READ_WRITE, &db));
20
21 EOF
22
23 cat <<EOF > c_tail
24    EXPECT0(notmuch_database_destroy(db));
25 }
26 EOF
27
28 test_begin_subtest "notmuch_database_{set,get}_config"
29 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
30 {
31    EXPECT0(notmuch_database_set_config (db, "testkey1", "testvalue1"));
32    EXPECT0(notmuch_database_set_config (db, "testkey2", "testvalue2"));
33    EXPECT0(notmuch_database_get_config (db, "testkey1", &val));
34    printf("testkey1 = %s\n", val);
35    EXPECT0(notmuch_database_get_config (db, "testkey2", &val));
36    printf("testkey2 = %s\n", val);
37 }
38 EOF
39 cat <<'EOF' >EXPECTED
40 == stdout ==
41 testkey1 = testvalue1
42 testkey2 = testvalue2
43 == stderr ==
44 EOF
45 test_expect_equal_file EXPECTED OUTPUT
46
47
48 test_begin_subtest "notmuch_database_get_config_list: empty list"
49 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
50 {
51    notmuch_config_list_t *list;
52    EXPECT0(notmuch_database_get_config_list (db, "nonexistent", &list));
53    printf("valid = %d\n", notmuch_config_list_valid (list));
54    notmuch_config_list_destroy (list);
55 }
56 EOF
57 cat <<'EOF' >EXPECTED
58 == stdout ==
59 valid = 0
60 == stderr ==
61 EOF
62 test_expect_equal_file EXPECTED OUTPUT
63
64 test_begin_subtest "notmuch_database_get_config_list: closed db"
65 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
66 {
67    notmuch_config_list_t *list;
68    EXPECT0(notmuch_database_close (db));
69    stat = notmuch_database_get_config_list (db, "nonexistent", &list);
70    printf("%d\n", stat == NOTMUCH_STATUS_XAPIAN_EXCEPTION);
71 }
72 EOF
73 cat <<'EOF' >EXPECTED
74 == stdout ==
75 1
76 == stderr ==
77 EOF
78 test_expect_equal_file EXPECTED OUTPUT
79
80 test_begin_subtest "notmuch_database_get_config_list: all pairs"
81 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
82 {
83    notmuch_config_list_t *list;
84    EXPECT0(notmuch_database_set_config (db, "zzzafter", "afterval"));
85    EXPECT0(notmuch_database_set_config (db, "aaabefore", "beforeval"));
86    EXPECT0(notmuch_database_get_config_list (db, "", &list));
87    for (; notmuch_config_list_valid (list); notmuch_config_list_move_to_next (list)) {
88       printf("%s %s\n", notmuch_config_list_key (list), notmuch_config_list_value(list));
89    }
90    notmuch_config_list_destroy (list);
91 }
92 EOF
93 cat <<'EOF' >EXPECTED
94 == stdout ==
95 aaabefore beforeval
96 testkey1 testvalue1
97 testkey2 testvalue2
98 zzzafter afterval
99 == stderr ==
100 EOF
101 test_expect_equal_file EXPECTED OUTPUT
102
103 test_begin_subtest "notmuch_database_get_config_list: all pairs (closed db)"
104 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
105 {
106    notmuch_config_list_t *list;
107    EXPECT0(notmuch_database_get_config_list (db, "", &list));
108    EXPECT0(notmuch_database_close (db));
109    for (; notmuch_config_list_valid (list); notmuch_config_list_move_to_next (list)) {
110       printf("%s %d\n", notmuch_config_list_key (list), NULL == notmuch_config_list_value(list));
111    }
112    notmuch_config_list_destroy (list);
113 }
114 EOF
115 cat <<'EOF' >EXPECTED
116 == stdout ==
117 aaabefore 1
118 testkey1 1
119 testkey2 1
120 zzzafter 1
121 == stderr ==
122 EOF
123 test_expect_equal_file EXPECTED OUTPUT
124
125 test_begin_subtest "notmuch_database_get_config_list: one prefix"
126 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
127 {
128    notmuch_config_list_t *list;
129    EXPECT0(notmuch_database_get_config_list (db, "testkey", &list));
130    for (; notmuch_config_list_valid (list); notmuch_config_list_move_to_next (list)) {
131       printf("%s %s\n", notmuch_config_list_key (list), notmuch_config_list_value(list));
132    }
133    notmuch_config_list_destroy (list);
134 }
135 EOF
136 cat <<'EOF' >EXPECTED
137 == stdout ==
138 testkey1 testvalue1
139 testkey2 testvalue2
140 == stderr ==
141 EOF
142 test_expect_equal_file EXPECTED OUTPUT
143
144 test_begin_subtest "dump config"
145 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
146 {
147     EXPECT0(notmuch_database_set_config (db, "key with spaces", "value, with, spaces!"));
148 }
149 EOF
150 notmuch dump --include=config >OUTPUT
151 cat <<'EOF' >EXPECTED
152 #notmuch-dump batch-tag:3 config
153 #@ aaabefore beforeval
154 #@ key%20with%20spaces value,%20with,%20spaces%21
155 #@ testkey1 testvalue1
156 #@ testkey2 testvalue2
157 #@ zzzafter afterval
158 EOF
159 test_expect_equal_file EXPECTED OUTPUT
160
161 test_begin_subtest "restore config"
162 notmuch dump --include=config >EXPECTED
163 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
164 {
165     EXPECT0(notmuch_database_set_config (db, "testkey1", "mutatedvalue"));
166 }
167 EOF
168 notmuch restore --include=config <EXPECTED
169 notmuch dump --include=config >OUTPUT
170 test_expect_equal_file EXPECTED OUTPUT
171
172 test_done