2 test_description="error reporting for library"
7 rm -rf notmuch-dir-backup
8 cp -pR ${MAIL_DIR}/.notmuch notmuch-dir-backup
11 rm -rf ${MAIL_DIR}/.notmuch
12 cp -pR notmuch-dir-backup ${MAIL_DIR}/.notmuch
18 test_expect_success "building database" "NOTMUCH_NEW"
20 test_begin_subtest "Open null pointer"
24 int main (int argc, char** argv)
26 notmuch_database_t *db;
27 notmuch_status_t stat;
28 stat = notmuch_database_open (NULL, 0, 0);
34 Error: Cannot open a database for a NULL path.
36 test_expect_equal_file EXPECTED OUTPUT
38 test_begin_subtest "Open relative path"
39 test_subtest_known_broken
43 int main (int argc, char** argv)
45 notmuch_database_t *db;
46 notmuch_status_t stat;
47 stat = notmuch_database_open ("./nonexistent/foo", 0, 0);
53 Error: Database path must be absolute.
55 test_expect_equal_file EXPECTED OUTPUT
57 test_begin_subtest "Create database in relative path"
58 test_subtest_known_broken
62 int main (int argc, char** argv)
64 notmuch_database_t *db;
65 notmuch_status_t stat;
66 stat = notmuch_database_create ("./nonexistent/foo", &db);
72 Error: Database path must be absolute.
74 test_expect_equal_file EXPECTED OUTPUT
76 test_begin_subtest "Open nonexistent database"
77 test_C ${PWD}/nonexistent/foo <<'EOF'
80 int main (int argc, char** argv)
82 notmuch_database_t *db;
83 notmuch_status_t stat;
84 stat = notmuch_database_open (argv[1], 0, 0);
90 Error opening database at CWD/nonexistent/foo/.notmuch: No such file or directory
92 test_expect_equal_file EXPECTED OUTPUT
94 test_begin_subtest "create NULL path"
98 int main (int argc, char** argv)
100 notmuch_status_t stat;
101 stat = notmuch_database_create (NULL, NULL);
104 cat <<'EOF' >EXPECTED
107 Error: Cannot create a database for a NULL path.
109 test_expect_equal_file EXPECTED OUTPUT
111 test_begin_subtest "Create database in non-existant directory"
115 int main (int argc, char** argv)
117 notmuch_database_t *db;
118 notmuch_status_t stat;
119 stat = notmuch_database_create ("./nonexistent/foo", &db);
122 cat <<'EOF' >EXPECTED
125 Error: Cannot create database at ./nonexistent/foo: No such file or directory.
127 test_expect_equal_file EXPECTED OUTPUT
129 test_begin_subtest "Write to read-only database"
130 test_C ${MAIL_DIR} <<'EOF'
133 int main (int argc, char** argv)
135 notmuch_database_t *db;
136 notmuch_status_t stat;
137 stat = notmuch_database_open (argv[1], NOTMUCH_DATABASE_MODE_READ_ONLY, &db);
138 if (stat != NOTMUCH_STATUS_SUCCESS) {
139 fprintf (stderr, "error opening database: %d\n", stat);
141 stat = notmuch_database_add_message (db, "/dev/null", NULL);
143 fputs (notmuch_database_status_string (db), stderr);
147 cat <<'EOF' >EXPECTED
150 Cannot write to a read-only database.
152 test_expect_equal_file EXPECTED OUTPUT
154 test_begin_subtest "Add non-existent file"
155 test_C ${MAIL_DIR} <<'EOF'
158 int main (int argc, char** argv)
160 notmuch_database_t *db;
161 notmuch_status_t stat;
162 stat = notmuch_database_open (argv[1], NOTMUCH_DATABASE_MODE_READ_WRITE, &db);
163 if (stat != NOTMUCH_STATUS_SUCCESS) {
164 fprintf (stderr, "error opening database: %d\n", stat);
166 stat = notmuch_database_add_message (db, "./nonexistent", NULL);
168 char *status_string = notmuch_database_status_string (db);
169 if (status_string) fputs (status_string, stderr);
173 cat <<'EOF' >EXPECTED
176 Error opening ./nonexistent: No such file or directory
178 test_expect_equal_file EXPECTED OUTPUT
180 test_begin_subtest "compact, overwriting existing backup"
181 test_C ${MAIL_DIR} <<'EOF'
185 status_cb (const char *msg, void *closure)
187 printf ("%s\n", msg);
189 int main (int argc, char** argv)
191 notmuch_database_t *db;
192 notmuch_status_t stat;
193 stat = notmuch_database_compact (argv[1], argv[1], status_cb, NULL);
196 cat <<'EOF' >EXPECTED
198 Path already exists: CWD/mail
202 test_expect_equal_file EXPECTED OUTPUT
206 #include <sys/types.h>
207 #include <sys/stat.h>
212 int main (int argc, char** argv)
214 notmuch_database_t *db;
215 notmuch_status_t stat;
219 stat = notmuch_database_open (argv[1], NOTMUCH_DATABASE_MODE_READ_WRITE, &db);
220 if (stat != NOTMUCH_STATUS_SUCCESS) {
221 fprintf (stderr, "error opening database: %d\n", stat);
223 path = talloc_asprintf (db, "%s/.notmuch/xapian/postlist.DB", argv[1]);
224 fd = open(path,O_WRONLY|O_TRUNC);
226 fprintf (stderr, "error opening %s\n");
230 const char *stat_str = notmuch_database_status_string (db);
232 fputs (stat_str, stderr);
239 test_begin_subtest "Xapian exception finding message"
240 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
242 notmuch_message_t *message = NULL;
243 stat = notmuch_database_find_message (db, "id:nonexistent", &message);
246 sed 's/^\(A Xapian exception [^:]*\):.*$/\1/' < OUTPUT > OUTPUT.clean
247 cat <<'EOF' >EXPECTED
250 A Xapian exception occurred finding message
252 test_expect_equal_file EXPECTED OUTPUT.clean
256 test_begin_subtest "Xapian exception getting tags"
257 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
259 notmuch_tags_t *tags = NULL;
260 tags = notmuch_database_get_all_tags (db);
261 stat = (tags == NULL);
264 sed 's/^\(A Xapian exception [^:]*\):.*$/\1/' < OUTPUT > OUTPUT.clean
265 cat <<'EOF' >EXPECTED
268 A Xapian exception occurred getting tags
270 test_expect_equal_file EXPECTED OUTPUT.clean
274 test_begin_subtest "Xapian exception creating directory"
275 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
277 notmuch_directory_t *directory = NULL;
278 stat = notmuch_database_get_directory (db, "none/existing", &directory);
281 sed 's/^\(A Xapian exception [^:]*\):.*$/\1/' < OUTPUT > OUTPUT.clean
282 cat <<'EOF' >EXPECTED
285 A Xapian exception occurred creating a directory
287 test_expect_equal_file EXPECTED OUTPUT.clean
291 test_begin_subtest "Xapian exception searching messages"
292 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
294 notmuch_messages_t *messages = NULL;
295 notmuch_query_t *query=notmuch_query_create (db, "*");
296 stat = notmuch_query_search_messages_st (query, &messages);
299 sed 's/^\(A Xapian exception [^:]*\):.*$/\1/' < OUTPUT > OUTPUT.clean
300 cat <<'EOF' >EXPECTED
303 A Xapian exception occurred performing query
306 test_expect_equal_file EXPECTED OUTPUT.clean
310 test_begin_subtest "Xapian exception counting messages"
311 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
313 notmuch_query_t *query=notmuch_query_create (db, "id:87ocn0qh6d.fsf@yoom.home.cworth.org");
314 int count = notmuch_query_count_messages (query);
318 sed 's/^\(A Xapian exception [^:]*\):.*$/\1/' < OUTPUT > OUTPUT.clean
319 cat <<'EOF' >EXPECTED
322 A Xapian exception occurred performing query
323 Query string was: id:87ocn0qh6d.fsf@yoom.home.cworth.org
325 test_expect_equal_file EXPECTED OUTPUT.clean