]> git.cworth.org Git - notmuch-old/blob - test/T564-lib-query.sh
CLI/git: add safety checks for checkout and commit
[notmuch-old] / test / T564-lib-query.sh
1 #!/usr/bin/env bash
2 test_description="notmuch_query_* 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 <notmuch-test.h>
13
14 int main (int argc, char** argv)
15 {
16    notmuch_database_t *db;
17    notmuch_status_t stat;
18    char *msg = NULL;
19
20    stat = notmuch_database_open_with_config (argv[1],
21                                              NOTMUCH_DATABASE_MODE_READ_WRITE,
22                                              NULL, NULL, &db, &msg);
23    if (stat != NOTMUCH_STATUS_SUCCESS) {
24      fprintf (stderr, "error opening database: %d %s\n", stat, msg ? msg : "");
25      exit (1);
26    }
27 EOF
28
29 cat <<'EOF' > c_tail
30    if (stat) {
31        const char *stat_str = notmuch_database_status_string (db);
32        if (stat_str)
33            fputs (stat_str, stderr);
34     }
35
36 }
37 EOF
38
39 test_begin_subtest "roundtrip query string with closed db"
40 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
41     {
42         notmuch_query_t *query;
43         const char *str = "id:1258471718-6781-1-git-send-email-dottedmag@dottedmag.net";
44         const char *ret;
45
46         EXPECT0(notmuch_database_close (db));
47         query = notmuch_query_create (db, str);
48         ret = notmuch_query_get_query_string (query);
49
50         printf("%s\n%s\n", str, ret);
51     }
52 EOF
53 cat <<EOF > EXPECTED
54 == stdout ==
55 id:1258471718-6781-1-git-send-email-dottedmag@dottedmag.net
56 id:1258471718-6781-1-git-send-email-dottedmag@dottedmag.net
57 == stderr ==
58 EOF
59 test_expect_equal_file EXPECTED OUTPUT
60
61 test_begin_subtest "retrieve closed db from query"
62 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
63     {
64         notmuch_query_t *query;
65         const char *str = "id:1258471718-6781-1-git-send-email-dottedmag@dottedmag.net";
66         notmuch_database_t *db2;
67
68         query = notmuch_query_create (db, str);
69         EXPECT0(notmuch_database_close (db));
70         db2 = notmuch_query_get_database (query);
71
72         printf("%d\n", db == db2);
73     }
74 EOF
75 cat <<EOF > EXPECTED
76 == stdout ==
77 1
78 == stderr ==
79 EOF
80 test_expect_equal_file EXPECTED OUTPUT
81
82 test_begin_subtest "set omit_excluded on closed db"
83 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
84     {
85         notmuch_query_t *query;
86         const char *str = "id:1258471718-6781-1-git-send-email-dottedmag@dottedmag.net";
87
88         query = notmuch_query_create (db, str);
89         EXPECT0(notmuch_database_close (db));
90         notmuch_query_set_omit_excluded (query, NOTMUCH_EXCLUDE_ALL);
91
92         printf("SUCCESS\n");
93     }
94 EOF
95 cat <<EOF > EXPECTED
96 == stdout ==
97 SUCCESS
98 == stderr ==
99 EOF
100 test_expect_equal_file EXPECTED OUTPUT
101
102 test_begin_subtest "roundtrip sort on closed db"
103 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
104     {
105         notmuch_query_t *query;
106         const char *str = "id:1258471718-6781-1-git-send-email-dottedmag@dottedmag.net";
107         notmuch_sort_t sort;
108
109         query = notmuch_query_create (db, str);
110         EXPECT0(notmuch_database_close (db));
111         notmuch_query_set_sort (query, NOTMUCH_SORT_UNSORTED);
112         sort = notmuch_query_get_sort (query);
113         printf("%d\n", sort == NOTMUCH_SORT_UNSORTED);
114     }
115 EOF
116 cat <<EOF > EXPECTED
117 == stdout ==
118 1
119 == stderr ==
120 EOF
121 test_expect_equal_file EXPECTED OUTPUT
122
123 test_begin_subtest "add tag_exclude on closed db"
124 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
125     {
126         notmuch_query_t *query;
127         const char *str = "id:1258471718-6781-1-git-send-email-dottedmag@dottedmag.net";
128
129         query = notmuch_query_create (db, str);
130         EXPECT0(notmuch_database_close (db));
131         stat = notmuch_query_add_tag_exclude (query, "spam");
132         printf("%d\n", stat == NOTMUCH_STATUS_SUCCESS);
133     }
134 EOF
135 cat <<EOF > EXPECTED
136 == stdout ==
137 1
138 == stderr ==
139 EOF
140 test_expect_equal_file EXPECTED OUTPUT
141
142 test_begin_subtest "search threads on closed db"
143 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
144     {
145         notmuch_query_t *query;
146         const char *str = "id:1258471718-6781-1-git-send-email-dottedmag@dottedmag.net";
147         notmuch_threads_t *threads;
148
149         query = notmuch_query_create (db, str);
150         EXPECT0(notmuch_database_close (db));
151         stat = notmuch_query_search_threads (query, &threads);
152
153         printf("%d\n", stat == NOTMUCH_STATUS_XAPIAN_EXCEPTION);
154     }
155 EOF
156 cat <<EOF > EXPECTED
157 == stdout ==
158 1
159 == stderr ==
160 A Xapian exception occurred performing query: Database has been closed
161 Query string was: id:1258471718-6781-1-git-send-email-dottedmag@dottedmag.net
162 EOF
163 test_expect_equal_file EXPECTED OUTPUT
164
165 test_begin_subtest "search messages on closed db"
166 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
167     {
168         notmuch_query_t *query;
169         const char *str = "id:1258471718-6781-1-git-send-email-dottedmag@dottedmag.net";
170         notmuch_messages_t *messages;
171
172         query = notmuch_query_create (db, str);
173         EXPECT0(notmuch_database_close (db));
174         stat = notmuch_query_search_messages (query, &messages);
175
176         printf("%d\n", stat == NOTMUCH_STATUS_XAPIAN_EXCEPTION);
177     }
178 EOF
179 cat <<EOF > EXPECTED
180 == stdout ==
181 1
182 == stderr ==
183 A Xapian exception occurred performing query: Database has been closed
184 Query string was: id:1258471718-6781-1-git-send-email-dottedmag@dottedmag.net
185 EOF
186 test_expect_equal_file EXPECTED OUTPUT
187
188 test_begin_subtest "count messages on closed db"
189 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
190     {
191         notmuch_query_t *query;
192         const char *str = "id:1258471718-6781-1-git-send-email-dottedmag@dottedmag.net";
193         unsigned int count;
194
195         query = notmuch_query_create (db, str);
196         EXPECT0(notmuch_database_close (db));
197         stat = notmuch_query_count_messages (query, &count);
198
199         printf("%d\n", stat == NOTMUCH_STATUS_XAPIAN_EXCEPTION);
200     }
201 EOF
202 cat <<EOF > EXPECTED
203 == stdout ==
204 1
205 == stderr ==
206 A Xapian exception occurred performing query: Database has been closed
207 Query string was: id:1258471718-6781-1-git-send-email-dottedmag@dottedmag.net
208 EOF
209 test_expect_equal_file EXPECTED OUTPUT
210
211 test_begin_subtest "count threads on closed db"
212 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
213     {
214         notmuch_query_t *query;
215         const char *str = "id:1258471718-6781-1-git-send-email-dottedmag@dottedmag.net";
216         unsigned int count;
217
218         query = notmuch_query_create (db, str);
219         EXPECT0(notmuch_database_close (db));
220         stat = notmuch_query_count_threads (query, &count);
221
222         printf("%d\n", stat == NOTMUCH_STATUS_XAPIAN_EXCEPTION);
223     }
224 EOF
225 cat <<EOF > EXPECTED
226 == stdout ==
227 1
228 == stderr ==
229 A Xapian exception occurred performing query: Database has been closed
230 Query string was: id:1258471718-6781-1-git-send-email-dottedmag@dottedmag.net
231 EOF
232 test_expect_equal_file EXPECTED OUTPUT
233
234 test_begin_subtest "destroy query with closed db"
235 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
236     {
237         notmuch_query_t *query;
238         const char *str = "id:1258471718-6781-1-git-send-email-dottedmag@dottedmag.net";
239
240         query = notmuch_query_create (db, str);
241         EXPECT0(notmuch_database_close (db));
242         notmuch_query_destroy (query);
243
244         printf("SUCCESS\n");
245     }
246 EOF
247 cat <<EOF > EXPECTED
248 == stdout ==
249 SUCCESS
250 == stderr ==
251 EOF
252 test_expect_equal_file EXPECTED OUTPUT
253
254 test_done