This test case verifies that it is possible to run QEMU guest
from a qcow2 file with a backing store pointing to a physical
disk. This verifies backing store handling with SELinux,
UID/GID changing code and CGroups ACLs
* scripts/qemu/150-disk-backingstore.t: New test case
* lib/Sys/Virt/TCK/StorageVolBuilder.pm: Allow volume backing
store to be set in XML
---
lib/Sys/Virt/TCK/StorageVolBuilder.pm | 14 +++++
scripts/qemu/150-disk-backingstore.t | 97 +++++++++++++++++++++++++++++++++
2 files changed, 111 insertions(+), 0 deletions(-)
create mode 100644 scripts/qemu/150-disk-backingstore.t
diff --git a/lib/Sys/Virt/TCK/StorageVolBuilder.pm
b/lib/Sys/Virt/TCK/StorageVolBuilder.pm
index 00680ed..2772d51 100644
--- a/lib/Sys/Virt/TCK/StorageVolBuilder.pm
+++ b/lib/Sys/Virt/TCK/StorageVolBuilder.pm
@@ -68,6 +68,14 @@ sub secret {
return $self;
}
+sub backing_store {
+ my $self = shift;
+
+ $self->{backingStore} = shift;
+
+ return $self;
+}
+
sub as_xml {
my $self = shift;
@@ -95,6 +103,12 @@ sub as_xml {
$w->endTag("target");
}
+ if ($self->{backingStore}) {
+ $w->startTag("backingStore");
+ $w->dataElement("path", $self->{backingStore});
+ $w->endTag("backingStore");
+ }
+
$w->endTag("volume");
return $data;
diff --git a/scripts/qemu/150-disk-backingstore.t b/scripts/qemu/150-disk-backingstore.t
new file mode 100644
index 0000000..62d8faf
--- /dev/null
+++ b/scripts/qemu/150-disk-backingstore.t
@@ -0,0 +1,97 @@
+# -*- perl -*-
+#
+# Copyright (C) 2009-2010 Red Hat, Inc.
+#
+# This program is free software; You can redistribute it and/or modify
+# it under the GNU General Public License as published by the Free
+# Software Foundation; either version 2, or (at your option) any
+# later version
+#
+# The file "LICENSE" distributed along with this file provides full
+# details of the terms and conditions
+#
+
+=pod
+
+=head1 NAME
+
+qemu/150-disk-backingstore.t - qcow2 image with a backing store on physical disk
+
+=head1 DESCRIPTION
+
+The test case validates that a guest can be booted from a
+qcow2 file with a backing store pointing to a physical disk.
+This verifies that SELinux labelling, uid/gid changes and
+cgroups ACL setup is working correctly with backing stores
+
+=cut
+
+use strict;
+use warnings;
+
+use Test::More tests => 8;
+
+use Sys::Virt::TCK;
+use Test::Exception;
+use File::Spec::Functions qw(catfile);
+
+my $tck = Sys::Virt::TCK->new();
+my $conn = eval { $tck->setup(); };
+BAIL_OUT "failed to setup test harness: $@" if $@;
+END { $tck->cleanup if $tck; }
+
+my $dev = $tck->get_host_block_device();
+
+SKIP: {
+ skip "no block device available", 8 unless $dev;
+ skip "Only relevant to QEMU driver", 8 unless $conn->get_type() eq
"QEMU";
+
+ ok(-b $dev, "$dev is a block device");
+
+ my $dir = $tck->bucket_dir("150-disk-backingstore");
+ my $disk = catfile($dir, "demo.qcow2");
+
+ my $poolXML = Sys::Virt::TCK::StoragePoolBuilder->new()
+ ->source_dir($dir)->target($dir)->as_xml();
+
+ my $pool;
+
+ diag "Creating pool $poolXML";
+ lives_ok(sub { $pool = $conn->create_storage_pool($poolXML) }, "pool
created");
+
+
+ my $volXML = Sys::Virt::TCK::StorageVolBuilder->new(name =>
"demo.qcow2")
+ ->capacity(1024*1024*1024)
+ ->format("qcow2")
+ ->backing_store($dev)
+ ->as_xml();
+
+ my $vol;
+
+ diag "Creating volume $volXML";
+ lives_ok(sub { $vol = $pool->create_volume($volXML) }, "volume
created");
+
+ my $xml = $tck->generic_domain("tck")
+ ->disk(format => ["qemu", "qcow2"],
+ type => "file",
+ src => $disk,
+ dst => "hdb")
+ ->as_xml;
+
+ diag "Creating a transient guest with config $xml";
+ my $dom;
+ ok_domain(sub { $dom = $conn->create_domain($xml) }, "started transient
domain config");
+
+ ok($dom->get_id() > 0, "running domain has an ID > 0");
+
+ diag "Trying another domain lookup by name";
+ my $dom1;
+ ok_domain(sub { $dom1 = $conn->get_domain_by_name("tck") }, "the
running domain object");
+ ok($dom1->get_id() > 0, "running domain has an ID > 0");
+
+
+ diag "Destroying the running domain";
+ $dom->destroy();
+
+ ok_error(sub { $conn->get_domain_by_name("tck") }, "NO_DOMAIN error
raised from missing domain", 42);
+}
--
1.6.5.2