Pino Toscano
2013-Dec-13 15:32 UTC
[Libguestfs] [PATCH] drives: add CD-ROM disk images as read-only drives (RHBZ#563450).
The current add_cdrom way basically appends a new raw "-cdrom /path"
parameter to the qemu invocation (even when using libvirt as backend),
hence such images are seen as "CD-ROM drives" inside the appliance.
However, there is no need for such particular behaviour, as they need to
be handled as normal (read-only) drives.
Adding CD-ROM disk images as drives also changes the device names used
for them inside the appliance from /dev/srN to the usual e.g. /dev/sdX.
These changes fix different issues:
- it is possible to start guestfish without adding disks with -a, then
just add-cdrom and run
- list-devices does not cause guestfishd to crash when sorting the list
of devices (exposed by the test case in RHBZ#563450)
- the result of list-devices now reflects the order images were added
(RHBZ#563450)
Add two small regression tests for the fixes described above.
---
src/drives.c | 7 +-----
tests/regressions/Makefile.am | 2 ++
tests/regressions/rhbz563450.sh | 54 ++++++++++++++++++++++++++++++++++++++++
tests/regressions/rhbz563450b.sh | 43 ++++++++++++++++++++++++++++++++
4 files changed, 100 insertions(+), 6 deletions(-)
create mode 100755 tests/regressions/rhbz563450.sh
create mode 100755 tests/regressions/rhbz563450b.sh
diff --git a/src/drives.c b/src/drives.c
index 16798a3..4b65dda 100644
--- a/src/drives.c
+++ b/src/drives.c
@@ -1087,12 +1087,7 @@ guestfs__add_cdrom (guestfs_h *g, const char *filename)
return -1;
}
- if (access (filename, F_OK) == -1) {
- perrorf (g, "%s", filename);
- return -1;
- }
-
- return guestfs_config (g, "-cdrom", filename);
+ return guestfs__add_drive_ro (g, filename);
}
/* Depending on whether we are hotplugging or not, this function
diff --git a/tests/regressions/Makefile.am b/tests/regressions/Makefile.am
index 5b0d1c3..741f45f 100644
--- a/tests/regressions/Makefile.am
+++ b/tests/regressions/Makefile.am
@@ -21,6 +21,8 @@ TESTS = \
rhbz501893 \
rhbz503169c13.sh \
rhbz557655.sh \
+ rhbz563450.sh \
+ rhbz563450b.sh \
rhbz576879.sh \
rhbz578407.sh \
rhbz580246.sh \
diff --git a/tests/regressions/rhbz563450.sh b/tests/regressions/rhbz563450.sh
new file mode 100755
index 0000000..6fa6f2b
--- /dev/null
+++ b/tests/regressions/rhbz563450.sh
@@ -0,0 +1,54 @@
+#!/bin/bash -
+# libguestfs
+# Copyright (C) 2013 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.
+
+# https://bugzilla.redhat.com/show_bug.cgi?id=563450
+# Test the order of added images
+
+set -e
+export LANG=C
+
+rm -f test.out
+
+../../fish/guestfish --ro > test.out <<EOF
+add-drive-ro ../guests/fedora.img
+add-cdrom ../data/test.iso
+add-drive-ro ../guests/debian.img
+
+run
+
+list-devices
+echo ----
+list-partitions
+
+ping-daemon
+EOF
+
+if [ "$(cat test.out)" != "/dev/sda
+/dev/sdb
+/dev/sdc
+----
+/dev/sda1
+/dev/sda2
+/dev/sdc1
+/dev/sdc2" ]; then
+ echo "$0: unexpected output:"
+ cat test.out
+ exit 1
+fi
+
+rm -f test.out
diff --git a/tests/regressions/rhbz563450b.sh b/tests/regressions/rhbz563450b.sh
new file mode 100755
index 0000000..bae641a
--- /dev/null
+++ b/tests/regressions/rhbz563450b.sh
@@ -0,0 +1,43 @@
+#!/bin/bash -
+# libguestfs
+# Copyright (C) 2013 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.
+
+# https://bugzilla.redhat.com/show_bug.cgi?id=563450
+# Test only CD-ROM disk images can be added
+
+set -e
+export LANG=C
+
+rm -f test.out
+
+../../fish/guestfish --ro > test.out <<EOF
+add-cdrom ../data/test.iso
+
+run
+
+list-devices
+
+ping-daemon
+EOF
+
+if [ "$(cat test.out)" != "/dev/sda" ]; then
+ echo "$0: unexpected output:"
+ cat test.out
+ exit 1
+fi
+
+rm -f test.out
--
1.8.3.1
Richard W.M. Jones
2013-Dec-14 22:50 UTC
Re: [Libguestfs] [PATCH] drives: add CD-ROM disk images as read-only drives (RHBZ#563450).
On Fri, Dec 13, 2013 at 04:32:49PM +0100, Pino Toscano wrote:> The current add_cdrom way basically appends a new raw "-cdrom /path" > parameter to the qemu invocation (even when using libvirt as backend), > hence such images are seen as "CD-ROM drives" inside the appliance. > However, there is no need for such particular behaviour, as they need to > be handled as normal (read-only) drives. > > Adding CD-ROM disk images as drives also changes the device names used > for them inside the appliance from /dev/srN to the usual e.g. /dev/sdX. > > These changes fix different issues: > - it is possible to start guestfish without adding disks with -a, then > just add-cdrom and run > - list-devices does not cause guestfishd to crash when sorting the lists/guestfishd/guestfsd/> of devices (exposed by the test case in RHBZ#563450) > - the result of list-devices now reflects the order images were added > (RHBZ#563450) > > Add two small regression tests for the fixes described above. > --- > src/drives.c | 7 +----- > tests/regressions/Makefile.am | 2 ++ > tests/regressions/rhbz563450.sh | 54 ++++++++++++++++++++++++++++++++++++++++ > tests/regressions/rhbz563450b.sh | 43 ++++++++++++++++++++++++++++++++ > 4 files changed, 100 insertions(+), 6 deletions(-) > create mode 100755 tests/regressions/rhbz563450.sh > create mode 100755 tests/regressions/rhbz563450b.sh > > diff --git a/src/drives.c b/src/drives.c > index 16798a3..4b65dda 100644 > --- a/src/drives.c > +++ b/src/drives.c > @@ -1087,12 +1087,7 @@ guestfs__add_cdrom (guestfs_h *g, const char *filename) > return -1; > } > > - if (access (filename, F_OK) == -1) { > - perrorf (g, "%s", filename); > - return -1; > - } > - > - return guestfs_config (g, "-cdrom", filename); > + return guestfs__add_drive_ro (g, filename); > }I don't think this implementation is quite right because it leaves the [now] bogus check for ':' in the filename. guestfs_add_drive_ro can handle ':' in the filename (because it creates an overlay): $ truncate -s 100M foo:bar $ guestfish --ro -a foo:bar Welcome to guestfish, the guest filesystem shell for editing virtual machine filesystems and disk images. Type: 'help' for help on commands 'man' to read the manual 'quit' to quit the shell ><fs> run I think it's better to remove the contents of the guestfs__add_cdrom function completely, so the function will become just: int guestfs__add_cdrom (guestfs_h *g, const char *filename) { return guestfs__add_drive_ro (g, filename); } [...]> +# https://bugzilla.redhat.com/show_bug.cgi?id=563450 > +# Test the order of added images > + > +set -e > +export LANG=C > + > +rm -f test.out > + > +../../fish/guestfish --ro > test.out <<EOF > +add-drive-ro ../guests/fedora.img > +add-cdrom ../data/test.iso > +add-drive-ro ../guests/debian.imgEarlier in the test, you'll probably need to add this: if [ ! -s ../guests/fedora.img -o ! -s ../guests/debian.img ]; then echo "$0: test skipped because there is no fedora.img or debian.img" exit 77 fi --- Also, should we update the documentation? http://libguestfs.org/guestfs.3.html#guestfs_add_cdrom Maybe or maybe not worth it. --- Patch looks good apart from these three small issues. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming blog: http://rwmj.wordpress.com Fedora now supports 80 OCaml packages (the OPEN alternative to F#)
Pino Toscano
2013-Dec-16 12:42 UTC
Re: [Libguestfs] [PATCH] drives: add CD-ROM disk images as read-only drives (RHBZ#563450).
On Saturday 14 December 2013 22:50:28 Richard W.M. Jones wrote:> On Fri, Dec 13, 2013 at 04:32:49PM +0100, Pino Toscano wrote: > > The current add_cdrom way basically appends a new raw "-cdrom /path" > > parameter to the qemu invocation (even when using libvirt as > > backend), hence such images are seen as "CD-ROM drives" inside the > > appliance. However, there is no need for such particular behaviour, > > as they need to be handled as normal (read-only) drives. > > > > Adding CD-ROM disk images as drives also changes the device names > > used for them inside the appliance from /dev/srN to the usual e.g. > > /dev/sdX. > > > > These changes fix different issues: > > - it is possible to start guestfish without adding disks with -a, > > then> > > just add-cdrom and run > > > > - list-devices does not cause guestfishd to crash when sorting the > > list > s/guestfishd/guestfsd/ > > > of devices (exposed by the test case in RHBZ#563450) > > > > - the result of list-devices now reflects the order images were > > added > > > > (RHBZ#563450) > > > > Add two small regression tests for the fixes described above. > > --- > > > > src/drives.c | 7 +----- > > tests/regressions/Makefile.am | 2 ++ > > tests/regressions/rhbz563450.sh | 54 > > ++++++++++++++++++++++++++++++++++++++++ > > tests/regressions/rhbz563450b.sh | 43 > > ++++++++++++++++++++++++++++++++ 4 files changed, 100 > > insertions(+), 6 deletions(-) > > create mode 100755 tests/regressions/rhbz563450.sh > > create mode 100755 tests/regressions/rhbz563450b.sh > > > > diff --git a/src/drives.c b/src/drives.c > > index 16798a3..4b65dda 100644 > > --- a/src/drives.c > > +++ b/src/drives.c > > @@ -1087,12 +1087,7 @@ guestfs__add_cdrom (guestfs_h *g, const char > > *filename)> > > return -1; > > > > } > > > > - if (access (filename, F_OK) == -1) { > > - perrorf (g, "%s", filename); > > - return -1; > > - } > > - > > - return guestfs_config (g, "-cdrom", filename); > > + return guestfs__add_drive_ro (g, filename); > > > > } > > I don't think this implementation is quite right because it leaves the > [now] bogus check for ':' in the filename. guestfs_add_drive_ro can > handle ':' in the filename (because it creates an overlay):I see, I was being conservative with the current behaviour, since not allowing colons is what add-cdrom enforces and thus nobody could have used them so far.> I think it's better to remove the contents of the guestfs__add_cdrom > function completely, so the function will become just: > > int > guestfs__add_cdrom (guestfs_h *g, const char *filename) > { > return guestfs__add_drive_ro (g, filename); > }With the above, this makes sense now.> Also, should we update the documentation? > > http://libguestfs.org/guestfs.3.html#guestfs_add_cdrom > > Maybe or maybe not worth it.Rgiht, worth it, updated.> > +# https://bugzilla.redhat.com/show_bug.cgi?id=563450 > > +# Test the order of added images > > + > > +set -e > > +export LANG=C > > + > > +rm -f test.out > > + > > +../../fish/guestfish --ro > test.out <<EOF > > +add-drive-ro ../guests/fedora.img > > +add-cdrom ../data/test.iso > > +add-drive-ro ../guests/debian.img > > Earlier in the test, you'll probably need to add this: > > if [ ! -s ../guests/fedora.img -o ! -s ../guests/debian.img ]; then > echo "$0: test skipped because there is no fedora.img or > debian.img" exit 77 > fiIt seems there are few more tests that don't check for the existence of test guests and isos: align/test-virt-alignment-scan.sh cat/test-virt-cat.sh cat/test-virt-filesystems.sh cat/test-virt-ls.sh df/test-virt-df.sh edit/test-virt-edit.sh fish/test-find0.sh fish/test-inspect.sh fish/test-read-file.sh fish/test-run.sh fish/test-upload-to-dir.sh fuse/test-fuse-umount-race.sh inspector/test-virt-inspector.sh sysprep/test-virt-sysprep-passwords.sh sysprep/test-virt-sysprep-script.sh sysprep/test-virt-sysprep.sh tests/md/test-inspect-fstab-md.sh tests/md/test-inspect-fstab.sh tests/mountable/test-mountable-inspect.sh tests/regressions/rhbz789960.sh tools/test-virt-list-filesystems.sh tools/test-virt-tar.sh (and also df/test-virt-df-guests.sh which uses the generated guest.xml) Should I add checks in all of them, or nor add them in the new ones? In case of the former, I'd add them in the new tests together with the others. -- Pino Toscano
Richard W.M. Jones
2013-Dec-18 20:44 UTC
Re: [Libguestfs] [PATCH] drives: add CD-ROM disk images as read-only drives (RHBZ#563450).
On Fri, Dec 13, 2013 at 04:32:49PM +0100, Pino Toscano wrote:> diff --git a/tests/regressions/rhbz563450.sh b/tests/regressions/rhbz563450.sh > new file mode 100755 > index 0000000..6fa6f2b > --- /dev/null > +++ b/tests/regressions/rhbz563450.sh > @@ -0,0 +1,54 @@ > +#!/bin/bash - > +# libguestfs > +# Copyright (C) 2013 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. > + > +# https://bugzilla.redhat.com/show_bug.cgi?id=563450 > +# Test the order of added images > + > +set -e > +export LANG=C > + > +rm -f test.out > + > +../../fish/guestfish --ro > test.out <<EOF > +add-drive-ro ../guests/fedora.img > +add-cdrom ../data/test.iso > +add-drive-ro ../guests/debian.img > + > +run > + > +list-devices > +echo ---- > +list-partitions > + > +ping-daemon > +EOF > + > +if [ "$(cat test.out)" != "/dev/sda > +/dev/sdb > +/dev/sdc > +---- > +/dev/sda1 > +/dev/sda2 > +/dev/sdc1 > +/dev/sdc2" ]; thenThere's a bug in both of these tests, so I had to remove them in order to get a release out today. 'list-devices' doesn't canonicalize disk names (perhaps it should, but it doesn't). Therefore if the appliance is using old virtio-blk it will return disk names such as /dev/vda, and if the appliance is running under UML it will return /dev/ubda (which was what failed in 'make check-release'). If you look at other tests such as: - df/test-virt-df.sh - tests/luks/test-luks-list.sh they get around this by canonicalizing the device names (in different ways) before comparing them. If you correct the bug then we can put the tests back. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming blog: http://rwmj.wordpress.com Fedora now supports 80 OCaml packages (the OPEN alternative to F#)
Pino Toscano
2013-Dec-19 15:29 UTC
Re: [Libguestfs] [PATCH] drives: add CD-ROM disk images as read-only drives (RHBZ#563450).
On Wednesday 18 December 2013 20:44:33 Richard W.M. Jones wrote:> On Fri, Dec 13, 2013 at 04:32:49PM +0100, Pino Toscano wrote: > > diff --git a/tests/regressions/rhbz563450.sh > > b/tests/regressions/rhbz563450.sh new file mode 100755 > > index 0000000..6fa6f2b > > --- /dev/null > > +++ b/tests/regressions/rhbz563450.sh > > @@ -0,0 +1,54 @@ > > +#!/bin/bash - > > +# libguestfs > > +# Copyright (C) 2013 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. + > > +# https://bugzilla.redhat.com/show_bug.cgi?id=563450 > > +# Test the order of added images > > + > > +set -e > > +export LANG=C > > + > > +rm -f test.out > > + > > +../../fish/guestfish --ro > test.out <<EOF > > +add-drive-ro ../guests/fedora.img > > +add-cdrom ../data/test.iso > > +add-drive-ro ../guests/debian.img > > + > > +run > > + > > +list-devices > > +echo ---- > > +list-partitions > > + > > +ping-daemon > > +EOF > > + > > +if [ "$(cat test.out)" != "/dev/sda > > +/dev/sdb > > +/dev/sdc > > +---- > > +/dev/sda1 > > +/dev/sda2 > > +/dev/sdc1 > > +/dev/sdc2" ]; then > > There's a bug in both of these tests, so I had to remove them in order > to get a release out today. > > 'list-devices' doesn't canonicalize disk names (perhaps it should, but > it doesn't). Therefore if the appliance is using old virtio-blk it > will return disk names such as /dev/vda, and if the appliance is > running under UML it will return /dev/ubda (which was what failed in > 'make check-release').You are right, it slipped in my checks.> If you look at other tests such as: > > - df/test-virt-df.sh > - tests/luks/test-luks-list.sh > > they get around this by canonicalizing the device names (in different > ways) before comparing them.I've taken this approach, although IMHO replacing the whole output just once at the end would be a cleaner approach than spreading sed+regexp all over the guestfish invocations.> If you correct the bug then we can put the tests back.Sending updated patch. -- Pino Toscano
Reasonably Related Threads
- Re: [PATCH] drives: add CD-ROM disk images as read-only drives (RHBZ#563450).
- Re: [PATCH] drives: add CD-ROM disk images as read-only drives (RHBZ#563450).
- [PATCH] drives: add CD-ROM disk images as read-only drives (RHBZ#563450).
- Re: [PATCH] drives: add CD-ROM disk images as read-only drives (RHBZ#563450).
- [PATCH] Re-add regression tests for rh#563450