Check that data sent to device are collapsed in a single message. The StreamChannel object is mocked in the test. This checks that commit dcc3f995d9f5575e319adcfe530c477a7c294ff3 ("stream-device: handle_data: send whole message") is doing the right thing. Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> --- server/tests/test-stream-device.c | 99 +++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/server/tests/test-stream-device.c b/server/tests/test-stream-device.c index 1bcc1d42c..2916a07d8 100644 --- a/server/tests/test-stream-device.c +++ b/server/tests/test-stream-device.c @@ -31,6 +31,8 @@ #include "test-display-base.h" #include "test-glib-compat.h" +#include "stream-channel.h" +#include "reds.h" static SpiceCharDeviceInstance vmc_instance; @@ -173,6 +175,66 @@ check_vmc_error_message(void) g_assert_cmpint(GUINT32_FROM_LE(hdr.size), <=, vmc_write_pos - sizeof(hdr)); } +static int num_send_data_calls = 0; + +struct StreamChannel { + RedChannel parent; +}; + +struct StreamChannelClass { + RedChannelClass parent_class; +}; + +G_DEFINE_TYPE(StreamChannel, stream_channel, RED_TYPE_CHANNEL) + +static void +stream_channel_init(StreamChannel *channel) +{ +} + +static void +stream_channel_class_init(StreamChannelClass *klass) +{ +} + +void stream_channel_change_format(StreamChannel *channel, + const struct StreamMsgFormat *fmt) +{ +} + +void stream_channel_send_data(StreamChannel *channel, + const void *data, size_t size, + uint32_t mm_time) +{ + ++num_send_data_calls; +} + +void stream_channel_register_start_cb(StreamChannel *channel, + stream_channel_start_proc cb, void *opaque) +{ +} + +void stream_channel_register_queue_stat_cb(StreamChannel *channel, + stream_channel_queue_stat_proc cb, void *opaque) +{ +} + +StreamChannel* stream_channel_new(RedsState *server, uint32_t id) +{ + return g_object_new(TYPE_STREAM_CHANNEL, + "spice-server", server, + "core-interface", reds_get_core_interface(server), + "channel-type", SPICE_CHANNEL_DISPLAY, + "id", id, + "migration-flags", 0, + "handle-acks", FALSE, + NULL); +} + +void stream_channel_reset(StreamChannel *channel) +{ +} + static SpiceCoreInterface *core; static Test *test; typedef int TestFixture; @@ -190,6 +252,8 @@ static void test_stream_device_setup(TestFixture *fixture, gconstpointer user_da vmc_write_pos = 0; message_sizes_curr = message_sizes; message_sizes_end = message_sizes; + + num_send_data_calls = 0; } static void test_stream_device_teardown(TestFixture *fixture, gconstpointer user_data) @@ -384,6 +448,39 @@ static void test_stream_device_huge_data(TestFixture *fixture, gconstpointer use check_vmc_error_message(); } +// check that server send all message +static void test_stream_device_data_message(TestFixture *fixture, gconstpointer user_data) +{ + uint8_t *p = message; + + // add some messages into device buffer + p = add_format(p, 640, 480, SPICE_VIDEO_CODEC_TYPE_MJPEG); + p = add_stream_hdr(p, STREAM_TYPE_DATA, 1017); + for (int i = 0; i < 1017; ++i, ++p) { + *p = (uint8_t) (i * 123 + 57); + } + *message_sizes_end = 51; + ++message_sizes_end; + *message_sizes_end = 123; + ++message_sizes_end; + *message_sizes_end = 534; + ++message_sizes_end; + *message_sizes_end = p - message; + ++message_sizes_end; + + test_kick(); + + // we should read all data + g_assert(message_sizes_curr - message_sizes == 4); + + // we should have no data from the device + discard_server_capabilities(); + g_assert_cmpint(vmc_write_pos, ==, 0); + + // make sure data were collapsed in a single message + g_assert_cmpint(num_send_data_calls, ==, 1); +} + static void test_add(const char *name, void (*func)(TestFixture *, gconstpointer), gconstpointer arg) { g_test_add(name, TestFixture, arg, test_stream_device_setup, func, test_stream_device_teardown); @@ -407,6 +504,8 @@ int main(int argc, char *argv[]) test_stream_device_empty, GINT_TO_POINTER(STREAM_TYPE_DATA)); test_add("/server/stream-device-huge-data", test_stream_device_huge_data, NULL); + test_add("/server/stream-device-data-message", + test_stream_device_data_message, NULL); return g_test_run(); } -- 2.17.1 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel