]> git.notmuchmail.org Git - notmuch/blob - test/T590-libconfig.sh
notmuch (0.27-2) unstable; urgency=medium
[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
65 test_begin_subtest "notmuch_database_get_config_list: all pairs"
66 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
67 {
68    notmuch_config_list_t *list;
69    EXPECT0(notmuch_database_set_config (db, "zzzafter", "afterval"));
70    EXPECT0(notmuch_database_set_config (db, "aaabefore", "beforeval"));
71    EXPECT0(notmuch_database_get_config_list (db, "", &list));
72    for (; notmuch_config_list_valid (list); notmuch_config_list_move_to_next (list)) {
73       printf("%s %s\n", notmuch_config_list_key (list), notmuch_config_list_value(list));
74    }
75    notmuch_config_list_destroy (list);
76 }
77 EOF
78 cat <<'EOF' >EXPECTED
79 == stdout ==
80 aaabefore beforeval
81 testkey1 testvalue1
82 testkey2 testvalue2
83 zzzafter afterval
84 == stderr ==
85 EOF
86 test_expect_equal_file EXPECTED OUTPUT
87
88 test_begin_subtest "notmuch_database_get_config_list: one prefix"
89 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
90 {
91    notmuch_config_list_t *list;
92    EXPECT0(notmuch_database_get_config_list (db, "testkey", &list));
93    for (; notmuch_config_list_valid (list); notmuch_config_list_move_to_next (list)) {
94       printf("%s %s\n", notmuch_config_list_key (list), notmuch_config_list_value(list));
95    }
96    notmuch_config_list_destroy (list);
97 }
98 EOF
99 cat <<'EOF' >EXPECTED
100 == stdout ==
101 testkey1 testvalue1
102 testkey2 testvalue2
103 == stderr ==
104 EOF
105 test_expect_equal_file EXPECTED OUTPUT
106
107 test_begin_subtest "dump config"
108 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
109 {
110     EXPECT0(notmuch_database_set_config (db, "key with spaces", "value, with, spaces!"));
111 }
112 EOF
113 notmuch dump --include=config >OUTPUT
114 cat <<'EOF' >EXPECTED
115 #notmuch-dump batch-tag:3 config
116 #@ aaabefore beforeval
117 #@ key%20with%20spaces value,%20with,%20spaces%21
118 #@ testkey1 testvalue1
119 #@ testkey2 testvalue2
120 #@ zzzafter afterval
121 EOF
122 test_expect_equal_file EXPECTED OUTPUT
123
124 test_begin_subtest "restore config"
125 notmuch dump --include=config >EXPECTED
126 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
127 {
128     EXPECT0(notmuch_database_set_config (db, "testkey1", "mutatedvalue"));
129 }
130 EOF
131 notmuch restore --include=config <EXPECTED
132 notmuch dump --include=config >OUTPUT
133 test_expect_equal_file EXPECTED OUTPUT
134
135 test_done