diff --git a/0015-in-place-Add-a-warning-about-checking-the-exit-code.patch b/0015-in-place-Add-a-warning-about-checking-the-exit-code.patch new file mode 100644 index 0000000..9f1e13a --- /dev/null +++ b/0015-in-place-Add-a-warning-about-checking-the-exit-code.patch @@ -0,0 +1,32 @@ +From a794e7936064812540f0bb8b37827fa562a6fba4 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Wed, 30 Oct 2024 15:39:31 +0000 +Subject: [PATCH] in-place: Add a warning about checking the exit code + +(cherry picked from commit 8b768fd9b17412ee8893447dc0f1e75bc612df58) +--- + docs/virt-v2v-in-place.pod | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/docs/virt-v2v-in-place.pod b/docs/virt-v2v-in-place.pod +index b7384210..4057dae5 100644 +--- a/docs/virt-v2v-in-place.pod ++++ b/docs/virt-v2v-in-place.pod +@@ -35,6 +35,17 @@ If the guest has been copied to local libvirt then: + + virt-v2v-in-place -i libvirt guest + ++=head2 Exit code ++ ++If virt-v2v-in-place fails it will return a non-zero (error) exit ++code. In this case, the disk image will be in an B. ++ ++If the image contains important information you should ensure you have ++a backup before trying a virt-v2v-in-place conversion. And you should ++check the exit code is zero before using the disk image after a ++conversion. ++ + =head1 EXAMPLES + + =head1 OPTIONS diff --git a/0016-i-libvirt-Trim-whitespace-around-name.patch b/0016-i-libvirt-Trim-whitespace-around-name.patch new file mode 100644 index 0000000..832711c --- /dev/null +++ b/0016-i-libvirt-Trim-whitespace-around-name.patch @@ -0,0 +1,30 @@ +From 669acaf0f56ffdb85a1d72fb37ff2958600003cc Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Fri, 15 Nov 2024 14:00:07 +0000 +Subject: [PATCH] -i libvirt: Trim whitespace around name + +In -i libvirt / -i libvirtxml we didn't trim whitespace +around the name, so: + + foo + +would set the input name to the literal string " foo ". + +(cherry picked from commit 9cb76069040543ce25003ac8c620aff3724964fc) +--- + input/parse_libvirt_xml.ml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/input/parse_libvirt_xml.ml b/input/parse_libvirt_xml.ml +index 4d0fcdf3..8009a05a 100644 +--- a/input/parse_libvirt_xml.ml ++++ b/input/parse_libvirt_xml.ml +@@ -78,7 +78,7 @@ let parse_libvirt_xml ?conn xml = + match xpath_string "/domain/name/text()" with + | None | Some "" -> + error (f_"in the libvirt XML metadata, is missing or empty") +- | Some s -> s in ++ | Some s -> String.trim s in + let genid = + match xpath_string "/domain/genid/text()" with + | None | Some "" -> None diff --git a/0017-o-qemu-Replace-hard-coded-UEFI-paths.patch b/0017-o-qemu-Replace-hard-coded-UEFI-paths.patch new file mode 100644 index 0000000..40721bb --- /dev/null +++ b/0017-o-qemu-Replace-hard-coded-UEFI-paths.patch @@ -0,0 +1,962 @@ +From faf29e12e7928345ca0178923f468fee34d067e8 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Fri, 15 Nov 2024 11:49:26 +0000 +Subject: [PATCH] -o qemu: Replace hard-coded UEFI paths + +Update the qemu shell script to simply find the UEFI paths as +required. + +Remove lib/uefi.ml:find_uefi_firmware as this function is no longer +needed. + +Remove common/mlv2v/ everywhere. This contained a list of UEFI code +and NVRAM files which is no longer used. + +Update common submodule. This pulls in: + + Richard W.M. Jones (5): + mlcustomize/customize_run.ml: Move 'in' to new line + mlstdutils/guestfs_config: Define host_os + mlcustomize, mltools: Check guest OS is compatible before allowing --run + Remove mlv2v/ subdirectory + qemuopts: Add ability to add raw, unquoted output to qemu scripts + qemuopts: Fix missing break statement + +(cherry picked from commit 69b4e83935b03e10c5da9b93f987eb8ddd2cde31) +--- + Makefile.am | 1 - + common | 2 +- + configure.ac | 1 - + convert/Makefile.am | 2 - + in-place/Makefile.am | 4 +- + input/Makefile.am | 2 - + inspector/Makefile.am | 4 +- + lib/Makefile.am | 1 - + lib/utils.ml | 20 ------- + lib/utils.mli | 4 -- + ocaml-dep.sh.in | 1 - + output/Makefile.am | 2 - + output/output_qemu.ml | 121 +++++++++++++++++++++++------------------- + output/qemuopts-c.c | 12 +++++ + output/qemuopts.ml | 1 + + output/qemuopts.mli | 4 ++ + po/POTFILES-ml | 1 - + v2v/Makefile.am | 5 +- + 18 files changed, 87 insertions(+), 101 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 51370188..4cc87324 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -37,7 +37,6 @@ SUBDIRS += common/mlxml + SUBDIRS += common/mltools + SUBDIRS += common/mlcustomize + SUBDIRS += common/mldrivers +-SUBDIRS += common/mlv2v + SUBDIRS += lib + SUBDIRS += input + SUBDIRS += output +Submodule common 2d42128e..faee2645: +diff --git a/common/.gitignore b/common/.gitignore +index 49915e31..44f49eb6 100644 +--- a/common/.gitignore ++++ b/common/.gitignore +@@ -58,7 +58,6 @@ Makefile.in + /mlutils/.depend + /mlutils/c_utils_unit_tests + /mlutils/oUnit-* +-/mlv2v/.depend + /mlvisit/.depend + /mlvisit/visit_tests + /mlxml/.depend +diff --git a/common/mlcustomize/customize_run.ml b/common/mlcustomize/customize_run.ml +index 1d7c13ea..5ec5ed11 100644 +--- a/common/mlcustomize/customize_run.ml ++++ b/common/mlcustomize/customize_run.ml +@@ -44,21 +44,13 @@ let run (g : G.guestfs) root (ops : ops) = + let debug_logfile () = + try g#download logfile "/dev/stderr" + with exn -> +- warning (f_"log file %s: %s (ignored)") logfile (Printexc.to_string exn) in ++ warning (f_"log file %s: %s (ignored)") logfile (Printexc.to_string exn) ++ in + + (* Useful wrapper for scripts. *) + let do_run ~display ?(warn_failed_no_network = false) cmd = +- let incompatible_fn () = +- let guest_arch = g#inspect_get_arch root in +- error (f_"host cpu (%s) and guest arch (%s) are not compatible, \ +- so you cannot use command line options that involve \ +- running commands in the guest. Use --firstboot scripts \ +- instead.") +- Guestfs_config.host_cpu guest_arch +- in +- + try +- run_in_guest_command g root ~logfile ~incompatible_fn cmd ++ run_in_guest_command g root ~logfile cmd + with + G.Error msg -> + debug_logfile (); +diff --git a/common/mlstdutils/guestfs_config.ml.in b/common/mlstdutils/guestfs_config.ml.in +index 0ab95bd9..84929581 100644 +--- a/common/mlstdutils/guestfs_config.ml.in ++++ b/common/mlstdutils/guestfs_config.ml.in +@@ -22,4 +22,5 @@ let package_version = "@PACKAGE_VERSION@" + let package_version_full = "@PACKAGE_VERSION_FULL@" + let prefix = "@prefix@" + let datadir = prefix ^ "/share" ++let host_os = "@host_os@" + let host_cpu = "@host_cpu@" +diff --git a/common/mlstdutils/guestfs_config.mli b/common/mlstdutils/guestfs_config.mli +index 78df3040..70161c01 100644 +--- a/common/mlstdutils/guestfs_config.mli ++++ b/common/mlstdutils/guestfs_config.mli +@@ -31,5 +31,8 @@ val prefix : string + val datadir : string + (** The configure value [@datadir@] *) + ++val host_os : string ++(** The configure value [@host_os@] *) ++ + val host_cpu : string + (** The configure value [@host_cpu@] *) +diff --git a/common/mltools/tools_utils.ml b/common/mltools/tools_utils.ml +index 23f16c51..1ff72ff3 100644 +--- a/common/mltools/tools_utils.ml ++++ b/common/mltools/tools_utils.ml +@@ -737,11 +737,21 @@ let run_in_guest_command g root ?logfile ?incompatible_fn cmd = + (* Is the host_cpu compatible with the guest arch? ie. Can we + * run commands in this guest? + *) ++ let guest_os = g#inspect_get_type root in ++ let guest_os_compatible = ++ String.is_prefix Guestfs_config.host_os "linux" && ++ guest_os = "linux" in + let guest_arch = g#inspect_get_arch root in + let guest_arch_compatible = guest_arch_compatible guest_arch in +- if not guest_arch_compatible then ( ++ if not guest_os_compatible || not guest_arch_compatible then ( + match incompatible_fn with +- | None -> () ++ | None -> ++ error (f_"host (%s/%s) and guest (%s/%s) are not compatible, \ ++ so you cannot use command line options that involve \ ++ running commands in the guest. Use --firstboot scripts \ ++ instead.") ++ Guestfs_config.host_os Guestfs_config.host_cpu ++ guest_os guest_arch + | Some fn -> fn () + ) + else ( +diff --git a/common/mltools/tools_utils.mli b/common/mltools/tools_utils.mli +index 193ba7b6..4d627676 100644 +--- a/common/mltools/tools_utils.mli ++++ b/common/mltools/tools_utils.mli +@@ -233,9 +233,15 @@ val with_timeout : string -> int -> ?sleep:int -> (unit -> 'a option) -> 'a + val run_in_guest_command : Guestfs.guestfs -> string -> ?logfile:string -> ?incompatible_fn:(unit -> unit) -> string -> unit + (** [run_in_guest_command g root ?incompatible_archs_fn cmd] + runs a command in the guest, which is already mounted for the +- specified [root]. The command is run directly in case the +- architecture of the host and the guest are compatible, optionally +- calling [?incompatible_fn] in case they are not. ++ specified [root]. ++ ++ The command is run directly in the case that the host and guest ++ are compatible. ++ ++ If they are not compatible, the command is not run and an error ++ is printed. However you can override the error by setting ++ [?incompatible_fn], which is called so you can do something else ++ (like install a firstboot script). + + [?logfile] is an optional file in the guest to where redirect + stdout and stderr of the command. *) +diff --git a/common/mlv2v/Makefile.am b/common/mlv2v/Makefile.am +deleted file mode 100644 +index 945f9813..00000000 +--- a/common/mlv2v/Makefile.am ++++ /dev/null +@@ -1,91 +0,0 @@ +-# libguestfs OCaml virt-v2v generated code +-# Copyright (C) 2011-2019 Red Hat Inc. +-# +-# This program is free software; you can redistribute it and/or modify +-# it under the terms of the GNU General Public License as published by +-# the Free Software Foundation; either version 2 of the License, or +-# (at your option) any later version. +-# +-# This program 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 General Public License for more details. +-# +-# You should have received a copy of the GNU General Public License +-# along with this program; if not, write to the Free Software +-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +- +-include $(top_srcdir)/subdir-rules.mk +- +-EXTRA_DIST = \ +- $(generator_built) \ +- $(SOURCES_MLI) \ +- $(SOURCES_ML) \ +- $(SOURCES_C) +- +-generator_built = \ +- uefi.mli \ +- uefi.ml +- +-SOURCES_MLI = \ +- uefi.mli +- +-SOURCES_ML = \ +- uefi.ml +- +-SOURCES_C = \ +- dummy.c +- +-# We pretend that we're building a C library. automake handles the +-# compilation of the C sources for us. At the end we take the C +-# objects and OCaml objects and link them into the OCaml library. +-# This C library is never used. +- +-noinst_LIBRARIES = libmlv2v.a +- +-if !HAVE_OCAMLOPT +-MLV2V_CMA = mlv2v.cma +-else +-MLV2V_CMA = mlv2v.cmxa +-endif +- +-noinst_DATA = $(MLV2V_CMA) +- +-libmlv2v_a_SOURCES = $(SOURCES_C) +-libmlv2v_a_CPPFLAGS = \ +- -DCAML_NAME_SPACE \ +- -I. \ +- -I$(top_builddir) \ +- -I$(shell $(OCAMLC) -where) +-libmlv2v_a_CFLAGS = \ +- $(WARN_CFLAGS) $(WERROR_CFLAGS) \ +- -fPIC +- +-BOBJECTS = $(SOURCES_ML:.ml=.cmo) +-XOBJECTS = $(BOBJECTS:.cmo=.cmx) +- +-OCAMLPACKAGES = \ +- -package str,unix \ +- -I $(builddir) +-OCAMLPACKAGES_TESTS = $(MLV2V_CMA) +- +-OCAMLFLAGS = $(OCAML_FLAGS) $(OCAML_WARN_ERROR) -ccopt '$(CFLAGS)' +- +-if !HAVE_OCAMLOPT +-OBJECTS = $(BOBJECTS) +-else +-OBJECTS = $(XOBJECTS) +-endif +- +-libmlv2v_a_DEPENDENCIES = $(OBJECTS) +- +-$(MLV2V_CMA): $(OBJECTS) libmlv2v.a +- $(OCAMLFIND) mklib $(OCAMLPACKAGES) \ +- $(OBJECTS) $(libmlv2v_a_OBJECTS) -o mlv2v +- +-# OCaml dependencies. +-.depend: $(srcdir)/*.mli $(srcdir)/*.ml +- $(top_builddir)/ocaml-dep.sh $^ +--include .depend +- +-.PHONY: docs +diff --git a/common/mlv2v/dummy.c b/common/mlv2v/dummy.c +deleted file mode 100644 +index ebab6198..00000000 +--- a/common/mlv2v/dummy.c ++++ /dev/null +@@ -1,2 +0,0 @@ +-/* Dummy source, to be used for OCaml-based tools with no C sources. */ +-enum { foo = 1 }; +diff --git a/common/mlv2v/uefi.ml b/common/mlv2v/uefi.ml +deleted file mode 100644 +index 7a2610f2..00000000 +--- a/common/mlv2v/uefi.ml ++++ /dev/null +@@ -1,71 +0,0 @@ +-(* libguestfs generated file +- * WARNING: THIS FILE IS GENERATED +- * from the code in the generator/ subdirectory. +- * ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST. +- * +- * Copyright (C) 2009-2023 Red Hat Inc. +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program 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 General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License along +- * with this program; if not, write to the Free Software Foundation, Inc., +- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +- *) +- +-type uefi_firmware = { +- code : string; +- code_debug : string option; +- vars : string; +- flags : uefi_flags; +-} +-and uefi_flags = uefi_flag list +-and uefi_flag = UEFI_FLAG_SECURE_BOOT_REQUIRED +- +-let uefi_aarch64_firmware = [ +- { code = "/usr/share/AAVMF/AAVMF_CODE.fd"; +- code_debug = Some "/usr/share/AAVMF/AAVMF_CODE.verbose.fd"; +- vars = "/usr/share/AAVMF/AAVMF_VARS.fd"; +- flags = []; +- }; +- { code = "/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw"; +- code_debug = None; +- vars = "/usr/share/edk2/aarch64/vars-template-pflash.raw"; +- flags = []; +- }; +-] +- +-let uefi_x86_64_firmware = [ +- { code = "/usr/share/OVMF/OVMF_CODE.fd"; +- code_debug = None; +- vars = "/usr/share/OVMF/OVMF_VARS.fd"; +- flags = []; +- }; +- { code = "/usr/share/OVMF/OVMF_CODE.secboot.fd"; +- code_debug = None; +- vars = "/usr/share/OVMF/OVMF_VARS.fd"; +- flags = [UEFI_FLAG_SECURE_BOOT_REQUIRED]; +- }; +- { code = "/usr/share/edk2/ovmf/OVMF_CODE.fd"; +- code_debug = None; +- vars = "/usr/share/edk2/ovmf/OVMF_VARS.fd"; +- flags = []; +- }; +- { code = "/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd"; +- code_debug = None; +- vars = "/usr/share/edk2/ovmf/OVMF_VARS.fd"; +- flags = [UEFI_FLAG_SECURE_BOOT_REQUIRED]; +- }; +- { code = "/usr/share/qemu/ovmf-x86_64-code.bin"; +- code_debug = None; +- vars = "/usr/share/qemu/ovmf-x86_64-vars.bin"; +- flags = []; +- }; +-] +diff --git a/common/mlv2v/uefi.mli b/common/mlv2v/uefi.mli +deleted file mode 100644 +index 33789979..00000000 +--- a/common/mlv2v/uefi.mli ++++ /dev/null +@@ -1,35 +0,0 @@ +-(* libguestfs generated file +- * WARNING: THIS FILE IS GENERATED +- * from the code in the generator/ subdirectory. +- * ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST. +- * +- * Copyright (C) 2009-2023 Red Hat Inc. +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program 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 General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License along +- * with this program; if not, write to the Free Software Foundation, Inc., +- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +- *) +- +-(** UEFI paths. *) +- +-type uefi_firmware = { +- code : string; (** code file *) +- code_debug : string option; (** code debug file *) +- vars : string; (** vars template file *) +- flags : uefi_flags; (** flags *) +-} +-and uefi_flags = uefi_flag list +-and uefi_flag = UEFI_FLAG_SECURE_BOOT_REQUIRED +- +-val uefi_aarch64_firmware : uefi_firmware list +-val uefi_x86_64_firmware : uefi_firmware list +diff --git a/common/qemuopts/qemuopts.c b/common/qemuopts/qemuopts.c +index b12fe38f..7dd9136d 100644 +--- a/common/qemuopts/qemuopts.c ++++ b/common/qemuopts/qemuopts.c +@@ -76,13 +76,14 @@ enum qopt_type { + QOPT_FLAG, + QOPT_ARG, + QOPT_ARG_NOQUOTE, ++ QOPT_RAW, + QOPT_ARG_LIST, + }; + + struct qopt { + enum qopt_type type; + char *flag; /* eg. "-m" */ +- char *value; /* Value, for QOPT_ARG, QOPT_ARG_NOQUOTE. */ ++ char *value; /* Value, for QOPT_ARG, QOPT_ARG_NOQUOTE, QOPT_RAW */ + char **values; /* List of values, for QOPT_ARG_LIST. */ + }; + +@@ -353,6 +354,27 @@ qemuopts_add_arg_noquote (struct qemuopts *qopts, const char *flag, + return 0; + } + ++int ++qemuopts_add_raw (struct qemuopts *qopts, const char *str) ++{ ++ struct qopt *qopt; ++ char *value_copy; ++ ++ value_copy = strdup (str); ++ if (value_copy == NULL) ++ return -1; ++ ++ if ((qopt = extend_options (qopts)) == NULL) { ++ free (value_copy); ++ return -1; ++ } ++ ++ qopt->type = QOPT_RAW; ++ qopt->value = value_copy; ++ ++ return 0; ++} ++ + /** + * Start an argument that takes a comma-separated list of fields. + * +@@ -724,6 +746,12 @@ qemuopts_to_channel (struct qemuopts *qopts, FILE *fp) + shell_and_comma_quote (qopts->options[i].values[j], fp); + } + break; ++ ++ case QOPT_RAW: ++ fprintf (fp, "%s%s", ++ nl, qopts->options[i].value); ++ break; ++ + } + } + fputc ('\n', fp); +@@ -769,6 +797,12 @@ qemuopts_to_argv (struct qemuopts *qopts) + case QOPT_ARG: + case QOPT_ARG_LIST: + n += 2; ++ break; ++ ++ /* Raw is incompatible with using argv. */ ++ case QOPT_RAW: ++ errno = EINVAL; ++ return NULL; + } + } + +@@ -845,6 +879,10 @@ qemuopts_to_argv (struct qemuopts *qopts) + } + ret[n][len] = '\0'; + n++; ++ break; ++ ++ case QOPT_RAW: ++ abort (); + } + } + +@@ -924,7 +962,8 @@ qemuopts_to_config_channel (struct qemuopts *qopts, FILE *fp) + return -1; + + case QOPT_ARG_NOQUOTE: +- /* arg_noquote is incompatible with this function. */ ++ case QOPT_RAW: ++ /* arg_noquote and raw are incompatible with this function. */ + errno = EINVAL; + return -1; + +@@ -960,6 +999,7 @@ qemuopts_to_config_channel (struct qemuopts *qopts, FILE *fp) + case QOPT_FLAG: + case QOPT_ARG_NOQUOTE: + case QOPT_ARG: ++ case QOPT_RAW: + abort (); + + case QOPT_ARG_LIST: +diff --git a/common/qemuopts/qemuopts.h b/common/qemuopts/qemuopts.h +index 08efcd9a..29f81475 100644 +--- a/common/qemuopts/qemuopts.h ++++ b/common/qemuopts/qemuopts.h +@@ -31,6 +31,7 @@ extern int qemuopts_add_flag (struct qemuopts *qopts, const char *flag); + extern int qemuopts_add_arg (struct qemuopts *qopts, const char *flag, const char *value); + extern int qemuopts_add_arg_format (struct qemuopts *qopts, const char *flag, const char *fs, ...) __attribute__((format (printf,3,4))); + extern int qemuopts_add_arg_noquote (struct qemuopts *qopts, const char *flag, const char *value); ++extern int qemuopts_add_raw (struct qemuopts *qopts, const char *str); + extern int qemuopts_start_arg_list (struct qemuopts *qopts, const char *flag); + extern int qemuopts_append_arg_list (struct qemuopts *qopts, const char *value); + extern int qemuopts_append_arg_list_format (struct qemuopts *qopts, const char *fs, ...) __attribute__((format (printf,2,3))); +diff --git a/configure.ac b/configure.ac +index 0c8473bd..8d6a506b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -137,7 +137,6 @@ AC_CONFIG_FILES([Makefile + common/mlstdutils/guestfs_config.ml + common/mltools/Makefile + common/mlutils/Makefile +- common/mlv2v/Makefile + common/mlxml/Makefile + common/qemuopts/Makefile + common/utils/Makefile +diff --git a/convert/Makefile.am b/convert/Makefile.am +index 2d34fe7c..2809c555 100644 +--- a/convert/Makefile.am ++++ b/convert/Makefile.am +@@ -83,7 +83,6 @@ OCAMLPACKAGES = \ + -I $(top_builddir)/common/mlpcre \ + -I $(top_builddir)/common/mltools \ + -I $(top_builddir)/common/mldrivers \ +- -I $(top_builddir)/common/mlv2v \ + -I $(top_builddir)/common/mlxml + if HAVE_OCAML_PKG_GETTEXT + OCAMLPACKAGES += -package gettext-stub +@@ -113,7 +112,6 @@ OCAMLLINKFLAGS = \ + mltools.$(MLARCHIVE) \ + mlcustomize.$(MLARCHIVE) \ + mldrivers.$(MLARCHIVE) \ +- mlv2v.$(MLARCHIVE) \ + mlv2vlib.$(MLARCHIVE) \ + $(LINK_CUSTOM_OCAMLC_ONLY) + +diff --git a/in-place/Makefile.am b/in-place/Makefile.am +index 2217ff40..2fecb3a7 100644 +--- a/in-place/Makefile.am ++++ b/in-place/Makefile.am +@@ -64,8 +64,7 @@ OCAMLPACKAGES = \ + -I $(top_builddir)/common/mlxml \ + -I $(top_builddir)/common/mltools \ + -I $(top_builddir)/common/mlcustomize \ +- -I $(top_builddir)/common/mldrivers \ +- -I $(top_builddir)/common/mlv2v ++ -I $(top_builddir)/common/mldrivers + if HAVE_OCAML_PKG_GETTEXT + OCAMLPACKAGES += -package gettext-stub + endif +@@ -101,7 +100,6 @@ OCAMLLINKFLAGS = \ + mllibvirt.$(MLARCHIVE) \ + mlcustomize.$(MLARCHIVE) \ + mldrivers.$(MLARCHIVE) \ +- mlv2v.$(MLARCHIVE) \ + mlv2vlib.$(MLARCHIVE) \ + mlconvert.$(MLARCHIVE) \ + mlinput.$(MLARCHIVE) \ +diff --git a/input/Makefile.am b/input/Makefile.am +index 4153f878..75bee624 100644 +--- a/input/Makefile.am ++++ b/input/Makefile.am +@@ -104,7 +104,6 @@ OCAMLPACKAGES = \ + -I $(top_builddir)/common/mlgettext \ + -I $(top_builddir)/common/mlpcre \ + -I $(top_builddir)/common/mltools \ +- -I $(top_builddir)/common/mlv2v \ + -I $(top_builddir)/common/mlxml + if HAVE_OCAML_PKG_GETTEXT + OCAMLPACKAGES += -package gettext-stub +@@ -132,7 +131,6 @@ OCAMLLINKFLAGS = \ + mlxml.$(MLARCHIVE) \ + mltools.$(MLARCHIVE) \ + mllibvirt.$(MLARCHIVE) \ +- mlv2v.$(MLARCHIVE) \ + mlv2vlib.$(MLARCHIVE) \ + $(LINK_CUSTOM_OCAMLC_ONLY) + +diff --git a/inspector/Makefile.am b/inspector/Makefile.am +index 51ac71f9..172b2dc0 100644 +--- a/inspector/Makefile.am ++++ b/inspector/Makefile.am +@@ -64,8 +64,7 @@ OCAMLPACKAGES = \ + -I $(top_builddir)/common/mlxml \ + -I $(top_builddir)/common/mltools \ + -I $(top_builddir)/common/mlcustomize \ +- -I $(top_builddir)/common/mldrivers \ +- -I $(top_builddir)/common/mlv2v ++ -I $(top_builddir)/common/mldrivers + if HAVE_OCAML_PKG_GETTEXT + OCAMLPACKAGES += -package gettext-stub + endif +@@ -101,7 +100,6 @@ OCAMLLINKFLAGS = \ + mllibvirt.$(MLARCHIVE) \ + mlcustomize.$(MLARCHIVE) \ + mldrivers.$(MLARCHIVE) \ +- mlv2v.$(MLARCHIVE) \ + mlv2vlib.$(MLARCHIVE) \ + mlconvert.$(MLARCHIVE) \ + mlinput.$(MLARCHIVE) \ +diff --git a/lib/Makefile.am b/lib/Makefile.am +index a8776019..5cec771c 100644 +--- a/lib/Makefile.am ++++ b/lib/Makefile.am +@@ -87,7 +87,6 @@ OCAMLPACKAGES = \ + -I $(top_builddir)/common/mlstdutils \ + -I $(top_builddir)/common/mltools \ + -I $(top_builddir)/common/mlutils \ +- -I $(top_builddir)/common/mlv2v \ + -I $(top_builddir)/common/mlxml + OCAMLPACKAGES_TESTS = $(MLV2VLIB_CMA) + +diff --git a/lib/utils.ml b/lib/utils.ml +index 4c9b7415..c4cfd89b 100644 +--- a/lib/utils.ml ++++ b/lib/utils.ml +@@ -69,26 +69,6 @@ let qemu_supports_sound_card = function + | Types.USBAudio + -> false + +-(* Find the UEFI firmware. *) +-let find_uefi_firmware guest_arch = +- let files = +- (* The lists of firmware are actually defined in common/utils/uefi.c. *) +- match guest_arch with +- | "x86_64" -> Uefi.uefi_x86_64_firmware +- | "aarch64" -> Uefi.uefi_aarch64_firmware +- | arch -> +- error (f_"don’t know how to convert UEFI guests for architecture %s") +- guest_arch in +- let rec loop = function +- | [] -> +- error (f_"cannot find firmware for UEFI guests.\n\nYou probably \ +- need to install OVMF (x86-64), or AAVMF (aarch64)") +- | ({ Uefi.code; vars = vars_template } as ret) :: rest -> +- if Sys.file_exists code && Sys.file_exists vars_template then ret +- else loop rest +- in +- loop files +- + let compare_app2_versions app1 app2 = + let i = compare app1.Guestfs.app2_epoch app2.Guestfs.app2_epoch in + if i <> 0 then i +diff --git a/lib/utils.mli b/lib/utils.mli +index 46d05306..afe61a4e 100644 +--- a/lib/utils.mli ++++ b/lib/utils.mli +@@ -36,10 +36,6 @@ val kvm_arch : string -> string + val qemu_supports_sound_card : Types.source_sound_model -> bool + (** Does qemu support the given sound card? *) + +-val find_uefi_firmware : string -> Uefi.uefi_firmware +-(** Find the UEFI firmware for the guest architecture. +- This cannot return an error, it calls [error] and fails instead. *) +- + val compare_app2_versions : Guestfs.application2 -> Guestfs.application2 -> int + (** Compare two app versions. *) + +diff --git a/ocaml-dep.sh.in b/ocaml-dep.sh.in +index 7f3130e5..565f880f 100755 +--- a/ocaml-dep.sh.in ++++ b/ocaml-dep.sh.in +@@ -41,7 +41,6 @@ common/mlprogress + common/mlstdutils + common/mltools + common/mlutils +-common/mlv2v + common/mlvisit + common/mlxml + lib +diff --git a/output/Makefile.am b/output/Makefile.am +index 1e6799c3..f736d52d 100644 +--- a/output/Makefile.am ++++ b/output/Makefile.am +@@ -157,7 +157,6 @@ OCAMLPACKAGES = \ + -I $(top_builddir)/common/mlgettext \ + -I $(top_builddir)/common/mlpcre \ + -I $(top_builddir)/common/mltools \ +- -I $(top_builddir)/common/mlv2v \ + -I $(top_builddir)/common/mlxml + if HAVE_OCAML_PKG_GETTEXT + OCAMLPACKAGES += -package gettext-stub +@@ -188,7 +187,6 @@ OCAMLLINKFLAGS = \ + mlxml.$(MLARCHIVE) \ + mltools.$(MLARCHIVE) \ + mllibvirt.$(MLARCHIVE) \ +- mlv2v.$(MLARCHIVE) \ + mlv2vlib.$(MLARCHIVE) \ + $(LINK_CUSTOM_OCAMLC_ONLY) + +diff --git a/output/output_qemu.ml b/output/output_qemu.ml +index b6f24565..fd0182d6 100644 +--- a/output/output_qemu.ml ++++ b/output/output_qemu.ml +@@ -105,30 +105,56 @@ module QEMU = struct + + let { guestcaps; target_buses; target_firmware } = target_meta in + ++ (* Start the shell script. Write it to a temporary file ++ * which we rename at the end. ++ *) + let file = output_storage // output_name ^ ".sh" in ++ let tmpfile = file ^ ".tmp" in ++ On_exit.unlink tmpfile; + +- let uefi_firmware = +- match target_firmware with +- | TargetBIOS -> None +- | TargetUEFI -> Some (find_uefi_firmware guestcaps.gcaps_arch) in +- let machine, secure_boot_required = +- match guestcaps.gcaps_machine, uefi_firmware with +- | _, Some { Uefi.flags } +- when List.mem Uefi.UEFI_FLAG_SECURE_BOOT_REQUIRED flags -> +- (* Force machine type to Q35 because PC does not support +- * secure boot. We must remove this when we get the +- * correct machine type from libosinfo in future. XXX +- *) +- Q35, true +- | machine, _ -> +- machine, false in +- let smm = secure_boot_required in ++ let chan = open_out tmpfile in ++ let fpf fs = fprintf chan fs in ++ fpf "#!/bin/sh -\n"; ++ fpf "\n"; + +- let machine_str = +- match machine with +- | I440FX -> "pc" +- | Q35 -> "q35" +- | Virt -> "virt" in ++ (* Allow the user to override our choice of machine type. *) ++ let () = ++ let machine_str = ++ match guestcaps.gcaps_machine with ++ | I440FX -> "pc" ++ | Q35 -> "q35" ++ | Virt -> "virt" in ++ fpf "machine=%s\n" machine_str; ++ fpf "\n" in ++ ++ (* If the firmware is UEFI, locate the OVMF files. *) ++ (match target_firmware with ++ | TargetBIOS -> () ++ | TargetUEFI -> ++ let prefix = ++ match guestcaps.gcaps_arch with ++ | "x86_64" -> ++ fpf "uefi_dir=/usr/share/OVMF\n"; "OVMF" ++ | "aarch64" -> ++ fpf "uefi_dir=/usr/share/AAVMF\n"; "AAVMF" ++ | arch -> ++ error (f_"don’t know how to convert UEFI guests \ ++ for architecture %s") ++ arch in ++ fpf "uefi_code=\"$( \ ++ find $uefi_dir -name '%s_CODE*.fd' -print -quit )\"\n" ++ prefix; ++ fpf "uefi_vars_template=\"$( \ ++ find $uefi_dir -name '%s_VARS.fd' -print -quit )\"\n" ++ prefix; ++ fpf "\n"; ++ fpf "# Make a copy of the UEFI variables template\n"; ++ fpf "uefi_vars=\"$(mktemp)\"\n"; ++ fpf "cp \"$uefi_vars_template\" \"$uefi_vars\"\n"; ++ fpf "\n"; ++ fpf "# You may need to set this 'on' to use secure boot\n"; ++ fpf "smm=off\n"; ++ ); + + (* Construct the command line. Note that the [Qemuopts] + * module deals with shell and qemu comma quoting. +@@ -152,20 +178,17 @@ module QEMU = struct + + if not guestcaps.gcaps_rtc_utc then arg "-rtc" "base=localtime"; + +- arg_list "-machine" (machine_str :: +- (if smm then ["smm=on"] else []) @ +- ["accel=kvm:tcg"]); ++ arg_noquote "-machine" "$machine${smm:+,smm=$smm},accel=kvm:tcg"; + +- (match uefi_firmware with +- | None -> () +- | Some { Uefi.code } -> +- if secure_boot_required then +- arg_list "-global" +- ["driver=cfi.pflash01"; "property=secure"; "value=on"]; +- arg_list "-drive" +- ["if=pflash"; "format=raw"; "file=" ^ code; "readonly=on"]; +- arg_noquote "-drive" "if=pflash,format=raw,file=\"$uefi_vars\""; +- ); ++ fpf "if [ \"$uefi_code\" != \"\" ]; then\n"; ++ fpf " uefi_args=\"\\\n"; ++ fpf " -global driver=cfi.pflash01,property=secure,value=$smm \\\n"; ++ fpf " -drive if=pflash,format=raw,file=$uefi_code,readonly=on \\\n"; ++ fpf " -drive if=pflash,format=raw,file=$uefi_vars \\\n"; ++ fpf " \"\n"; ++ fpf "fi\n"; ++ fpf "\n"; ++ Qemuopts.raw cmd "$uefi_args"; + + arg "-m" (Int64.to_string (source.s_memory /^ 1024L /^ 1024L)); + +@@ -209,7 +232,7 @@ module QEMU = struct + Array.exists floppy_filter target_buses.target_floppy_bus in + + if ide_ctrl_needed then ( +- match machine with ++ match guestcaps.gcaps_machine with + | I440FX -> () + (* The PC machine has a built-in controller of type "piix3-ide" + * providing buses "ide.0" and "ide.1", with each bus fitting two +@@ -232,7 +255,7 @@ module QEMU = struct + arg_list "-device" [ "virtio-scsi-pci"; "id=scsi0" ]; + + if floppy_ctrl_needed then ( +- match machine with ++ match guestcaps.gcaps_machine with + | I440FX -> () + (* The PC machine has a built-in controller of type "isa-fdc" + * providing bus "floppy-bus.0", fitting two devices. +@@ -283,7 +306,7 @@ module QEMU = struct + *) + let backend_name = sprintf "drive-ide-%d" frontend_ctr + and ide_bus, ide_unit = +- match machine with ++ match guestcaps.gcaps_machine with + | I440FX -> frontend_ctr / 2, frontend_ctr mod 2 + | Q35 -> frontend_ctr, 0 + | Virt -> 0, 0 (* should never happen, see warning above *) in +@@ -450,25 +473,13 @@ module QEMU = struct + if inspect.i_type = "linux" then + arg "-serial" "stdio"; + +- (* Write the qemu script. *) +- with_open_out file ( +- fun chan -> +- let fpf fs = fprintf chan fs in +- fpf "#!/bin/sh -\n"; +- fpf "\n"; +- +- (match uefi_firmware with +- | None -> () +- | Some { Uefi.vars = vars_template } -> +- fpf "# Make a copy of the UEFI variables template\n"; +- fpf "uefi_vars=\"$(mktemp)\"\n"; +- fpf "cp %s \"$uefi_vars\"\n" (quote vars_template); +- fpf "\n" +- ); +- +- Qemuopts.to_chan cmd chan +- ); ++ (* Write the qemu command. *) ++ Qemuopts.to_chan cmd chan; + ++ (* Finish off by renaming the temporary file to the final file ++ * and making it executable. ++ *) ++ Unix.rename tmpfile file; + Unix.chmod file 0o755; + + (* If -oo qemu-boot option was specified then we should boot the guest. *) +diff --git a/output/qemuopts-c.c b/output/qemuopts-c.c +index 03c40206..1d080737 100644 +--- a/output/qemuopts-c.c ++++ b/output/qemuopts-c.c +@@ -176,6 +176,18 @@ guestfs_int_qemuopts_arg_list (value qoptsv, value flagv, value valuesv) + CAMLreturn (Val_unit); + } + ++value ++guestfs_int_qemuopts_raw (value qoptsv, value strv) ++{ ++ CAMLparam2 (qoptsv, strv); ++ struct qemuopts *qopts = Qopts_val (qoptsv); ++ ++ if (qemuopts_add_raw (qopts, String_val (strv)) == -1) ++ unix_error (errno, (char *) "qemuopts_add_raw", strv); ++ ++ CAMLreturn (Val_unit); ++} ++ + value + guestfs_int_qemuopts_to_script (value qoptsv, value strv) + { +diff --git a/output/qemuopts.ml b/output/qemuopts.ml +index 1ba57dba..bc4e33d7 100644 +--- a/output/qemuopts.ml ++++ b/output/qemuopts.ml +@@ -25,6 +25,7 @@ external flag : t -> string -> unit = "guestfs_int_qemuopts_flag" + external arg : t -> string -> string -> unit = "guestfs_int_qemuopts_arg" + external arg_noquote : t -> string -> string -> unit = "guestfs_int_qemuopts_arg_noquote" + external arg_list : t -> string -> string list -> unit = "guestfs_int_qemuopts_arg_list" ++external raw : t -> string -> unit = "guestfs_int_qemuopts_raw" + external to_script : t -> string -> unit = "guestfs_int_qemuopts_to_script" + + external _to_chan : t -> Unix.file_descr -> unit = "guestfs_int_qemuopts_to_chan" +diff --git a/output/qemuopts.mli b/output/qemuopts.mli +index 5c39a32f..bd65405f 100644 +--- a/output/qemuopts.mli ++++ b/output/qemuopts.mli +@@ -53,6 +53,10 @@ val arg_list : t -> string -> string list -> unit + + This does both qemu comma-quoting and shell-quoting as required. *) + ++val raw : t -> string -> unit ++(** [raw "stuff"] adds [stuff] to the command line completely ++ unquoted. Use with care. *) ++ + val to_script : t -> string -> unit + (** [to_script t "./file.sh"] writes the resulting command line to + a file. The file begins with [#!/bin/sh] and is chmod 0755. *) +diff --git a/po/POTFILES-ml b/po/POTFILES-ml +index e88a18b0..7f1d1cdb 100644 +--- a/po/POTFILES-ml ++++ b/po/POTFILES-ml +@@ -42,7 +42,6 @@ common/mltools/urandom.ml + common/mltools/xpath_helpers.ml + common/mlutils/c_utils.ml + common/mlutils/unix_utils.ml +-common/mlv2v/uefi.ml + common/mlxml/xml.ml + in-place/in_place.ml + input/OVA.ml +diff --git a/v2v/Makefile.am b/v2v/Makefile.am +index d609ab02..9378eb89 100644 +--- a/v2v/Makefile.am ++++ b/v2v/Makefile.am +@@ -67,8 +67,7 @@ OCAMLPACKAGES = \ + -I $(top_builddir)/common/mlxml \ + -I $(top_builddir)/common/mltools \ + -I $(top_builddir)/common/mlcustomize \ +- -I $(top_builddir)/common/mldrivers \ +- -I $(top_builddir)/common/mlv2v ++ -I $(top_builddir)/common/mldrivers + if HAVE_OCAML_PKG_GETTEXT + OCAMLPACKAGES += -package gettext-stub + endif +@@ -104,7 +103,6 @@ OCAMLLINKFLAGS = \ + mllibvirt.$(MLARCHIVE) \ + mlcustomize.$(MLARCHIVE) \ + mldrivers.$(MLARCHIVE) \ +- mlv2v.$(MLARCHIVE) \ + mlv2vlib.$(MLARCHIVE) \ + mlconvert.$(MLARCHIVE) \ + mlinput.$(MLARCHIVE) \ +@@ -164,7 +162,6 @@ v2v_unit_tests_DEPENDENCIES = \ + ../common/mltools/mltools.$(MLARCHIVE) \ + ../common/mlcustomize/mlcustomize.$(MLARCHIVE) \ + ../common/mldrivers/mldrivers.$(MLARCHIVE) \ +- ../common/mlv2v/mlv2v.$(MLARCHIVE) \ + $(top_srcdir)/ocaml-link.sh + v2v_unit_tests_LINK = \ + $(top_srcdir)/ocaml-link.sh -cclib '$(OCAMLCLIBS)' -- \ diff --git a/0018-o-qemu-Add-set-e-x-at-the-top-of-the-output-script.patch b/0018-o-qemu-Add-set-e-x-at-the-top-of-the-output-script.patch new file mode 100644 index 0000000..f788ee9 --- /dev/null +++ b/0018-o-qemu-Add-set-e-x-at-the-top-of-the-output-script.patch @@ -0,0 +1,32 @@ +From f43d92473d3da0a5f6a2da6e44ca8416ad824d8f Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Fri, 15 Nov 2024 14:04:48 +0000 +Subject: [PATCH] -o qemu: Add set -e, -x at the top of the output script + +This adds: + + set -e + #set -x + +The second command is commented so that users can enable it if they +want to see the output. + +(cherry picked from commit e09aaad7e787803ff5e383fa6b5276c888b42ef5) +--- + output/output_qemu.ml | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/output/output_qemu.ml b/output/output_qemu.ml +index fd0182d6..b0c2ff01 100644 +--- a/output/output_qemu.ml ++++ b/output/output_qemu.ml +@@ -116,6 +116,9 @@ module QEMU = struct + let fpf fs = fprintf chan fs in + fpf "#!/bin/sh -\n"; + fpf "\n"; ++ fpf "set -e\n"; ++ fpf "#set -x\n"; ++ fpf "\n"; + + (* Allow the user to override our choice of machine type. *) + let () = diff --git a/0019-v2v-Implement-parallel-N-for-parallel-disk-copies.patch b/0019-v2v-Implement-parallel-N-for-parallel-disk-copies.patch new file mode 100644 index 0000000..45e6806 --- /dev/null +++ b/0019-v2v-Implement-parallel-N-for-parallel-disk-copies.patch @@ -0,0 +1,276 @@ +From 037a603c2d5cf9d2d5f8157116dbf14945277dc2 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 2 Dec 2024 15:22:43 +0000 +Subject: [PATCH] v2v: Implement --parallel=N for parallel disk copies + +When set, run up to N copies of nbdcopy in parallel. This only +applies for guests with multiple disks. + +The default, as for all older versions of virt-v2v, is to copy disks +one at a time. + +(cherry picked from commit fd1148f79581b148525eb12154aef7603ccf0baa) +--- + docs/virt-v2v.pod | 13 +++++++ + lib/utils.ml | 6 ++++ + lib/utils.mli | 4 +++ + tests/Makefile.am | 2 ++ + tests/test-v2v-i-disk-parallel.sh | 54 +++++++++++++++++++++++++++++ + v2v/v2v.ml | 56 +++++++++++++++++++++++++------ + 6 files changed, 125 insertions(+), 10 deletions(-) + create mode 100755 tests/test-v2v-i-disk-parallel.sh + +diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod +index 74581463..216e617d 100644 +--- a/docs/virt-v2v.pod ++++ b/docs/virt-v2v.pod +@@ -749,6 +749,19 @@ C. + You will get an error if virt-v2v is unable to mount/write to the + Export Storage Domain. + ++=item B<--parallel> N ++ ++Enable parallel copying if the guest has multiple disks. I is the ++maximum number of parallel L instances to run. ++ ++The default is to run at most one instance of nbdcopy ++(ie. I<--parallel=1>). All versions of virt-v2v E 2.7.2 also did ++disk copies one at a time. ++ ++Within each guest disk, nbdcopy tries to copy in parallel if the ++underlying endpoints support that. This is not affected by this ++command line option. See the L manual page for details. ++ + =item B<--print-source> + + Print information about the source guest and stop. This option is +diff --git a/lib/utils.ml b/lib/utils.ml +index c4cfd89b..f2da9e80 100644 +--- a/lib/utils.ml ++++ b/lib/utils.ml +@@ -29,6 +29,12 @@ let large_tmpdir = + try Sys.getenv "VIRT_V2V_TMPDIR" + with Not_found -> (open_guestfs ())#get_cachedir () + ++let string_of_process_status = function ++ | Unix.WEXITED 0 -> s_"success" ++ | WEXITED i -> sprintf (f_"exited with non-zero error code %d") i ++ | WSIGNALED i -> sprintf (f_"signalled by signal %d") i ++ | WSTOPPED i -> sprintf (f_"stopped by signal %d") i ++ + (* Is SELinux enabled and enforcing on the host? *) + let have_selinux = + 0 = Sys.command "getenforce 2>/dev/null | grep -isq Enforcing" +diff --git a/lib/utils.mli b/lib/utils.mli +index afe61a4e..e7ee13d1 100644 +--- a/lib/utils.mli ++++ b/lib/utils.mli +@@ -23,6 +23,10 @@ val large_tmpdir : string + such as overlays in this directory. Small temporary files can + use the default behaviour eg. of {!Filename.temp_file} *) + ++val string_of_process_status : Unix.process_status -> string ++(** Convert a process status (such as returned by {!Unix.wait}) into ++ a printable string. *) ++ + val have_selinux : bool + (** True if SELinux is enabled and enforcing on the host. *) + +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 8a710b99..fa5bb4f1 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -76,6 +76,7 @@ TESTS = \ + test-v2v-cdrom.sh \ + test-v2v-floppy.sh \ + test-v2v-i-disk.sh \ ++ test-v2v-i-disk-parallel.sh \ + test-v2v-i-ova.sh \ + test-v2v-inspector.sh \ + test-v2v-mac.sh \ +@@ -189,6 +190,7 @@ EXTRA_DIST += \ + test-v2v-floppy.expected \ + test-v2v-floppy.sh \ + test-v2v-i-disk.sh \ ++ test-v2v-i-disk-parallel.sh \ + test-v2v-i-ova-as-root.ovf \ + test-v2v-i-ova-as-root.sh \ + test-v2v-i-ova-bad-sha1.sh \ +diff --git a/tests/test-v2v-i-disk-parallel.sh b/tests/test-v2v-i-disk-parallel.sh +new file mode 100755 +index 00000000..a6470fdd +--- /dev/null ++++ b/tests/test-v2v-i-disk-parallel.sh +@@ -0,0 +1,54 @@ ++#!/bin/bash - ++# libguestfs virt-v2v test script ++# Copyright (C) 2014-2024 Red Hat Inc. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program 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 General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program; if not, write to the Free Software ++# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++ ++# Test --parallel option. ++ ++set -e ++ ++source ./functions.sh ++set -e ++set -x ++ ++skip_if_skipped ++windows=../test-data/phony-guests/windows.img ++requires test -f $windows ++ ++export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" ++ ++d=test-v2v-i-disk-parallel.d ++rm -rf $d ++cleanup_fn rm -rf $d ++mkdir $d ++ ++truncate -s $((100*1024*1024)) $d/disk-2.img $d/disk-3.img $d/disk-4.img ++ ++$VG virt-v2v --debug-gc \ ++ --parallel=2 \ ++ -i disk \ ++ $windows \ ++ $d/disk-2.img \ ++ $d/disk-3.img \ ++ $d/disk-4.img \ ++ -o local -os $d ++ ++# Test the libvirt XML metadata and output disks were created. ++test -f $d/windows.xml ++test -f $d/windows-sda ++test -f $d/windows-sdb ++test -f $d/windows-sdc ++test -f $d/windows-sdd +diff --git a/v2v/v2v.ml b/v2v/v2v.ml +index 2fdaf40b..68502884 100644 +--- a/v2v/v2v.ml ++++ b/v2v/v2v.ml +@@ -79,6 +79,7 @@ let rec main () = + ) + in + ++ let parallel = ref 1 in + let network_map = Networks.create () in + let static_ips = ref [] in + let rec add_network str = +@@ -263,6 +264,8 @@ let rec main () = + s_"Set output storage location"; + [ L"password-file" ], Getopt.String ("filename", set_string_option_once "-ip" input_password), + s_"Same as ‘-ip filename’"; ++ [ L"parallel" ], Getopt.Set_int ("N", parallel), ++ s_"Run up to N instances of nbdcopy in parallel"; + [ L"print-source" ], Getopt.Set print_source, + s_"Print source and stop"; + [ L"root" ], Getopt.String ("ask|... ", set_root_choice), +@@ -365,6 +368,7 @@ read the man page virt-v2v(1). + | `Preallocated -> Types.Preallocated in + let output_mode = !output_mode in + let output_name = !output_name in ++ let parallel = !parallel in + let print_source = !print_source in + let root_choice = !root_choice in + let static_ips = !static_ips in +@@ -386,6 +390,7 @@ read the man page virt-v2v(1). + pr "mac-option\n"; + pr "bandwidth-option\n"; + pr "mac-ip-option\n"; ++ pr "parallel-option\n"; + pr "customize-ops\n"; + pr "input:disk\n"; + pr "input:libvirt\n"; +@@ -583,12 +588,15 @@ read the man page virt-v2v(1). + else + List.rev acc + in +- let disks = loop [] 0 in +- let nr_disks = List.length disks in ++ let disks = ref (loop [] 0) in ++ let nr_disks = List.length !disks in + + (* Copy the disks. *) +- List.iter ( +- fun (i, input_socket, output_socket) -> ++ let nbdcopy_pids = ref [] in ++ let rec copy_loop () = ++ if List.length !nbdcopy_pids < parallel && !disks <> [] then ( ++ (* Schedule another nbdcopy process. *) ++ let i, input_socket, output_socket = List.pop_front disks in + message (f_"Copying disk %d/%d") (i+1) nr_disks; + + let request_size = Output_module.request_size +@@ -608,8 +616,33 @@ read the man page virt-v2v(1). + flush Stdlib.stderr + ); + +- nbdcopy ?request_size output_alloc input_uri output_uri +- ) disks; ++ let pid = nbdcopy ?request_size output_alloc input_uri output_uri in ++ List.push_front pid nbdcopy_pids; ++ ++ copy_loop (); ++ ) ++ else if !nbdcopy_pids <> [] then ( ++ (* Wait for one nbdcopy instance to exit. *) ++ let pid, status = wait () in ++ (* If this internal error turns up in real world scenarios then ++ * we may need to change the [wait] above so it only waits on ++ * the nbdcopy PIDs. ++ *) ++ if not (List.mem pid !nbdcopy_pids) then ++ error (f_"internal error: wait returned unexpected \ ++ process ID %d status \"%s\"") ++ pid (string_of_process_status status); ++ nbdcopy_pids := List.filter ((<>) pid) !nbdcopy_pids; ++ (match status with ++ | WEXITED 0 -> copy_loop () ++ | WEXITED _ | WSIGNALED _ | WSTOPPED _ -> ++ error "nbdcopy %s" (string_of_process_status status) ++ ); ++ ) ++ in ++ copy_loop (); ++ assert (!disks == []); ++ assert (!nbdcopy_pids == []); + + (* End of copying phase. *) + unlink (v2vdir // "copy"); +@@ -647,6 +680,7 @@ and check_host_free_space () = + \"Minimum free space check in the host\".") + large_tmpdir (human_size free_space) + ++(* Start nbdcopy as a background process, returning the PID. *) + and nbdcopy ?request_size output_alloc input_uri output_uri = + (* XXX It's possible that some output modes know whether + * --target-is-zero which would be a useful optimization. +@@ -674,10 +708,12 @@ and nbdcopy ?request_size output_alloc input_uri output_uri = + if not (quiet ()) then List.push_back cmd "--progress"; + if output_alloc = Types.Preallocated then List.push_back cmd "--allocated"; + +- let cmd = !cmd in +- +- if run_command cmd <> 0 then +- error (f_"nbdcopy command failed, see earlier error messages") ++ let args = Array.of_list !cmd in ++ match fork () with ++ | 0 -> ++ (* Child process (nbdcopy). *) ++ execvp "nbdcopy" args ++ | pid -> pid + + (* Run nbdinfo on a URI and collect the information. However don't + * fail if nbdinfo is not installed since this is just used for debugging. diff --git a/0020-tests-Rename-all-test-v2v-to-test.patch b/0020-tests-Rename-all-test-v2v-to-test.patch new file mode 100644 index 0000000..f974844 --- /dev/null +++ b/0020-tests-Rename-all-test-v2v-to-test.patch @@ -0,0 +1,2145 @@ +From d368bd7024994b0486ce8026965498f9316b91b2 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 5 Dec 2024 14:40:39 +0000 +Subject: [PATCH] tests: Rename all test-v2v-* to test-* + +When virt-v2v was part of libguestfs, before it was a separate +component, we prefixed all test names with 'test-v2v-*' in order to +distinguish them from tests for other components. Since virt-v2v is +now separate, we no longer need to do this. Thus we can remove the +'-v2v-' part of every test name, which reduces typing and makes the +names nicer. + +Note that we cannot remove the 'test-' prefix. This is because +automake reserves an unspecified list of words (eg. "compile") and +tests using those names will fail. Keeping the 'test-' prefix avoids +this. + +(cherry picked from commit 67d6fd45f3f9521523aac5650dcdd7b756dc3547) +--- + .gitignore | 14 +- + configure.ac | 12 +- + docs/Makefile.am | 4 +- + docs/{test-v2v-docs.sh => test-docs.sh} | 0 + output/Makefile.am | 4 +- + ...python-syntax.sh => test-python-syntax.sh} | 0 + tests/Makefile.am | 354 +++++++++--------- + ...es.sh => test-bad-networks-and-bridges.sh} | 2 +- + ...v-block-driver.sh => test-block-driver.sh} | 2 +- + ...v2v-cdrom.expected => test-cdrom.expected} | 0 + tests/{test-v2v-cdrom.sh => test-cdrom.sh} | 6 +- + ...est-v2v-cdrom.xml.in => test-cdrom.xml.in} | 0 + ...conversion-of.sh => test-conversion-of.sh} | 0 + ...est-v2v-customize.sh => test-customize.sh} | 2 +- + ...ion.sh => test-fedora-btrfs-conversion.sh} | 0 + ...onversion.sh => test-fedora-conversion.sh} | 0 + ... => test-fedora-luks-on-lvm-conversion.sh} | 0 + ... => test-fedora-lvm-on-luks-conversion.sh} | 0 + ...ersion.sh => test-fedora-md-conversion.sh} | 0 + ...v-floppy.expected => test-floppy.expected} | 0 + tests/{test-v2v-floppy.sh => test-floppy.sh} | 6 +- + ...t-v2v-floppy.xml.in => test-floppy.xml.in} | 0 + ...sk-parallel.sh => test-i-disk-parallel.sh} | 2 +- + tests/{test-v2v-i-disk.sh => test-i-disk.sh} | 2 +- + ...ova-as-root.ovf => test-i-ova-as-root.ovf} | 0 + ...i-ova-as-root.sh => test-i-ova-as-root.sh} | 4 +- + ...ova-bad-sha1.sh => test-i-ova-bad-sha1.sh} | 4 +- + ...bad-sha256.sh => test-i-ova-bad-sha256.sh} | 4 +- + ...checksums.ovf => test-i-ova-checksums.ovf} | 0 + ...a-directory.sh => test-i-ova-directory.sh} | 4 +- + ...s.expected => test-i-ova-formats.expected} | 0 + ...ova-formats.ovf => test-i-ova-formats.ovf} | 0 + ...i-ova-formats.sh => test-i-ova-formats.sh} | 12 +- + ...cksums.sh => test-i-ova-good-checksums.sh} | 4 +- + ...ova-gz.expected => test-i-ova-gz.expected} | 0 + ...est-v2v-i-ova-gz.ovf => test-i-ova-gz.ovf} | 0 + ...{test-v2v-i-ova-gz.sh => test-i-ova-gz.sh} | 8 +- + ...st1.sh => test-i-ova-invalid-manifest1.sh} | 4 +- + ...st2.sh => test-i-ova-invalid-manifest2.sh} | 4 +- + ...expected => test-i-ova-snapshots.expected} | 0 + ...pected2 => test-i-ova-snapshots.expected2} | 0 + ...snapshots.ovf => test-i-ova-snapshots.ovf} | 0 + ...a-snapshots.sh => test-i-ova-snapshots.sh} | 10 +- + ...xpected => test-i-ova-subfolders.expected} | 0 + ...ected2 => test-i-ova-subfolders.expected2} | 0 + ...bfolders.ovf => test-i-ova-subfolders.ovf} | 0 + ...subfolders.sh => test-i-ova-subfolders.sh} | 8 +- + ...a-tar.expected => test-i-ova-tar.expected} | 0 + ...tar.expected2 => test-i-ova-tar.expected2} | 0 + ...t-v2v-i-ova-tar.ovf => test-i-ova-tar.ovf} | 0 + ...est-v2v-i-ova-tar.sh => test-i-ova-tar.sh} | 10 +- + ...expected => test-i-ova-two-disks.expected} | 0 + ...pected2 => test-i-ova-two-disks.expected2} | 0 + ...two-disks.ovf => test-i-ova-two-disks.ovf} | 0 + ...a-two-disks.sh => test-i-ova-two-disks.sh} | 10 +- + tests/{test-v2v-i-ova.ovf => test-i-ova.ovf} | 0 + tests/{test-v2v-i-ova.sh => test-i-ova.sh} | 6 +- + tests/{test-v2v-i-ova.xml => test-i-ova.xml} | 0 + ...i-vmx-1.expected => test-i-vmx-1.expected} | 0 + ...{test-v2v-i-vmx-1.vmx => test-i-vmx-1.vmx} | 0 + ...i-vmx-2.expected => test-i-vmx-2.expected} | 0 + ...{test-v2v-i-vmx-2.vmx => test-i-vmx-2.vmx} | 0 + ...i-vmx-3.expected => test-i-vmx-3.expected} | 0 + ...{test-v2v-i-vmx-3.vmx => test-i-vmx-3.vmx} | 0 + ...i-vmx-4.expected => test-i-vmx-4.expected} | 0 + ...{test-v2v-i-vmx-4.vmx => test-i-vmx-4.vmx} | 0 + ...i-vmx-5.expected => test-i-vmx-5.expected} | 0 + ...{test-v2v-i-vmx-5.vmx => test-i-vmx-5.vmx} | 0 + ...i-vmx-6.expected => test-i-vmx-6.expected} | 0 + ...{test-v2v-i-vmx-6.vmx => test-i-vmx-6.vmx} | 0 + ...i-vmx-7.expected => test-i-vmx-7.expected} | 0 + ...{test-v2v-i-vmx-7.vmx => test-i-vmx-7.vmx} | 0 + tests/{test-v2v-i-vmx.sh => test-i-vmx.sh} | 16 +- + ...{test-v2v-in-place.sh => test-in-place.sh} | 2 +- + ...est-v2v-inspector.sh => test-inspector.sh} | 2 +- + ...k-io-query.sh => test-it-vddk-io-query.sh} | 2 +- + ...mac-expected.xml => test-mac-expected.xml} | 0 + tests/{test-v2v-mac.sh => test-mac.sh} | 6 +- + .../{test-v2v-mac.xml.in => test-mac.xml.in} | 0 + ...e-readable.sh => test-machine-readable.sh} | 8 +- + ...=> test-networks-and-bridges-expected.xml} | 0 + ...ridges.sh => test-networks-and-bridges.sh} | 6 +- + ...ml.in => test-networks-and-bridges.xml.in} | 0 + ...{test-v2v-o-glance.sh => test-o-glance.sh} | 0 + ...rt-fedora.sh => test-o-kubevirt-fedora.sh} | 4 +- + ...d => test-o-kubevirt-fedora.yaml.expected} | 0 + ...-windows.sh => test-o-kubevirt-windows.sh} | 4 +- + ... => test-o-kubevirt-windows.yaml.expected} | 0 + ...est-v2v-o-libvirt.sh => test-o-libvirt.sh} | 2 +- + ...ed.sh => test-o-local-qcow2-compressed.sh} | 2 +- + tests/{test-v2v-o-null.sh => test-o-null.sh} | 0 + ...v2v-o-openstack.sh => test-o-openstack.sh} | 4 +- + tests/{test-v2v-o-qemu.sh => test-o-qemu.sh} | 2 +- + .../imageio.py | 2 +- + .../ovirtsdk4/__init__.py | 2 +- + .../ovirtsdk4/types.py | 2 +- + ...query.sh => test-o-rhv-upload-oo-query.sh} | 2 +- + ...v-o-rhv-upload.sh => test-o-rhv-upload.sh} | 8 +- + ...v.ovf.expected => test-o-rhv.ovf.expected} | 0 + tests/{test-v2v-o-rhv.sh => test-o-rhv.sh} | 4 +- + ...sm-oo-query.sh => test-o-vdsm-oo-query.sh} | 2 +- + ...ected => test-o-vdsm-options.ovf.expected} | 0 + ...vdsm-options.sh => test-o-vdsm-options.sh} | 4 +- + ...ption-qcow2.sh => test-oa-option-qcow2.sh} | 2 +- + ...oa-option-raw.sh => test-oa-option-raw.sh} | 2 +- + ...est-v2v-of-option.sh => test-of-option.sh} | 2 +- + ...est-v2v-on-option.sh => test-on-option.sh} | 2 +- + ...ce.expected => test-print-source.expected} | 0 + ...v-print-source.sh => test-print-source.sh} | 6 +- + ...source.xml.in => test-print-source.xml.in} | 0 + tests/{test-v2v-sound.sh => test-sound.sh} | 4 +- + ...est-v2v-sound.xml.in => test-sound.xml.in} | 0 + tests/{test-v2v-trim.sh => test-trim.sh} | 2 +- + ...rtio-win-iso.sh => test-virtio-win-iso.sh} | 2 +- + ...nversion.sh => test-windows-conversion.sh} | 2 +- + 115 files changed, 307 insertions(+), 305 deletions(-) + rename docs/{test-v2v-docs.sh => test-docs.sh} (100%) + rename output/{test-v2v-python-syntax.sh => test-python-syntax.sh} (100%) + rename tests/{test-v2v-bad-networks-and-bridges.sh => test-bad-networks-and-bridges.sh} (97%) + rename tests/{test-v2v-block-driver.sh => test-block-driver.sh} (99%) + rename tests/{test-v2v-cdrom.expected => test-cdrom.expected} (100%) + rename tests/{test-v2v-cdrom.sh => test-cdrom.sh} (92%) + rename tests/{test-v2v-cdrom.xml.in => test-cdrom.xml.in} (100%) + rename tests/{test-v2v-conversion-of.sh => test-conversion-of.sh} (100%) + rename tests/{test-v2v-customize.sh => test-customize.sh} (98%) + rename tests/{test-v2v-fedora-btrfs-conversion.sh => test-fedora-btrfs-conversion.sh} (100%) + rename tests/{test-v2v-fedora-conversion.sh => test-fedora-conversion.sh} (100%) + rename tests/{test-v2v-fedora-luks-on-lvm-conversion.sh => test-fedora-luks-on-lvm-conversion.sh} (100%) + rename tests/{test-v2v-fedora-lvm-on-luks-conversion.sh => test-fedora-lvm-on-luks-conversion.sh} (100%) + rename tests/{test-v2v-fedora-md-conversion.sh => test-fedora-md-conversion.sh} (100%) + rename tests/{test-v2v-floppy.expected => test-floppy.expected} (100%) + rename tests/{test-v2v-floppy.sh => test-floppy.sh} (92%) + rename tests/{test-v2v-floppy.xml.in => test-floppy.xml.in} (100%) + rename tests/{test-v2v-i-disk-parallel.sh => test-i-disk-parallel.sh} (98%) + rename tests/{test-v2v-i-disk.sh => test-i-disk.sh} (98%) + rename tests/{test-v2v-i-ova-as-root.ovf => test-i-ova-as-root.ovf} (100%) + rename tests/{test-v2v-i-ova-as-root.sh => test-i-ova-as-root.sh} (96%) + rename tests/{test-v2v-i-ova-bad-sha1.sh => test-i-ova-bad-sha1.sh} (95%) + rename tests/{test-v2v-i-ova-bad-sha256.sh => test-i-ova-bad-sha256.sh} (95%) + rename tests/{test-v2v-i-ova-checksums.ovf => test-i-ova-checksums.ovf} (100%) + rename tests/{test-v2v-i-ova-directory.sh => test-i-ova-directory.sh} (96%) + rename tests/{test-v2v-i-ova-formats.expected => test-i-ova-formats.expected} (100%) + rename tests/{test-v2v-i-ova-formats.ovf => test-i-ova-formats.ovf} (100%) + rename tests/{test-v2v-i-ova-formats.sh => test-i-ova-formats.sh} (83%) + rename tests/{test-v2v-i-ova-good-checksums.sh => test-i-ova-good-checksums.sh} (95%) + rename tests/{test-v2v-i-ova-gz.expected => test-i-ova-gz.expected} (100%) + rename tests/{test-v2v-i-ova-gz.ovf => test-i-ova-gz.ovf} (100%) + rename tests/{test-v2v-i-ova-gz.sh => test-i-ova-gz.sh} (88%) + rename tests/{test-v2v-i-ova-invalid-manifest1.sh => test-i-ova-invalid-manifest1.sh} (95%) + rename tests/{test-v2v-i-ova-invalid-manifest2.sh => test-i-ova-invalid-manifest2.sh} (95%) + rename tests/{test-v2v-i-ova-snapshots.expected => test-i-ova-snapshots.expected} (100%) + rename tests/{test-v2v-i-ova-snapshots.expected2 => test-i-ova-snapshots.expected2} (100%) + rename tests/{test-v2v-i-ova-snapshots.ovf => test-i-ova-snapshots.ovf} (100%) + rename tests/{test-v2v-i-ova-snapshots.sh => test-i-ova-snapshots.sh} (89%) + rename tests/{test-v2v-i-ova-subfolders.expected => test-i-ova-subfolders.expected} (100%) + rename tests/{test-v2v-i-ova-subfolders.expected2 => test-i-ova-subfolders.expected2} (100%) + rename tests/{test-v2v-i-ova-subfolders.ovf => test-i-ova-subfolders.ovf} (100%) + rename tests/{test-v2v-i-ova-subfolders.sh => test-i-ova-subfolders.sh} (88%) + rename tests/{test-v2v-i-ova-tar.expected => test-i-ova-tar.expected} (100%) + rename tests/{test-v2v-i-ova-tar.expected2 => test-i-ova-tar.expected2} (100%) + rename tests/{test-v2v-i-ova-tar.ovf => test-i-ova-tar.ovf} (100%) + rename tests/{test-v2v-i-ova-tar.sh => test-i-ova-tar.sh} (88%) + rename tests/{test-v2v-i-ova-two-disks.expected => test-i-ova-two-disks.expected} (100%) + rename tests/{test-v2v-i-ova-two-disks.expected2 => test-i-ova-two-disks.expected2} (100%) + rename tests/{test-v2v-i-ova-two-disks.ovf => test-i-ova-two-disks.ovf} (100%) + rename tests/{test-v2v-i-ova-two-disks.sh => test-i-ova-two-disks.sh} (87%) + rename tests/{test-v2v-i-ova.ovf => test-i-ova.ovf} (100%) + rename tests/{test-v2v-i-ova.sh => test-i-ova.sh} (95%) + rename tests/{test-v2v-i-ova.xml => test-i-ova.xml} (100%) + rename tests/{test-v2v-i-vmx-1.expected => test-i-vmx-1.expected} (100%) + rename tests/{test-v2v-i-vmx-1.vmx => test-i-vmx-1.vmx} (100%) + rename tests/{test-v2v-i-vmx-2.expected => test-i-vmx-2.expected} (100%) + rename tests/{test-v2v-i-vmx-2.vmx => test-i-vmx-2.vmx} (100%) + rename tests/{test-v2v-i-vmx-3.expected => test-i-vmx-3.expected} (100%) + rename tests/{test-v2v-i-vmx-3.vmx => test-i-vmx-3.vmx} (100%) + rename tests/{test-v2v-i-vmx-4.expected => test-i-vmx-4.expected} (100%) + rename tests/{test-v2v-i-vmx-4.vmx => test-i-vmx-4.vmx} (100%) + rename tests/{test-v2v-i-vmx-5.expected => test-i-vmx-5.expected} (100%) + rename tests/{test-v2v-i-vmx-5.vmx => test-i-vmx-5.vmx} (100%) + rename tests/{test-v2v-i-vmx-6.expected => test-i-vmx-6.expected} (100%) + rename tests/{test-v2v-i-vmx-6.vmx => test-i-vmx-6.vmx} (100%) + rename tests/{test-v2v-i-vmx-7.expected => test-i-vmx-7.expected} (100%) + rename tests/{test-v2v-i-vmx-7.vmx => test-i-vmx-7.vmx} (100%) + rename tests/{test-v2v-i-vmx.sh => test-i-vmx.sh} (83%) + rename tests/{test-v2v-in-place.sh => test-in-place.sh} (99%) + rename tests/{test-v2v-inspector.sh => test-inspector.sh} (98%) + rename tests/{test-v2v-it-vddk-io-query.sh => test-it-vddk-io-query.sh} (97%) + rename tests/{test-v2v-mac-expected.xml => test-mac-expected.xml} (100%) + rename tests/{test-v2v-mac.sh => test-mac.sh} (93%) + rename tests/{test-v2v-mac.xml.in => test-mac.xml.in} (100%) + rename tests/{test-v2v-machine-readable.sh => test-machine-readable.sh} (81%) + rename tests/{test-v2v-networks-and-bridges-expected.xml => test-networks-and-bridges-expected.xml} (100%) + rename tests/{test-v2v-networks-and-bridges.sh => test-networks-and-bridges.sh} (90%) + rename tests/{test-v2v-networks-and-bridges.xml.in => test-networks-and-bridges.xml.in} (100%) + rename tests/{test-v2v-o-glance.sh => test-o-glance.sh} (100%) + rename tests/{test-v2v-o-kubevirt-fedora.sh => test-o-kubevirt-fedora.sh} (94%) + rename tests/{test-v2v-o-kubevirt-fedora.yaml.expected => test-o-kubevirt-fedora.yaml.expected} (100%) + rename tests/{test-v2v-o-kubevirt-windows.sh => test-o-kubevirt-windows.sh} (94%) + rename tests/{test-v2v-o-kubevirt-windows.yaml.expected => test-o-kubevirt-windows.yaml.expected} (100%) + rename tests/{test-v2v-o-libvirt.sh => test-o-libvirt.sh} (98%) + rename tests/{test-v2v-o-local-qcow2-compressed.sh => test-o-local-qcow2-compressed.sh} (97%) + rename tests/{test-v2v-o-null.sh => test-o-null.sh} (100%) + rename tests/{test-v2v-o-openstack.sh => test-o-openstack.sh} (97%) + rename tests/{test-v2v-o-qemu.sh => test-o-qemu.sh} (98%) + rename tests/{test-v2v-o-rhv-upload-module => test-o-rhv-upload-module}/imageio.py (98%) + rename tests/{test-v2v-o-rhv-upload-module => test-o-rhv-upload-module}/ovirtsdk4/__init__.py (98%) + rename tests/{test-v2v-o-rhv-upload-module => test-o-rhv-upload-module}/ovirtsdk4/types.py (99%) + rename tests/{test-v2v-o-rhv-upload-oo-query.sh => test-o-rhv-upload-oo-query.sh} (96%) + rename tests/{test-v2v-o-rhv-upload.sh => test-o-rhv-upload.sh} (89%) + rename tests/{test-v2v-o-rhv.ovf.expected => test-o-rhv.ovf.expected} (100%) + rename tests/{test-v2v-o-rhv.sh => test-o-rhv.sh} (97%) + rename tests/{test-v2v-o-vdsm-oo-query.sh => test-o-vdsm-oo-query.sh} (97%) + rename tests/{test-v2v-o-vdsm-options.ovf.expected => test-o-vdsm-options.ovf.expected} (100%) + rename tests/{test-v2v-o-vdsm-options.sh => test-o-vdsm-options.sh} (97%) + rename tests/{test-v2v-oa-option-qcow2.sh => test-oa-option-qcow2.sh} (98%) + rename tests/{test-v2v-oa-option-raw.sh => test-oa-option-raw.sh} (98%) + rename tests/{test-v2v-of-option.sh => test-of-option.sh} (98%) + rename tests/{test-v2v-on-option.sh => test-on-option.sh} (98%) + rename tests/{test-v2v-print-source.expected => test-print-source.expected} (100%) + rename tests/{test-v2v-print-source.sh => test-print-source.sh} (90%) + rename tests/{test-v2v-print-source.xml.in => test-print-source.xml.in} (100%) + rename tests/{test-v2v-sound.sh => test-sound.sh} (94%) + rename tests/{test-v2v-sound.xml.in => test-sound.xml.in} (100%) + rename tests/{test-v2v-trim.sh => test-trim.sh} (99%) + rename tests/{test-v2v-virtio-win-iso.sh => test-virtio-win-iso.sh} (99%) + rename tests/{test-v2v-windows-conversion.sh => test-windows-conversion.sh} (98%) + +diff --git a/.gitignore b/.gitignore +index 9d2f1d07..b8abc3f8 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -122,13 +122,13 @@ Makefile.in + /tests/functions.sh + /tests/libvirt-is-version + /tests/rhbz1232192.xml +-/tests/test-v2v-cdrom.xml +-/tests/test-v2v-conversion-of-*.sh +-/tests/test-v2v-floppy.xml +-/tests/test-v2v-mac.xml +-/tests/test-v2v-networks-and-bridges.xml +-/tests/test-v2v-print-source.xml +-/tests/test-v2v-sound.xml ++/tests/test-cdrom.xml ++/tests/test-conversion-of-*.sh ++/tests/test-floppy.xml ++/tests/test-mac.xml ++/tests/test-networks-and-bridges.xml ++/tests/test-print-source.xml ++/tests/test-sound.xml + /tests/windows.vmdk + /v2v/.depend + /v2v/oUnit-virt-v2v.cache +diff --git a/configure.ac b/configure.ac +index 8d6a506b..300b421e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -164,12 +164,12 @@ AC_CONFIG_FILES([Makefile + tests/functions.sh + tests/Makefile + tests/rhbz1232192.xml +- tests/test-v2v-cdrom.xml +- tests/test-v2v-floppy.xml +- tests/test-v2v-mac.xml +- tests/test-v2v-networks-and-bridges.xml +- tests/test-v2v-print-source.xml +- tests/test-v2v-sound.xml ++ tests/test-cdrom.xml ++ tests/test-floppy.xml ++ tests/test-mac.xml ++ tests/test-networks-and-bridges.xml ++ tests/test-print-source.xml ++ tests/test-sound.xml + v2v/Makefile]) + + AC_OUTPUT +diff --git a/docs/Makefile.am b/docs/Makefile.am +index 0f6a3e21..d86349f4 100644 +--- a/docs/Makefile.am ++++ b/docs/Makefile.am +@@ -18,7 +18,7 @@ + include $(top_srcdir)/subdir-rules.mk + + EXTRA_DIST = \ +- test-v2v-docs.sh \ ++ test-docs.sh \ + virt-v2v.pod \ + virt-v2v-hacking.pod \ + virt-v2v-in-place.pod \ +@@ -242,4 +242,4 @@ stamp-virt-v2v-support.pod: virt-v2v-support.pod + touch $@ + + TESTS_ENVIRONMENT = $(top_builddir)/run --test +-TESTS = test-v2v-docs.sh ++TESTS = test-docs.sh +diff --git a/docs/test-v2v-docs.sh b/docs/test-docs.sh +similarity index 100% +rename from docs/test-v2v-docs.sh +rename to docs/test-docs.sh +diff --git a/output/Makefile.am b/output/Makefile.am +index f736d52d..d5bab9a0 100644 +--- a/output/Makefile.am ++++ b/output/Makefile.am +@@ -39,7 +39,7 @@ EXTRA_DIST = \ + rhv-upload-precheck.py \ + rhv-upload-transfer.py \ + rhv-upload-vmcheck.py \ +- test-v2v-python-syntax.sh ++ test-python-syntax.sh + + SOURCES_MLI = \ + changeuid.mli \ +@@ -199,7 +199,7 @@ $(MLOUTPUT_CMA): $(OBJECTS) libmloutput.a + + # Unit tests. + TESTS_ENVIRONMENT = $(top_builddir)/run --test +-TESTS = test-v2v-python-syntax.sh ++TESTS = test-python-syntax.sh + + # Dependencies. + .depend: \ +diff --git a/output/test-v2v-python-syntax.sh b/output/test-python-syntax.sh +similarity index 100% +rename from output/test-v2v-python-syntax.sh +rename to output/test-python-syntax.sh +diff --git a/tests/Makefile.am b/tests/Makefile.am +index fa5bb4f1..4c4a8e55 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -56,55 +56,58 @@ libvirt_is_version_CFLAGS = \ + TESTS_ENVIRONMENT = $(top_builddir)/run --test + + TESTS = \ +- test-v2v-i-ova-bad-sha1.sh \ +- test-v2v-i-ova-bad-sha256.sh \ +- test-v2v-i-ova-directory.sh \ +- test-v2v-i-ova-formats.sh \ +- test-v2v-i-ova-good-checksums.sh \ +- test-v2v-i-ova-gz.sh \ +- test-v2v-i-ova-invalid-manifest1.sh \ +- test-v2v-i-ova-invalid-manifest2.sh \ +- test-v2v-i-ova-snapshots.sh \ +- test-v2v-i-ova-subfolders.sh \ +- test-v2v-i-ova-tar.sh \ +- test-v2v-i-ova-two-disks.sh \ +- test-v2v-i-vmx.sh \ +- test-v2v-it-vddk-io-query.sh \ +- test-v2v-o-rhv-upload-oo-query.sh \ +- test-v2v-o-vdsm-oo-query.sh \ +- test-v2v-bad-networks-and-bridges.sh \ +- test-v2v-cdrom.sh \ +- test-v2v-floppy.sh \ +- test-v2v-i-disk.sh \ +- test-v2v-i-disk-parallel.sh \ +- test-v2v-i-ova.sh \ +- test-v2v-inspector.sh \ +- test-v2v-mac.sh \ +- test-v2v-machine-readable.sh \ +- test-v2v-networks-and-bridges.sh \ +- test-v2v-o-glance.sh \ +- test-v2v-o-kubevirt-fedora.sh \ +- test-v2v-o-kubevirt-windows.sh \ +- test-v2v-o-libvirt.sh \ +- test-v2v-o-null.sh \ +- test-v2v-o-openstack.sh \ +- test-v2v-o-qemu.sh \ +- test-v2v-o-rhv.sh \ +- test-v2v-o-rhv-upload.sh \ +- test-v2v-o-vdsm-options.sh \ +- test-v2v-oa-option-qcow2.sh \ +- test-v2v-oa-option-raw.sh \ +- test-v2v-of-option.sh \ +- test-v2v-on-option.sh \ +- test-v2v-print-source.sh \ +- test-v2v-sound.sh \ +- test-v2v-virtio-win-iso.sh \ +- test-v2v-fedora-conversion.sh \ +- test-v2v-fedora-luks-on-lvm-conversion.sh \ +- test-v2v-fedora-lvm-on-luks-conversion.sh \ +- test-v2v-fedora-md-conversion.sh \ +- test-v2v-windows-conversion.sh \ +- test-v2v-customize.sh \ ++ test-i-ova-bad-sha1.sh \ ++ test-i-ova-bad-sha256.sh \ ++ test-i-ova-directory.sh \ ++ test-i-ova-formats.sh \ ++ test-i-ova-good-checksums.sh \ ++ test-i-ova-gz.sh \ ++ test-i-ova-invalid-manifest1.sh \ ++ test-i-ova-invalid-manifest2.sh \ ++ test-i-ova-snapshots.sh \ ++ test-i-ova-subfolders.sh \ ++ test-i-ova-tar.sh \ ++ test-i-ova-two-disks.sh \ ++ test-i-vmx.sh \ ++ test-it-vddk-io-query.sh \ ++ test-o-rhv-upload-oo-query.sh \ ++ test-o-vdsm-oo-query.sh \ ++ test-bad-networks-and-bridges.sh \ ++ test-cdrom.sh \ ++ test-floppy.sh \ ++ test-i-disk.sh \ ++ test-i-disk-parallel.sh \ ++ test-i-ova.sh \ ++ test-in-place.sh \ ++ test-inspector.sh \ ++ test-mac.sh \ ++ test-machine-readable.sh \ ++ test-networks-and-bridges.sh \ ++ test-o-glance.sh \ ++ test-o-kubevirt-fedora.sh \ ++ test-o-kubevirt-windows.sh \ ++ test-o-libvirt.sh \ ++ test-o-local-qcow2-compressed.sh \ ++ test-o-null.sh \ ++ test-o-openstack.sh \ ++ test-o-qemu.sh \ ++ test-o-rhv.sh \ ++ test-o-rhv-upload.sh \ ++ test-o-vdsm-options.sh \ ++ test-oa-option-qcow2.sh \ ++ test-oa-option-raw.sh \ ++ test-of-option.sh \ ++ test-on-option.sh \ ++ test-print-source.sh \ ++ test-sound.sh \ ++ test-virtio-win-iso.sh \ ++ test-fedora-conversion.sh \ ++ test-fedora-btrfs-conversion.sh \ ++ test-fedora-luks-on-lvm-conversion.sh \ ++ test-fedora-lvm-on-luks-conversion.sh \ ++ test-fedora-md-conversion.sh \ ++ test-windows-conversion.sh \ ++ test-customize.sh \ + rhbz1232192.sh \ + $(SLOW_TESTS) \ + $(ROOT_TESTS) +@@ -128,45 +131,45 @@ check-valgrind: + + SLOW_TESTS = \ + $(real_guests_scripts) \ +- test-v2v-trim.sh ++ test-trim.sh + + check-slow: + $(MAKE) check TESTS="$(SLOW_TESTS)" SLOW=1 + + ROOT_TESTS = \ +- test-v2v-i-ova-as-root.sh ++ test-i-ova-as-root.sh + + check-root: + $(MAKE) check TESTS="$(ROOT_TESTS)" + +-# A selection of real guests that test-v2v-conversion-of.sh will ++# A selection of real guests that test-conversion-of.sh will + # try to convert. This is only used by 'make check-slow'. + + real_guests_scripts = \ +- test-v2v-conversion-of-centos-7.0.sh \ +- test-v2v-conversion-of-debian-6.sh \ +- test-v2v-conversion-of-debian-7.sh \ +- test-v2v-conversion-of-debian-8.sh \ +- test-v2v-conversion-of-debian-9.sh \ +- test-v2v-conversion-of-fedora-37.sh \ +- test-v2v-conversion-of-opensuse-13.1.sh \ +- test-v2v-conversion-of-opensuse-13.2.sh \ +- test-v2v-conversion-of-opensuse-42.1.sh \ +- test-v2v-conversion-of-rhel-5.11.sh \ +- test-v2v-conversion-of-rhel-6.10.sh \ +- test-v2v-conversion-of-rhel-7.9.sh \ +- test-v2v-conversion-of-rhel-8.7.sh \ +- test-v2v-conversion-of-ubuntu-16.04.sh \ +- test-v2v-conversion-of-ubuntu-18.04.sh \ +- test-v2v-conversion-of-ubuntu-20.04.sh \ +- test-v2v-conversion-of-windows-6.2-server.sh \ +- test-v2v-conversion-of-windows-6.3-server.sh \ +- test-v2v-conversion-of-windows-10.0-server.sh ++ test-conversion-of-centos-7.0.sh \ ++ test-conversion-of-debian-6.sh \ ++ test-conversion-of-debian-7.sh \ ++ test-conversion-of-debian-8.sh \ ++ test-conversion-of-debian-9.sh \ ++ test-conversion-of-fedora-37.sh \ ++ test-conversion-of-opensuse-13.1.sh \ ++ test-conversion-of-opensuse-13.2.sh \ ++ test-conversion-of-opensuse-42.1.sh \ ++ test-conversion-of-rhel-5.11.sh \ ++ test-conversion-of-rhel-6.10.sh \ ++ test-conversion-of-rhel-7.9.sh \ ++ test-conversion-of-rhel-8.7.sh \ ++ test-conversion-of-ubuntu-16.04.sh \ ++ test-conversion-of-ubuntu-18.04.sh \ ++ test-conversion-of-ubuntu-20.04.sh \ ++ test-conversion-of-windows-6.2-server.sh \ ++ test-conversion-of-windows-6.3-server.sh \ ++ test-conversion-of-windows-10.0-server.sh + +-test-v2v-conversion-of-%.sh: ++test-conversion-of-%.sh: + rm -f $@ $@-t +- f=`echo "$@" | $(SED) 's/test-v2v-conversion-of-\(.*\).sh/\1/'`; \ +- echo 'script=$@ exec $$srcdir/test-v2v-conversion-of.sh' "$$f" > $@-t ++ f=`echo "$@" | $(SED) 's/test-conversion-of-\(.*\).sh/\1/'`; \ ++ echo 'script=$@ exec $$srcdir/test-conversion-of.sh' "$$f" > $@-t + chmod 0755 $@-t + mv $@-t $@ + +@@ -178,106 +181,105 @@ CLEANFILES += \ + real-*.xml + + EXTRA_DIST += \ +- test-v2v-bad-networks-and-bridges.sh \ +- test-v2v-cdrom.expected \ +- test-v2v-cdrom.sh \ +- test-v2v-customize.sh \ +- test-v2v-fedora-conversion.sh \ +- test-v2v-fedora-btrfs-conversion.sh \ +- test-v2v-fedora-luks-on-lvm-conversion.sh \ +- test-v2v-fedora-lvm-on-luks-conversion.sh \ +- test-v2v-fedora-md-conversion.sh \ +- test-v2v-floppy.expected \ +- test-v2v-floppy.sh \ +- test-v2v-i-disk.sh \ +- test-v2v-i-disk-parallel.sh \ +- test-v2v-i-ova-as-root.ovf \ +- test-v2v-i-ova-as-root.sh \ +- test-v2v-i-ova-bad-sha1.sh \ +- test-v2v-i-ova-bad-sha256.sh \ +- test-v2v-i-ova-checksums.ovf \ +- test-v2v-i-ova-directory.sh \ +- test-v2v-i-ova-formats.expected \ +- test-v2v-i-ova-formats.ovf \ +- test-v2v-i-ova-formats.sh \ +- test-v2v-i-ova-good-checksums.sh \ +- test-v2v-i-ova-gz.expected \ +- test-v2v-i-ova-gz.ovf \ +- test-v2v-i-ova-gz.sh \ +- test-v2v-i-ova-invalid-manifest1.sh \ +- test-v2v-i-ova-invalid-manifest2.sh \ +- test-v2v-i-ova-snapshots.expected \ +- test-v2v-i-ova-snapshots.expected2 \ +- test-v2v-i-ova-snapshots.ovf \ +- test-v2v-i-ova-snapshots.sh \ +- test-v2v-i-ova-subfolders.expected \ +- test-v2v-i-ova-subfolders.expected2 \ +- test-v2v-i-ova-subfolders.ovf \ +- test-v2v-i-ova-subfolders.sh \ +- test-v2v-i-ova-tar.expected \ +- test-v2v-i-ova-tar.expected2 \ +- test-v2v-i-ova-tar.ovf \ +- test-v2v-i-ova-tar.sh \ +- test-v2v-i-ova-two-disks.expected \ +- test-v2v-i-ova-two-disks.expected2 \ +- test-v2v-i-ova-two-disks.ovf \ +- test-v2v-i-ova-two-disks.sh \ +- test-v2v-i-ova.ovf \ +- test-v2v-i-ova.sh \ +- test-v2v-i-ova.xml \ +- test-v2v-i-vmx.sh \ +- test-v2v-i-vmx-1.expected \ +- test-v2v-i-vmx-2.expected \ +- test-v2v-i-vmx-3.expected \ +- test-v2v-i-vmx-4.expected \ +- test-v2v-i-vmx-5.expected \ +- test-v2v-i-vmx-6.expected \ +- test-v2v-i-vmx-7.expected \ +- test-v2v-i-vmx-1.vmx \ +- test-v2v-i-vmx-2.vmx \ +- test-v2v-i-vmx-3.vmx \ +- test-v2v-i-vmx-4.vmx \ +- test-v2v-i-vmx-5.vmx \ +- test-v2v-i-vmx-6.vmx \ +- test-v2v-i-vmx-7.vmx \ +- test-v2v-in-place.sh \ +- test-v2v-block-driver.sh \ +- test-v2v-inspector.sh \ +- test-v2v-it-vddk-io-query.sh \ +- test-v2v-machine-readable.sh \ +- test-v2v-mac-expected.xml \ +- test-v2v-mac.sh \ +- test-v2v-networks-and-bridges.sh \ +- test-v2v-networks-and-bridges-expected.xml \ +- test-v2v-o-glance.sh \ +- test-v2v-o-kubevirt-fedora.sh \ +- test-v2v-o-kubevirt-windows.sh \ +- test-v2v-o-kubevirt-fedora.yaml.expected \ +- test-v2v-o-kubevirt-windows.yaml.expected \ +- test-v2v-o-libvirt.sh \ +- test-v2v-o-local-qcow2-compressed.sh \ +- test-v2v-o-null.sh \ +- test-v2v-o-openstack.sh \ +- test-v2v-o-qemu.sh \ +- test-v2v-o-rhv.ovf.expected \ +- test-v2v-o-rhv.sh \ +- test-v2v-o-rhv-upload.sh \ +- test-v2v-o-rhv-upload-module/imageio.py \ +- test-v2v-o-rhv-upload-module/ovirtsdk4/__init__.py \ +- test-v2v-o-rhv-upload-module/ovirtsdk4/types.py \ +- test-v2v-o-rhv-upload-oo-query.sh \ +- test-v2v-o-vdsm-oo-query.sh \ +- test-v2v-o-vdsm-options.ovf.expected \ +- test-v2v-o-vdsm-options.sh \ +- test-v2v-oa-option-qcow2.sh \ +- test-v2v-oa-option-raw.sh \ +- test-v2v-of-option.sh \ +- test-v2v-on-option.sh \ +- test-v2v-print-source.expected \ +- test-v2v-print-source.sh \ +- test-v2v-conversion-of.sh \ +- test-v2v-sound.sh \ +- test-v2v-trim.sh \ +- test-v2v-virtio-win-iso.sh \ +- test-v2v-windows-conversion.sh \ ++ test-bad-networks-and-bridges.sh \ ++ test-cdrom.expected \ ++ test-cdrom.sh \ ++ test-customize.sh \ ++ test-fedora-conversion.sh \ ++ test-fedora-btrfs-conversion.sh \ ++ test-fedora-luks-on-lvm-conversion.sh \ ++ test-fedora-lvm-on-luks-conversion.sh \ ++ test-fedora-md-conversion.sh \ ++ test-floppy.expected \ ++ test-floppy.sh \ ++ test-i-disk.sh \ ++ test-i-disk-parallel.sh \ ++ test-i-ova-as-root.ovf \ ++ test-i-ova-as-root.sh \ ++ test-i-ova-bad-sha1.sh \ ++ test-i-ova-bad-sha256.sh \ ++ test-i-ova-checksums.ovf \ ++ test-i-ova-directory.sh \ ++ test-i-ova-formats.expected \ ++ test-i-ova-formats.ovf \ ++ test-i-ova-formats.sh \ ++ test-i-ova-good-checksums.sh \ ++ test-i-ova-gz.expected \ ++ test-i-ova-gz.ovf \ ++ test-i-ova-gz.sh \ ++ test-i-ova-invalid-manifest1.sh \ ++ test-i-ova-invalid-manifest2.sh \ ++ test-i-ova-snapshots.expected \ ++ test-i-ova-snapshots.expected2 \ ++ test-i-ova-snapshots.ovf \ ++ test-i-ova-snapshots.sh \ ++ test-i-ova-subfolders.expected \ ++ test-i-ova-subfolders.expected2 \ ++ test-i-ova-subfolders.ovf \ ++ test-i-ova-subfolders.sh \ ++ test-i-ova-tar.expected \ ++ test-i-ova-tar.expected2 \ ++ test-i-ova-tar.ovf \ ++ test-i-ova-tar.sh \ ++ test-i-ova-two-disks.expected \ ++ test-i-ova-two-disks.expected2 \ ++ test-i-ova-two-disks.ovf \ ++ test-i-ova-two-disks.sh \ ++ test-i-ova.ovf \ ++ test-i-ova.sh \ ++ test-i-ova.xml \ ++ test-i-vmx.sh \ ++ test-i-vmx-1.expected \ ++ test-i-vmx-2.expected \ ++ test-i-vmx-3.expected \ ++ test-i-vmx-4.expected \ ++ test-i-vmx-5.expected \ ++ test-i-vmx-6.expected \ ++ test-i-vmx-7.expected \ ++ test-i-vmx-1.vmx \ ++ test-i-vmx-2.vmx \ ++ test-i-vmx-3.vmx \ ++ test-i-vmx-4.vmx \ ++ test-i-vmx-5.vmx \ ++ test-i-vmx-6.vmx \ ++ test-i-vmx-7.vmx \ ++ test-in-place.sh \ ++ test-inspector.sh \ ++ test-it-vddk-io-query.sh \ ++ test-machine-readable.sh \ ++ test-mac-expected.xml \ ++ test-mac.sh \ ++ test-networks-and-bridges.sh \ ++ test-networks-and-bridges-expected.xml \ ++ test-o-glance.sh \ ++ test-o-kubevirt-fedora.sh \ ++ test-o-kubevirt-windows.sh \ ++ test-o-kubevirt-fedora.yaml.expected \ ++ test-o-kubevirt-windows.yaml.expected \ ++ test-o-libvirt.sh \ ++ test-o-local-qcow2-compressed.sh \ ++ test-o-null.sh \ ++ test-o-openstack.sh \ ++ test-o-qemu.sh \ ++ test-o-rhv.ovf.expected \ ++ test-o-rhv.sh \ ++ test-o-rhv-upload.sh \ ++ test-o-rhv-upload-module/imageio.py \ ++ test-o-rhv-upload-module/ovirtsdk4/__init__.py \ ++ test-o-rhv-upload-module/ovirtsdk4/types.py \ ++ test-o-rhv-upload-oo-query.sh \ ++ test-o-vdsm-oo-query.sh \ ++ test-o-vdsm-options.ovf.expected \ ++ test-o-vdsm-options.sh \ ++ test-oa-option-qcow2.sh \ ++ test-oa-option-raw.sh \ ++ test-of-option.sh \ ++ test-on-option.sh \ ++ test-print-source.expected \ ++ test-print-source.sh \ ++ test-conversion-of.sh \ ++ test-sound.sh \ ++ test-trim.sh \ ++ test-virtio-win-iso.sh \ ++ test-windows-conversion.sh \ + rhbz1232192.sh +diff --git a/tests/test-v2v-bad-networks-and-bridges.sh b/tests/test-bad-networks-and-bridges.sh +similarity index 97% +rename from tests/test-v2v-bad-networks-and-bridges.sh +rename to tests/test-bad-networks-and-bridges.sh +index f6bcfc8c..7dadead1 100755 +--- a/tests/test-v2v-bad-networks-and-bridges.sh ++++ b/tests/test-bad-networks-and-bridges.sh +@@ -29,7 +29,7 @@ skip_if_skipped + + # We expect all of these to print an error. NB: LANG=C is set. + +-file=test-v2v-bad-networks-and-bridges.img ++file=test-bad-networks-and-bridges.img + touch $file + + cmd="virt-v2v -i disk -o null $file" +diff --git a/tests/test-v2v-block-driver.sh b/tests/test-block-driver.sh +similarity index 99% +rename from tests/test-v2v-block-driver.sh +rename to tests/test-block-driver.sh +index a0e56bed..ec9b8ea3 100755 +--- a/tests/test-v2v-block-driver.sh ++++ b/tests/test-block-driver.sh +@@ -31,7 +31,7 @@ requires test -f $img_base + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win" + +-d=$PWD/test-v2v-block-driver.d ++d=$PWD/test-block-driver.d + rm -rf $d + cleanup_fn rm -rf $d + mkdir $d +diff --git a/tests/test-v2v-cdrom.expected b/tests/test-cdrom.expected +similarity index 100% +rename from tests/test-v2v-cdrom.expected +rename to tests/test-cdrom.expected +diff --git a/tests/test-v2v-cdrom.sh b/tests/test-cdrom.sh +similarity index 92% +rename from tests/test-v2v-cdrom.sh +rename to tests/test-cdrom.sh +index d512e038..8f04b00c 100755 +--- a/tests/test-v2v-cdrom.sh ++++ b/tests/test-cdrom.sh +@@ -29,11 +29,11 @@ skip_if_skipped + requires test -f ../test-data/phony-guests/windows.img + requires test -f ../test-data/phony-guests/blank-disk.img + +-libvirt_uri="test://$abs_builddir/test-v2v-cdrom.xml" ++libvirt_uri="test://$abs_builddir/test-cdrom.xml" + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win" + +-d=test-v2v-cdrom.d ++d=test-cdrom.d + rm -rf $d + cleanup_fn rm -rf $d + mkdir $d +@@ -51,7 +51,7 @@ awk '//{p=0;print;next} ;p' \ + $d/windows.xml | + grep -v ' $d/disks + +-if ! diff -u "$srcdir/test-v2v-cdrom.expected" $d/disks; then ++if ! diff -u "$srcdir/test-cdrom.expected" $d/disks; then + echo "$0: unexpected disk assignments" + cat $d/disks + exit 1 +diff --git a/tests/test-v2v-cdrom.xml.in b/tests/test-cdrom.xml.in +similarity index 100% +rename from tests/test-v2v-cdrom.xml.in +rename to tests/test-cdrom.xml.in +diff --git a/tests/test-v2v-conversion-of.sh b/tests/test-conversion-of.sh +similarity index 100% +rename from tests/test-v2v-conversion-of.sh +rename to tests/test-conversion-of.sh +diff --git a/tests/test-v2v-customize.sh b/tests/test-customize.sh +similarity index 98% +rename from tests/test-v2v-customize.sh +rename to tests/test-customize.sh +index 89ab5b42..51584141 100755 +--- a/tests/test-v2v-customize.sh ++++ b/tests/test-customize.sh +@@ -28,7 +28,7 @@ skip_if_skipped + fedora=../test-data/phony-guests/fedora.img + requires test -f $fedora + +-d=test-v2v-customize.d ++d=test-customize.d + rm -rf $d + cleanup_fn rm -rf $d + mkdir $d +diff --git a/tests/test-v2v-fedora-btrfs-conversion.sh b/tests/test-fedora-btrfs-conversion.sh +similarity index 100% +rename from tests/test-v2v-fedora-btrfs-conversion.sh +rename to tests/test-fedora-btrfs-conversion.sh +diff --git a/tests/test-v2v-fedora-conversion.sh b/tests/test-fedora-conversion.sh +similarity index 100% +rename from tests/test-v2v-fedora-conversion.sh +rename to tests/test-fedora-conversion.sh +diff --git a/tests/test-v2v-fedora-luks-on-lvm-conversion.sh b/tests/test-fedora-luks-on-lvm-conversion.sh +similarity index 100% +rename from tests/test-v2v-fedora-luks-on-lvm-conversion.sh +rename to tests/test-fedora-luks-on-lvm-conversion.sh +diff --git a/tests/test-v2v-fedora-lvm-on-luks-conversion.sh b/tests/test-fedora-lvm-on-luks-conversion.sh +similarity index 100% +rename from tests/test-v2v-fedora-lvm-on-luks-conversion.sh +rename to tests/test-fedora-lvm-on-luks-conversion.sh +diff --git a/tests/test-v2v-fedora-md-conversion.sh b/tests/test-fedora-md-conversion.sh +similarity index 100% +rename from tests/test-v2v-fedora-md-conversion.sh +rename to tests/test-fedora-md-conversion.sh +diff --git a/tests/test-v2v-floppy.expected b/tests/test-floppy.expected +similarity index 100% +rename from tests/test-v2v-floppy.expected +rename to tests/test-floppy.expected +diff --git a/tests/test-v2v-floppy.sh b/tests/test-floppy.sh +similarity index 92% +rename from tests/test-v2v-floppy.sh +rename to tests/test-floppy.sh +index 6f9e297d..96b60836 100755 +--- a/tests/test-v2v-floppy.sh ++++ b/tests/test-floppy.sh +@@ -29,12 +29,12 @@ skip_if_skipped + requires test -f ../test-data/phony-guests/windows.img + requires test -f ../test-data/phony-guests/blank-disk.img + +-libvirt_uri="test://$abs_builddir/test-v2v-floppy.xml" ++libvirt_uri="test://$abs_builddir/test-floppy.xml" + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win" + +-d=test-v2v-floppy.d ++d=test-floppy.d + rm -rf $d + cleanup_fn rm -r $d + mkdir $d +@@ -52,7 +52,7 @@ awk '//{p=0;print;next} ;p' \ + $d/windows.xml | + grep -v ' $d/disks + +-if ! diff -u "$srcdir/test-v2v-floppy.expected" $d/disks; then ++if ! diff -u "$srcdir/test-floppy.expected" $d/disks; then + echo "$0: unexpected disk assignments" + cat $d/disks + exit 1 +diff --git a/tests/test-v2v-floppy.xml.in b/tests/test-floppy.xml.in +similarity index 100% +rename from tests/test-v2v-floppy.xml.in +rename to tests/test-floppy.xml.in +diff --git a/tests/test-v2v-i-disk-parallel.sh b/tests/test-i-disk-parallel.sh +similarity index 98% +rename from tests/test-v2v-i-disk-parallel.sh +rename to tests/test-i-disk-parallel.sh +index a6470fdd..9779722c 100755 +--- a/tests/test-v2v-i-disk-parallel.sh ++++ b/tests/test-i-disk-parallel.sh +@@ -30,7 +30,7 @@ requires test -f $windows + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + +-d=test-v2v-i-disk-parallel.d ++d=test-i-disk-parallel.d + rm -rf $d + cleanup_fn rm -rf $d + mkdir $d +diff --git a/tests/test-v2v-i-disk.sh b/tests/test-i-disk.sh +similarity index 98% +rename from tests/test-v2v-i-disk.sh +rename to tests/test-i-disk.sh +index c96b0535..21593977 100755 +--- a/tests/test-v2v-i-disk.sh ++++ b/tests/test-i-disk.sh +@@ -29,7 +29,7 @@ requires test -f ../test-data/phony-guests/windows.img + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + +-d=test-v2v-i-disk.d ++d=test-i-disk.d + rm -rf $d + cleanup_fn rm -rf $d + mkdir $d +diff --git a/tests/test-v2v-i-ova-as-root.ovf b/tests/test-i-ova-as-root.ovf +similarity index 100% +rename from tests/test-v2v-i-ova-as-root.ovf +rename to tests/test-i-ova-as-root.ovf +diff --git a/tests/test-v2v-i-ova-as-root.sh b/tests/test-i-ova-as-root.sh +similarity index 96% +rename from tests/test-v2v-i-ova-as-root.sh +rename to tests/test-i-ova-as-root.sh +index 81a90ccd..4f35fc25 100755 +--- a/tests/test-v2v-i-ova-as-root.sh ++++ b/tests/test-i-ova-as-root.sh +@@ -43,7 +43,7 @@ fi + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + +-d=test-v2v-i-ova-as-root.d ++d=test-i-ova-as-root.d + rm -rf $d + cleanup_fn rm -rf $d + mkdir $d +@@ -51,7 +51,7 @@ mkdir $d + pushd $d + + # Create the test OVA. +-cp "$abs_srcdir/test-v2v-i-ova-as-root.ovf" test.ovf ++cp "$abs_srcdir/test-i-ova-as-root.ovf" test.ovf + cp ../windows.vmdk disk.vmdk + + echo "SHA1(test.ovf)=" `do_sha1 test.ovf` > test.mf +diff --git a/tests/test-v2v-i-ova-bad-sha1.sh b/tests/test-i-ova-bad-sha1.sh +similarity index 95% +rename from tests/test-v2v-i-ova-bad-sha1.sh +rename to tests/test-i-ova-bad-sha1.sh +index cbe1db7a..614142c3 100755 +--- a/tests/test-v2v-i-ova-bad-sha1.sh ++++ b/tests/test-i-ova-bad-sha1.sh +@@ -34,7 +34,7 @@ fi + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + +-d=test-v2v-i-ova-bad-sha1.d ++d=test-i-ova-bad-sha1.d + rm -rf $d + cleanup_fn rm -rf $d + mkdir $d +@@ -42,7 +42,7 @@ mkdir $d + pushd $d + + # Create the test OVA. +-cp "$abs_srcdir/test-v2v-i-ova-checksums.ovf" test.ovf ++cp "$abs_srcdir/test-i-ova-checksums.ovf" test.ovf + cp ../windows.vmdk disk.vmdk + echo "SHA1(test.ovf)=" `do_sha1 test.ovf` > test.mf + sha1=`do_sha1 disk.vmdk | tr '0-5a-f6789' 'a-f0-58967'` +diff --git a/tests/test-v2v-i-ova-bad-sha256.sh b/tests/test-i-ova-bad-sha256.sh +similarity index 95% +rename from tests/test-v2v-i-ova-bad-sha256.sh +rename to tests/test-i-ova-bad-sha256.sh +index 234ab58c..c68aa100 100755 +--- a/tests/test-v2v-i-ova-bad-sha256.sh ++++ b/tests/test-i-ova-bad-sha256.sh +@@ -34,7 +34,7 @@ fi + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + +-d=test-v2v-i-ova-bad-sha256.d ++d=test-i-ova-bad-sha256.d + rm -rf $d + cleanup_fn rm -rf $d + mkdir $d +@@ -42,7 +42,7 @@ mkdir $d + pushd $d + + # Create the test OVA. +-cp "$abs_srcdir/test-v2v-i-ova-checksums.ovf" test.ovf ++cp "$abs_srcdir/test-i-ova-checksums.ovf" test.ovf + cp ../windows.vmdk disk.vmdk + echo "SHA256(test.ovf)=" `do_sha256 test.ovf` > test.mf + sha256=`do_sha256 disk.vmdk | tr '0-5a-f6789' 'a-f0-58967'` +diff --git a/tests/test-v2v-i-ova-checksums.ovf b/tests/test-i-ova-checksums.ovf +similarity index 100% +rename from tests/test-v2v-i-ova-checksums.ovf +rename to tests/test-i-ova-checksums.ovf +diff --git a/tests/test-v2v-i-ova-directory.sh b/tests/test-i-ova-directory.sh +similarity index 96% +rename from tests/test-v2v-i-ova-directory.sh +rename to tests/test-i-ova-directory.sh +index ec858464..4f7d39ef 100755 +--- a/tests/test-v2v-i-ova-directory.sh ++++ b/tests/test-i-ova-directory.sh +@@ -32,13 +32,13 @@ requires test -s $f + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win" + +-d=test-v2v-i-ova-directory.d ++d=test-i-ova-directory.d + rm -rf $d + cleanup_fn rm -rf $d + mkdir $d + + vmdk=test-ova.vmdk +-ovf=test-v2v-i-ova.ovf ++ovf=test-i-ova.ovf + mf=test-ova.mf + + qemu-img convert $f -O vmdk $d/$vmdk +diff --git a/tests/test-v2v-i-ova-formats.expected b/tests/test-i-ova-formats.expected +similarity index 100% +rename from tests/test-v2v-i-ova-formats.expected +rename to tests/test-i-ova-formats.expected +diff --git a/tests/test-v2v-i-ova-formats.ovf b/tests/test-i-ova-formats.ovf +similarity index 100% +rename from tests/test-v2v-i-ova-formats.ovf +rename to tests/test-i-ova-formats.ovf +diff --git a/tests/test-v2v-i-ova-formats.sh b/tests/test-i-ova-formats.sh +similarity index 83% +rename from tests/test-v2v-i-ova-formats.sh +rename to tests/test-i-ova-formats.sh +index 483ce1b9..9e5e1cb7 100755 +--- a/tests/test-v2v-i-ova-formats.sh ++++ b/tests/test-i-ova-formats.sh +@@ -32,7 +32,7 @@ formats="zip tar-gz tar-xz" + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + +-d=test-v2v-i-ova-formats.d ++d=test-i-ova-formats.d + rm -rf $d + cleanup_fn rm -rf $d + mkdir $d +@@ -44,19 +44,19 @@ pushd $d + guestfish disk-create disk1.vmdk raw 10K + sha=`do_sha1 disk1.vmdk` + echo -e "SHA1(disk1.vmdk)= $sha\r" > disk1.mf +-cp "$abs_srcdir/test-v2v-i-ova-formats.ovf" . ++cp "$abs_srcdir/test-i-ova-formats.ovf" . + + for format in $formats; do + case "$format" in + zip) +- zip -r test test-v2v-i-ova-formats.ovf disk1.vmdk disk1.mf ++ zip -r test test-i-ova-formats.ovf disk1.vmdk disk1.mf + mv test.zip test-$format.ova + ;; + tar-gz) +- tar -czf test-$format.ova test-v2v-i-ova-formats.ovf disk1.vmdk disk1.mf ++ tar -czf test-$format.ova test-i-ova-formats.ovf disk1.vmdk disk1.mf + ;; + tar-xz) +- tar -cJf test-$format.ova test-v2v-i-ova-formats.ovf disk1.vmdk disk1.mf ++ tar -cJf test-$format.ova test-i-ova-formats.ovf disk1.vmdk disk1.mf + ;; + *) + echo "Unhandled format '$format'" +@@ -75,5 +75,5 @@ for format in $formats; do + sed 's,[^ \t]*\(disk.*.vmdk\),\1,' > $d/source + + # Check the parsed source is what we expect. +- diff -u "$srcdir/test-v2v-i-ova-formats.expected" $d/source ++ diff -u "$srcdir/test-i-ova-formats.expected" $d/source + done +diff --git a/tests/test-v2v-i-ova-good-checksums.sh b/tests/test-i-ova-good-checksums.sh +similarity index 95% +rename from tests/test-v2v-i-ova-good-checksums.sh +rename to tests/test-i-ova-good-checksums.sh +index 76c7097e..bb5a53f8 100755 +--- a/tests/test-v2v-i-ova-good-checksums.sh ++++ b/tests/test-i-ova-good-checksums.sh +@@ -34,7 +34,7 @@ fi + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + +-d=test-v2v-i-ova-good-checksums.d ++d=test-i-ova-good-checksums.d + rm -rf $d + cleanup_fn rm -rf $d + mkdir $d +@@ -42,7 +42,7 @@ mkdir $d + pushd $d + + # Create the test OVA. +-cp "$abs_srcdir/test-v2v-i-ova-checksums.ovf" test.ovf ++cp "$abs_srcdir/test-i-ova-checksums.ovf" test.ovf + cp ../windows.vmdk disk.vmdk + + # Test all types of checksum supported by the OVA format. +diff --git a/tests/test-v2v-i-ova-gz.expected b/tests/test-i-ova-gz.expected +similarity index 100% +rename from tests/test-v2v-i-ova-gz.expected +rename to tests/test-i-ova-gz.expected +diff --git a/tests/test-v2v-i-ova-gz.ovf b/tests/test-i-ova-gz.ovf +similarity index 100% +rename from tests/test-v2v-i-ova-gz.ovf +rename to tests/test-i-ova-gz.ovf +diff --git a/tests/test-v2v-i-ova-gz.sh b/tests/test-i-ova-gz.sh +similarity index 88% +rename from tests/test-v2v-i-ova-gz.sh +rename to tests/test-i-ova-gz.sh +index ba90d331..702b2592 100755 +--- a/tests/test-v2v-i-ova-gz.sh ++++ b/tests/test-i-ova-gz.sh +@@ -30,7 +30,7 @@ skip_if_skipped + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + +-d=test-v2v-i-ova-gz.d ++d=test-i-ova-gz.d + rm -rf $d + cleanup_fn rm -rf $d + mkdir $d +@@ -41,9 +41,9 @@ guestfish disk-create disk1.vmdk raw 10K + gzip disk1.vmdk + sha=`do_sha1 disk1.vmdk.gz` + echo -e "SHA1(disk1.vmdk.gz)= $sha\r" > disk1.mf +-cp "$abs_srcdir/test-v2v-i-ova-gz.ovf" . ++cp "$abs_srcdir/test-i-ova-gz.ovf" . + +-tar -cf test.ova test-v2v-i-ova-gz.ovf disk1.vmdk.gz disk1.mf ++tar -cf test.ova test-i-ova-gz.ovf disk1.vmdk.gz disk1.mf + popd + + # Run virt-v2v but only as far as the --print-source stage, and +@@ -54,4 +54,4 @@ $VG virt-v2v --debug-gc --quiet \ + sed 's,[^ \t]*\(\.vmdk\),\1,' > $d/source + + # Check the parsed source is what we expect. +-diff -u "$srcdir/test-v2v-i-ova-gz.expected" $d/source ++diff -u "$srcdir/test-i-ova-gz.expected" $d/source +diff --git a/tests/test-v2v-i-ova-invalid-manifest1.sh b/tests/test-i-ova-invalid-manifest1.sh +similarity index 95% +rename from tests/test-v2v-i-ova-invalid-manifest1.sh +rename to tests/test-i-ova-invalid-manifest1.sh +index 0b4b4151..4297bda0 100755 +--- a/tests/test-v2v-i-ova-invalid-manifest1.sh ++++ b/tests/test-i-ova-invalid-manifest1.sh +@@ -34,7 +34,7 @@ fi + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + +-d=test-v2v-i-ova-invalid-manifest1.d ++d=test-i-ova-invalid-manifest1.d + rm -rf $d + cleanup_fn rm -rf $d + mkdir $d +@@ -42,7 +42,7 @@ mkdir $d + pushd $d + + # Create the test OVA. +-cp "$abs_srcdir/test-v2v-i-ova-checksums.ovf" test.ovf ++cp "$abs_srcdir/test-i-ova-checksums.ovf" test.ovf + cp ../windows.vmdk disk.vmdk + echo "SHA1(test.ovf)=" `do_sha1 test.ovf` > test.mf + echo "SHA1(disk.vmdk)=" `do_sha1 disk.vmdk` >> test.mf +diff --git a/tests/test-v2v-i-ova-invalid-manifest2.sh b/tests/test-i-ova-invalid-manifest2.sh +similarity index 95% +rename from tests/test-v2v-i-ova-invalid-manifest2.sh +rename to tests/test-i-ova-invalid-manifest2.sh +index 37cf8f63..0be2558e 100755 +--- a/tests/test-v2v-i-ova-invalid-manifest2.sh ++++ b/tests/test-i-ova-invalid-manifest2.sh +@@ -34,7 +34,7 @@ fi + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + +-d=test-v2v-i-ova-invalid-manifest2.d ++d=test-i-ova-invalid-manifest2.d + rm -rf $d + cleanup_fn rm -rf $d + mkdir $d +@@ -42,7 +42,7 @@ mkdir $d + pushd $d + + # Create the test OVA. +-cp "$abs_srcdir/test-v2v-i-ova-checksums.ovf" test.ovf ++cp "$abs_srcdir/test-i-ova-checksums.ovf" test.ovf + cp ../windows.vmdk disk.vmdk + echo "SHA1(test.ovf)=" `do_sha1 test.ovf` > test.mf + echo "SHA1(disk.vmdk)=$(do_sha1 disk.vmdk)" >> test.mf +diff --git a/tests/test-v2v-i-ova-snapshots.expected b/tests/test-i-ova-snapshots.expected +similarity index 100% +rename from tests/test-v2v-i-ova-snapshots.expected +rename to tests/test-i-ova-snapshots.expected +diff --git a/tests/test-v2v-i-ova-snapshots.expected2 b/tests/test-i-ova-snapshots.expected2 +similarity index 100% +rename from tests/test-v2v-i-ova-snapshots.expected2 +rename to tests/test-i-ova-snapshots.expected2 +diff --git a/tests/test-v2v-i-ova-snapshots.ovf b/tests/test-i-ova-snapshots.ovf +similarity index 100% +rename from tests/test-v2v-i-ova-snapshots.ovf +rename to tests/test-i-ova-snapshots.ovf +diff --git a/tests/test-v2v-i-ova-snapshots.sh b/tests/test-i-ova-snapshots.sh +similarity index 89% +rename from tests/test-v2v-i-ova-snapshots.sh +rename to tests/test-i-ova-snapshots.sh +index fb1a35eb..fae5c1f3 100755 +--- a/tests/test-v2v-i-ova-snapshots.sh ++++ b/tests/test-i-ova-snapshots.sh +@@ -31,7 +31,7 @@ skip_if_skipped + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + +-d=test-v2v-i-ova-snapshots.d ++d=test-i-ova-snapshots.d + rm -rf $d + cleanup_fn rm -rf $d + mkdir $d +@@ -54,8 +54,8 @@ sha=`do_sha1 disk1.vmdk.000000001` + echo -e "SHA1(disk1.vmdk.000000001)= $sha\r" > disk1.mf + sha=`do_sha1 disk1.vmdk.000000002` + echo -e "SHA1(disk1.vmdk.000000002)= $sha\r" > disk1.mf +-cp "$abs_srcdir/test-v2v-i-ova-snapshots.ovf" . +-tar -cf test-snapshots.ova test-v2v-i-ova-snapshots.ovf disk1.vmdk.00000000? disk1.mf ++cp "$abs_srcdir/test-i-ova-snapshots.ovf" . ++tar -cf test-snapshots.ova test-i-ova-snapshots.ovf disk1.vmdk.00000000? disk1.mf + + popd + +@@ -71,9 +71,9 @@ if grep -sq json: $d/source ; then + # Exact offset will vary because of tar. + sed -i -e "s,\"[^\"]*/$d/,\"," \ + -e "s|\"offset\": [0-9]*,|\"offset\": x,|" $d/source +- diff -u "$srcdir/test-v2v-i-ova-snapshots.expected2" $d/source ++ diff -u "$srcdir/test-i-ova-snapshots.expected2" $d/source + else + # normalize the output + sed -i -e 's,[^ \t]*\(disk.*.vmdk\),\1,' $d/source +- diff -u "$srcdir/test-v2v-i-ova-snapshots.expected" $d/source ++ diff -u "$srcdir/test-i-ova-snapshots.expected" $d/source + fi +diff --git a/tests/test-v2v-i-ova-subfolders.expected b/tests/test-i-ova-subfolders.expected +similarity index 100% +rename from tests/test-v2v-i-ova-subfolders.expected +rename to tests/test-i-ova-subfolders.expected +diff --git a/tests/test-v2v-i-ova-subfolders.expected2 b/tests/test-i-ova-subfolders.expected2 +similarity index 100% +rename from tests/test-v2v-i-ova-subfolders.expected2 +rename to tests/test-i-ova-subfolders.expected2 +diff --git a/tests/test-v2v-i-ova-subfolders.ovf b/tests/test-i-ova-subfolders.ovf +similarity index 100% +rename from tests/test-v2v-i-ova-subfolders.ovf +rename to tests/test-i-ova-subfolders.ovf +diff --git a/tests/test-v2v-i-ova-subfolders.sh b/tests/test-i-ova-subfolders.sh +similarity index 88% +rename from tests/test-v2v-i-ova-subfolders.sh +rename to tests/test-i-ova-subfolders.sh +index a64c60b3..b204433c 100755 +--- a/tests/test-v2v-i-ova-subfolders.sh ++++ b/tests/test-i-ova-subfolders.sh +@@ -30,12 +30,12 @@ skip_if_skipped + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + +-d=test-v2v-i-ova-subfolders.d ++d=test-i-ova-subfolders.d + rm -rf $d + cleanup_fn rm -rf $d + mkdir -p $d/subfolder + +-cp "$srcdir/test-v2v-i-ova-subfolders.ovf" $d/subfolder/ ++cp "$srcdir/test-i-ova-subfolders.ovf" $d/subfolder/ + + pushd $d/subfolder + +@@ -60,9 +60,9 @@ if grep -sq json: $d/source ; then + # Exact offset will vary because of tar. + sed -i -e "s,\"[^\"]*/$d/,\"," \ + -e "s|\"offset\": [0-9]*,|\"offset\": x,|" $d/source +- diff -u "$srcdir/test-v2v-i-ova-subfolders.expected2" $d/source ++ diff -u "$srcdir/test-i-ova-subfolders.expected2" $d/source + else + # normalize the output + sed -i -e 's,[^ \t]*\(subfolder/disk.*\.vmdk\),\1,' $d/source +- diff -u "$srcdir/test-v2v-i-ova-subfolders.expected" $d/source ++ diff -u "$srcdir/test-i-ova-subfolders.expected" $d/source + fi +diff --git a/tests/test-v2v-i-ova-tar.expected b/tests/test-i-ova-tar.expected +similarity index 100% +rename from tests/test-v2v-i-ova-tar.expected +rename to tests/test-i-ova-tar.expected +diff --git a/tests/test-v2v-i-ova-tar.expected2 b/tests/test-i-ova-tar.expected2 +similarity index 100% +rename from tests/test-v2v-i-ova-tar.expected2 +rename to tests/test-i-ova-tar.expected2 +diff --git a/tests/test-v2v-i-ova-tar.ovf b/tests/test-i-ova-tar.ovf +similarity index 100% +rename from tests/test-v2v-i-ova-tar.ovf +rename to tests/test-i-ova-tar.ovf +diff --git a/tests/test-v2v-i-ova-tar.sh b/tests/test-i-ova-tar.sh +similarity index 88% +rename from tests/test-v2v-i-ova-tar.sh +rename to tests/test-i-ova-tar.sh +index a311e0e8..403541c4 100755 +--- a/tests/test-v2v-i-ova-tar.sh ++++ b/tests/test-i-ova-tar.sh +@@ -30,7 +30,7 @@ skip_if_skipped + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + +-d=test-v2v-i-ova-tar.d ++d=test-i-ova-tar.d + rm -rf $d + cleanup_fn rm -rf $d + mkdir $d +@@ -42,8 +42,8 @@ pushd $d + guestfish disk-create disk1.vmdk raw 10k + sha=`do_sha1 disk1.vmdk` + echo -e "SHA1(disk1.vmdk)= $sha\r" > disk1.mf +-cp "$abs_srcdir/test-v2v-i-ova-tar.ovf" . +-tar -cf test-tar.ova test-v2v-i-ova-tar.ovf disk1.vmdk disk1.mf ++cp "$abs_srcdir/test-i-ova-tar.ovf" . ++tar -cf test-tar.ova test-i-ova-tar.ovf disk1.vmdk disk1.mf + + popd + +@@ -59,9 +59,9 @@ if grep -sq json: $d/source ; then + # Exact offset will vary because of tar. + sed -i -e "s,\"[^\"]*/$d/,\"," \ + -e "s|\"offset\": [0-9]*,|\"offset\": x,|" $d/source +- diff -u "$srcdir/test-v2v-i-ova-tar.expected2" $d/source ++ diff -u "$srcdir/test-i-ova-tar.expected2" $d/source + else + # normalize the output + sed -i -e 's,[^ \t]*\(disk.*.vmdk\),\1,' $d/source +- diff -u "$srcdir/test-v2v-i-ova-tar.expected" $d/source ++ diff -u "$srcdir/test-i-ova-tar.expected" $d/source + fi +diff --git a/tests/test-v2v-i-ova-two-disks.expected b/tests/test-i-ova-two-disks.expected +similarity index 100% +rename from tests/test-v2v-i-ova-two-disks.expected +rename to tests/test-i-ova-two-disks.expected +diff --git a/tests/test-v2v-i-ova-two-disks.expected2 b/tests/test-i-ova-two-disks.expected2 +similarity index 100% +rename from tests/test-v2v-i-ova-two-disks.expected2 +rename to tests/test-i-ova-two-disks.expected2 +diff --git a/tests/test-v2v-i-ova-two-disks.ovf b/tests/test-i-ova-two-disks.ovf +similarity index 100% +rename from tests/test-v2v-i-ova-two-disks.ovf +rename to tests/test-i-ova-two-disks.ovf +diff --git a/tests/test-v2v-i-ova-two-disks.sh b/tests/test-i-ova-two-disks.sh +similarity index 87% +rename from tests/test-v2v-i-ova-two-disks.sh +rename to tests/test-i-ova-two-disks.sh +index 9879946e..07155441 100755 +--- a/tests/test-v2v-i-ova-two-disks.sh ++++ b/tests/test-i-ova-two-disks.sh +@@ -31,7 +31,7 @@ skip_if_skipped + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win" + +-d=test-v2v-i-ova-two-disks.d ++d=test-i-ova-two-disks.d + rm -rf $d + cleanup_fn rm -rf $d + mkdir $d +@@ -46,9 +46,9 @@ echo -e "SHA1(disk1.vmdk)= $sha\r" > disk1.mf + guestfish disk-create disk2.vmdk raw 100K + sha=`do_sha1 disk2.vmdk` + echo -e "SHA1(disk2.vmdk)= $sha\r" > disk2.mf +-cp "$abs_srcdir/test-v2v-i-ova-two-disks.ovf" . ++cp "$abs_srcdir/test-i-ova-two-disks.ovf" . + +-tar -cf test.ova test-v2v-i-ova-two-disks.ovf disk1.vmdk disk1.mf disk2.vmdk disk2.mf ++tar -cf test.ova test-i-ova-two-disks.ovf disk1.vmdk disk1.mf disk2.vmdk disk2.mf + popd + + # Run virt-v2v but only as far as the --print-source stage, and +@@ -64,9 +64,9 @@ if grep -sq json: $d/source ; then + # Exact offset will vary because of tar. + sed -i -e "s,\"[^\"]*/$d/,\"," \ + -e "s|\"offset\": [0-9]*,|\"offset\": x,|" $d/source +- diff -u "$srcdir/test-v2v-i-ova-two-disks.expected2" $d/source ++ diff -u "$srcdir/test-i-ova-two-disks.expected2" $d/source + else + # normalize the output + sed -i -e 's,[^ \t]*\(disk.*.vmdk\),\1,' $d/source +- diff -u "$srcdir/test-v2v-i-ova-two-disks.expected" $d/source ++ diff -u "$srcdir/test-i-ova-two-disks.expected" $d/source + fi +diff --git a/tests/test-v2v-i-ova.ovf b/tests/test-i-ova.ovf +similarity index 100% +rename from tests/test-v2v-i-ova.ovf +rename to tests/test-i-ova.ovf +diff --git a/tests/test-v2v-i-ova.sh b/tests/test-i-ova.sh +similarity index 95% +rename from tests/test-v2v-i-ova.sh +rename to tests/test-i-ova.sh +index 7d988330..35c23e4f 100755 +--- a/tests/test-v2v-i-ova.sh ++++ b/tests/test-i-ova.sh +@@ -32,13 +32,13 @@ requires test -s $f + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win" + +-d=test-v2v-i-ova.d ++d=test-i-ova.d + rm -rf $d + cleanup_fn rm -rf $d + mkdir $d + + vmdk=test-ova.vmdk +-ovf=test-v2v-i-ova.ovf ++ovf=test-i-ova.ovf + mf=test-ova.mf + ova=test-ova.ova + raw=TestOva-sda +@@ -72,4 +72,4 @@ sed \ + < $d/TestOva.xml.old > $d/TestOva.xml + + # Check the libvirt XML output. +-diff -u "$srcdir/test-v2v-i-ova.xml" $d/TestOva.xml ++diff -u "$srcdir/test-i-ova.xml" $d/TestOva.xml +diff --git a/tests/test-v2v-i-ova.xml b/tests/test-i-ova.xml +similarity index 100% +rename from tests/test-v2v-i-ova.xml +rename to tests/test-i-ova.xml +diff --git a/tests/test-v2v-i-vmx-1.expected b/tests/test-i-vmx-1.expected +similarity index 100% +rename from tests/test-v2v-i-vmx-1.expected +rename to tests/test-i-vmx-1.expected +diff --git a/tests/test-v2v-i-vmx-1.vmx b/tests/test-i-vmx-1.vmx +similarity index 100% +rename from tests/test-v2v-i-vmx-1.vmx +rename to tests/test-i-vmx-1.vmx +diff --git a/tests/test-v2v-i-vmx-2.expected b/tests/test-i-vmx-2.expected +similarity index 100% +rename from tests/test-v2v-i-vmx-2.expected +rename to tests/test-i-vmx-2.expected +diff --git a/tests/test-v2v-i-vmx-2.vmx b/tests/test-i-vmx-2.vmx +similarity index 100% +rename from tests/test-v2v-i-vmx-2.vmx +rename to tests/test-i-vmx-2.vmx +diff --git a/tests/test-v2v-i-vmx-3.expected b/tests/test-i-vmx-3.expected +similarity index 100% +rename from tests/test-v2v-i-vmx-3.expected +rename to tests/test-i-vmx-3.expected +diff --git a/tests/test-v2v-i-vmx-3.vmx b/tests/test-i-vmx-3.vmx +similarity index 100% +rename from tests/test-v2v-i-vmx-3.vmx +rename to tests/test-i-vmx-3.vmx +diff --git a/tests/test-v2v-i-vmx-4.expected b/tests/test-i-vmx-4.expected +similarity index 100% +rename from tests/test-v2v-i-vmx-4.expected +rename to tests/test-i-vmx-4.expected +diff --git a/tests/test-v2v-i-vmx-4.vmx b/tests/test-i-vmx-4.vmx +similarity index 100% +rename from tests/test-v2v-i-vmx-4.vmx +rename to tests/test-i-vmx-4.vmx +diff --git a/tests/test-v2v-i-vmx-5.expected b/tests/test-i-vmx-5.expected +similarity index 100% +rename from tests/test-v2v-i-vmx-5.expected +rename to tests/test-i-vmx-5.expected +diff --git a/tests/test-v2v-i-vmx-5.vmx b/tests/test-i-vmx-5.vmx +similarity index 100% +rename from tests/test-v2v-i-vmx-5.vmx +rename to tests/test-i-vmx-5.vmx +diff --git a/tests/test-v2v-i-vmx-6.expected b/tests/test-i-vmx-6.expected +similarity index 100% +rename from tests/test-v2v-i-vmx-6.expected +rename to tests/test-i-vmx-6.expected +diff --git a/tests/test-v2v-i-vmx-6.vmx b/tests/test-i-vmx-6.vmx +similarity index 100% +rename from tests/test-v2v-i-vmx-6.vmx +rename to tests/test-i-vmx-6.vmx +diff --git a/tests/test-v2v-i-vmx-7.expected b/tests/test-i-vmx-7.expected +similarity index 100% +rename from tests/test-v2v-i-vmx-7.expected +rename to tests/test-i-vmx-7.expected +diff --git a/tests/test-v2v-i-vmx-7.vmx b/tests/test-i-vmx-7.vmx +similarity index 100% +rename from tests/test-v2v-i-vmx-7.vmx +rename to tests/test-i-vmx-7.vmx +diff --git a/tests/test-v2v-i-vmx.sh b/tests/test-i-vmx.sh +similarity index 83% +rename from tests/test-v2v-i-vmx.sh +rename to tests/test-i-vmx.sh +index eff27e3d..1f36c938 100755 +--- a/tests/test-v2v-i-vmx.sh ++++ b/tests/test-i-vmx.sh +@@ -34,7 +34,7 @@ export LANG=C + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win" + +-rm -f test-v2v-i-vmx-*.actual ++rm -f test-i-vmx-*.actual + + # For the tests to succeed we need at least the fileName (VMDK input + # files) to exist. +@@ -49,21 +49,21 @@ for fn in $fns; do qemu-img create -f vmdk $fn 512; done + + for i in 1 2 3 4 5 6 7; do + $VG virt-v2v --debug-gc \ +- -i vmx test-v2v-i-vmx-$i.vmx \ +- --print-source > test-v2v-i-vmx-$i.actual ++ -i vmx test-i-vmx-$i.vmx \ ++ --print-source > test-i-vmx-$i.actual + + # Normalize the print-source output. +- mv test-v2v-i-vmx-$i.actual test-v2v-i-vmx-$i.actual.old ++ mv test-i-vmx-$i.actual test-i-vmx-$i.actual.old + sed \ + -e "s,.*Setting up the source.*,," \ + -e "s,.*Opening the source.*,," \ + -e "s,$(pwd),," \ +- < test-v2v-i-vmx-$i.actual.old > test-v2v-i-vmx-$i.actual +- rm test-v2v-i-vmx-$i.actual.old ++ < test-i-vmx-$i.actual.old > test-i-vmx-$i.actual ++ rm test-i-vmx-$i.actual.old + + # Check the output. +- diff -u "$srcdir/test-v2v-i-vmx-$i.expected" test-v2v-i-vmx-$i.actual ++ diff -u "$srcdir/test-i-vmx-$i.expected" test-i-vmx-$i.actual + done + +-rm test-v2v-i-vmx-*.actual ++rm test-i-vmx-*.actual + for fn in $fns; do rm $fn; done +diff --git a/tests/test-v2v-in-place.sh b/tests/test-in-place.sh +similarity index 99% +rename from tests/test-v2v-in-place.sh +rename to tests/test-in-place.sh +index 2b31b0bb..f58f8c38 100755 +--- a/tests/test-v2v-in-place.sh ++++ b/tests/test-in-place.sh +@@ -35,7 +35,7 @@ img_base="$abs_top_builddir/test-data/phony-guests/windows.img" + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win" + +-d=$PWD/test-v2v-in-place.d ++d=$PWD/test-in-place.d + rm -rf $d + cleanup_fn rm -r $d + mkdir $d +diff --git a/tests/test-v2v-inspector.sh b/tests/test-inspector.sh +similarity index 98% +rename from tests/test-v2v-inspector.sh +rename to tests/test-inspector.sh +index 05c2607e..55df7a3f 100755 +--- a/tests/test-v2v-inspector.sh ++++ b/tests/test-inspector.sh +@@ -34,7 +34,7 @@ img="$abs_top_builddir/test-data/phony-guests/windows.img" + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win" + +-d=$PWD/test-v2v-inspector.d ++d=$PWD/test-inspector.d + rm -rf $d + cleanup_fn rm -r $d + mkdir $d +diff --git a/tests/test-v2v-it-vddk-io-query.sh b/tests/test-it-vddk-io-query.sh +similarity index 97% +rename from tests/test-v2v-it-vddk-io-query.sh +rename to tests/test-it-vddk-io-query.sh +index c3fb8eb2..54a8bb15 100755 +--- a/tests/test-v2v-it-vddk-io-query.sh ++++ b/tests/test-it-vddk-io-query.sh +@@ -29,7 +29,7 @@ skip_if_skipped + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win" + +-f=test-v2v-it-vddk-io-query.actual ++f=test-it-vddk-io-query.actual + rm -f $f + + $VG virt-v2v --debug-gc \ +diff --git a/tests/test-v2v-mac-expected.xml b/tests/test-mac-expected.xml +similarity index 100% +rename from tests/test-v2v-mac-expected.xml +rename to tests/test-mac-expected.xml +diff --git a/tests/test-v2v-mac.sh b/tests/test-mac.sh +similarity index 93% +rename from tests/test-v2v-mac.sh +rename to tests/test-mac.sh +index dae571d7..f880a4ea 100755 +--- a/tests/test-v2v-mac.sh ++++ b/tests/test-mac.sh +@@ -27,12 +27,12 @@ set -x + skip_if_skipped + requires test -f ../test-data/phony-guests/windows.img + +-libvirt_uri="test://$abs_builddir/test-v2v-mac.xml" ++libvirt_uri="test://$abs_builddir/test-mac.xml" + f=../test-data/phony-guests/windows.img + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + +-d=test-v2v-mac.d ++d=test-mac.d + rm -rf $d + cleanup_fn rm -r $d + mkdir $d +@@ -54,4 +54,4 @@ sed -n '/interface/,/\/interface/p' $d/windows.xml | + grep -v 'model type=' > $d/networks + + # Test that the output has mapped the networks and bridges correctly. +-diff -ur "$srcdir/test-v2v-mac-expected.xml" $d/networks ++diff -ur "$srcdir/test-mac-expected.xml" $d/networks +diff --git a/tests/test-v2v-mac.xml.in b/tests/test-mac.xml.in +similarity index 100% +rename from tests/test-v2v-mac.xml.in +rename to tests/test-mac.xml.in +diff --git a/tests/test-v2v-machine-readable.sh b/tests/test-machine-readable.sh +similarity index 81% +rename from tests/test-v2v-machine-readable.sh +rename to tests/test-machine-readable.sh +index 4fdedff2..e176c037 100755 +--- a/tests/test-v2v-machine-readable.sh ++++ b/tests/test-machine-readable.sh +@@ -26,8 +26,8 @@ set -x + + skip_if_skipped + +-$VG virt-v2v --debug-gc --machine-readable > test-v2v-machine-readable.out +-grep virt-v2v test-v2v-machine-readable.out +-grep libguestfs-rewrite test-v2v-machine-readable.out ++$VG virt-v2v --debug-gc --machine-readable > test-machine-readable.out ++grep virt-v2v test-machine-readable.out ++grep libguestfs-rewrite test-machine-readable.out + +-rm test-v2v-machine-readable.out ++rm test-machine-readable.out +diff --git a/tests/test-v2v-networks-and-bridges-expected.xml b/tests/test-networks-and-bridges-expected.xml +similarity index 100% +rename from tests/test-v2v-networks-and-bridges-expected.xml +rename to tests/test-networks-and-bridges-expected.xml +diff --git a/tests/test-v2v-networks-and-bridges.sh b/tests/test-networks-and-bridges.sh +similarity index 90% +rename from tests/test-v2v-networks-and-bridges.sh +rename to tests/test-networks-and-bridges.sh +index c50711ca..94d3d24a 100755 +--- a/tests/test-v2v-networks-and-bridges.sh ++++ b/tests/test-networks-and-bridges.sh +@@ -27,12 +27,12 @@ set -x + skip_if_skipped + requires test -f ../test-data/phony-guests/windows.img + +-libvirt_uri="test://$abs_builddir/test-v2v-networks-and-bridges.xml" ++libvirt_uri="test://$abs_builddir/test-networks-and-bridges.xml" + f=../test-data/phony-guests/windows.img + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + +-d=test-v2v-networks-and-bridges.d ++d=test-networks-and-bridges.d + rm -rf $d + cleanup_fn rm -r $d + mkdir $d +@@ -57,4 +57,4 @@ sed -n '/interface/,/\/interface/p' $d/windows.xml | + grep -v 'model type=' > $d/networks + + # Test that the output has mapped the networks and bridges correctly. +-diff -ur "$srcdir/test-v2v-networks-and-bridges-expected.xml" $d/networks ++diff -ur "$srcdir/test-networks-and-bridges-expected.xml" $d/networks +diff --git a/tests/test-v2v-networks-and-bridges.xml.in b/tests/test-networks-and-bridges.xml.in +similarity index 100% +rename from tests/test-v2v-networks-and-bridges.xml.in +rename to tests/test-networks-and-bridges.xml.in +diff --git a/tests/test-v2v-o-glance.sh b/tests/test-o-glance.sh +similarity index 100% +rename from tests/test-v2v-o-glance.sh +rename to tests/test-o-glance.sh +diff --git a/tests/test-v2v-o-kubevirt-fedora.sh b/tests/test-o-kubevirt-fedora.sh +similarity index 94% +rename from tests/test-v2v-o-kubevirt-fedora.sh +rename to tests/test-o-kubevirt-fedora.sh +index 959b37ba..2d4113ce 100755 +--- a/tests/test-v2v-o-kubevirt-fedora.sh ++++ b/tests/test-o-kubevirt-fedora.sh +@@ -31,7 +31,7 @@ requires test -f ../test-data/phony-guests/fedora.img + libvirt_uri="test://$abs_top_builddir/test-data/phony-guests/guests.xml" + fedora=../test-data/phony-guests/fedora.img + +-d=test-v2v-o-kubevirt-fedora.d ++d=test-o-kubevirt-fedora.d + rm -rf $d + cleanup_fn rm -r $d + mkdir $d +@@ -54,4 +54,4 @@ sed -i \ + $d/test.yaml + + # Compare yaml to the expected output. +-diff -u test-v2v-o-kubevirt-fedora.yaml.expected $d/test.yaml ++diff -u test-o-kubevirt-fedora.yaml.expected $d/test.yaml +diff --git a/tests/test-v2v-o-kubevirt-fedora.yaml.expected b/tests/test-o-kubevirt-fedora.yaml.expected +similarity index 100% +rename from tests/test-v2v-o-kubevirt-fedora.yaml.expected +rename to tests/test-o-kubevirt-fedora.yaml.expected +diff --git a/tests/test-v2v-o-kubevirt-windows.sh b/tests/test-o-kubevirt-windows.sh +similarity index 94% +rename from tests/test-v2v-o-kubevirt-windows.sh +rename to tests/test-o-kubevirt-windows.sh +index 4c82f1d0..ed9b84f0 100755 +--- a/tests/test-v2v-o-kubevirt-windows.sh ++++ b/tests/test-o-kubevirt-windows.sh +@@ -34,7 +34,7 @@ windows=../test-data/phony-guests/windows.img + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win" + +-d=test-v2v-o-kubevirt-windows.d ++d=test-o-kubevirt-windows.d + rm -rf $d + cleanup_fn rm -r $d + mkdir $d +@@ -57,4 +57,4 @@ sed -i \ + $d/test.yaml + + # Compare yaml to the expected output. +-diff -u test-v2v-o-kubevirt-windows.yaml.expected $d/test.yaml ++diff -u test-o-kubevirt-windows.yaml.expected $d/test.yaml +diff --git a/tests/test-v2v-o-kubevirt-windows.yaml.expected b/tests/test-o-kubevirt-windows.yaml.expected +similarity index 100% +rename from tests/test-v2v-o-kubevirt-windows.yaml.expected +rename to tests/test-o-kubevirt-windows.yaml.expected +diff --git a/tests/test-v2v-o-libvirt.sh b/tests/test-o-libvirt.sh +similarity index 98% +rename from tests/test-v2v-o-libvirt.sh +rename to tests/test-o-libvirt.sh +index d44f55dd..49f8c8da 100755 +--- a/tests/test-v2v-o-libvirt.sh ++++ b/tests/test-o-libvirt.sh +@@ -49,7 +49,7 @@ guestname=tmp-$(tr -cd 'a-f0-9' < /dev/urandom | head -c 8) + # Generate a random pool name. + poolname=tmp-$(tr -cd 'a-f0-9' < /dev/urandom | head -c 8) + +-d=test-v2v-o-libvirt.d ++d=test-o-libvirt.d + rm -rf $d + + # Clean up. +diff --git a/tests/test-v2v-o-local-qcow2-compressed.sh b/tests/test-o-local-qcow2-compressed.sh +similarity index 97% +rename from tests/test-v2v-o-local-qcow2-compressed.sh +rename to tests/test-o-local-qcow2-compressed.sh +index 32c9ebbe..f5a7ac6c 100755 +--- a/tests/test-v2v-o-local-qcow2-compressed.sh ++++ b/tests/test-o-local-qcow2-compressed.sh +@@ -38,7 +38,7 @@ nbdcopy --version | { + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + +-d=test-v2v-o-local-qcow2-compressed.d ++d=test-o-local-qcow2-compressed.d + rm -rf $d + cleanup_fn rm -rf $d + mkdir $d +diff --git a/tests/test-v2v-o-null.sh b/tests/test-o-null.sh +similarity index 100% +rename from tests/test-v2v-o-null.sh +rename to tests/test-o-null.sh +diff --git a/tests/test-v2v-o-openstack.sh b/tests/test-o-openstack.sh +similarity index 97% +rename from tests/test-v2v-o-openstack.sh +rename to tests/test-o-openstack.sh +index fdad4c21..aea5be8c 100755 +--- a/tests/test-v2v-o-openstack.sh ++++ b/tests/test-o-openstack.sh +@@ -33,7 +33,7 @@ windows=../test-data/phony-guests/windows.img + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + +-d=test-v2v-o-openstack.d ++d=test-o-openstack.d + rm -rf $d + cleanup_fn rm -r $d + mkdir $d +@@ -43,7 +43,7 @@ mkdir $d + # JSON output where required. + cat > $d/openstack <<'EOF' + #!/bin/bash - +-echo "$@" >> test-v2v-o-openstack.d/log ++echo "$@" >> test-o-openstack.d/log + echo "$@" | grep -sq -- "-f json" && \ + echo '{ "id": "dummy-vol-id", "status": "available" }' + exit 0 +diff --git a/tests/test-v2v-o-qemu.sh b/tests/test-o-qemu.sh +similarity index 98% +rename from tests/test-v2v-o-qemu.sh +rename to tests/test-o-qemu.sh +index 2f36261d..539fac3d 100755 +--- a/tests/test-v2v-o-qemu.sh ++++ b/tests/test-o-qemu.sh +@@ -32,7 +32,7 @@ f=../test-data/phony-guests/windows.img + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + +-d=test-v2v-o-qemu.d ++d=test-o-qemu.d + rm -rf $d + cleanup_fn rm -r $d + mkdir $d +diff --git a/tests/test-v2v-o-rhv-upload-module/imageio.py b/tests/test-o-rhv-upload-module/imageio.py +similarity index 98% +rename from tests/test-v2v-o-rhv-upload-module/imageio.py +rename to tests/test-o-rhv-upload-module/imageio.py +index b9a491d7..5cf0e06e 100755 +--- a/tests/test-v2v-o-rhv-upload-module/imageio.py ++++ b/tests/test-o-rhv-upload-module/imageio.py +@@ -17,7 +17,7 @@ + # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + # Fake imageio web server used as a test harness. +-# See v2v/test-v2v-o-rhv-upload.sh ++# See v2v/test-o-rhv-upload.sh + + import sys + import threading +diff --git a/tests/test-v2v-o-rhv-upload-module/ovirtsdk4/__init__.py b/tests/test-o-rhv-upload-module/ovirtsdk4/__init__.py +similarity index 98% +rename from tests/test-v2v-o-rhv-upload-module/ovirtsdk4/__init__.py +rename to tests/test-o-rhv-upload-module/ovirtsdk4/__init__.py +index e33d0714..fefc9821 100644 +--- a/tests/test-v2v-o-rhv-upload-module/ovirtsdk4/__init__.py ++++ b/tests/test-o-rhv-upload-module/ovirtsdk4/__init__.py +@@ -16,7 +16,7 @@ + # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + # Fake ovirtsdk4 module used as a test harness. +-# See v2v/test-v2v-o-rhv-upload.sh ++# See v2v/test-o-rhv-upload.sh + + class Error(Exception): + pass +diff --git a/tests/test-v2v-o-rhv-upload-module/ovirtsdk4/types.py b/tests/test-o-rhv-upload-module/ovirtsdk4/types.py +similarity index 99% +rename from tests/test-v2v-o-rhv-upload-module/ovirtsdk4/types.py +rename to tests/test-o-rhv-upload-module/ovirtsdk4/types.py +index 38d89573..397432f1 100644 +--- a/tests/test-v2v-o-rhv-upload-module/ovirtsdk4/types.py ++++ b/tests/test-o-rhv-upload-module/ovirtsdk4/types.py +@@ -16,7 +16,7 @@ + # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + # Fake ovirtsdk4 module used as a test harness. +-# See v2v/test-v2v-o-rhv-upload.sh ++# See v2v/test-o-rhv-upload.sh + + import os + from enum import Enum +diff --git a/tests/test-v2v-o-rhv-upload-oo-query.sh b/tests/test-o-rhv-upload-oo-query.sh +similarity index 96% +rename from tests/test-v2v-o-rhv-upload-oo-query.sh +rename to tests/test-o-rhv-upload-oo-query.sh +index 5ef56b90..f3e86dc3 100755 +--- a/tests/test-v2v-o-rhv-upload-oo-query.sh ++++ b/tests/test-o-rhv-upload-oo-query.sh +@@ -29,7 +29,7 @@ skip_if_skipped + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win" + +-f=test-v2v-o-rhv-upload-oo-query.actual ++f=test-o-rhv-upload-oo-query.actual + rm -f $f + + $VG virt-v2v --debug-gc \ +diff --git a/tests/test-v2v-o-rhv-upload.sh b/tests/test-o-rhv-upload.sh +similarity index 89% +rename from tests/test-v2v-o-rhv-upload.sh +rename to tests/test-o-rhv-upload.sh +index 15d5d028..51307f80 100755 +--- a/tests/test-v2v-o-rhv-upload.sh ++++ b/tests/test-o-rhv-upload.sh +@@ -19,7 +19,7 @@ + # Test -o rhv-upload. + # + # These uses a test harness (see +-# tests/test-v2v-o-rhv-upload-module/ovirtsdk4) to fake responses from ++# tests/test-o-rhv-upload-module/ovirtsdk4) to fake responses from + # oVirt. + + set -e +@@ -39,13 +39,13 @@ f=../test-data/phony-guests/windows.img + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win" +-export PYTHONPATH=$srcdir/test-v2v-o-rhv-upload-module:$PYTHONPATH ++export PYTHONPATH=$srcdir/test-o-rhv-upload-module:$PYTHONPATH + + # Run the imageio process and get the port number. +-log=test-v2v-o-rhv-upload.webserver.log ++log=test-o-rhv-upload.webserver.log + rm -f $log + cleanup_fn rm -f $log +-$srcdir/test-v2v-o-rhv-upload-module/imageio.py >$log 2>&1 & ++$srcdir/test-o-rhv-upload-module/imageio.py >$log 2>&1 & + pid=$! + cleanup_fn kill $pid + export IMAGEIO_PORT= +diff --git a/tests/test-v2v-o-rhv.ovf.expected b/tests/test-o-rhv.ovf.expected +similarity index 100% +rename from tests/test-v2v-o-rhv.ovf.expected +rename to tests/test-o-rhv.ovf.expected +diff --git a/tests/test-v2v-o-rhv.sh b/tests/test-o-rhv.sh +similarity index 97% +rename from tests/test-v2v-o-rhv.sh +rename to tests/test-o-rhv.sh +index e6ec7c61..86c37734 100755 +--- a/tests/test-v2v-o-rhv.sh ++++ b/tests/test-o-rhv.sh +@@ -33,7 +33,7 @@ f=../test-data/phony-guests/windows.img + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win" + +-d=test-v2v-o-rhv.d ++d=test-o-rhv.d + rm -rf $d + cleanup_fn rm -r $d + mkdir $d +@@ -84,4 +84,4 @@ sed -i \ + -e 's/\ $d/output + +@@ -48,4 +48,4 @@ sed -e 's,/.*/windows.img,windows.img,' | + grep -v '^$' \ + > $d/output + +-diff -u "$srcdir/test-v2v-print-source.expected" $d/output ++diff -u "$srcdir/test-print-source.expected" $d/output +diff --git a/tests/test-v2v-print-source.xml.in b/tests/test-print-source.xml.in +similarity index 100% +rename from tests/test-v2v-print-source.xml.in +rename to tests/test-print-source.xml.in +diff --git a/tests/test-v2v-sound.sh b/tests/test-sound.sh +similarity index 94% +rename from tests/test-v2v-sound.sh +rename to tests/test-sound.sh +index 16f8d720..0205bc82 100755 +--- a/tests/test-v2v-sound.sh ++++ b/tests/test-sound.sh +@@ -27,12 +27,12 @@ set -x + skip_if_skipped + requires test -f ../test-data/phony-guests/windows.img + +-libvirt_uri="test://$abs_builddir/test-v2v-sound.xml" ++libvirt_uri="test://$abs_builddir/test-sound.xml" + f=../test-data/phony-guests/windows.img + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + +-d=test-v2v-sound.d ++d=test-sound.d + rm -rf $d + cleanup_fn rm -r $d + mkdir $d +diff --git a/tests/test-v2v-sound.xml.in b/tests/test-sound.xml.in +similarity index 100% +rename from tests/test-v2v-sound.xml.in +rename to tests/test-sound.xml.in +diff --git a/tests/test-v2v-trim.sh b/tests/test-trim.sh +similarity index 99% +rename from tests/test-v2v-trim.sh +rename to tests/test-trim.sh +index ed6c031d..a3247666 100755 +--- a/tests/test-v2v-trim.sh ++++ b/tests/test-trim.sh +@@ -31,7 +31,7 @@ set -x + slow_test + skip_if_skipped + +-d=test-v2v-trim.d ++d=test-trim.d + rm -rf $d + cleanup_fn rm -r $d + mkdir $d +diff --git a/tests/test-v2v-virtio-win-iso.sh b/tests/test-virtio-win-iso.sh +similarity index 99% +rename from tests/test-v2v-virtio-win-iso.sh +rename to tests/test-virtio-win-iso.sh +index 2e133034..d2adbc6b 100755 +--- a/tests/test-v2v-virtio-win-iso.sh ++++ b/tests/test-virtio-win-iso.sh +@@ -49,7 +49,7 @@ function random_choice + choices=("/dev/sda2" "single" "first") + root=`random_choice` + +-d=test-v2v-virtio-win-iso.d ++d=test-virtio-win-iso.d + rm -rf $d + cleanup_fn rm -r $d + mkdir $d +diff --git a/tests/test-v2v-windows-conversion.sh b/tests/test-windows-conversion.sh +similarity index 98% +rename from tests/test-v2v-windows-conversion.sh +rename to tests/test-windows-conversion.sh +index 1ff41f6a..2f9b0ca5 100755 +--- a/tests/test-v2v-windows-conversion.sh ++++ b/tests/test-windows-conversion.sh +@@ -43,7 +43,7 @@ function random_choice + choices=("/dev/sda2" "single" "first") + root=`random_choice` + +-d=test-v2v-windows-conversion.d ++d=test-windows-conversion.d + rm -rf $d + cleanup_fn rm -r $d + mkdir $d diff --git a/0021-tests-Sort-the-tests-into-alphabetical-order.patch b/0021-tests-Sort-the-tests-into-alphabetical-order.patch new file mode 100644 index 0000000..7728602 --- /dev/null +++ b/0021-tests-Sort-the-tests-into-alphabetical-order.patch @@ -0,0 +1,272 @@ +From a9d2eb43fdd5f1d115cc5b048a4b252a533d72cd Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 5 Dec 2024 15:19:15 +0000 +Subject: [PATCH] tests: Sort the tests into alphabetical order + +The list of tests had grown organically over a very long time. + +Also rename the "odd one out" rhbz* to test-rhbz*. + +(cherry picked from commit d80c05a27098c6affaca4363372cae2354d9bc4f) +--- + .gitignore | 2 +- + configure.ac | 2 +- + tests/Makefile.am | 70 +++++++++---------- + tests/rhbz1232192.xml | 26 +++++++ + tests/{rhbz1232192.sh => test-rhbz1232192.sh} | 2 +- + ...1232192.xml.in => test-rhbz1232192.xml.in} | 0 + 6 files changed, 64 insertions(+), 38 deletions(-) + create mode 100644 tests/rhbz1232192.xml + rename tests/{rhbz1232192.sh => test-rhbz1232192.sh} (95%) + rename tests/{rhbz1232192.xml.in => test-rhbz1232192.xml.in} (100%) + +diff --git a/.gitignore b/.gitignore +index b8abc3f8..9dcd4611 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -121,13 +121,13 @@ Makefile.in + /test-data/phony-guests/windows-system + /tests/functions.sh + /tests/libvirt-is-version +-/tests/rhbz1232192.xml + /tests/test-cdrom.xml + /tests/test-conversion-of-*.sh + /tests/test-floppy.xml + /tests/test-mac.xml + /tests/test-networks-and-bridges.xml + /tests/test-print-source.xml ++/tests/test-rhbz1232192.xml + /tests/test-sound.xml + /tests/windows.vmdk + /v2v/.depend +diff --git a/configure.ac b/configure.ac +index 300b421e..623c634d 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -163,12 +163,12 @@ AC_CONFIG_FILES([Makefile + test-data/phony-guests/guests.xml + tests/functions.sh + tests/Makefile +- tests/rhbz1232192.xml + tests/test-cdrom.xml + tests/test-floppy.xml + tests/test-mac.xml + tests/test-networks-and-bridges.xml + tests/test-print-source.xml ++ tests/test-rhbz1232192.xml + tests/test-sound.xml + v2v/Makefile]) + +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 4c4a8e55..0dd5927b 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -56,6 +56,17 @@ libvirt_is_version_CFLAGS = \ + TESTS_ENVIRONMENT = $(top_builddir)/run --test + + TESTS = \ ++ test-bad-networks-and-bridges.sh \ ++ test-cdrom.sh \ ++ test-customize.sh \ ++ test-fedora-btrfs-conversion.sh \ ++ test-fedora-conversion.sh \ ++ test-fedora-luks-on-lvm-conversion.sh \ ++ test-fedora-lvm-on-luks-conversion.sh \ ++ test-fedora-md-conversion.sh \ ++ test-floppy.sh \ ++ test-i-disk-parallel.sh \ ++ test-i-disk.sh \ + test-i-ova-bad-sha1.sh \ + test-i-ova-bad-sha256.sh \ + test-i-ova-directory.sh \ +@@ -68,18 +79,11 @@ TESTS = \ + test-i-ova-subfolders.sh \ + test-i-ova-tar.sh \ + test-i-ova-two-disks.sh \ +- test-i-vmx.sh \ +- test-it-vddk-io-query.sh \ +- test-o-rhv-upload-oo-query.sh \ +- test-o-vdsm-oo-query.sh \ +- test-bad-networks-and-bridges.sh \ +- test-cdrom.sh \ +- test-floppy.sh \ +- test-i-disk.sh \ +- test-i-disk-parallel.sh \ + test-i-ova.sh \ ++ test-i-vmx.sh \ + test-in-place.sh \ + test-inspector.sh \ ++ test-it-vddk-io-query.sh \ + test-mac.sh \ + test-machine-readable.sh \ + test-networks-and-bridges.sh \ +@@ -91,24 +95,20 @@ TESTS = \ + test-o-null.sh \ + test-o-openstack.sh \ + test-o-qemu.sh \ +- test-o-rhv.sh \ ++ test-o-rhv-upload-oo-query.sh \ + test-o-rhv-upload.sh \ ++ test-o-rhv.sh \ ++ test-o-vdsm-oo-query.sh \ + test-o-vdsm-options.sh \ + test-oa-option-qcow2.sh \ + test-oa-option-raw.sh \ + test-of-option.sh \ + test-on-option.sh \ + test-print-source.sh \ ++ test-rhbz1232192.sh \ + test-sound.sh \ + test-virtio-win-iso.sh \ +- test-fedora-conversion.sh \ +- test-fedora-btrfs-conversion.sh \ +- test-fedora-luks-on-lvm-conversion.sh \ +- test-fedora-lvm-on-luks-conversion.sh \ +- test-fedora-md-conversion.sh \ + test-windows-conversion.sh \ +- test-customize.sh \ +- rhbz1232192.sh \ + $(SLOW_TESTS) \ + $(ROOT_TESTS) + +@@ -184,16 +184,17 @@ EXTRA_DIST += \ + test-bad-networks-and-bridges.sh \ + test-cdrom.expected \ + test-cdrom.sh \ ++ test-conversion-of.sh \ + test-customize.sh \ +- test-fedora-conversion.sh \ + test-fedora-btrfs-conversion.sh \ ++ test-fedora-conversion.sh \ + test-fedora-luks-on-lvm-conversion.sh \ + test-fedora-lvm-on-luks-conversion.sh \ + test-fedora-md-conversion.sh \ + test-floppy.expected \ + test-floppy.sh \ +- test-i-disk.sh \ + test-i-disk-parallel.sh \ ++ test-i-disk.sh \ + test-i-ova-as-root.ovf \ + test-i-ova-as-root.sh \ + test-i-ova-bad-sha1.sh \ +@@ -228,46 +229,46 @@ EXTRA_DIST += \ + test-i-ova.ovf \ + test-i-ova.sh \ + test-i-ova.xml \ +- test-i-vmx.sh \ + test-i-vmx-1.expected \ +- test-i-vmx-2.expected \ +- test-i-vmx-3.expected \ +- test-i-vmx-4.expected \ +- test-i-vmx-5.expected \ +- test-i-vmx-6.expected \ +- test-i-vmx-7.expected \ + test-i-vmx-1.vmx \ ++ test-i-vmx-2.expected \ + test-i-vmx-2.vmx \ ++ test-i-vmx-3.expected \ + test-i-vmx-3.vmx \ ++ test-i-vmx-4.expected \ + test-i-vmx-4.vmx \ ++ test-i-vmx-5.expected \ + test-i-vmx-5.vmx \ ++ test-i-vmx-6.expected \ + test-i-vmx-6.vmx \ ++ test-i-vmx-7.expected \ + test-i-vmx-7.vmx \ ++ test-i-vmx.sh \ + test-in-place.sh \ + test-inspector.sh \ + test-it-vddk-io-query.sh \ +- test-machine-readable.sh \ + test-mac-expected.xml \ + test-mac.sh \ +- test-networks-and-bridges.sh \ ++ test-machine-readable.sh \ + test-networks-and-bridges-expected.xml \ ++ test-networks-and-bridges.sh \ + test-o-glance.sh \ + test-o-kubevirt-fedora.sh \ +- test-o-kubevirt-windows.sh \ + test-o-kubevirt-fedora.yaml.expected \ ++ test-o-kubevirt-windows.sh \ + test-o-kubevirt-windows.yaml.expected \ + test-o-libvirt.sh \ + test-o-local-qcow2-compressed.sh \ + test-o-null.sh \ + test-o-openstack.sh \ + test-o-qemu.sh \ +- test-o-rhv.ovf.expected \ +- test-o-rhv.sh \ +- test-o-rhv-upload.sh \ + test-o-rhv-upload-module/imageio.py \ + test-o-rhv-upload-module/ovirtsdk4/__init__.py \ + test-o-rhv-upload-module/ovirtsdk4/types.py \ + test-o-rhv-upload-oo-query.sh \ ++ test-o-rhv-upload.sh \ ++ test-o-rhv.ovf.expected \ ++ test-o-rhv.sh \ + test-o-vdsm-oo-query.sh \ + test-o-vdsm-options.ovf.expected \ + test-o-vdsm-options.sh \ +@@ -277,9 +278,8 @@ EXTRA_DIST += \ + test-on-option.sh \ + test-print-source.expected \ + test-print-source.sh \ +- test-conversion-of.sh \ ++ test-rhbz1232192.sh \ + test-sound.sh \ + test-trim.sh \ + test-virtio-win-iso.sh \ +- test-windows-conversion.sh \ +- rhbz1232192.sh ++ test-windows-conversion.sh +diff --git a/tests/rhbz1232192.xml b/tests/rhbz1232192.xml +new file mode 100644 +index 00000000..cf0d7a45 +--- /dev/null ++++ b/tests/rhbz1232192.xml +@@ -0,0 +1,26 @@ ++ ++ rhbz1232192 ++ 1048576 ++ 2 ++ ++ hvm ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/tests/rhbz1232192.sh b/tests/test-rhbz1232192.sh +similarity index 95% +rename from tests/rhbz1232192.sh +rename to tests/test-rhbz1232192.sh +index d2180439..21eb2dbd 100755 +--- a/tests/rhbz1232192.sh ++++ b/tests/test-rhbz1232192.sh +@@ -32,4 +32,4 @@ requires test -f ../test-data/phony-guests/blank-disk.img + + export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" + +-virt-v2v -i libvirtxml rhbz1232192.xml -o null ++virt-v2v -i libvirtxml test-rhbz1232192.xml -o null +diff --git a/tests/rhbz1232192.xml.in b/tests/test-rhbz1232192.xml.in +similarity index 100% +rename from tests/rhbz1232192.xml.in +rename to tests/test-rhbz1232192.xml.in diff --git a/0022-docs-Embolden-whole-O.patch b/0022-docs-Embolden-whole-O.patch new file mode 100644 index 0000000..f747e85 --- /dev/null +++ b/0022-docs-Embolden-whole-O.patch @@ -0,0 +1,26 @@ +From 66a6afb741d32f998633b121c2fb9813e5195820 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 5 Dec 2024 13:35:24 +0000 +Subject: [PATCH] docs: Embolden whole "-O -" + +Since this is typed literally make sure the whole string is +emboldened, according to our usual style. + +(cherry picked from commit 3b81441fdb9e43eae3619c247e0d945d143fc92f) +--- + docs/virt-v2v-inspector.pod | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/docs/virt-v2v-inspector.pod b/docs/virt-v2v-inspector.pod +index 6b2ba2a9..8201fcf9 100644 +--- a/docs/virt-v2v-inspector.pod ++++ b/docs/virt-v2v-inspector.pod +@@ -138,7 +138,7 @@ Display help. + + Write the output to a file called F. + +-=item B<-O> - ++=item B<-O -> + + Write the output to stdout. This is also the default if the I<-O> + option is omitted. diff --git a/0023-in-place-Fix-name-of-program-in-the-help-output.patch b/0023-in-place-Fix-name-of-program-in-the-help-output.patch new file mode 100644 index 0000000..e83c535 --- /dev/null +++ b/0023-in-place-Fix-name-of-program-in-the-help-output.patch @@ -0,0 +1,26 @@ +From 900641084045a53f9c59e099e7d49dbb43bda3eb Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 5 Dec 2024 17:17:25 +0000 +Subject: [PATCH] in-place: Fix name of program in the --help output + +(cherry picked from commit 00bd17ceb1ce0ff1f837b7621596d3b1e16ccc65) +--- + in-place/in_place.ml | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/in-place/in_place.ml b/in-place/in_place.ml +index 9d24de78..42075139 100644 +--- a/in-place/in_place.ml ++++ b/in-place/in_place.ml +@@ -194,9 +194,9 @@ let rec main () = + Note this program modifies the guest in-place with no backup. + Normally you should use virt-v2v. + +-virt-v2v -i libvirtxml guest-domain.xml ++virt-v2v-in-place -i libvirtxml guest-domain.xml + +-virt-v2v -i disk disk.img ++virt-v2v-in-place -i disk disk.img + + A short summary of the options is given below. For detailed help please + read the man page virt-v2v-in-place(1). diff --git a/0024-inspector-Reorder-O-option-in-alphabetical-order.patch b/0024-inspector-Reorder-O-option-in-alphabetical-order.patch new file mode 100644 index 0000000..23eef37 --- /dev/null +++ b/0024-inspector-Reorder-O-option-in-alphabetical-order.patch @@ -0,0 +1,28 @@ +From 908f4148d8479c0f5e74ec21471adc57696eed55 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 5 Dec 2024 17:27:38 +0000 +Subject: [PATCH] inspector: Reorder -O option in alphabetical order + +Updates: commit 0805ea93796b8b57e7c9f0bc04f83ea76a9820a5 +(cherry picked from commit 8efb3ac06467f32901fa0447176311ff71aa53f9) +--- + inspector/inspector.ml | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/inspector/inspector.ml b/inspector/inspector.ml +index 1ad67bbc..aeddbec6 100644 +--- a/inspector/inspector.ml ++++ b/inspector/inspector.ml +@@ -178,10 +178,10 @@ let rec main () = + s_"Map NIC to network or bridge or assign static IP"; + [ S 'n'; L"network" ], Getopt.String ("in:out", add_network), + s_"Map network ‘in’ to ‘out’"; +- [ L"root" ], Getopt.String ("ask|... ", set_root_choice), +- s_"How to choose root filesystem"; + [ S 'O' ], Getopt.String ("output.xml", set_output_file_option), + s_"Set the output filename"; ++ [ L"root" ], Getopt.String ("ask|... ", set_root_choice), ++ s_"How to choose root filesystem"; + ] in + + (* Append virt-customize options. *) diff --git a/0025-v2v-Ensure-parallel-1.patch b/0025-v2v-Ensure-parallel-1.patch new file mode 100644 index 0000000..e97224e --- /dev/null +++ b/0025-v2v-Ensure-parallel-1.patch @@ -0,0 +1,24 @@ +From b242c331e0e3a3d04369aaefe7e910c978491368 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Sat, 7 Dec 2024 11:13:09 +0000 +Subject: [PATCH] v2v: Ensure --parallel >= 1 + +Fixes: commit fd1148f79581b148525eb12154aef7603ccf0baa +(cherry picked from commit 755ce5dc08929ef4ef9dc0b0290d380574cb1235) +--- + v2v/v2v.ml | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/v2v/v2v.ml b/v2v/v2v.ml +index 68502884..e56462a5 100644 +--- a/v2v/v2v.ml ++++ b/v2v/v2v.ml +@@ -369,6 +369,8 @@ read the man page virt-v2v(1). + let output_mode = !output_mode in + let output_name = !output_name in + let parallel = !parallel in ++ if parallel < 1 then ++ error (f_"--parallel parameter must be >= 1"); + let print_source = !print_source in + let root_choice = !root_choice in + let static_ips = !static_ips in diff --git a/0026-inspector-Move-the-code-that-creates-XML-output-to-a.patch b/0026-inspector-Move-the-code-that-creates-XML-output-to-a.patch new file mode 100644 index 0000000..3472ff0 --- /dev/null +++ b/0026-inspector-Move-the-code-that-creates-XML-output-to-a.patch @@ -0,0 +1,403 @@ +From 479f2cc10e74304e2d6202ad13dd99bdc9a6923d Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 5 Dec 2024 13:26:43 +0000 +Subject: [PATCH] inspector: Move the code that creates XML output to a + separate file + +Simple code motion, so that we can reuse this code in +virt-v2v-in-place. + +(cherry picked from commit 3d2d65a04ae75716c084063b572ff916fa83fd1b) +--- + inspector/Makefile.am | 2 + + inspector/create_inspector_xml.ml | 167 +++++++++++++++++++++++++++++ + inspector/create_inspector_xml.mli | 22 ++++ + inspector/inspector.ml | 144 +------------------------ + 4 files changed, 193 insertions(+), 142 deletions(-) + create mode 100644 inspector/create_inspector_xml.ml + create mode 100644 inspector/create_inspector_xml.mli + +diff --git a/inspector/Makefile.am b/inspector/Makefile.am +index 172b2dc0..15f8cc34 100644 +--- a/inspector/Makefile.am ++++ b/inspector/Makefile.am +@@ -23,9 +23,11 @@ EXTRA_DIST = \ + $(SOURCES_C) + + SOURCES_MLI = \ ++ create_inspector_xml.mli \ + inspector.mli + + SOURCES_ML = \ ++ create_inspector_xml.ml \ + inspector.ml + + SOURCES_C = \ +diff --git a/inspector/create_inspector_xml.ml b/inspector/create_inspector_xml.ml +new file mode 100644 +index 00000000..a3281d46 +--- /dev/null ++++ b/inspector/create_inspector_xml.ml +@@ -0,0 +1,167 @@ ++(* virt-v2v-inspector ++ * Copyright (C) 2009-2022 Red Hat Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program 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 General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License along ++ * with this program; if not, write to the Free Software Foundation, Inc., ++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++ *) ++ ++open Printf ++ ++open Std_utils ++open Tools_utils ++ ++open Types ++open Utils ++open DOM ++ ++(* This is where we construct the final XML document based on ++ * these inputs: ++ * - Global configuration like the version of v2v etc. ++ * - The NBD input sockets: v2vdir // "in0", "in1", etc ++ * - The inspection data (Types.inspect) ++ *) ++let rec create_inspector_xml v2vdir inspect target_meta = ++ let body = ref [] in ++ ++ (* Record the version of virt-v2v etc, mainly for debugging. *) ++ List.push_back_list body [ ++ Comment generated_by; ++ e "program" [] [PCData "virt-v2v-inspector"]; ++ e "package" [] [PCData Config.package_name]; ++ e "version" [] [PCData Config.package_version]; ++ ]; ++ ++ (* The disks. *) ++ let disks = ref [] in ++ ++ List.iter ( ++ fun (i, virtual_size) -> ++ let elems = ref [] in ++ List.push_back elems (e "virtual-size" [] ++ [PCData (Int64.to_string virtual_size)]); ++ (match get_input_disk_allocated v2vdir i with ++ | None -> () ++ | Some real_size -> ++ List.push_back elems (e "allocated" [ "estimated", "true" ] ++ [PCData (Int64.to_string real_size)]) ++ ); ++ ++ List.push_back disks (e "disk" [ "index", string_of_int i ] !elems) ++ ) (get_disks v2vdir); ++ List.push_back body (e "disks" [] !disks); ++ ++ (* The field is outside the element, ++ * since firmware is not part of the OS, and also because this is ++ * consistent with virt-drivers output. ++ *) ++ List.push_back body ++ (e "firmware" ++ ["type", ++ string_of_target_firmware target_meta.target_firmware] ++ []); ++ ++ (* The inspection data. *) ++ (* NB: Keep these field names compatible with virt-inspector! *) ++ let os = ref [] in ++ List.push_back os (e "name" [] [PCData inspect.i_type]); ++ List.push_back os (e "distro" [] [PCData inspect.i_distro]); ++ List.push_back os (e "osinfo" [] [PCData inspect.i_osinfo]); ++ List.push_back os (e "arch" [] [PCData inspect.i_arch]); ++ List.push_back os (e "major_version" [] ++ [PCData (string_of_int inspect.i_major_version)]); ++ List.push_back os (e "minor_version" [] ++ [PCData (string_of_int inspect.i_minor_version)]); ++ if inspect.i_package_format <> "" then ++ List.push_back os (e "package_format" [] ++ [PCData inspect.i_package_format]); ++ if inspect.i_package_management <> "" then ++ List.push_back os (e "package_management" [] ++ [PCData inspect.i_package_management]); ++ if inspect.i_product_name <> "" then ++ List.push_back os (e "product_name" [] [PCData inspect.i_product_name]); ++ if inspect.i_product_variant <> "" then ++ List.push_back os (e "product_variant" [] ++ [PCData inspect.i_product_variant]); ++ ++ if inspect.i_windows_systemroot <> "" then ++ List.push_back os (e "windows_systemroot" [] ++ [PCData inspect.i_windows_systemroot]); ++ if inspect.i_windows_software_hive <> "" then ++ List.push_back os (e "windows_software_hive" [] ++ [PCData inspect.i_windows_software_hive]); ++ if inspect.i_windows_systemroot <> "" then ++ List.push_back os (e "windows_system_hive" [] ++ [PCData inspect.i_windows_system_hive]); ++ if inspect.i_windows_current_control_set <> "" then ++ List.push_back os (e "windows_current_control_set" [] ++ [PCData inspect.i_windows_current_control_set]); ++ ++ List.push_back os (e "root" [] [PCData inspect.i_root]); ++ let mps = ref [] in ++ List.iter ( ++ fun (fs, dev) -> ++ List.push_back mps (e "mountpoint" [ "dev", dev ] [PCData fs]) ++ ) inspect.i_mountpoints; ++ List.push_back os (e "mountpoints" [] !mps); ++ ++ List.push_back body (e "operatingsystem" [] !os); ++ ++ (* Construct the final document. *) ++ (doc "v2v-inspection" [] !body : DOM.doc) ++ ++ ++(* This is a copy of {!Output.get_disks}. *) ++and get_disks dir = ++ let rec loop acc i = ++ let socket = sprintf "%s/in%d" dir i in ++ if Sys.file_exists socket then ( ++ let size = Utils.with_nbd_connect_unix ~socket NBD.get_size in ++ loop ((i, size) :: acc) (i+1) ++ ) ++ else ++ List.rev acc ++ in ++ loop [] 0 ++ ++(* This is like {!Utils.get_disk_allocated} but works on the input disks. *) ++and get_input_disk_allocated dir i = ++ let socket = sprintf "%s/in%d" dir i ++ and alloc_ctx = "base:allocation" in ++ with_nbd_connect_unix ~socket ~meta_contexts:[alloc_ctx] ++ (fun nbd -> ++ if NBD.can_meta_context nbd alloc_ctx then ( ++ (* Get the list of extents, using a 2GiB chunk size as hint. *) ++ let size = NBD.get_size nbd ++ and allocated = ref 0_L ++ and fetch_offset = ref 0_L in ++ while !fetch_offset < size do ++ let remaining = size -^ !fetch_offset in ++ let fetch_size = min 0x8000_0000_L remaining in ++ NBD.block_status nbd fetch_size !fetch_offset ++ (fun ctx offset entries err -> ++ assert (ctx = alloc_ctx); ++ for i = 0 to Array.length entries / 2 - 1 do ++ let len = entries.(i * 2) ++ and typ = entries.(i * 2 + 1) in ++ assert (len > 0_L); ++ if typ &^ 1_L = 0_L then ++ allocated := !allocated +^ len; ++ fetch_offset := !fetch_offset +^ len ++ done; ++ 0 ++ ) ++ done; ++ Some !allocated ++ ) else None ++ ) +diff --git a/inspector/create_inspector_xml.mli b/inspector/create_inspector_xml.mli +new file mode 100644 +index 00000000..4f09269c +--- /dev/null ++++ b/inspector/create_inspector_xml.mli +@@ -0,0 +1,22 @@ ++(* virt-v2v-in-place ++ * Copyright (C) 2009-2024 Red Hat Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program 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 General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License along ++ * with this program; if not, write to the Free Software Foundation, Inc., ++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++ *) ++ ++val create_inspector_xml : string -> Types.inspect -> Types.target_meta -> ++ DOM.doc ++(** Create the XML output of virt-v2v-inspector which contains the ++ post-conversion metadata. *) +diff --git a/inspector/inspector.ml b/inspector/inspector.ml +index aeddbec6..ac26146f 100644 +--- a/inspector/inspector.ml ++++ b/inspector/inspector.ml +@@ -27,7 +27,7 @@ open Getopt.OptionName + + open Types + open Utils +-open DOM ++open Create_inspector_xml + + (* Matches --mac command line parameters. *) + let mac_re = PCRE.compile "^([[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}):(network|bridge|ip):(.*)$" +@@ -368,7 +368,7 @@ read the man page virt-v2v-inspector(1). + ); + + (* Dump out the information. *) +- let doc = inspector_xml v2vdir inspect target_meta in ++ let doc = create_inspector_xml v2vdir inspect target_meta in + let chan = + match output_file with + | None -> Stdlib.stdout +@@ -404,144 +404,4 @@ and check_host_free_space () = + \"Minimum free space check in the host\".") + large_tmpdir (human_size free_space) + +-(* This is a copy of {!Output.get_disks}. *) +-and get_disks dir = +- let rec loop acc i = +- let socket = sprintf "%s/in%d" dir i in +- if Sys.file_exists socket then ( +- let size = Utils.with_nbd_connect_unix ~socket NBD.get_size in +- loop ((i, size) :: acc) (i+1) +- ) +- else +- List.rev acc +- in +- loop [] 0 +- +-(* This is like {!Utils.get_disk_allocated} but works on the input disks. *) +-and get_input_disk_allocated dir i = +- let socket = sprintf "%s/in%d" dir i +- and alloc_ctx = "base:allocation" in +- with_nbd_connect_unix ~socket ~meta_contexts:[alloc_ctx] +- (fun nbd -> +- if NBD.can_meta_context nbd alloc_ctx then ( +- (* Get the list of extents, using a 2GiB chunk size as hint. *) +- let size = NBD.get_size nbd +- and allocated = ref 0_L +- and fetch_offset = ref 0_L in +- while !fetch_offset < size do +- let remaining = size -^ !fetch_offset in +- let fetch_size = min 0x8000_0000_L remaining in +- NBD.block_status nbd fetch_size !fetch_offset +- (fun ctx offset entries err -> +- assert (ctx = alloc_ctx); +- for i = 0 to Array.length entries / 2 - 1 do +- let len = entries.(i * 2) +- and typ = entries.(i * 2 + 1) in +- assert (len > 0_L); +- if typ &^ 1_L = 0_L then +- allocated := !allocated +^ len; +- fetch_offset := !fetch_offset +^ len +- done; +- 0 +- ) +- done; +- Some !allocated +- ) else None +- ) +- +-(* This is where we construct the final XML document based on +- * these inputs: +- * - Global configuration like the version of v2v etc. +- * - The NBD input sockets: v2vdir // "in0", "in1", etc +- * - The inspection data (Types.inspect) +- *) +-and inspector_xml v2vdir inspect target_meta = +- let body = ref [] in +- +- (* Record the version of virt-v2v etc, mainly for debugging. *) +- List.push_back_list body [ +- Comment generated_by; +- e "program" [] [PCData "virt-v2v-inspector"]; +- e "package" [] [PCData Config.package_name]; +- e "version" [] [PCData Config.package_version]; +- ]; +- +- (* The disks. *) +- let disks = ref [] in +- +- List.iter ( +- fun (i, virtual_size) -> +- let elems = ref [] in +- List.push_back elems (e "virtual-size" [] +- [PCData (Int64.to_string virtual_size)]); +- (match get_input_disk_allocated v2vdir i with +- | None -> () +- | Some real_size -> +- List.push_back elems (e "allocated" [ "estimated", "true" ] +- [PCData (Int64.to_string real_size)]) +- ); +- +- List.push_back disks (e "disk" [ "index", string_of_int i ] !elems) +- ) (get_disks v2vdir); +- List.push_back body (e "disks" [] !disks); +- +- (* The field is outside the element, +- * since firmware is not part of the OS, and also because this is +- * consistent with virt-drivers output. +- *) +- List.push_back body +- (e "firmware" +- ["type", +- string_of_target_firmware target_meta.target_firmware] +- []); +- +- (* The inspection data. *) +- (* NB: Keep these field names compatible with virt-inspector! *) +- let os = ref [] in +- List.push_back os (e "name" [] [PCData inspect.i_type]); +- List.push_back os (e "distro" [] [PCData inspect.i_distro]); +- List.push_back os (e "osinfo" [] [PCData inspect.i_osinfo]); +- List.push_back os (e "arch" [] [PCData inspect.i_arch]); +- List.push_back os (e "major_version" [] +- [PCData (string_of_int inspect.i_major_version)]); +- List.push_back os (e "minor_version" [] +- [PCData (string_of_int inspect.i_minor_version)]); +- if inspect.i_package_format <> "" then +- List.push_back os (e "package_format" [] +- [PCData inspect.i_package_format]); +- if inspect.i_package_management <> "" then +- List.push_back os (e "package_management" [] +- [PCData inspect.i_package_management]); +- if inspect.i_product_name <> "" then +- List.push_back os (e "product_name" [] [PCData inspect.i_product_name]); +- if inspect.i_product_variant <> "" then +- List.push_back os (e "product_variant" [] +- [PCData inspect.i_product_variant]); +- +- if inspect.i_windows_systemroot <> "" then +- List.push_back os (e "windows_systemroot" [] +- [PCData inspect.i_windows_systemroot]); +- if inspect.i_windows_software_hive <> "" then +- List.push_back os (e "windows_software_hive" [] +- [PCData inspect.i_windows_software_hive]); +- if inspect.i_windows_systemroot <> "" then +- List.push_back os (e "windows_system_hive" [] +- [PCData inspect.i_windows_system_hive]); +- if inspect.i_windows_current_control_set <> "" then +- List.push_back os (e "windows_current_control_set" [] +- [PCData inspect.i_windows_current_control_set]); +- +- List.push_back os (e "root" [] [PCData inspect.i_root]); +- let mps = ref [] in +- List.iter ( +- fun (fs, dev) -> +- List.push_back mps (e "mountpoint" [ "dev", dev ] [PCData fs]) +- ) inspect.i_mountpoints; +- List.push_back os (e "mountpoints" [] !mps); +- +- List.push_back body (e "operatingsystem" [] !os); +- +- (* Construct the final document. *) +- (doc "v2v-inspection" [] !body : DOM.doc) +- + let () = run_main_and_handle_errors main diff --git a/0027-build-Define-MLOBJECT-OCaml-object-file-as-either-cm.patch b/0027-build-Define-MLOBJECT-OCaml-object-file-as-either-cm.patch new file mode 100644 index 0000000..1fd56f9 --- /dev/null +++ b/0027-build-Define-MLOBJECT-OCaml-object-file-as-either-cm.patch @@ -0,0 +1,33 @@ +From e6f1a170002bff5db70aa8a8b6987ef1122d61e1 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 5 Dec 2024 15:28:38 +0000 +Subject: [PATCH] build: Define MLOBJECT (OCaml object file) as either cmo or + cmx + +This macro expands to either cmo or cmx depending on whether we are +compiling for bytecode or native code. + +This is a natural extension of the existing MLARCHIVE macro. + +(cherry picked from commit 7b43b226eb3af18a5bd58b2664fb064832404a47) +--- + subdir-rules.mk | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/subdir-rules.mk b/subdir-rules.mk +index e969f357..05221b95 100644 +--- a/subdir-rules.mk ++++ b/subdir-rules.mk +@@ -47,10 +47,12 @@ $(top_builddir)/generator/generator: + + if !HAVE_OCAMLOPT + MLARCHIVE = cma ++MLOBJECT = cmo + LINK_CUSTOM_OCAMLC_ONLY = -output-complete-exe + BEST = c + else + MLARCHIVE = cmxa ++MLOBJECT = cmx + BEST = opt + endif + diff --git a/0028-in-place-Add-new-O-option-to-write-inspector-XML.patch b/0028-in-place-Add-new-O-option-to-write-inspector-XML.patch new file mode 100644 index 0000000..92af504 --- /dev/null +++ b/0028-in-place-Add-new-O-option-to-write-inspector-XML.patch @@ -0,0 +1,284 @@ +From 3dc5eb5c76fd6be2108c5b3907d9d31bbacd00a5 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Thu, 5 Dec 2024 13:36:29 +0000 +Subject: [PATCH] in-place: Add new -O option to write inspector XML + +When using virt-v2v-in-place there is no easy way to get the +post-conversion metadata, such as the operating system and firmware +that virt-v2v detected inside the guest. + +This commit adds new, optional '-O output.xml' to write this +information out to a file. The format is identical to +virt-v2v-inspector (and roughly a superset of virt-inspector). + +Fixes: https://issues.redhat.com/browse/RHEL-58032 +Thanks: Martin Necas +(cherry picked from commit 2f0958e5ac5c3442c2771518c5b73d6ebcd5bd4a) +--- + docs/virt-v2v-in-place.pod | 18 +++++++++ + in-place/Makefile.am | 2 + + in-place/in_place.ml | 39 +++++++++++++----- + tests/Makefile.am | 2 + + tests/test-in-place-xml.sh | 81 ++++++++++++++++++++++++++++++++++++++ + 5 files changed, 132 insertions(+), 10 deletions(-) + create mode 100755 tests/test-in-place-xml.sh + +diff --git a/docs/virt-v2v-in-place.pod b/docs/virt-v2v-in-place.pod +index 4057dae5..34e99cf0 100644 +--- a/docs/virt-v2v-in-place.pod ++++ b/docs/virt-v2v-in-place.pod +@@ -7,10 +7,12 @@ virt-v2v-in-place - Convert a guest to use KVM in-place + virt-v2v-in-place -i disk [other -i* options] + [virt-customize options] + filename ++ [-O output.xml] + + virt-v2v-in-place -i libvirt|libvirtxml [other -i* options] + [virt-customize options] + guest ++ [-O output.xml] + + =head1 DESCRIPTION + +@@ -35,6 +37,14 @@ If the guest has been copied to local libvirt then: + + virt-v2v-in-place -i libvirt guest + ++=head2 Output XML ++ ++Optionally use the I<-O> option to write post-conversion metadata ++about the guest to an XML file. This is in the same format as ++L. This can be used, for example, to find out ++what operating system and firmware was found inside the guest during ++conversion. ++ + =head2 Exit code + + If virt-v2v-in-place fails it will return a non-zero (error) exit +@@ -205,6 +215,14 @@ are mapped to C. + + See L. + ++=item B<-O> output.xml ++ ++=item B<-O -> ++ ++If this option is present, write post-conversion metadata about the ++guest to the named XML file, or to stdout if I<-O -> is used. This is ++in the same format as L. ++ + =item B<--print-source> + + Print information about the source guest and stop. This option is +diff --git a/in-place/Makefile.am b/in-place/Makefile.am +index 2fecb3a7..89e3f5f3 100644 +--- a/in-place/Makefile.am ++++ b/in-place/Makefile.am +@@ -57,6 +57,7 @@ OCAMLPACKAGES = \ + -I $(top_builddir)/lib \ + -I $(top_builddir)/input \ + -I $(top_builddir)/convert \ ++ -I $(top_builddir)/inspector \ + -I $(top_builddir)/common/mlstdutils \ + -I $(top_builddir)/common/mlutils \ + -I $(top_builddir)/common/mlgettext \ +@@ -103,6 +104,7 @@ OCAMLLINKFLAGS = \ + mlv2vlib.$(MLARCHIVE) \ + mlconvert.$(MLARCHIVE) \ + mlinput.$(MLARCHIVE) \ ++ create_inspector_xml.$(MLOBJECT) \ + $(LINK_CUSTOM_OCAMLC_ONLY) + + virt_v2v_in_place_DEPENDENCIES = \ +diff --git a/in-place/in_place.ml b/in-place/in_place.ml +index 42075139..c77533e7 100644 +--- a/in-place/in_place.ml ++++ b/in-place/in_place.ml +@@ -28,6 +28,12 @@ open Getopt.OptionName + open Types + open Utils + ++open Create_inspector_xml ++ ++type output_xml_option = ++ | No_output_xml | Output_xml_to_stdout ++ | Output_xml_to_file of string ++ + (* Matches --mac command line parameters. *) + let mac_re = PCRE.compile "^([[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}:[[:xdigit:]]{2}):(network|bridge|ip):(.*)$" + let mac_ip_re = PCRE.compile "^([[:xdigit:]]|:|\\.)+$" +@@ -61,6 +67,13 @@ let rec main () = + in + + let network_map = Networks.create () in ++ ++ let output_xml = ref No_output_xml in ++ let set_output_xml_option filename = ++ if filename = "-" then output_xml := Output_xml_to_stdout ++ else output_xml := Output_xml_to_file filename ++ in ++ + let static_ips = ref [] in + let rec add_network str = + match String.split ":" str with +@@ -172,6 +185,8 @@ let rec main () = + s_"Map NIC to network or bridge or assign static IP"; + [ S 'n'; L"network" ], Getopt.String ("in:out", add_network), + s_"Map network ‘in’ to ‘out’"; ++ [ S 'O' ], Getopt.String ("output.xml", set_output_xml_option), ++ s_"Set the output filename"; + [ L"print-source" ], Getopt.Set print_source, + s_"Print source and stop"; + [ L"root" ], Getopt.String ("ask|... ", set_root_choice), +@@ -228,6 +243,7 @@ read the man page virt-v2v-in-place(1). + let customize_ops = get_customize_ops () in + let input_conn = !input_conn in + let input_mode = !input_mode in ++ let output_xml = !output_xml in + let print_source = !print_source in + let root_choice = !root_choice in + let static_ips = !static_ips in +@@ -246,6 +262,7 @@ read the man page virt-v2v-in-place(1). + pr "mac-option\n"; + pr "mac-ip-option\n"; + pr "customize-ops\n"; ++ pr "output-xml-option\n"; + pr "input:disk\n"; + pr "input:libvirt\n"; + pr "input:libvirtxml\n"; +@@ -348,16 +365,18 @@ read the man page virt-v2v-in-place(1). + ignore (Sys.command cmd) + ); + +- (* XXX Should we create target metadata and if so where? +- * +- * If the input mode is libvirt, there is an argument for +- * updating the libvirt XML of the guest. If the input +- * mode is disk, maybe we should write .xml. +- * +- * For the moment we just ignore the output from the +- * conversion step. +- *) +- ignore (inspect, target_meta); ++ (* Write the post-conversion metadata, if asked. *) ++ let chan = ++ match output_xml with ++ | No_output_xml -> None ++ | Output_xml_to_stdout -> Some Stdlib.stdout ++ | Output_xml_to_file filename -> Some (open_out filename) in ++ Option.iter ( ++ fun chan -> ++ let doc = create_inspector_xml v2vdir inspect target_meta in ++ DOM.doc_to_chan chan doc; ++ Stdlib.flush chan ++ ) chan; + + message (f_"Finishing off"); + (* As the last thing, write a file indicating success before +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 0dd5927b..4d46daf9 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -82,6 +82,7 @@ TESTS = \ + test-i-ova.sh \ + test-i-vmx.sh \ + test-in-place.sh \ ++ test-in-place-xml.sh \ + test-inspector.sh \ + test-it-vddk-io-query.sh \ + test-mac.sh \ +@@ -245,6 +246,7 @@ EXTRA_DIST += \ + test-i-vmx-7.vmx \ + test-i-vmx.sh \ + test-in-place.sh \ ++ test-in-place-xml.sh \ + test-inspector.sh \ + test-it-vddk-io-query.sh \ + test-mac-expected.xml \ +diff --git a/tests/test-in-place-xml.sh b/tests/test-in-place-xml.sh +new file mode 100755 +index 00000000..e9580006 +--- /dev/null ++++ b/tests/test-in-place-xml.sh +@@ -0,0 +1,81 @@ ++#!/bin/bash - ++# libguestfs virt-v2v test script ++# Copyright (C) 2014-2024 Red Hat Inc. ++# Copyright (C) 2015 Parallels IP Holdings GmbH. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program 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 General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program; if not, write to the Free Software ++# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++ ++# Test virt-v2v-in-place -O option. ++ ++unset CDPATH ++export LANG=C ++set -e ++ ++source ./functions.sh ++set -e ++set -x ++ ++skip_if_skipped ++requires test -f ../test-data/phony-guests/windows.img ++ ++img_base="$abs_top_builddir/test-data/phony-guests/windows.img" ++ ++export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools" ++export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win" ++ ++d=$PWD/test-v2v-in-place-xml.d ++rm -rf $d ++cleanup_fn rm -r $d ++mkdir $d ++ ++img="$d/test.qcow2" ++qemu-img convert -f raw $img_base -O qcow2 $img ++ ++out="$d/out.xml" ++ ++libvirt_xml="$d/test.xml" ++rm -f $libvirt_xml ++n=windows ++cat > $libvirt_xml < ++ ++ $n ++ 1048576 ++ ++ hvm ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++EOF ++ ++$VG virt-v2v-in-place --debug-gc -i libvirt -ic "test://$libvirt_xml" \ ++ $n -O $out ++cat $out ++ ++# Expect certain elements to be present. ++grep '^virt-v2v-inspector' $out ++grep '' $out ++grep "" $out ++grep 'windows' $out ++grep 'win2k22' $out diff --git a/virt-v2v.spec b/virt-v2v.spec index 6daeb99..168d61c 100644 --- a/virt-v2v.spec +++ b/virt-v2v.spec @@ -8,7 +8,7 @@ Name: virt-v2v Epoch: 1 Version: 2.7.1 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Convert a virtual machine to run on KVM License: GPL-2.0-or-later AND LGPL-2.0-or-later @@ -42,6 +42,20 @@ Patch0011: 0011-RHEL-9-oo-compressed-Remove-nbdcopy-version-check-an.patch Patch0012: 0012-RHEL-9-tests-Remove-btrfs-test.patch Patch0013: 0013-RHEL-9-Remove-block-driver-option.patch Patch0014: 0014-RHEL-Add-warning-about-virt-v2v-in-place-not-being-s.patch +Patch0015: 0015-in-place-Add-a-warning-about-checking-the-exit-code.patch +Patch0016: 0016-i-libvirt-Trim-whitespace-around-name.patch +Patch0017: 0017-o-qemu-Replace-hard-coded-UEFI-paths.patch +Patch0018: 0018-o-qemu-Add-set-e-x-at-the-top-of-the-output-script.patch +Patch0019: 0019-v2v-Implement-parallel-N-for-parallel-disk-copies.patch +Patch0020: 0020-tests-Rename-all-test-v2v-to-test.patch +Patch0021: 0021-tests-Sort-the-tests-into-alphabetical-order.patch +Patch0022: 0022-docs-Embolden-whole-O.patch +Patch0023: 0023-in-place-Fix-name-of-program-in-the-help-output.patch +Patch0024: 0024-inspector-Reorder-O-option-in-alphabetical-order.patch +Patch0025: 0025-v2v-Ensure-parallel-1.patch +Patch0026: 0026-inspector-Move-the-code-that-creates-XML-output-to-a.patch +Patch0027: 0027-build-Define-MLOBJECT-OCaml-object-file-as-either-cm.patch +Patch0028: 0028-in-place-Add-new-O-option-to-write-inspector-XML.patch %if !0%{?rhel} # libguestfs hasn't been built on i686 for a while since there is no @@ -296,7 +310,7 @@ done # "windows.vmdk", regardless of the TESTS we want to run. The real # target we need to make here is "fedora-luks-on-lvm.img". make -C test-data/phony-guests windows.img fedora-luks-on-lvm.img -make -C tests TESTS=test-v2v-fedora-luks-on-lvm-conversion.sh check +make -C tests TESTS=test-fedora-luks-on-lvm-conversion.sh check %endif @@ -343,13 +357,15 @@ make -C tests TESTS=test-v2v-fedora-luks-on-lvm-conversion.sh check %changelog -* Wed Oct 30 2024 Richard W.M. Jones - 1:2.7.1-1 +* Mon Dec 09 2024 Richard W.M. Jones - 1:2.7.1-2 - Rebase to upstream development version 2.7.1 resolves: RHEL-56813 - Replace Jansson with json-c resolves: RHEL-65296 - Find drivers for win2025 guests resolves: RHEL-65010 +- in-place: Add new -O option to write inspector XML + resolves: RHEL-58032 * Thu Sep 05 2024 Richard W.M. Jones - 1:2.5.9-1 - Rebase to upstream development version 2.5.9