[Libguestfs] [libnbd PATCH 2/2] api: Test previous patch
Eric Blake
eblake at redhat.com
Wed Aug 24 21:25:02 UTC 2022
On Wed, Aug 24, 2022 at 02:49:27PM +0200, Laszlo Ersek wrote:
> On 08/24/22 04:53, Eric Blake wrote:
> > Add testsuite coverage that exposes the flaw fixed in the previous patch.
> >
> > ---
> > tests/opt-info.c | 20 +++++++++++++-------
> > 1 file changed, 13 insertions(+), 7 deletions(-)
> >
> > diff --git a/tests/opt-info.c b/tests/opt-info.c
> > index b9739a5..2402a31 100644
> > --- a/tests/opt-info.c
> > +++ b/tests/opt-info.c
> > @@ -1,5 +1,5 @@
> > /* NBD client library in userspace
> > - * Copyright (C) 2013-2020 Red Hat Inc.
> > + * Copyright (C) 2013-2022 Red Hat Inc.
> > *
> > * This library is free software; you can redistribute it and/or
> > * modify it under the terms of the GNU Lesser General Public
> > @@ -80,15 +80,11 @@ main (int argc, char *argv[])
> > exit (EXIT_FAILURE);
> > }
> >
> > - /* info on something not present fails, wipes out prior info */
> > + /* changing export wipes out prior info */
> > if (nbd_set_export_name (nbd, "a") == -1) {
> > fprintf (stderr, "%s\n", nbd_get_error ());
> > exit (EXIT_FAILURE);
> > }
> > - if (nbd_opt_info (nbd) != -1) {
> > - fprintf (stderr, "expecting error for opt_info\n");
> > - exit (EXIT_FAILURE);
> > - }
> > if (nbd_get_size (nbd) != -1) {
> > fprintf (stderr, "expecting error for get_size\n");
> > exit (EXIT_FAILURE);
>
> Is this well targeted though?
>
> Here we can't say whether nbd_get_size() fails because export "a" is
> different from the previous "" export, or because "a" does not exist. If
> "a" existed and nbd_get_size() still failed, that would be more to the
> point.
Good observation. I'll set name to "b" (which does exist, and whereas
export "" has size 0, export "b" has size 1, so it should be very
obvious that returning 0 is wrong, returning 1 is only possible if we
queried the server about the new export which hasn't happened without
an nbd_opt_ call, and therefore -1 is the only sane answer)...
>
> > @@ -102,7 +98,13 @@ main (int argc, char *argv[])
> > exit (EXIT_FAILURE);
> > }
> >
> > - /* info for a different export */
> > + /* info on something not present fails */
> > + if (nbd_opt_info (nbd) != -1) {
> > + fprintf (stderr, "expecting error for opt_info\n");
> > + exit (EXIT_FAILURE);
> > + }
> > +
>
> Yes, this makes sense, assuming the previous point is "good enough".
and then add one more nbd_set_export_name("a") before the
expected-failing nbd_opt_info().
>
> > + /* info for a different export; idempotent name change is no-op */
> > if (nbd_set_export_name (nbd, "b") == -1) {
> > fprintf (stderr, "%s\n", nbd_get_error ());
> > exit (EXIT_FAILURE);
> > @@ -111,6 +113,10 @@ main (int argc, char *argv[])
> > fprintf (stderr, "%s\n", nbd_get_error ());
> > exit (EXIT_FAILURE);
> > }
> > + if (nbd_set_export_name (nbd, "b") == -1) {
> > + fprintf (stderr, "%s\n", nbd_get_error ());
> > + exit (EXIT_FAILURE);
> > + }
> > if ((r = nbd_get_size (nbd)) != 1) {
> > fprintf (stderr, "expecting size of 1, got %" PRId64 "\n", r);
> > exit (EXIT_FAILURE);
> >
>
> This looks OK to me.
I need to repost it anyway; the Python, Go, and OCaml bindings all
have the same test (under the name *230*), and can similarly be
changed for multi-lingual coverage of the idiom (if nothing else, to
prove we aren't maintaining any separate language-specific state).
v2 coming up later today, with more patches (the promised
nbd_opt_set_meta_context() among them).
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
More information about the Libguestfs
mailing list