]> git.cworth.org Git - notmuch-old/blob - test/T562-lib-database.sh
lib/n_d_get_version: catch exceptions and clarify the API
[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_done