diff options
author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2011-12-14 18:08:59 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2011-12-27 17:51:09 -0500 |
commit | fa4792c35e42107e0ded0f499bb86415a2b1faef (patch) | |
tree | 09048661bc281ad1a9f357284759aece5c0eaa89 /glib | |
parent | 5cb29d7909afdb41054ca47892aea4e0a79f2d7a (diff) | |
download | glib-fa4792c35e42107e0ded0f499bb86415a2b1faef.tar.gz |
various tests: do not provoke SIGTRAP with -m no-undefined
Some of the GLib tests deliberately provoke warnings (or even fatal
errors) in a forked child. Normally, this is fine, but under valgrind
it's somewhat undesirable. We do want to follow fork(), so we can check
for leaks in child processes that exit gracefully; but we don't want to
be told about "leaks" in processes that are crashing, because there'd
be no point in cleaning those up anyway.
https://bugzilla.gnome.org/show_bug.cgi?id=666116
Diffstat (limited to 'glib')
-rw-r--r-- | glib/tests/error.c | 3 | ||||
-rw-r--r-- | glib/tests/gvariant.c | 32 | ||||
-rw-r--r-- | glib/tests/logging.c | 54 | ||||
-rw-r--r-- | glib/tests/markup-collect.c | 3 | ||||
-rw-r--r-- | glib/tests/mem-overflow.c | 13 | ||||
-rw-r--r-- | glib/tests/option-context.c | 6 | ||||
-rw-r--r-- | glib/tests/slice.c | 3 | ||||
-rw-r--r-- | glib/tests/strfuncs.c | 146 | ||||
-rw-r--r-- | glib/tests/testing.c | 32 |
9 files changed, 189 insertions, 103 deletions
diff --git a/glib/tests/error.c b/glib/tests/error.c index f483092ba..66ec6e0fe 100644 --- a/glib/tests/error.c +++ b/glib/tests/error.c @@ -3,6 +3,9 @@ static void test_overwrite (void) { + if (!g_test_undefined ()) + return; + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) { GError *error; diff --git a/glib/tests/gvariant.c b/glib/tests/gvariant.c index 18fe2fe1c..c328aa806 100644 --- a/glib/tests/gvariant.c +++ b/glib/tests/gvariant.c @@ -2831,6 +2831,9 @@ do_failed_test (const gchar *pattern) static void test_invalid_varargs (void) { + if (!g_test_undefined ()) + return; + if (do_failed_test ("*GVariant format string*")) { g_variant_new ("z"); @@ -3871,22 +3874,25 @@ test_parse_positional (void) check_and_free (value, "[('one', 1), ('two', 2), ('three', 3)]"); check_and_free (g_variant_new_parsed ("{%s:%i}", "one", 1), "{'one': 1}"); - if (do_failed_test ("*GVariant format string*")) + if (g_test_undefined ()) { - g_variant_new_parsed ("%z"); - abort (); - } + if (do_failed_test ("*GVariant format string*")) + { + g_variant_new_parsed ("%z"); + abort (); + } - if (do_failed_test ("*can not parse as*")) - { - g_variant_new_parsed ("uint32 %i", 2); - abort (); - } + if (do_failed_test ("*can not parse as*")) + { + g_variant_new_parsed ("uint32 %i", 2); + abort (); + } - if (do_failed_test ("*expected GVariant of type `i'*")) - { - g_variant_new_parsed ("%@i", g_variant_new_uint32 (2)); - abort (); + if (do_failed_test ("*expected GVariant of type `i'*")) + { + g_variant_new_parsed ("%@i", g_variant_new_uint32 (2)); + abort (); + } } } diff --git a/glib/tests/logging.c b/glib/tests/logging.c index 9d69e6a04..aece49048 100644 --- a/glib/tests/logging.c +++ b/glib/tests/logging.c @@ -5,6 +5,9 @@ static void test_warnings (void) { + if (!g_test_undefined ()) + return; + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) { g_warn_if_reached (); @@ -62,29 +65,32 @@ test_set_handler (void) static void test_default_handler (void) { - if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) - { - g_error ("message1"); - exit (0); - } - g_test_trap_assert_failed (); - g_test_trap_assert_stderr ("*ERROR*message1*"); - - if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) - { - g_critical ("message2"); - exit (0); - } - g_test_trap_assert_failed (); - g_test_trap_assert_stderr ("*CRITICAL*message2*"); - - if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + if (g_test_undefined ()) { - g_warning ("message3"); - exit (0); + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + { + g_error ("message1"); + exit (0); + } + g_test_trap_assert_failed (); + g_test_trap_assert_stderr ("*ERROR*message1*"); + + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + { + g_critical ("message2"); + exit (0); + } + g_test_trap_assert_failed (); + g_test_trap_assert_stderr ("*CRITICAL*message2*"); + + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + { + g_warning ("message3"); + exit (0); + } + g_test_trap_assert_failed (); + g_test_trap_assert_stderr ("*WARNING*message3*"); } - g_test_trap_assert_failed (); - g_test_trap_assert_stderr ("*WARNING*message3*"); if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) { @@ -146,6 +152,9 @@ test_fatal_log_mask (void) { GLogLevelFlags flags; + if (!g_test_undefined ()) + return; + flags = g_log_set_fatal_mask ("bu", G_LOG_LEVEL_INFO); if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDOUT)) g_log ("bu", G_LOG_LEVEL_INFO, "fatal"); @@ -233,6 +242,9 @@ test_handler (const gchar *log_domain, static void bug653052 (void) { + if (!g_test_undefined ()) + return; + g_test_bug ("653052"); g_test_log_set_fatal_handler (good_failure_handler, fail_str); diff --git a/glib/tests/markup-collect.c b/glib/tests/markup-collect.c index 74ce2bf4b..3b2e2bd79 100644 --- a/glib/tests/markup-collect.c +++ b/glib/tests/markup-collect.c @@ -197,6 +197,9 @@ static GMarkupParser cleanup_parser = { static void test_cleanup (void) { + if (!g_test_undefined ()) + return; + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) { GMarkupParseContext *context; diff --git a/glib/tests/mem-overflow.c b/glib/tests/mem-overflow.c index 0d483fb19..c7ea2186f 100644 --- a/glib/tests/mem-overflow.c +++ b/glib/tests/mem-overflow.c @@ -73,7 +73,18 @@ mem_overflow (void) #undef CHECK_FAIL #undef CHECK_PASS -#define CHECK_FAIL(P) if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) { p = (P); exit (0); } g_test_trap_assert_failed(); +#define CHECK_FAIL(P) do { \ + if (g_test_undefined ()) \ + { \ + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) \ + { \ + p = (P); \ + exit (0); \ + } \ + \ + g_test_trap_assert_failed(); \ + } \ + } while (0) #define CHECK_PASS(P) do { \ if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) \ diff --git a/glib/tests/option-context.c b/glib/tests/option-context.c index 20b1ee327..ba8fcf159 100644 --- a/glib/tests/option-context.c +++ b/glib/tests/option-context.c @@ -2077,6 +2077,9 @@ test_error_hook (void) static void flag_reverse_string (void) { + if (!g_test_undefined ()) + return; + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) { GOptionContext *context; @@ -2108,6 +2111,9 @@ flag_reverse_string (void) static void flag_optional_int (void) { + if (!g_test_undefined ()) + return; + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) { GOptionContext *context; diff --git a/glib/tests/slice.c b/glib/tests/slice.c index 9f4670cd2..7976e5111 100644 --- a/glib/tests/slice.c +++ b/glib/tests/slice.c @@ -3,6 +3,9 @@ static void test_slice_config (void) { + if (!g_test_undefined ()) + return; + if (g_test_trap_fork (1000000, G_TEST_TRAP_SILENCE_STDERR)) g_slice_set_config (G_SLICE_CONFIG_ALWAYS_MALLOC, TRUE); diff --git a/glib/tests/strfuncs.c b/glib/tests/strfuncs.c index d5e4f4c75..338773457 100644 --- a/glib/tests/strfuncs.c +++ b/glib/tests/strfuncs.c @@ -327,19 +327,22 @@ test_strcanon (void) { gchar *str; - if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + if (g_test_undefined ()) { - str = g_strcanon (NULL, "ab", 'y'); - } - g_test_trap_assert_failed (); + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + { + str = g_strcanon (NULL, "ab", 'y'); + } + g_test_trap_assert_failed (); - if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) - { - str = g_strdup ("abxabxab"); - str = g_strcanon (str, NULL, 'y'); - g_free (str); + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + { + str = g_strdup ("abxabxab"); + str = g_strcanon (str, NULL, 'y'); + g_free (str); + } + g_test_trap_assert_failed (); } - g_test_trap_assert_failed (); str = g_strdup ("abxabxab"); str = g_strcanon (str, "ab", 'y'); @@ -355,18 +358,21 @@ test_strcompress_strescape (void) gchar *tmp; /* test compress */ - if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + if (g_test_undefined ()) { - str = g_strcompress (NULL); - } - g_test_trap_assert_failed (); + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + { + str = g_strcompress (NULL); + } + g_test_trap_assert_failed (); - /* trailing slashes are not allowed */ - if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) - { - str = g_strcompress ("abc\\"); + /* trailing slashes are not allowed */ + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + { + str = g_strcompress ("abc\\"); + } + g_test_trap_assert_failed (); } - g_test_trap_assert_failed (); str = g_strcompress ("abc\\\\\\\"\\b\\f\\n\\r\\t\\003\\177\\234\\313\\12345z"); g_assert (str != NULL); @@ -374,11 +380,14 @@ test_strcompress_strescape (void) g_free (str); /* test escape */ - if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + if (g_test_undefined ()) { - str = g_strescape (NULL, NULL); + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + { + str = g_strescape (NULL, NULL); + } + g_test_trap_assert_failed (); } - g_test_trap_assert_failed (); str = g_strescape ("abc\\\"\b\f\n\r\t\003\177\234\313", NULL); g_assert (str != NULL); @@ -405,17 +414,20 @@ test_ascii_strcasecmp (void) { gboolean res; - if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + if (g_test_undefined ()) { - res = g_ascii_strcasecmp ("foo", NULL); - } - g_test_trap_assert_failed (); + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + { + res = g_ascii_strcasecmp ("foo", NULL); + } + g_test_trap_assert_failed (); - if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) - { - res = g_ascii_strcasecmp (NULL, "foo"); + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + { + res = g_ascii_strcasecmp (NULL, "foo"); + } + g_test_trap_assert_failed (); } - g_test_trap_assert_failed (); res = g_ascii_strcasecmp ("FroboZZ", "frobozz"); g_assert_cmpint (res, ==, 0); @@ -478,11 +490,14 @@ do_test_strchug (const gchar *str, const gchar *expected) static void test_strchug (void) { - if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + if (g_test_undefined ()) { - g_strchug (NULL); + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + { + g_strchug (NULL); + } + g_test_trap_assert_failed (); } - g_test_trap_assert_failed (); do_test_strchug ("", ""); do_test_strchug (" ", ""); @@ -511,11 +526,14 @@ do_test_strchomp (const gchar *str, const gchar *expected) static void test_strchomp (void) { - if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + if (g_test_undefined ()) { - g_strchomp (NULL); + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + { + g_strchomp (NULL); + } + g_test_trap_assert_failed (); } - g_test_trap_assert_failed (); do_test_strchomp ("", ""); do_test_strchomp (" ", ""); @@ -532,11 +550,14 @@ test_strreverse (void) gchar *str; gchar *p; - if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + if (g_test_undefined ()) { - str = g_strreverse (NULL); + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + { + str = g_strreverse (NULL); + } + g_test_trap_assert_failed (); } - g_test_trap_assert_failed (); str = p = g_strdup ("abcde"); str = g_strreverse (str); @@ -626,17 +647,20 @@ test_has_prefix (void) { gboolean res; - if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + if (g_test_undefined ()) { - res = g_str_has_prefix ("foo", NULL); - } - g_test_trap_assert_failed (); + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + { + res = g_str_has_prefix ("foo", NULL); + } + g_test_trap_assert_failed (); - if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) - { - res = g_str_has_prefix (NULL, "foo"); + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + { + res = g_str_has_prefix (NULL, "foo"); + } + g_test_trap_assert_failed (); } - g_test_trap_assert_failed (); res = g_str_has_prefix ("foo", "bar"); g_assert_cmpint (res, ==, FALSE); @@ -665,17 +689,20 @@ test_has_suffix (void) { gboolean res; - if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + if (g_test_undefined ()) { - res = g_str_has_suffix ("foo", NULL); - } - g_test_trap_assert_failed (); + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + { + res = g_str_has_suffix ("foo", NULL); + } + g_test_trap_assert_failed (); - if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) - { - res = g_str_has_suffix (NULL, "foo"); + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + { + res = g_str_has_suffix (NULL, "foo"); + } + g_test_trap_assert_failed (); } - g_test_trap_assert_failed (); res = g_str_has_suffix ("foo", "bar"); g_assert_cmpint (res, ==, FALSE); @@ -844,11 +871,14 @@ test_strv_length (void) gchar **strv; guint l; - if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + if (g_test_undefined ()) { - l = g_strv_length (NULL); + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + { + l = g_strv_length (NULL); + } + g_test_trap_assert_failed (); } - g_test_trap_assert_failed (); strv = g_strsplit ("1,2,3,4", ",", -1); l = g_strv_length (strv); diff --git a/glib/tests/testing.c b/glib/tests/testing.c index 2b257f258..d6e39baf8 100644 --- a/glib/tests/testing.c +++ b/glib/tests/testing.c @@ -46,19 +46,22 @@ test_assertions (void) g_assert_cmpstr ("fzz", >, "faa"); g_assert_cmpstr ("fzz", ==, "fzz"); - if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + if (g_test_undefined ()) { - g_assert_cmpstr ("fzz", !=, "fzz"); - } - g_test_trap_assert_failed (); - g_test_trap_assert_stderr ("*assertion failed*"); + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + { + g_assert_cmpstr ("fzz", !=, "fzz"); + } + g_test_trap_assert_failed (); + g_test_trap_assert_stderr ("*assertion failed*"); - if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) - { - g_assert_cmpint (4, !=, 4); + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) + { + g_assert_cmpint (4, !=, 4); + } + g_test_trap_assert_failed (); + g_test_trap_assert_stderr ("*assertion failed*"); } - g_test_trap_assert_failed (); - g_test_trap_assert_stderr ("*assertion failed*"); } /* test g_test_timer* API */ @@ -80,6 +83,9 @@ test_timer (void) static void test_fork_fail (void) { + if (!g_test_undefined ()) + return; + if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) { g_assert_not_reached(); @@ -107,6 +113,9 @@ test_fork_patterns (void) static void test_fork_timeout (void) { + if (!g_test_undefined ()) + return; + /* allow child to run for only a fraction of a second */ if (g_test_trap_fork (0.11 * 1000000, 0)) { @@ -217,6 +226,9 @@ fatal_handler (const gchar *log_domain, static void test_fatal_log_handler (void) { + if (!g_test_undefined ()) + return; + g_test_log_set_fatal_handler (fatal_handler, NULL); if (g_test_trap_fork (0, G_TEST_TRAP_SILENCE_STDERR)) { |