[Spice-devel] [PATCH spice-server 1/3] tests: Move some glib compatibility code to a separate file

Frediano Ziglio fziglio at redhat.com
Fri Mar 3 14:13:46 UTC 2017


> 
> On Thu, Mar 02, 2017 at 01:50:01PM +0000, Frediano Ziglio wrote:
> > Allow to reuse this code in other tests.
> > 
> > Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> > ---
> >  server/glib-compat.h            |   9 ++++
> >  server/tests/Makefile.am        |   1 +
> >  server/tests/test-glib-compat.c | 112
> >  ++++++++++++++++++++++++++++++++++++++++
> >  server/tests/test-vdagent.c     |  92 +--------------------------------
> >  4 files changed, 123 insertions(+), 91 deletions(-)
> >  create mode 100644 server/tests/test-glib-compat.c
> > 
> > diff --git a/server/glib-compat.h b/server/glib-compat.h
> > index 50a0783..9d75701 100644
> > --- a/server/glib-compat.h
> > +++ b/server/glib-compat.h
> > @@ -63,4 +63,13 @@ g_queue_remove_boolean(GQueue *queue, gconstpointer
> > data)
> >  #define g_queue_remove g_queue_remove_boolean
> >  #endif
> >  
> > +#if !GLIB_CHECK_VERSION(2, 34, 0)
> > +void g_test_assert_expected_messages_internal(const char *domain,
> > +                                              const char *file, int line,
> > const char *func);
> > +#define g_test_assert_expected_messages() \
> > +    g_test_assert_expected_messages_internal (G_LOG_DOMAIN, __FILE__,
> > __LINE__, G_STRFUNC)
> > +void g_test_expect_message(const gchar *log_domain, GLogLevelFlags
> > log_level,
> > +                           const gchar *pattern);
> > +#endif
> > +
> 
> This belongs to a new tests/test-glib-compat.h (using these fallback
> implementations is going to fail at link time if not built together with
> test-glib-compat.c)
> 

Mumble... not easy to understand but I got it.

