[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