All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: xiaoqiang zhao <zxq_yx_007@163.com>
Cc: kwolf@redhat.com, peter.maydell@linaro.org, armbru@redhat.com,
	qemu-devel@nongnu.org, kraxel@redhat.com, pbonzini@redhat.com,
	marcandre.lureau@redhat.com
Subject: Re: [PATCH v3 2/3] tests/util-sockets: add abstract unix socket cases
Date: Wed, 13 May 2020 16:49:31 +0100	[thread overview]
Message-ID: <20200513154931.GI1253949@redhat.com> (raw)
In-Reply-To: <20200510061422.24841-3-zxq_yx_007@163.com>

On Sun, May 10, 2020 at 02:14:21PM +0800, xiaoqiang zhao wrote:
> add cases to test tight and non-tight for abstract address type
> 
> Signed-off-by: xiaoqiang zhao <zxq_yx_007@163.com>
> ---
>  tests/test-util-sockets.c | 83 +++++++++++++++++++++++++++++++++++++++
>  1 file changed, 83 insertions(+)
> 
> diff --git a/tests/test-util-sockets.c b/tests/test-util-sockets.c
> index 5fd947c7bf..8042fb9276 100644
> --- a/tests/test-util-sockets.c
> +++ b/tests/test-util-sockets.c
> @@ -227,6 +227,84 @@ static void test_socket_fd_pass_num_nocli(void)
>      g_free(addr.u.fd.str);
>  }
>  
> +static gpointer unix_server_thread_func(gpointer user_data)
> +{
> +    SocketAddress addr;
> +    Error *err = NULL;
> +    int fd = -1;
> +    int connfd = -1;
> +    struct sockaddr_un un;
> +    socklen_t len = sizeof(un);
> +    char name[] = "/tmp/unix-test.sock";

Fixed filenames are bad, as even though this is the abstract
namespace and thus safe from on-disk clashes, the abstract
namespace is still OS global. We should append both the PID
and a sequence of random bytes to get something which doesnt
clash if two copies of the unit test run concurrently.

> +
> +    addr.type = SOCKET_ADDRESS_TYPE_UNIX;
> +    addr.u.q_unix.path = name;
> +    addr.u.q_unix.tight = user_data != NULL;
> +    addr.u.q_unix.abstract = true;
> +
> +    fd = socket_listen(&addr, 1, &err);
> +    g_assert_cmpint(fd, >=, 0);
> +    g_assert(fd_is_socket(fd));
> +
> +    connfd = accept(fd, (struct sockaddr *)&un, &len);
> +    g_assert_cmpint(connfd, !=, -1);
> +
> +    close(fd);
> +
> +    return NULL;
> +}
> +
> +static gpointer unix_client_thread_func(gpointer user_data)
> +{
> +    SocketAddress addr;
> +    Error *err = NULL;
> +    int fd = -1;
> +    char name[] = "/tmp/unix-test.sock";
> +
> +    addr.type = SOCKET_ADDRESS_TYPE_UNIX;
> +    addr.u.q_unix.path = name;
> +    addr.u.q_unix.tight = user_data != NULL;
> +    addr.u.q_unix.abstract = true;
> +
> +    fd = socket_connect(&addr, &err);
> +
> +    g_assert_cmpint(fd, >=, 0);
> +
> +    close(fd);
> +
> +    return NULL;
> +}
> +
> +static void test_socket_unix_abstract_good(void)
> +{
> +    /* non tight socklen serv and cli */
> +    GThread *serv = g_thread_new("abstract_unix_server",
> +                                 unix_server_thread_func,
> +                                 NULL);
> +
> +    sleep(1);
> +
> +    GThread *cli = g_thread_new("abstruct_unix_client",
> +                                unix_client_thread_func,
> +                                NULL);
> +
> +    g_thread_join(cli);
> +    g_thread_join(serv);
> +
> +    /* tight socklen serv and cli */
> +    serv = g_thread_new("abstract_unix_server",
> +                        unix_server_thread_func,
> +                        (gpointer)1);
> +
> +    sleep(1);
> +
> +    cli = g_thread_new("abstruct_unix_client",
> +                       unix_client_thread_func,
> +                       (gpointer)1);
> +
> +    g_thread_join(cli);
> +    g_thread_join(serv);
> +}
>  
>  int main(int argc, char **argv)
>  {
> @@ -265,6 +343,11 @@ int main(int argc, char **argv)
>                          test_socket_fd_pass_num_nocli);
>      }
>  
> +#ifdef __linux__
> +        g_test_add_func("/util/socket/unix-abstract/good",
> +                        test_socket_unix_abstract_good);
> +#endif
> +
>  end:
>      return g_test_run();
>  }
> -- 
> 2.17.1
> 
> 
> 

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



  reply	other threads:[~2020-05-13 15:50 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-10  6:14 [PATCH v3 0/3] qemu-sockets: add abstract UNIX domain socket support xiaoqiang zhao
2020-05-10  6:14 ` [PATCH v3 1/3] " xiaoqiang zhao
2020-05-11 18:01   ` Eric Blake
2020-05-12  6:52     ` xiaoqiang.zhao
2020-05-13 15:52   ` Daniel P. Berrangé
2020-05-10  6:14 ` [PATCH v3 2/3] tests/util-sockets: add abstract unix socket cases xiaoqiang zhao
2020-05-13 15:49   ` Daniel P. Berrangé [this message]
2020-05-14  0:26     ` xiaoqiang zhao
2020-05-10  6:14 ` [PATCH v3 3/3] qemu-options: updates for abstract unix sockets xiaoqiang zhao
2020-05-13 15:50   ` Daniel P. Berrangé

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200513154931.GI1253949@redhat.com \
    --to=berrange@redhat.com \
    --cc=armbru@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=zxq_yx_007@163.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.