> 
> >  #endif /* GLIB_COMPAT_H_ */
> > diff --git a/server/tests/Makefile.am b/server/tests/Makefile.am
> > index dd04834..ca70e22 100644
> > --- a/server/tests/Makefile.am
> > +++ b/server/tests/Makefile.am
> > @@ -25,6 +25,7 @@ libtest_a_SOURCES =				\
> >  	basic-event-loop.h			\
> >  	test-display-base.c			\
> >  	test-display-base.h			\
> > +	test-glib-compat.c			\
> >  	$(NULL)
> >  
> >  LDADD =								\
> > diff --git a/server/tests/test-glib-compat.c
> > b/server/tests/test-glib-compat.c
> > new file mode 100644
> > index 0000000..9b47dc6
> > --- /dev/null
> > +++ b/server/tests/test-glib-compat.c
> > @@ -0,0 +1,112 @@
> > +/* -*- Mode: C; c-basic-offset: 4; indent-tabs-mode: nil -*- */
> > +/*
> > +   Copyright (C) 2017 Red Hat, Inc.
> > +
> > +   This library is free software; you can redistribute it and/or
> > +   modify it under the terms of the GNU Lesser General Public
> > +   License as published by the Free Software Foundation; either
> > +   version 2.1 of the License, or (at your option) any later version.
> > +
> > +   This library is distributed in the hope that it will be useful,
> > +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> > +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> > +   Lesser General Public License for more details.
> > +
> > +   You should have received a copy of the GNU Lesser General Public
> > +   License along with this library; if not, see
> > <http://www.gnu.org/licenses/>.
> > +*/
> > +
> > +#include <config.h>
> > +
> > +#include "glib-compat.h"
> > +
> > +#if !GLIB_CHECK_VERSION(2, 34, 0)
> > +
> > +/* The code in this #ifdef block is taken from glib and is licensed under
> > the
> > + * GNU Lesser General Public License version 2 or later.
> > + *
> > + * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh
> > MacDonald
> > + * Modified by the GLib Team and others 1997-2000.  See GLib AUTHORS
> > + * file for a list of people on the GLib Team.
> 
> Since it's in its own  file now, maybe move that to the copyright block?
> 

I don't know, maybe we'll need to add other copyright notes...

> Acked-by: Christophe Fergeau <cfergeau at redhat.com>
> 
> Christophe
> 
> 
> > + */
> > +
> > +typedef struct {
> > +    gchar *log_domain;
> > +    GLogLevelFlags log_level;
> > +    gchar *pattern;
> > +} GTestExpectedMessage;
> > +
> > +static GSList *expected_messages = NULL;
> > +
> > +static gboolean fatal_log_filter(const gchar *log_domain,
> > +                                 GLogLevelFlags log_level,
> > +                                 const gchar *msg,
> > +                                 gpointer user_data)
> > +{
> > +    GTestExpectedMessage *expected = expected_messages->data;
> > +
> > +    if ((g_strcmp0(expected->log_domain, log_domain) == 0)
> > +            && ((log_level & expected->log_level) == expected->log_level)
> > +            && (g_pattern_match_simple(expected->pattern, msg))) {
> > +        expected_messages = g_slist_delete_link(expected_messages,
> > +                                                expected_messages);
> > +        g_free (expected->log_domain);
> > +        g_free (expected->pattern);
> > +        g_free (expected);
> > +
> > +        return FALSE;
> > +    }
> > +    return TRUE;
> > +}
> > +
> > +void
> > +g_test_assert_expected_messages_internal (const char     *domain,
> > +                                          const char     *file,
> > +                                          int             line,
> > +                                          const char     *func)
> > +{
> > +  if (expected_messages)
> > +    {
> > +      GTestExpectedMessage *expected;
> > +      gchar *message;
> > +
> > +      expected = expected_messages->data;
> > +
> > +      message = g_strdup_printf ("Did not see expected message %s: %s",
> > +                                 expected->log_domain ?
> > expected->log_domain : "**",
> > +                                 expected->pattern);
> > +      g_error ("%s", message);
> > +      g_free (message);
> > +    }
> > +}
> > +
> > +#define g_test_assert_expected_messages()
> > g_test_assert_expected_messages_internal (G_LOG_DOMAIN, __FILE__,
> > __LINE__, G_STRFUNC)
> > +
> > +void
> > +g_test_expect_message (const gchar    *log_domain,
> > +                       GLogLevelFlags  log_level,
> > +                       const gchar    *pattern)
> > +{
> > +  GTestExpectedMessage *expected;
> > +
> > +  g_return_if_fail (log_level != 0);
> > +  g_return_if_fail (pattern != NULL);
> > +  g_return_if_fail (~log_level & G_LOG_LEVEL_ERROR);
> > +
> > +  if (expected_messages == NULL)
> > +    {
> > +      g_test_log_set_fatal_handler(fatal_log_filter, NULL);
> > +    }
> > +
> > +  expected = g_new (GTestExpectedMessage, 1);
> > +  expected->log_domain = g_strdup (log_domain);
> > +  expected->log_level = log_level;
> > +  expected->pattern = g_strdup (pattern);
> > +
> > +  if ((log_level & G_LOG_LEVEL_MASK) <= G_LOG_LEVEL_WARNING)
> > +    {
> > +      expected_messages = g_slist_append (expected_messages, expected);
> > +    }
> > +}
> > +
> > +#endif /* GLIB_CHECK_VERSION(2, 34, 0) */
> > diff --git a/server/tests/test-vdagent.c b/server/tests/test-vdagent.c
> > index a4d48ee..e19ca9c 100644
> > --- a/server/tests/test-vdagent.c
> > +++ b/server/tests/test-vdagent.c
> > @@ -27,6 +27,7 @@
> >  #include <spice/vd_agent.h>
> >  
> >  #include "test-display-base.h"
> > +#include "glib-compat.h"
> >  
> >  SpiceCoreInterface *core;
> >  SpiceTimer *ping_timer;
> > @@ -37,97 +38,6 @@ int ping_ms = 100;
> >  #define MIN(a, b) ((a) > (b) ? (b) : (a))
> >  #endif
> >  
> > -#if !GLIB_CHECK_VERSION(2, 34, 0)
> > -
> > -/* The code in this #ifdef block is taken from glib and is licensed under
> > the
> > - * GNU Lesser General Public License version 2 or later.
> > - *
> > - * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh
> > MacDonald
> > - * Modified by the GLib Team and others 1997-2000.  See GLib AUTHORS
> > - * file for a list of people on the GLib Team.
> > - */
> > -
> > -typedef struct {
> > -    gchar *log_domain;
> > -    GLogLevelFlags log_level;
> > -    gchar *pattern;
> > -} GTestExpectedMessage;
> > -
> > -static GSList *expected_messages = NULL;
> > -
> > -static gboolean fatal_log_filter(const gchar *log_domain,
> > -                                 GLogLevelFlags log_level,
> > -                                 const gchar *msg,
> > -                                 gpointer user_data)
> > -{
> > -    GTestExpectedMessage *expected = expected_messages->data;
> > -
> > -    if ((g_strcmp0(expected->log_domain, log_domain) == 0)
> > -            && ((log_level & expected->log_level) == expected->log_level)
> > -            && (g_pattern_match_simple(expected->pattern, msg))) {
> > -        expected_messages = g_slist_delete_link(expected_messages,
> > -                                                expected_messages);
> > -        g_free (expected->log_domain);
> > -        g_free (expected->pattern);
> > -        g_free (expected);
> > -
> > -        return FALSE;
> > -    }
> > -    return TRUE;
> > -}
> > -
> > -static void
> > -g_test_assert_expected_messages_internal (const char     *domain,
> > -                                          const char     *file,
> > -                                          int             line,
> > -                                          const char     *func)
> > -{
> > -  if (expected_messages)
> > -    {
> > -      GTestExpectedMessage *expected;
> > -      gchar *message;
> > -
> > -      expected = expected_messages->data;
> > -
> > -      message = g_strdup_printf ("Did not see expected message %s: %s",
> > -                                 expected->log_domain ?
> > expected->log_domain : "**",
> > -                                 expected->pattern);
> > -      g_error ("%s", message);
> > -      g_free (message);
> > -    }
> > -}
> > -
> > -#define g_test_assert_expected_messages()
> > g_test_assert_expected_messages_internal (G_LOG_DOMAIN, __FILE__,
> > __LINE__, G_STRFUNC)
> > -
> > -static void
> > -g_test_expect_message (const gchar    *log_domain,
> > -                       GLogLevelFlags  log_level,
> > -                       const gchar    *pattern)
> > -{
> > -  GTestExpectedMessage *expected;
> > -
> > -  g_return_if_fail (log_level != 0);
> > -  g_return_if_fail (pattern != NULL);
> > -  g_return_if_fail (~log_level & G_LOG_LEVEL_ERROR);
> > -
> > -  if (expected_messages == NULL)
> > -    {
> > -      g_test_log_set_fatal_handler(fatal_log_filter, NULL);
> > -    }
> > -
> > -  expected = g_new (GTestExpectedMessage, 1);
> > -  expected->log_domain = g_strdup (log_domain);
> > -  expected->log_level = log_level;
> > -  expected->pattern = g_strdup (pattern);
> > -
> > -  if ((log_level & G_LOG_LEVEL_MASK) <= G_LOG_LEVEL_WARNING)
> > -    {
> > -      expected_messages = g_slist_append (expected_messages, expected);
> > -    }
> > -}
> > -
> > -#endif /* GLIB_CHECK_VERSION(2, 34, 0) */
> > -
> >  
> >  static int vmc_write(SPICE_GNUC_UNUSED SpiceCharDeviceInstance *sin,
> >                       SPICE_GNUC_UNUSED const uint8_t *buf,

Sending a new version (testing on RHEL6)

Frediano


More information about the Spice-devel mailing list