[Spice-devel] [PATCH spice-server] test-leaks: Test that creating and destroying spicevmc does not leak
Frediano Ziglio
fziglio at redhat.com
Wed Mar 8 12:15:21 UTC 2017
>
> On Tue, Mar 07, 2017 at 04:41:53PM +0000, Frediano Ziglio wrote:
> > Add and remove some vmc device to check for leaking.
> > These combination assure that currently implemented type
> > of devices (webdav, usb and generic) are checked.
>
> In general, I think having a test case in test-leaks should be our last
> option. In my opinion, it makes more sense to have this kind of tests
> grouped together with other spicevmc related tests which we can then
> run under valgrind.
> In this specific case, maybe it would make sense to combine this somehow
> with test-vdagent, potentially renaming it to test-spicevmc?
>
> Acked-by: Christophe Fergeau <cfergeau at redhat.com>
>
> Christophe
>
In this case I think the terminology is confusing (test-vdagent
using vmc prefix).
Actually vdagent and vmc are 2 completely different implementation
of char devices (one in reds.c and the other(s) in spicevmc.c) so
it make sense to have spicevmc checks separated from the agent.
Frediano
> >
> > Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> > ---
> > server/tests/test-leaks.c | 67
> > +++++++++++++++++++++++++++++++++++++++++++++--
> > 1 file changed, 65 insertions(+), 2 deletions(-)
> >
> > diff --git a/server/tests/test-leaks.c b/server/tests/test-leaks.c
> > index e07e3c6..c9bc996 100644
> > --- a/server/tests/test-leaks.c
> > +++ b/server/tests/test-leaks.c
> > @@ -20,8 +20,9 @@
> >
> > #include "test-glib-compat.h"
> > #include "basic-event-loop.h"
> > +#include "test-display-base.h"
> >
> > -static void leaks(void)
> > +static void server_leaks(void)
> > {
> > int result;
> > SpiceCoreInterface *core;
> > @@ -45,11 +46,73 @@ static void leaks(void)
> > basic_event_loop_destroy();
> > }
> >
> > +static int vmc_write(SPICE_GNUC_UNUSED SpiceCharDeviceInstance *sin,
> > + SPICE_GNUC_UNUSED const uint8_t *buf,
> > + int len)
> > +{
> > + return len;
> > +}
> > +
> > +static int vmc_read(SPICE_GNUC_UNUSED SpiceCharDeviceInstance *sin,
> > + SPICE_GNUC_UNUSED uint8_t *buf,
> > + SPICE_GNUC_UNUSED int len)
> > +{
> > + return 0;
> > +}
> > +
> > +static void vmc_state(SPICE_GNUC_UNUSED SpiceCharDeviceInstance *sin,
> > + SPICE_GNUC_UNUSED int connected)
> > +{
> > +}
> > +
> > +static SpiceCharDeviceInterface vmc_interface = {
> > + .base.type = SPICE_INTERFACE_CHAR_DEVICE,
> > + .base.description = "test spice virtual channel char device",
> > + .base.major_version = SPICE_INTERFACE_CHAR_DEVICE_MAJOR,
> > + .base.minor_version = SPICE_INTERFACE_CHAR_DEVICE_MINOR,
> > + .state = vmc_state,
> > + .write = vmc_write,
> > + .read = vmc_read,
> > +};
> > +
> > +static SpiceCharDeviceInstance vmc_instance;
> > +
> > +static void vmc_leaks(void)
> > +{
> > + SpiceCoreInterface *core = basic_event_loop_init();
> > + Test *test = test_new(core);
> > + int status;
> > +
> > + vmc_instance.subtype = "usbredir";
> > + vmc_instance.base.sif = &vmc_interface.base;
> > + spice_server_add_interface(test->server, &vmc_instance.base);
> > + status = spice_server_remove_interface(&vmc_instance.base);
> > + g_assert_cmpint(status, ==, 0);
> > +
> > + vmc_instance.subtype = "port";
> > + vmc_instance.portname = "org.spice-space.webdav.0";
> > + vmc_instance.base.sif = &vmc_interface.base;
> > + spice_server_add_interface(test->server, &vmc_instance.base);
> > + status = spice_server_remove_interface(&vmc_instance.base);
> > + g_assert_cmpint(status, ==, 0);
> > +
> > + vmc_instance.subtype = "port";
> > + vmc_instance.portname = "default_port";
> > + vmc_instance.base.sif = &vmc_interface.base;
> > + spice_server_add_interface(test->server, &vmc_instance.base);
> > + status = spice_server_remove_interface(&vmc_instance.base);
> > + g_assert_cmpint(status, ==, 0);
> > +
> > + test_destroy(test);
> > + basic_event_loop_destroy();
> > +}
> > +
> > int main(int argc, char *argv[])
> > {
> > g_test_init(&argc, &argv, NULL);
> >
> > - g_test_add_func("/server/server leaks", leaks);
> > + g_test_add_func("/server/server leaks", server_leaks);
> > + g_test_add_func("/server/vmc leaks", vmc_leaks);
> >
> > return g_test_run();
> > }
More information about the Spice-devel
mailing list