[Spice-devel] [spice-common v3 3/7] log: Add test case for logging code
Victor Toso
lists at victortoso.com
Wed Jan 20 00:33:34 PST 2016
Hi,
On Tue, Jan 19, 2016 at 05:55:22PM +0100, Christophe Fergeau wrote:
> On Fri, Dec 18, 2015 at 11:40:51AM +0100, Christophe Fergeau wrote:
> > On Thu, Dec 17, 2015 at 10:43:05PM +0100, Victor Toso wrote:
> > > > +/* Checks that spice_return_if_fail() aborts by default */
> > > > +static void test_spice_fatal_return_if_fail(void)
> > > > +{
> > > > + if (g_test_subprocess()) {
> > > > + spice_return_if_fail(FALSE);
> > > > + return;
> > > > + }
> > > > + g_test_trap_subprocess(NULL, 0, 0);
> > > > + g_test_trap_assert_failed();
> > > > +}
> > > > +
> > > > +/* Checks that g_return_if_fail() does not abort by default */
> > > > +static void test_spice_non_fatal_g_return_if_fail(void)
> > > > +{
> > > > + char *pattern = g_strconcat ("*", G_STRFUNC, "*", NULL);
> > > > + g_test_log_set_fatal_handler(non_fatal_warnings_criticals, pattern);
> > > > +
> > > > + if (g_test_subprocess()) {
> > > > + g_return_if_fail(FALSE);
> > >
> > > pattern leaks here
> >
> > I know, but I don't think I can easily free it unless I move the
> > g_return_if_fail() to a separate helper function. If
> > g_test_log_set_fatal_handler() is not called, then g_return_if_fail()
> > will abort. I did not manage to find some preprocessor magic to build
> > a compile-time string (rather than an allocated one) with the content I
> > want. I can add a comment making it explicit that the leak is on
> > purpose. The g_return_if_fail() runs in a subprocess which will end
> > right after that call, so in my opinion this leak is acceptable.
>
> An alternative is to add this patch on top of this one:
>
> diff --git a/tests/test-logging.c b/tests/test-logging.c
> index e56172a..4635ffa 100644
> --- a/tests/test-logging.c
> +++ b/tests/test-logging.c
> @@ -163,8 +163,8 @@ static void test_spice_fatal_return_if_fail(void)
> /* Checks that g_return_if_fail() does not abort by default */
> static void test_spice_non_fatal_g_return_if_fail(void)
> {
> - char *pattern = g_strconcat ("*", G_STRFUNC, "*", NULL);
> - g_test_log_set_fatal_handler(non_fatal_warnings_criticals, pattern);
> + g_test_log_set_fatal_handler(non_fatal_warnings_criticals,
> + "*test_spice_non_fatal_g_return_if_fail*");
>
> if (g_test_subprocess()) {
> g_return_if_fail(FALSE);
> @@ -172,7 +172,6 @@ static void test_spice_non_fatal_g_return_if_fail(void)
> }
> g_test_trap_subprocess(NULL, 0, 0);
> g_test_trap_assert_passed();
> - g_free(pattern);
> }
>
> /* Checks that spice_assert_if_fail() aborts by default */
>
> I think I'll go with that.
>
> Christophe
Sure
Acked-by: Victor Toso <victortoso at redhat.com>
More information about the Spice-devel
mailing list