[libvirt] [PATCH 1/3] tests: validate private data / pre / post exec hooks for RPC APIs

John Ferlan jferlan at redhat.com
Thu Feb 1 16:49:41 UTC 2018



On 02/01/2018 10:35 AM, Daniel P. Berrangé wrote:
> Validate that the virNetServer(Client) RPC APIs are processing the
> private data callbacks correctly by passing in non-NULL pointers.
> 
> Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
> ---
>  .../virnetdaemondata/input-data-admin-nomdns.json  | 12 ++--
>  .../input-data-admin-server-names.json             | 12 ++--
>  .../virnetdaemondata/input-data-anon-clients.json  |  6 +-
>  .../input-data-client-auth-pending-failure.json    |  3 +-
>  .../input-data-client-auth-pending.json            |  6 +-
>  tests/virnetdaemondata/input-data-client-ids.json  |  6 +-
>  .../input-data-client-timestamp.json               |  6 +-
>  .../input-data-initial-nomdns.json                 |  6 +-
>  tests/virnetdaemondata/input-data-initial.json     |  6 +-
>  .../input-data-no-keepalive-required.json          | 12 ++--
>  .../virnetdaemondata/output-data-admin-nomdns.json | 12 ++--
>  .../output-data-admin-server-names.json            | 12 ++--
>  .../virnetdaemondata/output-data-anon-clients.json |  6 +-
>  .../output-data-client-auth-pending.json           |  6 +-
>  tests/virnetdaemondata/output-data-client-ids.json |  6 +-
>  .../output-data-client-timestamp.json              |  6 +-
>  .../output-data-initial-nomdns.json                |  6 +-
>  tests/virnetdaemondata/output-data-initial.json    |  6 +-
>  .../output-data-no-keepalive-required.json         | 12 ++--
>  tests/virnetdaemontest.c                           | 71 +++++++++++++++++++---
>  tests/virnetserverclienttest.c                     | 22 ++++++-
>  21 files changed, 183 insertions(+), 57 deletions(-)
> 

[...]

> --- a/tests/virnetdaemontest.c
> +++ b/tests/virnetdaemontest.c
> @@ -27,6 +27,54 @@
>  #define VIR_FROM_THIS VIR_FROM_RPC
>  
>  #if defined(HAVE_SOCKETPAIR) && defined(WITH_YAJL)
> +struct testClientPriv {
> +    int magic;
> +};
> +
> +static void *testClientNew(virNetServerClientPtr client ATTRIBUTE_UNUSED,
> +                           void *opaque ATTRIBUTE_UNUSED)

These are stylistically like the rest...

static void **
testClientNew(...)

> +{
> +    struct testClientPriv *priv;
> +
> +    if (VIR_ALLOC(priv) < 0)
> +        return NULL;
> +
> +    priv->magic = 1729;
> +
> +    return priv;
> +}
> +
> +static virJSONValuePtr testClientPreExec(virNetServerClientPtr client ATTRIBUTE_UNUSED,
> +                                         void *data)
> +{
> +    struct testClientPriv *priv = data;
> +
> +    return virJSONValueNewNumberInt(priv->magic);
> +}
> +
> +
> +static void *testClientNewPostExec(virNetServerClientPtr client,
> +                                   virJSONValuePtr object,
> +                                   void *opaque)
> +{
> +    int magic;
> +
> +    if (virJSONValueGetNumberInt(object, &magic) < 0) {
> +        return NULL;
> +    }
> +
> +    if (magic != 1729) {
> +        return NULL;
> +    }

These don't pass curly bracket syntax-check...

> +
> +    return testClientNew(client, opaque);
> +}
> +
> +static void testClientFree(void *opaque)
> +{
> +    VIR_FREE(opaque);
> +}
> +
>  static virNetServerPtr
>  testCreateServer(const char *server_name, const char *host, int family)
>  {
> @@ -53,9 +101,9 @@ testCreateServer(const char *server_name, const char *host, int family)
>                                  10, 50, 5, 100, 10,
>                                  120, 5,
>                                  mdns_group,
> -                                NULL,
> -                                NULL,
> -                                NULL,
> +                                testClientNew,
> +                                testClientPreExec,
> +                                testClientFree,
>                                  NULL)))
>          goto error;
>  
> @@ -101,7 +149,10 @@ testCreateServer(const char *server_name, const char *host, int family)
>  # ifdef WITH_GNUTLS
>                                         NULL,
>  # endif
> -                                       NULL, NULL, NULL, NULL)))
> +                                       testClientNew,
> +                                       testClientPreExec,
> +                                       testClientFree,
> +                                       NULL)))
>          goto error;
>  
>      if (!(cln2 = virNetServerClientNew(virNetServerNextClientID(srv),
> @@ -112,7 +163,10 @@ testCreateServer(const char *server_name, const char *host, int family)
>  # ifdef WITH_GNUTLS
>                                         NULL,
>  # endif
> -                                       NULL, NULL, NULL, NULL)))
> +                                       testClientNew,
> +                                       testClientPreExec,
> +                                       testClientFree,
> +                                       NULL)))
>          goto error;
>  
>      if (virNetServerAddClient(srv, cln1) < 0)
> @@ -206,8 +260,11 @@ testNewServerPostExecRestart(virNetDaemonPtr dmn ATTRIBUTE_UNUSED,
>          if (STREQ(data->serverNames[i], name)) {
>              return virNetServerNewPostExecRestart(object,
>                                                    name,
> -                                                  NULL, NULL, NULL,
> -                                                  NULL, NULL);
> +                                                  NULL,
> +                                                  testClientNewPostExec,
> +                                                  testClientPreExec,
> +                                                  testClientFree,
> +                                                  NULL);

virnetdaemontest.c: In function 'testNewServerPostExecRestart':
virnetdaemontest.c:261:20: error: null argument where non-null required
(argument 3) [-Werror=nonnull]
             return virNetServerNewPostExecRestart(object,
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors

I added testClient{New|Free} and things were happy.

>          }
>      }
>  
> diff --git a/tests/virnetserverclienttest.c b/tests/virnetserverclienttest.c
> index 96b69b3e45..351ba9f4c7 100644
> --- a/tests/virnetserverclienttest.c
> +++ b/tests/virnetserverclienttest.c
> @@ -27,6 +27,23 @@
>  #define VIR_FROM_THIS VIR_FROM_RPC
>  
>  #ifdef HAVE_SOCKETPAIR
> +
> +static void *testClientNew(virNetServerClientPtr client ATTRIBUTE_UNUSED,
> +                           void *opaque ATTRIBUTE_UNUSED)

Stylistically same here...

With nits fixed,

Reviewed-by: John Ferlan <jferlan at redhat.com>

John

> +{
> +    char *dummy;
> +
> +    if (VIR_ALLOC(dummy) < 0)
> +        return NULL;
> +
> +    return dummy;
> +}
> +
> +static void testClientFree(void *opaque)
> +{
> +    VIR_FREE(opaque);
> +}
> +
>  static int testIdentity(const void *opaque ATTRIBUTE_UNUSED)
>  {
>      int sv[2];
> @@ -56,7 +73,10 @@ static int testIdentity(const void *opaque ATTRIBUTE_UNUSED)
>  # ifdef WITH_GNUTLS
>                                           NULL,
>  # endif
> -                                         NULL, NULL, NULL, NULL))) {
> +                                         testClientNew,
> +                                         NULL,
> +                                         testClientFree,
> +                                         NULL))) {
>          virDispatchError(NULL);
>          goto cleanup;
>      }
> 




More information about the libvir-list mailing list