[Spice-devel] [PATCH spice-server v2] tests: Add a test for streaming devices

Christophe Fergeau cfergeau at redhat.com
Tue Nov 21 09:43:09 UTC 2017


On Mon, Nov 20, 2017 at 11:48:53AM +0000, Frediano Ziglio wrote:
> +*/
> +/**
> + * Test streaming device
> + */
> +
> +#include <config.h>
> +#include <string.h>
> +#include <stdlib.h>
> +#include <stdio.h>
> +
> +#include <spice/protocol.h>
> +#include <spice/stream-device.h>
> +
> +#include "test-display-base.h"
> +#include "test-glib-compat.h"
> +
> +#ifndef MIN
> +#define MIN(a, b) ((a) > (b) ? (b) : (a))
> +#endif

You get this when including glib.h, so I would expect this is not
needed.

> +
> +static SpiceCharDeviceInstance vmc_instance;
> +
> +// device buffer to read from
> +static uint8_t message[2048];
> +// position to read from
> +static unsigned pos;
> +// array of limits when the read should return
> +// the array is defined as [message_sizes_curr, message_sizes_end)
> +// then the size is reach we move on next one till exausted
> +static unsigned message_sizes[16];
> +static unsigned *message_sizes_end, *message_sizes_curr;
> +
> +// handle writes to the device
> +static int vmc_write(SPICE_GNUC_UNUSED SpiceCharDeviceInstance *sin,
> +                     SPICE_GNUC_UNUSED const uint8_t *buf,
> +                     int len)
> +{
> +    // currently we don't test any on write so reply we wrote it

s/any/anything?

> +    return len;
> +}
> +
> +static int vmc_read(SPICE_GNUC_UNUSED SpiceCharDeviceInstance *sin,
> +                    uint8_t *buf,
> +                    int len)
> +{
> +    int ret;
> +
> +    if (pos >= *message_sizes_curr && message_sizes_curr < message_sizes_end) {
> +        ++message_sizes_curr;
> +    }
> +    if (message_sizes_curr >= message_sizes_end || pos >= *message_sizes_curr) {
> +        return 0;
> +    }
> +    ret = MIN(*message_sizes_curr - pos, len);
> +    memcpy(buf, &message[pos], ret);
> +    pos += ret;
> +    // kick of next message read

s/of/off?

[...]
> +static void test_stream_device(void)
> +{
> +    uint8_t *p = message;
> +    SpiceCoreInterface *core = basic_event_loop_init();
> +    Test *test = test_new(core);
> +
> +    message_sizes_curr = message_sizes;
> +    message_sizes_end = message_sizes;
> +
> +    // add some messages into device buffer
> +    // here we are testing the device is reading at least two
> +    // consecutive format messages
> +    // first message part has 2 extra bytes to check for header split
> +    p = add_format(p, 640, 480, SPICE_VIDEO_CODEC_TYPE_MJPEG);
> +    *message_sizes_end++ = p - message + 2;

I'd split this and the ones below in 2 lines

> +
> +    p = add_format(p, 640, 480, SPICE_VIDEO_CODEC_TYPE_VP9);
> +    *message_sizes_end++ = p - message;
> +
> +    // add a message to stop data to be read
> +    p = add_stream_hdr(p, STREAM_TYPE_INVALID, 0);
> +    *message_sizes_end++ = p - message;
> +
> +    // this message should not be read
> +    p = add_stream_hdr(p, STREAM_TYPE_INVALID, 0);
> +    *message_sizes_end++ = p - message;
> +
> +    vmc_instance.base.sif = &vmc_interface.base;
> +    spice_server_add_interface(test->server, &vmc_instance.base);
> +
> +    // device should not have readed data before we open it

s/readed/read

Apart from this, looks good to me,
Acked-by: Christophe Fergeau <cfergeau at redhat.com>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20171121/0786c5c9/attachment.sig>


More information about the Spice-devel mailing list