From 28db904fb296a28afe6cbf792ba8c49af95301c2 Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Thu, 30 Jun 2011 23:43:08 +0300 Subject: [PATCH] * update/add unit tests for threading --- src/tests/Makefile.am | 35 +++++++- src/tests/test-mu-maildir.c | 4 +- src/tests/test-mu-msg.c | 33 ++++++++ src/tests/test-mu-query.c | 8 +- src/tests/test-mu-threads.c | 80 +++++++++++++++++-- .../cur/1252168370_3.14675.cthulhu!2,S | 21 +++++ src/tests/testdir2/Foo/new/.noindex | 0 src/tests/testdir2/Foo/tmp/.noindex | 0 src/tests/testdir2/bar/new/.noindex | 0 src/tests/testdir2/bar/tmp/.noindex | 0 src/tests/testdir3/cycle/cur/cycle0 | 7 ++ src/tests/testdir3/cycle/cur/cycle0.0 | 8 ++ src/tests/testdir3/cycle/cur/cycle0.0.0 | 8 ++ src/tests/testdir3/cycle/cur/rogue0 | 8 ++ src/tests/testdir3/cycle/new/.noindex | 0 src/tests/testdir3/cycle/tmp/.noindex | 0 src/tests/testdir3/{ => tree}/cur/child0.0 | 0 src/tests/testdir3/{ => tree}/cur/child0.1 | 0 src/tests/testdir3/{ => tree}/cur/child0.1.0 | 0 src/tests/testdir3/{ => tree}/cur/child2.0.0 | 0 .../testdir3/{ => tree}/cur/child3.0.0.0.0 | 0 src/tests/testdir3/{ => tree}/cur/child4.0 | 0 src/tests/testdir3/{ => tree}/cur/child4.1 | 0 src/tests/testdir3/{ => tree}/cur/root0 | 0 src/tests/testdir3/{ => tree}/cur/root1 | 0 src/tests/testdir3/{ => tree}/cur/root2 | 0 src/tests/testdir3/tree/new/.noindex | 0 src/tests/testdir3/tree/tmp/.noindex | 0 28 files changed, 196 insertions(+), 16 deletions(-) create mode 100644 src/tests/testdir/cur/1252168370_3.14675.cthulhu!2,S create mode 100644 src/tests/testdir2/Foo/new/.noindex create mode 100644 src/tests/testdir2/Foo/tmp/.noindex create mode 100644 src/tests/testdir2/bar/new/.noindex create mode 100644 src/tests/testdir2/bar/tmp/.noindex create mode 100644 src/tests/testdir3/cycle/cur/cycle0 create mode 100644 src/tests/testdir3/cycle/cur/cycle0.0 create mode 100644 src/tests/testdir3/cycle/cur/cycle0.0.0 create mode 100644 src/tests/testdir3/cycle/cur/rogue0 create mode 100644 src/tests/testdir3/cycle/new/.noindex create mode 100644 src/tests/testdir3/cycle/tmp/.noindex rename src/tests/testdir3/{ => tree}/cur/child0.0 (100%) rename src/tests/testdir3/{ => tree}/cur/child0.1 (100%) rename src/tests/testdir3/{ => tree}/cur/child0.1.0 (100%) rename src/tests/testdir3/{ => tree}/cur/child2.0.0 (100%) rename src/tests/testdir3/{ => tree}/cur/child3.0.0.0.0 (100%) rename src/tests/testdir3/{ => tree}/cur/child4.0 (100%) rename src/tests/testdir3/{ => tree}/cur/child4.1 (100%) rename src/tests/testdir3/{ => tree}/cur/root0 (100%) rename src/tests/testdir3/{ => tree}/cur/root1 (100%) rename src/tests/testdir3/{ => tree}/cur/root2 (100%) create mode 100644 src/tests/testdir3/tree/new/.noindex create mode 100644 src/tests/testdir3/tree/tmp/.noindex diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am index 20a69171..501a6eee 100644 --- a/src/tests/Makefile.am +++ b/src/tests/Makefile.am @@ -117,12 +117,43 @@ EXTRA_DIST= \ testdir/cur/1220863060.12663_3.mindcrime!2,S \ testdir/cur/1283599333.1840_11.cthulhu!2, \ testdir/cur/1305664394.2171_402.cthulhu!2, \ + testdir/cur/1252168370_3.14675.cthulhu!2,S \ testdir2/bar/cur/mail1 \ testdir2/bar/cur/mail2 \ testdir2/bar/cur/mail3 \ testdir2/bar/cur/mail4 \ testdir2/bar/cur/mail5 \ - testdir2/Foo/cur/mail5 \ testdir2/bar/cur/181736.eml \ - testdir2/Foo/cur/arto.eml + testdir2/bar/tmp/.noindex \ + testdir2/bar/new/.noindex \ + testdir2/Foo/cur/mail5 \ + testdir2/Foo/cur/arto.eml \ + testdir2/Foo/tmp/.noindex \ + testdir2/Foo/new/.noindex \ + testdir3/tree \ + testdir3/tree/new \ + testdir3/tree/new/.noindex \ + testdir3/tree/cur \ + testdir3/tree/cur/child0.1 \ + testdir3/tree/cur/root1 \ + testdir3/tree/cur/child3.0.0.0.0 \ + testdir3/tree/cur/child0.0 \ + testdir3/tree/cur/child4.1 \ + testdir3/tree/cur/child4.0 \ + testdir3/tree/cur/root2 \ + testdir3/tree/cur/child0.1.0 \ + testdir3/tree/cur/child2.0.0 \ + testdir3/tree/cur/root0 \ + testdir3/tree/tmp \ + testdir3/tree/tmp/.noindex \ + testdir3/cycle \ + testdir3/cycle/new \ + testdir3/cycle/new/.noindex \ + testdir3/cycle/cur \ + testdir3/cycle/cur/rogue0 \ + testdir3/cycle/cur/cycle0 \ + testdir3/cycle/cur/cycle0.0.0 \ + testdir3/cycle/cur/cycle0.0 \ + testdir3/cycle/tmp \ + testdir3/cycle/tmp/.noindex diff --git a/src/tests/test-mu-maildir.c b/src/tests/test-mu-maildir.c index e3733395..fa0063e7 100644 --- a/src/tests/test-mu-maildir.c +++ b/src/tests/test-mu-maildir.c @@ -189,7 +189,7 @@ test_mu_maildir_walk_01 (void) &data); g_assert_cmpuint (MU_OK, ==, rv); - g_assert_cmpuint (data._file_count, ==, 12); + g_assert_cmpuint (data._file_count, ==, 13); g_assert_cmpuint (data._dir_entered,==, 5); g_assert_cmpuint (data._dir_left,==, 5); @@ -220,7 +220,7 @@ test_mu_maildir_walk_02 (void) &data); g_assert_cmpuint (MU_OK, ==, rv); - g_assert_cmpuint (data._file_count, ==, 8); + g_assert_cmpuint (data._file_count, ==, 9); g_assert_cmpuint (data._dir_entered,==, 4); g_assert_cmpuint (data._dir_left,==, 4); diff --git a/src/tests/test-mu-msg.c b/src/tests/test-mu-msg.c index 33eeeea0..a1372f1f 100644 --- a/src/tests/test-mu-msg.c +++ b/src/tests/test-mu-msg.c @@ -266,7 +266,38 @@ test_mu_msg_references (void) mu_msg_unref (msg); } + + +static void +test_mu_msg_references_dups (void) +{ + MuMsg *msg; + const GSList *refs; + msg = mu_msg_new_from_file (MU_TESTMAILDIR + "cur/1252168370_3.14675.cthulhu!2,S", + NULL, NULL); + refs = mu_msg_get_references(msg); + + /* make sure duplicate msg-ids are filtered out */ + + g_assert_cmpuint (g_slist_length ((GSList*)refs), ==, 6); + + g_assert_cmpstr ((char*)refs->data,==, "439C1136.90504@euler.org"); + refs = g_slist_next (refs); + g_assert_cmpstr ((char*)refs->data,==, "4399DD94.5070309@euler.org"); + refs = g_slist_next (refs); + g_assert_cmpstr ((char*)refs->data,==, "20051209233303.GA13812@gauss.org"); + refs = g_slist_next (refs); + g_assert_cmpstr ((char*)refs->data,==, "439B41ED.2080402@euler.org"); + refs = g_slist_next (refs); + g_assert_cmpstr ((char*)refs->data,==, "439A1E03.3090604@euler.org"); + refs = g_slist_next (refs); + g_assert_cmpstr ((char*)refs->data,==, "20051211184308.GB13513@gauss.org"); + refs = g_slist_next (refs); + + mu_msg_unref (msg); +} static void test_mu_msg_tags (void) @@ -367,6 +398,8 @@ main (int argc, char *argv[]) test_mu_msg_tags); g_test_add_func ("/mu-msg/mu-msg-references", test_mu_msg_references); + g_test_add_func ("/mu-msg/mu-msg-references_dups", + test_mu_msg_references_dups); g_test_add_func ("/mu-msg/mu-msg-umlaut", test_mu_msg_umlaut); g_test_add_func ("/mu-msg/mu-msg-comp-unix-programmer", diff --git a/src/tests/test-mu-query.c b/src/tests/test-mu-query.c index 62ed5571..6a5ec5be 100644 --- a/src/tests/test-mu-query.c +++ b/src/tests/test-mu-query.c @@ -237,9 +237,9 @@ test_mu_query_04 (void) { "baggins", 1}, { "prio:h", 1}, { "prio:high", 1}, - { "prio:normal", 4}, + { "prio:normal", 5}, { "prio:l", 7}, - { "not prio:l", 5}, + { "not prio:l", 6}, }; xpath = fill_database (MU_TESTMAILDIR); @@ -379,9 +379,9 @@ test_mu_query_sizes (void) int i; QResults queries[] = { - { "size:0b..2m", 12}, + { "size:0b..2m", 13}, { "size:2k..4k", 2}, - { "size:2m..0b", 12} + { "size:2m..0b", 13} }; xpath = fill_database (MU_TESTMAILDIR); diff --git a/src/tests/test-mu-threads.c b/src/tests/test-mu-threads.c index ee2ed7d5..2a86a2d6 100644 --- a/src/tests/test-mu-threads.c +++ b/src/tests/test-mu-threads.c @@ -43,7 +43,7 @@ fill_database (const char *testdir) cmdline = g_strdup_printf ("%s index --muhome=%s --maildir=%s" " --quiet", MU_PROGRAM, tmpdir, testdir); - g_print ("%s\n", cmdline); + /* g_print ("%s\n", cmdline); */ g_assert (g_spawn_command_line_sync (cmdline, NULL, NULL, NULL, NULL)); @@ -65,7 +65,7 @@ run_and_get_iter (const char *xpath, const char *query) mquery = mu_query_new (xpath, NULL); g_assert (query); - iter = mu_query_run (mquery, query, TRUE, MU_MSG_FIELD_ID_NONE, + iter = mu_query_run (mquery, query, TRUE, MU_MSG_FIELD_ID_DATE, FALSE, NULL); mu_query_destroy (mquery); g_assert (iter); @@ -74,8 +74,6 @@ run_and_get_iter (const char *xpath, const char *query) } - - static void test_mu_threads_01 (void) { @@ -124,13 +122,18 @@ test_mu_threads_01 (void) g_assert(ti); msg = mu_msg_iter_get_msg (iter, NULL); + /* g_print ("%s %s %s\n", ti->threadpath, */ + /* mu_msg_get_msgid(msg), */ + /* mu_msg_get_path (msg) */ + /* ); */ g_assert (u < G_N_ELEMENTS(items)); - - g_assert_cmpstr (ti->threadpath,==,items[u].threadpath); - g_assert_cmpstr (mu_msg_get_msgid(msg),==,items[u].msgid); - g_assert_cmpstr (mu_msg_get_subject(msg),==,items[u++].subject); + g_assert_cmpstr (ti->threadpath,==,items[u].threadpath); + g_assert_cmpstr (mu_msg_get_subject(msg),==,items[u].subject); + g_assert_cmpstr (mu_msg_get_msgid(msg),==,items[u].msgid); + + ++u; mu_msg_iter_next (iter); } g_assert (u == G_N_ELEMENTS(items)); @@ -140,6 +143,65 @@ test_mu_threads_01 (void) } +static void +test_mu_threads_rogue (void) +{ + gchar *xpath; + MuMsgIter *iter; + unsigned u; + + struct { + const char* threadpath; + const char *msgid; + const char* subject; + } items [] = { + {"0", "cycle0@msg.id", "cycle0"}, + {"0:0", "cycle0.0@msg.id", "cycle0.0"}, + {"0:0:0", "cycle0.0.0@msg.id", "cycle0.0.0"} + }; + + xpath = fill_database (MU_TESTMAILDIR3); + g_assert (xpath != NULL); + + iter = run_and_get_iter (xpath, "def"); + g_assert (iter); + g_assert (!mu_msg_iter_is_done(iter)); + + u = 0; + while (!mu_msg_iter_is_done (iter) && u < G_N_ELEMENTS(items)) { + MuMsg *msg; + const MuMsgIterThreadInfo *ti; + + ti = mu_msg_iter_get_thread_info (iter); + if (!ti) + g_print ("%s: thread info not found\n", + mu_msg_get_msgid(mu_msg_iter_get_msg (iter, NULL))); + + g_assert(ti); + + msg = mu_msg_iter_get_msg (iter, NULL); + /* g_print ("%s %s %s\n", ti->threadpath, */ + /* mu_msg_get_msgid(msg), */ + /* mu_msg_get_path (msg) */ + /* ); */ + + g_assert (u < G_N_ELEMENTS(items)); + + g_assert_cmpstr (ti->threadpath,==,items[u].threadpath); + g_assert_cmpstr (mu_msg_get_subject(msg),==,items[u].subject); + g_assert_cmpstr (mu_msg_get_msgid(msg),==,items[u].msgid); + + ++u; + mu_msg_iter_next (iter); + } + g_assert (u == G_N_ELEMENTS(items)); + + g_free (xpath); + mu_msg_iter_destroy (iter); +} + + + int main (int argc, char *argv[]) { @@ -148,6 +210,8 @@ main (int argc, char *argv[]) g_test_init (&argc, &argv, NULL); g_test_add_func ("/mu-query/test-mu-threads-01", test_mu_threads_01); + g_test_add_func ("/mu-query/test-mu-threads-rogue", test_mu_threads_rogue); + /* g_log_set_handler (NULL, */ /* G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION, */ diff --git a/src/tests/testdir/cur/1252168370_3.14675.cthulhu!2,S b/src/tests/testdir/cur/1252168370_3.14675.cthulhu!2,S new file mode 100644 index 00000000..4fad7062 --- /dev/null +++ b/src/tests/testdir/cur/1252168370_3.14675.cthulhu!2,S @@ -0,0 +1,21 @@ +Return-Path: +X-Spam-Checker-Version: SpamAssassin 3.1.0 (2005-09-13) on mindcrime +X-Spam-Level: +Delivered-To: dfgh@floppydisk.nl +Message-ID: <43A09C49.9040902@euler.org> +Date: Wed, 14 Dec 2005 23:27:21 +0100 +From: Fred Flintstone +User-Agent: Mozilla Thunderbird 1.0.7 (X11/20051010) +X-Accept-Language: nl-NL, nl, en +MIME-Version: 1.0 +To: dfgh@floppydisk.nl +Subject: Re: xyz +References: <439C1136.90504@euler.org> <4399DD94.5070309@euler.org> <20051209233303.GA13812@gauss.org> <439B41ED.2080402@euler.org> <4399DD94.5070309@euler.org> <20051209233303.GA13812@gauss.org> <439A1E03.3090604@euler.org> <20051211184308.GB13513@gauss.org> +In-Reply-To: <20051211184308.GB13513@gauss.org> +X-Enigmail-Version: 0.92.0.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 7bit +X-UIDL: T +Date: Tue, 21 Jun 2011 11:00 +0000 + +def diff --git a/src/tests/testdir3/cycle/cur/cycle0.0 b/src/tests/testdir3/cycle/cur/cycle0.0 new file mode 100644 index 00000000..3222a2c3 --- /dev/null +++ b/src/tests/testdir3/cycle/cur/cycle0.0 @@ -0,0 +1,8 @@ +From: foo@example.com +To: bar@example.com +Subject: cycle0.0 +Message-Id: +References: +Date: Tue, 21 Jun 2011 12:00 +0000 + +def diff --git a/src/tests/testdir3/cycle/cur/cycle0.0.0 b/src/tests/testdir3/cycle/cur/cycle0.0.0 new file mode 100644 index 00000000..907f3426 --- /dev/null +++ b/src/tests/testdir3/cycle/cur/cycle0.0.0 @@ -0,0 +1,8 @@ +From: foo@example.com +To: bar@example.com +Subject: cycle0.0.0 +Message-Id: +References: +Date: Tue, 21 Jun 2011 13:00 +0000 + +def diff --git a/src/tests/testdir3/cycle/cur/rogue0 b/src/tests/testdir3/cycle/cur/rogue0 new file mode 100644 index 00000000..26910709 --- /dev/null +++ b/src/tests/testdir3/cycle/cur/rogue0 @@ -0,0 +1,8 @@ +From: foo@example.com +To: bar@example.com +Subject: rogue0 +Message-Id: +References: +Date: Tue, 21 Jun 2011 15:00 +0000 + +def diff --git a/src/tests/testdir3/cycle/new/.noindex b/src/tests/testdir3/cycle/new/.noindex new file mode 100644 index 00000000..e69de29b diff --git a/src/tests/testdir3/cycle/tmp/.noindex b/src/tests/testdir3/cycle/tmp/.noindex new file mode 100644 index 00000000..e69de29b diff --git a/src/tests/testdir3/cur/child0.0 b/src/tests/testdir3/tree/cur/child0.0 similarity index 100% rename from src/tests/testdir3/cur/child0.0 rename to src/tests/testdir3/tree/cur/child0.0 diff --git a/src/tests/testdir3/cur/child0.1 b/src/tests/testdir3/tree/cur/child0.1 similarity index 100% rename from src/tests/testdir3/cur/child0.1 rename to src/tests/testdir3/tree/cur/child0.1 diff --git a/src/tests/testdir3/cur/child0.1.0 b/src/tests/testdir3/tree/cur/child0.1.0 similarity index 100% rename from src/tests/testdir3/cur/child0.1.0 rename to src/tests/testdir3/tree/cur/child0.1.0 diff --git a/src/tests/testdir3/cur/child2.0.0 b/src/tests/testdir3/tree/cur/child2.0.0 similarity index 100% rename from src/tests/testdir3/cur/child2.0.0 rename to src/tests/testdir3/tree/cur/child2.0.0 diff --git a/src/tests/testdir3/cur/child3.0.0.0.0 b/src/tests/testdir3/tree/cur/child3.0.0.0.0 similarity index 100% rename from src/tests/testdir3/cur/child3.0.0.0.0 rename to src/tests/testdir3/tree/cur/child3.0.0.0.0 diff --git a/src/tests/testdir3/cur/child4.0 b/src/tests/testdir3/tree/cur/child4.0 similarity index 100% rename from src/tests/testdir3/cur/child4.0 rename to src/tests/testdir3/tree/cur/child4.0 diff --git a/src/tests/testdir3/cur/child4.1 b/src/tests/testdir3/tree/cur/child4.1 similarity index 100% rename from src/tests/testdir3/cur/child4.1 rename to src/tests/testdir3/tree/cur/child4.1 diff --git a/src/tests/testdir3/cur/root0 b/src/tests/testdir3/tree/cur/root0 similarity index 100% rename from src/tests/testdir3/cur/root0 rename to src/tests/testdir3/tree/cur/root0 diff --git a/src/tests/testdir3/cur/root1 b/src/tests/testdir3/tree/cur/root1 similarity index 100% rename from src/tests/testdir3/cur/root1 rename to src/tests/testdir3/tree/cur/root1 diff --git a/src/tests/testdir3/cur/root2 b/src/tests/testdir3/tree/cur/root2 similarity index 100% rename from src/tests/testdir3/cur/root2 rename to src/tests/testdir3/tree/cur/root2 diff --git a/src/tests/testdir3/tree/new/.noindex b/src/tests/testdir3/tree/new/.noindex new file mode 100644 index 00000000..e69de29b diff --git a/src/tests/testdir3/tree/tmp/.noindex b/src/tests/testdir3/tree/tmp/.noindex new file mode 100644 index 00000000..e69de29b