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.
@@ -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".
+ /* 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. Laszlo