Unfortunately quite a few of the error handling paths here require more sophisticated tests using e.g. gdb. --- test/T560-lib-error.sh | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100755 test/T560-lib-error.sh diff --git a/test/T560-lib-error.sh b/test/T560-lib-error.sh new file mode 100755 index 0000000..dc2022f --- /dev/null +++ b/test/T560-lib-error.sh @@ -0,0 +1,91 @@ +#!/usr/bin/env bash +test_description="error reporting for library" + +. ./test-lib.sh + +add_email_corpus + +test_expect_success "building database" "NOTMUCH_NEW" + +test_begin_subtest "Open null pointer" +test_C <<EOF +#include <stdio.h> +#include <notmuch.h> +int main (int argc, char** argv) +{ + notmuch_database_t *db; + notmuch_status_t stat; + stat = notmuch_database_open (NULL, 0, 0); +} +EOF +cat <<EOF >EXPECTED +== stdout == +== stderr == +Error: Cannot open a database for a NULL path. +EOF +test_expect_equal_file EXPECTED OUTPUT + +test_begin_subtest "Open nonexistent database" +test_C <<EOF +#include <stdio.h> +#include <notmuch.h> +int main (int argc, char** argv) +{ + notmuch_database_t *db; + notmuch_status_t stat; + stat = notmuch_database_open ("/nonexistent/foo", 0, 0); +} +EOF +cat <<EOF >EXPECTED +== stdout == +== stderr == +Error opening database at /nonexistent/foo/.notmuch: No such file or directory +EOF +test_expect_equal_file EXPECTED OUTPUT + +test_begin_subtest "Write to read-only database" +test_C ${MAIL_DIR} <<EOF +#include <stdio.h> +#include <notmuch.h> +int main (int argc, char** argv) +{ + notmuch_database_t *db; + notmuch_status_t stat; + stat = notmuch_database_open (argv[1], NOTMUCH_DATABASE_MODE_READ_ONLY, &db); + if (stat != NOTMUCH_STATUS_SUCCESS) { + fprintf (stderr, "error opening database: %d\n", stat); + } + stat = notmuch_database_add_message (db, "/dev/null", NULL); +} +EOF +cat <<EOF >EXPECTED +== stdout == +== stderr == +Cannot write to a read-only database. +EOF +test_expect_equal_file EXPECTED OUTPUT + +test_begin_subtest "compact, overwriting existing backup" +test_C ${MAIL_DIR} <<EOF +#include <stdio.h> +#include <notmuch.h> +static void +status_cb (const char *msg, void *closure) +{ + printf ("%s\n", msg); +} +int main (int argc, char** argv) +{ + notmuch_database_t *db; + notmuch_status_t stat; + stat = notmuch_database_compact (argv[1], argv[1], status_cb, NULL); +} +EOF +cat <<EOF >EXPECTED +== stdout == +== stderr == +Path already exists: CWD/mail +EOF +test_expect_equal_file EXPECTED OUTPUT + +test_done -- 2.1.4