--- info/Makefile.am | 1 + info/info-list-uris.sh | 46 ++++++++++++++++++++++++++++++++++++++++++ info/info-text.sh | 1 + info/nbdinfo.c | 12 +++++++++++ info/nbdinfo.pod | 2 ++ 5 files changed, 62 insertions(+) diff --git a/info/Makefile.am b/info/Makefile.am index 1f0a6a3..c19c394 100644 --- a/info/Makefile.am +++ b/info/Makefile.am @@ -22,6 +22,7 @@ info_sh_files = \ info-list-json.sh \ info-list-qemu.sh \ info-list-json-qemu.sh \ + info-list-uris.sh \ info-json.sh \ info-oldstyle.sh \ info-null.sh \ diff --git a/info/info-list-uris.sh b/info/info-list-uris.sh new file mode 100755 index 0000000..28693aa --- /dev/null +++ b/info/info-list-uris.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +# nbd client library in userspace +# Copyright (C) 2020-2021 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 +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +. ../tests/functions.sh + +set -e +set -x + +requires nbdkit --version +requires nbdkit file --version + +# This test requires nbdkit >= 1.22. +minor=$( nbdkit --dump-config | grep ^version_minor | cut -d= -f2 ) +requires test $minor -gt 22 + +out=info-list-uris.out +cleanup_fn rm -f $out + +# nbdinfo --list is not very stable in the particular case where +# exports come and go while it is running. This happens if we set the +# directory to be the current directory since other tests create +# temporary files here. So point this to a more stable directory. + +nbdkit -U - file dir=$srcdir/../examples \ + --run '$VG nbdinfo --list "$uri"' > $out +cat $out + +# We expect to see URIs corresponding to some well-known files +# (ie. exports) in the examples directory. +grep "uri: nbd+unix:///LICENSE-FOR-EXAMPLES?socket=" $out +grep "uri: nbd+unix:///get-size.c?socket=" $out diff --git a/info/info-text.sh b/info/info-text.sh index bf98405..5585a48 100755 --- a/info/info-text.sh +++ b/info/info-text.sh @@ -31,4 +31,5 @@ nbdkit -U - memory size=1M \ --run '$VG nbdinfo "nbd+unix:///?socket=$unixsocket"' > $out cat $out grep "export-size: $((1024*1024))" $out +grep "uri: nbd+unix:///?socket=" $out sed -n '/contexts:/ { N; p; q }; $ q1' $out diff --git a/info/nbdinfo.c b/info/nbdinfo.c index 3dfc463..b35e682 100644 --- a/info/nbdinfo.c +++ b/info/nbdinfo.c @@ -407,6 +407,7 @@ list_one_export (struct nbd_handle *nbd, const char *desc, char *export_name = NULL; char *export_desc = NULL; char *content = NULL; + char *uri = NULL; int is_rotational, is_read_only; int can_cache, can_df, can_fast_zero, can_flush, can_fua, can_multi_conn, can_trim, can_zero; @@ -433,6 +434,8 @@ list_one_export (struct nbd_handle *nbd, const char *desc, exit (EXIT_FAILURE); } + uri = nbd_get_uri (nbd); + /* Prefer the server's version of the name, if available */ export_name = nbd_get_canonical_export_name (nbd); if (export_name == NULL) @@ -475,6 +478,8 @@ list_one_export (struct nbd_handle *nbd, const char *desc, fprintf (fp, "\texport-size: %" PRIi64 "\n", size); if (content) fprintf (fp, "\tcontent: %s\n", content); + if (uri) + fprintf (fp, "\turi: %s\n", uri); if (show_context) { fprintf (fp, "\tcontexts:\n"); for (i = 0; i < contexts.size; ++i) @@ -533,6 +538,12 @@ list_one_export (struct nbd_handle *nbd, const char *desc, fprintf (fp, ",\n"); } + if (uri) { + fprintf (fp, "\t\"uri\": "); + print_json_string (uri); + fprintf (fp, ",\n"); + } + if (show_context) { fprintf (fp, "\t\"contexts\": [\n"); for (i = 0; i < contexts.size; ++i) { @@ -600,6 +611,7 @@ list_one_export (struct nbd_handle *nbd, const char *desc, free (content); free (export_name); free (export_desc); + free (uri); return true; } diff --git a/info/nbdinfo.pod b/info/nbdinfo.pod index 99c74a2..5bc624c 100644 --- a/info/nbdinfo.pod +++ b/info/nbdinfo.pod @@ -23,6 +23,7 @@ L<https://github.com/NetworkBlockDevice/nbd/blob/master/doc/uri.md>): export="": export-size: 1048576 content: data + uri: nbd://localhost:10809/ is_rotational: false is_read_only: false can_cache: true @@ -63,6 +64,7 @@ the I<--json> parameter: { "export-name": "", "content": "DOS/MBR boot sector; partition 1 : ID=0xc, start-CHS (0x3ff,254,63), end-CHS (0x3ff,254,63), startsector 2048, 4148704 sectors", + "uri": "nbd://localhost:10809/", "is_rotational": false, "is_read_only": true, "can_cache": true, -- 2.29.0.rc2