test: add known broken test for n_d_needs_upgrade
[notmuch] / 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 test_subtest_known_broken
136 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
137     {
138         notmuch_bool_t ret;
139
140         EXPECT0(notmuch_database_close (db));
141         ret = notmuch_database_needs_upgrade (db);
142         printf ("%d\n", ret == FALSE);
143         stat = NOTMUCH_STATUS_XAPIAN_EXCEPTION;
144     }
145 EOF
146 cat <<EOF > EXPECTED
147 == stdout ==
148 1
149 == stderr ==
150 A Xapian exception occurred at lib/database.cc:XXX: Database has been closed
151 EOF
152 test_expect_equal_file EXPECTED OUTPUT
153
154 test_done