[Spice-devel] [PATCH spice-server 14/16] tests: Make test-two-servers work reliably

Christophe Fergeau cfergeau at redhat.com
Wed Sep 6 15:52:02 UTC 2017


On Mon, Sep 04, 2017 at 11:57:22AM +0100, Frediano Ziglio wrote:
> This test run 2 spice server in one program.

"runs"

> Use two different tcp port to be able to connect to both servers.
> Also fix a race condition getting the command to execute from
> the worker threads.

I would have put the race condition commit close to the commit
adding pthread usage.

> 
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
>  server/tests/test-display-base.c | 29 +++++++++++++++--------------
>  server/tests/test-display-base.h |  2 ++
>  server/tests/test-two-servers.c  |  1 +
>  3 files changed, 18 insertions(+), 14 deletions(-)
> 
> diff --git a/server/tests/test-display-base.c b/server/tests/test-display-base.c
> index 101df44d..82dcdf35 100644
> --- a/server/tests/test-display-base.c
> +++ b/server/tests/test-display-base.c
> @@ -70,6 +70,8 @@ static void test_spice_destroy_update(SimpleSpiceUpdate *update)
>      free(update);
>  }
>  
> +int test_port = 5912;
> +
>  #define DEFAULT_WIDTH 640
>  #define DEFAULT_HEIGHT 320
>  
> @@ -485,20 +487,19 @@ static void push_command(QXLCommandExt *ext)
>      pthread_mutex_unlock(&command_mutex);
>  }
>  
> -static struct QXLCommandExt *get_simple_command(void)
> +static int get_num_commands(void)
>  {
> -    pthread_mutex_lock(&command_mutex);
> -    struct QXLCommandExt *ret = commands[commands_start % COMMANDS_SIZE];
> -    spice_assert(commands_start < commands_end);
> -    commands_start++;
> -    pthread_mutex_unlock(&command_mutex);
> -    return ret;
> +    return commands_end - commands_start;
>  }
>  
> -static int get_num_commands(void)
> +static struct QXLCommandExt *get_simple_command(void)
>  {
>      pthread_mutex_lock(&command_mutex);
> -    int ret = commands_end - commands_start;
> +    struct QXLCommandExt *ret = NULL;
> +    if (get_num_commands() > 0) {
> +        ret = commands[commands_start % COMMANDS_SIZE];
> +        commands_start++;
> +    }
>      pthread_mutex_unlock(&command_mutex);
>      return ret;
>  }
> @@ -507,10 +508,11 @@ static int get_num_commands(void)
>  static int get_command(SPICE_GNUC_UNUSED QXLInstance *qin,
>                         struct QXLCommandExt *ext)
>  {
> -    if (get_num_commands() == 0) {
> +    struct QXLCommandExt *cmd = get_simple_command();
> +    if (!cmd) {
>          return FALSE;
>      }
> -    *ext = *get_simple_command();
> +    *ext = *cmd;
>      return TRUE;
>  }
>  
> @@ -902,7 +904,6 @@ void test_set_command_list(Test *test, Command *commands, int num_commands)
>  
>  Test *test_new(SpiceCoreInterface *core)
>  {
> -    int port = 5912;
>      Test *test = spice_new0(Test, 1);
>      SpiceServer* server = spice_server_new();
>  
> @@ -914,8 +915,8 @@ Test *test_new(SpiceCoreInterface *core)
>      test->wakeup_ms = 1;
>      test->cursor_notify = NOTIFY_CURSOR_BATCH;
>      // some common initialization for all display tests
> -    printf("TESTER: listening on port %d (unsecure)\n", port);
> -    spice_server_set_port(server, port);
> +    printf("TESTER: listening on port %d (unsecure)\n", test_port);
> +    spice_server_set_port(server, test_port);
>      spice_server_set_noauth(server);
>      spice_server_init(server, core);
>  
> diff --git a/server/tests/test-display-base.h b/server/tests/test-display-base.h
> index 1a4f20c5..23c2ce18 100644
> --- a/server/tests/test-display-base.h
> +++ b/server/tests/test-display-base.h
> @@ -130,6 +130,8 @@ struct Test {
>      void (*on_client_disconnected)(Test *test);
>  };
>  
> +extern int test_port;
> +

I think I would add a test_new_with_port() rather than an exported
global.

Christophe

>  void test_set_simple_command_list(Test *test, const int *command, int num_commands);
>  void test_set_command_list(Test *test, Command *command, int num_commands);
>  void test_add_display_interface(Test *test);
> diff --git a/server/tests/test-two-servers.c b/server/tests/test-two-servers.c
> index 40a0e571..2372e730 100644
> --- a/server/tests/test-two-servers.c
> +++ b/server/tests/test-two-servers.c
> @@ -42,6 +42,7 @@ int main(void)
>  
>      core = basic_event_loop_init();
>      t1 = test_new(core);
> +    ++test_port;
>      t2 = test_new(core);
>      //spice_server_set_image_compression(server, SPICE_IMAGE_COMPRESSION_OFF);
>      test_add_display_interface(t1);
> -- 
> 2.13.5
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel


More information about the Spice-devel mailing list