[libvirt] [PATCH] tests: Produce predictable results in nsstest

Cole Robinson crobinso at redhat.com
Mon Mar 21 15:58:24 UTC 2016


On 03/21/2016 11:33 AM, Michal Privoznik wrote:
> Problem is that in the test any status file matching
> tests/nssdata/*.status is loaded as it contains IP addresses that
> are parsed. However, there's no order specified in which the
> files are loaded. Therefore on different systems the order may be
> different. This is then producing an unexpected results.
> Instead of defining an order in which the files are loaded, make
> the code that checks for missing IP addresses (or redundant ones)
> cope with unordered list of addresses. The reasoning behind is
> that the code doing the parsing is used in real NSS module where
> we don't care for ordering.
> 
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>  tests/nsstest.c | 25 ++++++++++++-------------
>  1 file changed, 12 insertions(+), 13 deletions(-)
> 
> diff --git a/tests/nsstest.c b/tests/nsstest.c
> index 68f1c60..9d7bc40 100644
> --- a/tests/nsstest.c
> +++ b/tests/nsstest.c
> @@ -49,7 +49,7 @@ testGetHostByName(const void *opaque)
>      char buf[BUF_SIZE] = { 0 };
>      char **addrList;
>      int rv, tmp_errno = 0, tmp_herrno = 0;
> -    size_t i = 0;
> +    size_t i = 0, j = 0;
>  
>      if (!data)
>          goto cleanup;
> @@ -141,30 +141,29 @@ testGetHostByName(const void *opaque)
>              goto cleanup;
>          }
>  
> -        if (!data->ipAddr[i]) {
> +        for (j = 0; data->ipAddr[j]; j++) {
> +            if (STREQ(data->ipAddr[j], ipAddr))
> +                break;
> +        }
> +
> +        if (!data->ipAddr[j]) {
>              virReportError(VIR_ERR_INTERNAL_ERROR,
>                             "Unexpected address %s", ipAddr);
>              VIR_FREE(ipAddr);
>              goto cleanup;
>          }
> -
> -        if (STRNEQ(data->ipAddr[i], ipAddr)) {
> -            virReportError(VIR_ERR_INTERNAL_ERROR,
> -                           "Address mismatch. Expected %s got %s",
> -                           data->ipAddr[i], ipAddr);
> -            VIR_FREE(ipAddr);
> -            goto cleanup;
> -        }
>          VIR_FREE(ipAddr);
>  
>          addrList++;
>          i++;
>      }
>  
> -    if (data->ipAddr[i]) {
> +    for (j = 0; data->ipAddr[j]; j++)
> +        ;
> +
> +    if (i != j) {
>          virReportError(VIR_ERR_INTERNAL_ERROR,
> -                       "Address mismatch. Expected %s got nothing",
> -                       data->ipAddr[i]);
> +                       "Expected %zu addresses, got %zu", j, i);
>          goto cleanup;
>      }
>  
> 

ACK, this fixes test failures for me

Thanks,
Cole




More information about the libvir-list mailing list