On Thursday 19 May 2016 17:26:12 Cédric Bosdonnat wrote:
Some ova files have their ovf and other files inside a folder rather
than at the root of the tarball. Consider the paths relative to the
ovf file to cover this case too.
---
Ouch... this standard is getting more funky implementations, I see...
what is the producer of this kind of ova?
A couple of notes below.
v2v/Makefile.am | 1 +
v2v/input_ova.ml | 3 +-
v2v/test-v2v-i-ova-subfolders.sh | 88 ++++++++++++++++++++++++++++++++++++++++
3 files changed, 91 insertions(+), 1 deletion(-)
create mode 100755 v2v/test-v2v-i-ova-subfolders.sh
diff --git a/v2v/Makefile.am b/v2v/Makefile.am
index 0203317..1d219b6 100644
--- a/v2v/Makefile.am
+++ b/v2v/Makefile.am
@@ -294,6 +294,7 @@ TESTS_ENVIRONMENT = $(top_builddir)/run --test
TESTS = \
test-v2v-i-ova-formats.sh \
test-v2v-i-ova-gz.sh \
+ test-v2v-i-ova-subfolders.sh \
test-v2v-i-ova-two-disks.sh \
test-v2v-copy-to-local.sh \
test-v2v-bad-networks-and-bridges.sh
diff --git a/v2v/input_ova.ml b/v2v/input_ova.ml
index 1aba662..b0d9357 100644
--- a/v2v/input_ova.ml
+++ b/v2v/input_ova.ml
@@ -165,6 +165,7 @@ object
) mf;
(* Parse the ovf file. *)
+ let ovf_folder = Filename.dirname ovf in
let xml = read_whole_file ovf in
let doc = Xml.parse_memory xml in
@@ -265,7 +266,7 @@ object
| Some s -> s in
(* Does the file exist and is it readable? *)
- let filename = exploded // filename in
+ let filename = ovf_folder // filename in
Unix.access filename [Unix.R_OK];
This would seem correct to me, at a quick glance.
diff --git a/v2v/test-v2v-i-ova-subfolders.sh
b/v2v/test-v2v-i-ova-subfolders.sh
new file mode 100755
index 0000000..fd59f07
--- /dev/null
+++ b/v2v/test-v2v-i-ova-subfolders.sh
@@ -0,0 +1,88 @@
+#!/bin/bash -
+# libguestfs virt-v2v test script
+# Copyright (C) 2014 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 -i ova option.
+
+unset CDPATH
+export LANG=C
+set -e
+set -x
+
+if [ -n "$SKIP_TEST_V2V_I_OVA_SH" ]; then
This needs to reflect the test name.
+ echo "$0: test skipped because environment variable is
set"
+ exit 77
+fi
+
+if [ "$(guestfish get-backend)" = "uml" ]; then
+ echo "$0: test skipped because UML backend does not support network"
+ exit 77
+fi
+
+f=../test-data/phony-guests/windows.img
+if ! test -f $f || ! test -s $f; then
+ echo "$0: test skipped because phony Windows image was not created"
+ exit 77
+fi
+
+export VIRT_TOOLS_DATA_DIR="$srcdir/../test-data/fake-virt-tools"
+export VIRTIO_WIN="$srcdir/../test-data/fake-virtio-win"
+
+. $srcdir/../test-data/guestfs-hashsums.sh
+
+d=test-v2v-i-ova-subfolders.d
+rm -rf $d
+mkdir -p $d/subfolder
+
+vmdk=test-ova.vmdk
+ovf=test-v2v-i-ova.ovf
+mf=test-ova.mf
+ova=test-ova-subfolders.ova
+raw=TestOva-sda
While I see this is mostly a copy from test-v2v-i-ova.sh, please change
the name of temporary and output files, otherwise there are conflicts
when this and test-v2v-i-ova.sh run in parallel.
This would be the fifth test-v2v-i-ova*.sh test, and they all look
quite close. I'll take a look about unifying them somehow, otherwise
testing new cases in ova becomes a nightmare...
--
Pino Toscano