]> git.notmuchmail.org Git - notmuch/blob - test/T590-libconfig.sh
test: regression test for n_d_get_config_list on closed db.
[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: one prefix"
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, "testkey", &list));
108    for (; notmuch_config_list_valid (list); notmuch_config_list_move_to_next (list)) {
109       printf("%s %s\n", notmuch_config_list_key (list), notmuch_config_list_value(list));
110    }
111    notmuch_config_list_destroy (list);
112 }
113 EOF
114 cat <<'EOF' >EXPECTED
115 == stdout ==
116 testkey1 testvalue1
117 testkey2 testvalue2
118 == stderr ==
119 EOF
120 test_expect_equal_file EXPECTED OUTPUT
121
122 test_begin_subtest "dump config"
123 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
124 {
125     EXPECT0(notmuch_database_set_config (db, "key with spaces", "value, with, spaces!"));
126 }
127 EOF
128 notmuch dump --include=config >OUTPUT
129 cat <<'EOF' >EXPECTED
130 #notmuch-dump batch-tag:3 config
131 #@ aaabefore beforeval
132 #@ key%20with%20spaces value,%20with,%20spaces%21
133 #@ testkey1 testvalue1
134 #@ testkey2 testvalue2
135 #@ zzzafter afterval
136 EOF
137 test_expect_equal_file EXPECTED OUTPUT
138
139 test_begin_subtest "restore config"
140 notmuch dump --include=config >EXPECTED
141 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
142 {
143     EXPECT0(notmuch_database_set_config (db, "testkey1", "mutatedvalue"));
144 }
145 EOF
146 notmuch restore --include=config <EXPECTED
147 notmuch dump --include=config >OUTPUT
148 test_expect_equal_file EXPECTED OUTPUT
149
150 test_done