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

Christophe Fergeau cfergeau at redhat.com
Thu Mar 2 14:22:34 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)


>  #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?

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,
> -- 
> 2.9.3
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20170302/70d7f5b1/attachment-0001.sig>


More information about the Spice-devel mailing list