[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