]> git.cworth.org Git - notmuch-old/blob - test/T562-lib-database.sh
test: regression test for n_d_get_revision
[notmuch-old] / test / T562-lib-database.sh
1 #!/usr/bin/env bash
2 test_description="notmuch_database_* API"
3
4 . $(dirname "$0")/test-lib.sh || exit 1
5
6 add_email_corpus
7
8 test_begin_subtest "building database"
9 test_expect_success "NOTMUCH_NEW"
10
11 cat <<EOF > c_head
12 #include <stdio.h>
13 #include <notmuch.h>
14 #include <notmuch-test.h>
15 int main (int argc, char** argv)
16 {
17    notmuch_database_t *db;
18    notmuch_status_t stat = NOTMUCH_STATUS_SUCCESS;
19    char *msg = NULL;
20
21    stat = notmuch_database_open_verbose (argv[1], NOTMUCH_DATABASE_MODE_READ_WRITE, &db, &msg);
22    if (stat != NOTMUCH_STATUS_SUCCESS) {
23      fprintf (stderr, "error opening database: %d %s\n", stat, msg ? msg : "");
24      exit (1);
25    }
26 EOF
27
28 cat <<'EOF' > c_tail
29    if (stat) {
30        const char *stat_str = notmuch_database_status_string (db);
31        if (stat_str)
32            fputs (stat_str, stderr);
33     }
34
35 }
36 EOF
37
38 test_begin_subtest "get status_string with closed db"
39 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
40     {
41         const char *str;
42         EXPECT0(notmuch_database_close (db));
43         str = notmuch_database_status_string (db);
44         printf("%d\n", str == NULL);
45     }
46 EOF
47 cat <<EOF > EXPECTED
48 == stdout ==
49 1
50 == stderr ==
51 EOF
52 test_expect_equal_file EXPECTED OUTPUT
53
54 test_begin_subtest "get path with closed db"
55 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
56     {
57         const char *path;
58         EXPECT0(notmuch_database_close (db));
59         path = notmuch_database_get_path (db);
60         printf("%s\n", path);
61     }
62 EOF
63 cat <<EOF > EXPECTED
64 == stdout ==
65 MAIL_DIR
66 == stderr ==
67 EOF
68 test_expect_equal_file EXPECTED OUTPUT
69
70 test_begin_subtest "get version with closed db"
71 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
72     {
73         unsigned int version;
74         EXPECT0(notmuch_database_close (db));
75         version = notmuch_database_get_version (db);
76         printf ("%u\n", version);
77         stat = NOTMUCH_STATUS_XAPIAN_EXCEPTION;
78     }
79 EOF
80 cat <<EOF > EXPECTED
81 == stdout ==
82 0
83 == stderr ==
84 A Xapian exception occurred at lib/database.cc:XXX: Database has been closed
85 EOF
86 test_expect_equal_file EXPECTED OUTPUT
87
88 test_begin_subtest "re-close a closed db"
89 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
90     {
91         EXPECT0(notmuch_database_close (db));
92         stat = notmuch_database_close (db);
93         printf ("%d\n", stat);
94     }
95 EOF
96 cat <<EOF > EXPECTED
97 == stdout ==
98 0
99 == stderr ==
100 EOF
101 test_expect_equal_file EXPECTED OUTPUT
102
103 test_begin_subtest "destroy a closed db"
104 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
105     {
106         unsigned int version;
107         EXPECT0(notmuch_database_close (db));
108         stat = notmuch_database_destroy (db);
109         printf ("%d\n", stat);
110     }
111 EOF
112 cat <<EOF > EXPECTED
113 == stdout ==
114 0
115 == stderr ==
116 EOF
117 test_expect_equal_file EXPECTED OUTPUT
118
119 test_begin_subtest "destroy an open db"
120 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
121     {
122         unsigned int version;
123         stat = notmuch_database_destroy (db);
124         printf ("%d\n", stat);
125     }
126 EOF
127 cat <<EOF > EXPECTED
128 == stdout ==
129 0
130 == stderr ==
131 EOF
132 test_expect_equal_file EXPECTED OUTPUT
133
134 test_begin_subtest "check a closed db for upgrade"
135 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
136     {
137         notmuch_bool_t ret;
138
139         EXPECT0(notmuch_database_close (db));
140         ret = notmuch_database_needs_upgrade (db);
141         printf ("%d\n", ret == FALSE);
142         stat = NOTMUCH_STATUS_XAPIAN_EXCEPTION;
143     }
144 EOF
145 cat <<EOF > EXPECTED
146 == stdout ==
147 1
148 == stderr ==
149 A Xapian exception occurred at lib/database.cc:XXX: Database has been closed
150 EOF
151 test_expect_equal_file EXPECTED OUTPUT
152
153 test_begin_subtest "upgrade a closed db"
154 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
155     {
156         notmuch_bool_t ret;
157
158         EXPECT0(notmuch_database_close (db));
159         stat = notmuch_database_upgrade (db, NULL, NULL);
160         printf ("%d\n", ret == NOTMUCH_STATUS_SUCCESS);
161     }
162 EOF
163 cat <<EOF > EXPECTED
164 == stdout ==
165 1
166 == stderr ==
167 EOF
168 test_expect_equal_file EXPECTED OUTPUT
169
170 test_begin_subtest "begin atomic section for a closed db"
171 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
172     {
173         EXPECT0(notmuch_database_close (db));
174         stat = notmuch_database_begin_atomic (db);
175         printf ("%d\n", stat == NOTMUCH_STATUS_SUCCESS ||
176                         stat == NOTMUCH_STATUS_XAPIAN_EXCEPTION);
177         stat = NOTMUCH_STATUS_SUCCESS;
178     }
179 EOF
180 cat <<EOF > EXPECTED
181 == stdout ==
182 1
183 == stderr ==
184 EOF
185 test_expect_equal_file EXPECTED OUTPUT
186
187 test_begin_subtest "end atomic section for a closed db"
188 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
189     {
190         EXPECT0(notmuch_database_close (db));
191         EXPECT0(notmuch_database_begin_atomic (db));
192         stat = notmuch_database_end_atomic (db);
193         printf ("%d\n", stat == NOTMUCH_STATUS_SUCCESS ||
194                         stat == NOTMUCH_STATUS_XAPIAN_EXCEPTION);
195         stat = NOTMUCH_STATUS_SUCCESS;
196     }
197 EOF
198 cat <<EOF > EXPECTED
199 == stdout ==
200 1
201 == stderr ==
202 EOF
203 test_expect_equal_file EXPECTED OUTPUT
204
205 test_begin_subtest "get revision for a closed db"
206 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
207     {
208         const char *uuid;
209         unsigned long rev;
210
211         EXPECT0(notmuch_database_close (db));
212         rev = notmuch_database_get_revision (db, &uuid);
213         printf ("%d\n", rev, uuid);
214     }
215 EOF
216 cat <<EOF > EXPECTED
217 == stdout ==
218 53
219 == stderr ==
220 EOF
221 test_expect_equal_file EXPECTED OUTPUT
222
223 test_done