[PATCH 1/4] test: add known broken test for uncaught DatabaseModifiedError

Jani Nikula jani at nikula.org
Sat Feb 25 10:49:53 PST 2017


On Fri, 24 Feb 2017, David Bremner <david at tethera.net> wrote:
> There are several of these to track down, but one that is in quite a
> few code paths is _notmuch_message_ensure_metadata.
> ---
>  test/T640-database-modified.sh | 60 ++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 60 insertions(+)
>  create mode 100755 test/T640-database-modified.sh
>
> diff --git a/test/T640-database-modified.sh b/test/T640-database-modified.sh
> new file mode 100755
> index 00000000..41869eaa
> --- /dev/null
> +++ b/test/T640-database-modified.sh
> @@ -0,0 +1,60 @@
> +#!/usr/bin/env bash
> +test_description="DatabaseModifiedError handling"
> +. ./test-lib.sh || exit 1
> +
> +add_email_corpus

Is the whole corpus necessary? Just add a single message?

> +
> +test_begin_subtest "catching DatabaseModifiedError in _notmuch_message_ensure_metadata"
> +test_subtest_known_broken
> +test_C ${MAIL_DIR} <<'EOF'

I'm not entirely thrilled by the whole test_C thing, but I guess I've
lost that battle... :/

> +#include <unistd.h>
> +#include <stdlib.h>
> +#include <notmuch-test.h>
> +#include <talloc.h>
> +int
> +main (int argc, char **argv)
> +{
> +    pid_t child;

Leftover variable?

> +    const char *path = argv[1];
> +
> +    notmuch_database_t *rw_db, *ro_db;
> +    notmuch_messages_t *messages;
> +    notmuch_message_t *message, *ro_message;
> +    notmuch_query_t *query;
> +    notmuch_tags_t *tags;
> +
> +    EXPECT0 (notmuch_database_open (path, NOTMUCH_DATABASE_MODE_READ_ONLY, &ro_db));
> +    EXPECT0 (notmuch_database_find_message (ro_db, "4EFC743A.3060609 at april.org", &ro_message));

How about add_message with a specific message-id, and using that here? I
think we rely too much on the test corpus and hard-code stuff from there
too much.

Otherwise, LGTM.

> +
> +    EXPECT0 (notmuch_database_open (path, NOTMUCH_DATABASE_MODE_READ_WRITE, &rw_db));
> +    query = notmuch_query_create(rw_db, "");
> +    EXPECT0 (notmuch_query_search_messages_st (query, &messages));
> +
> +    for (int count=0;
> +	 notmuch_messages_valid (messages);
> +	 notmuch_messages_move_to_next (messages), count++) {
> +	message = notmuch_messages_get (messages);
> +	for (int i=0; i<200; i++) {
> +	    char *tag_str = talloc_asprintf(rw_db, "%d", i);
> +	    EXPECT0 (notmuch_message_add_tag (message, tag_str));
> +	    talloc_free (tag_str);
> +	}
> +    }
> +
> +    notmuch_database_close (rw_db);
> +
> +    tags = notmuch_message_get_tags (ro_message);
> +    if (tags)
> +	printf("SUCCESS\n");
> +    return 0;
> +}
> +EOF
> +
> +cat <<'EOF' >EXPECTED
> +== stdout ==
> +SUCCESS
> +== stderr ==
> +EOF
> +test_expect_equal_file EXPECTED OUTPUT
> +
> +test_done
> -- 
> 2.11.0
>
> _______________________________________________
> notmuch mailing list
> notmuch at notmuchmail.org
> https://notmuchmail.org/mailman/listinfo/notmuch


More information about the notmuch mailing list