diff options
| author | David Bremner <david@tethera.net> | 2021-03-14 11:01:59 -0300 |
|---|---|---|
| committer | David Bremner <david@tethera.net> | 2021-03-18 08:04:06 -0300 |
| commit | 13efbd0e1c88fcbdb48b4c30c7852c5bf1fbd0b7 (patch) | |
| tree | 601d78a964f42acf4c3d41b813e70fadc27eda82 /test/T595-reopen.sh | |
| parent | f0717aa380cfa84c1973f7b03948d93b261a73fe (diff) | |
lib: support reopening databases for write access.
In the future Xapian will apparently support this more conveniently
for the cases other than READ_ONLY => READ_ONLY
Conceptually this function seems to fit better in lib/open.cc;
database.cc is still large enough that moving the function makes
sense.
Diffstat (limited to 'test/T595-reopen.sh')
| -rwxr-xr-x | test/T595-reopen.sh | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/test/T595-reopen.sh b/test/T595-reopen.sh new file mode 100755 index 00000000..7375e2ac --- /dev/null +++ b/test/T595-reopen.sh @@ -0,0 +1,125 @@ +#!/usr/bin/env bash +test_description="library reopen API" + +. $(dirname "$0")/test-lib.sh || exit 1 + +add_email_corpus + +cat <<EOF > c_head +#include <string.h> +#include <stdlib.h> +#include <notmuch-test.h> + +int main (int argc, char** argv) +{ + notmuch_database_t *db; + char *val; + notmuch_status_t stat; + notmuch_database_mode_t mode = NOTMUCH_DATABASE_MODE_READ_ONLY; + + char *msg = NULL; + + for (int i = 1; i < argc; i++) + if (strcmp (argv[i], "%NULL%") == 0) argv[i] = NULL; + + if (argv[2] && (argv[2][0] == 'w' || argv[2][0] == 'W')) + mode = NOTMUCH_DATABASE_MODE_READ_WRITE; + + stat = notmuch_database_open_with_config (argv[1], + mode, + argv[3], + argv[4], + &db, + &msg); + if (stat != NOTMUCH_STATUS_SUCCESS) { + fprintf (stderr, "error opening database: %d %s\n", stat, msg ? msg : ""); + exit (1); + } +EOF + +cat <<EOF > c_tail + EXPECT0(notmuch_database_destroy(db)); +} +EOF + +# The sequence of tests is important here + +test_begin_subtest "notmuch_database_reopen (read=>write)" +cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} read ${NOTMUCH_CONFIG} +{ + EXPECT0(notmuch_database_reopen (db, NOTMUCH_DATABASE_MODE_READ_WRITE)); + EXPECT0(notmuch_database_set_config (db, "test.key1", "testvalue1")); + EXPECT0(notmuch_database_set_config (db, "test.key2", "testvalue2")); + EXPECT0(notmuch_database_get_config (db, "test.key1", &val)); + printf("test.key1 = %s\n", val); + EXPECT0(notmuch_database_get_config (db, "test.key2", &val)); + printf("test.key2 = %s\n", val); +} +EOF +cat <<'EOF' >EXPECTED +== stdout == +test.key1 = testvalue1 +test.key2 = testvalue2 +== stderr == +EOF +test_expect_equal_file EXPECTED OUTPUT + +test_begin_subtest "notmuch_database_reopen (read=>read)" +cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} read ${NOTMUCH_CONFIG} +{ + EXPECT0(notmuch_database_reopen (db, NOTMUCH_DATABASE_MODE_READ_ONLY)); + EXPECT0(notmuch_database_get_config (db, "test.key1", &val)); + printf("test.key1 = %s\n", val); + EXPECT0(notmuch_database_get_config (db, "test.key2", &val)); + printf("test.key2 = %s\n", val); +} +EOF +cat <<'EOF' >EXPECTED +== stdout == +test.key1 = testvalue1 +test.key2 = testvalue2 +== stderr == +EOF +test_expect_equal_file EXPECTED OUTPUT + +test_begin_subtest "notmuch_database_reopen (write=>read)" +cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} write ${NOTMUCH_CONFIG} +{ + EXPECT0(notmuch_database_reopen (db, NOTMUCH_DATABASE_MODE_READ_ONLY)); + EXPECT0(notmuch_database_get_config (db, "test.key1", &val)); + printf("test.key1 = %s\n", val); + EXPECT0(notmuch_database_get_config (db, "test.key2", &val)); + printf("test.key2 = %s\n", val); +} +EOF +cat <<'EOF' >EXPECTED +== stdout == +test.key1 = testvalue1 +test.key2 = testvalue2 +== stderr == +EOF +test_expect_equal_file EXPECTED OUTPUT + +test_begin_subtest "notmuch_database_reopen (write=>write)" +cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} write ${NOTMUCH_CONFIG} +{ + EXPECT0(notmuch_database_reopen (db, NOTMUCH_DATABASE_MODE_READ_WRITE)); + EXPECT0(notmuch_database_set_config (db, "test.key3", "testvalue3")); + EXPECT0(notmuch_database_get_config (db, "test.key1", &val)); + printf("test.key1 = %s\n", val); + EXPECT0(notmuch_database_get_config (db, "test.key2", &val)); + printf("test.key2 = %s\n", val); + EXPECT0(notmuch_database_get_config (db, "test.key3", &val)); + printf("test.key3 = %s\n", val); +} +EOF +cat <<'EOF' >EXPECTED +== stdout == +test.key1 = testvalue1 +test.key2 = testvalue2 +test.key3 = testvalue3 +== stderr == +EOF +test_expect_equal_file EXPECTED OUTPUT + +test_done |
