[libvirt] [libvirt-tck PATCH] Add cases for nvram

Dan Zheng posted 1 patch 4 years, 4 months ago
Test syntax-check failed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/20191213085923.31112-1-dzheng@redhat.com
There is a newer version of this series
scripts/domain/401-ovmf-nvram.t | 143 ++++++++++++++++++++++++++++++++
1 file changed, 143 insertions(+)
create mode 100644 scripts/domain/401-ovmf-nvram.t
[libvirt] [libvirt-tck PATCH] Add cases for nvram
Posted by Dan Zheng 4 years, 4 months ago
This is to add the tests for below flags:
- Sys::Virt::Domain::UNDEFINE_KEEP_NVRAM
- Sys::Virt::Domain::UNDEFINE_NVRAM

Signed-off-by: Dan Zheng <dzheng@redhat.com>
---
 scripts/domain/401-ovmf-nvram.t | 143 ++++++++++++++++++++++++++++++++
 1 file changed, 143 insertions(+)
 create mode 100644 scripts/domain/401-ovmf-nvram.t

diff --git a/scripts/domain/401-ovmf-nvram.t b/scripts/domain/401-ovmf-nvram.t
new file mode 100644
index 0000000..5310dd0
--- /dev/null
+++ b/scripts/domain/401-ovmf-nvram.t
@@ -0,0 +1,143 @@
+# -*- perl -*-
+#
+# Copyright (C) 2009 Red Hat, Inc.
+# Copyright (C) 2018 Dan Zheng (dzheng@redhat.com)
+#
+# 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
+
+domain/401-ovmf-nvram.t - Test OVMF related functions and flags
+
+=head1 DESCRIPTION
+
+The test cases validates OVMF related APIs and flags
+
+Sys::Virt::Domain::UNDEFINE_KEEP_NVRAM
+Sys::Virt::Domain::UNDEFINE_NVRAM
+
+=cut
+
+use strict;
+use warnings;
+
+use Test::More tests => 8;
+
+use Sys::Virt::TCK;
+use File::stat;
+use File::Copy;
+
+
+my $tck = Sys::Virt::TCK->new();
+my $conn = eval { $tck->setup(); };
+BAIL_OUT "failed to setup test harness: $@" if $@;
+END { $tck->cleanup if $tck; }
+
+
+sub setup_nvram {
+
+my $loader_path = shift;
+my $nvram_template = shift;
+my $nvram_path = shift;
+
+# Install OVMF and check the two files should exist
+#  - /usr/share/OVMF/OVMF_CODE.secboot.fd
+#  - /usr/share/OVMF/OVMF_VARS.fd
+
+my $ret = `yum install -y OVMF`;
+diag "yum install OVMF: $ret";
+my $st = stat($loader_path);
+ok($st, "path $loader_path exists after OVMF is installed");
+$st = stat($nvram_template);
+ok($st, "path $nvram_template exists after OVMF is installed");
+
+# Ensure the sample nvram file exists
+copy($nvram_template, $nvram_path) or die "Copy failed: $!";
+
+# Use 'q35' as machine type and add below lines to guest xml
+#     <loader readonly='yes' secure='yes' type='pflash'>/usr/share/OVMF/OVMF_CODE.secboot.fd</loader>
+#     <nvram template='/usr/share/OVMF/OVMF_VARS.fd'>/var/lib/libvirt/qemu/nvram/test_VARS.fd</nvram>
+
+my $xml = $tck->generic_domain(name => "tck")->as_xml;
+my $xp = XML::XPath->new($xml);
+diag $xp->getNodeText("/domain/os/type/\@machine");
+
+diag "Changing guest machine type to q35";
+$xp->setNodeText("/domain/os/type/\@machine", "q35");
+
+my $loader_node = XML::XPath::Node::Element->new('loader');
+my $loader_text   = XML::XPath::Node::Text->new($loader_path);
+my $attr_ro     = XML::XPath::Node::Attribute->new('readonly');
+my $attr_secure = XML::XPath::Node::Attribute->new('secure');
+my $attr_type = XML::XPath::Node::Attribute->new('type');
+
+$attr_ro     -> setNodeValue('yes');
+$attr_secure -> setNodeValue('yes');
+$attr_type   -> setNodeValue('pflash');
+
+$loader_node->appendChild($loader_text);
+$loader_node->appendAttribute($attr_ro);
+$loader_node->appendAttribute($attr_secure);
+$loader_node->appendAttribute($attr_type);
+
+my $nvram_node    = XML::XPath::Node::Element->new('nvram');
+my $nvram_text    = XML::XPath::Node::Text->new($nvram_path);
+my $attr_template = XML::XPath::Node::Attribute->new('template');
+
+$attr_template     -> setNodeValue($nvram_template);
+
+$nvram_node->appendChild($nvram_text);
+$nvram_node->appendAttribute($attr_template);
+
+my $smm_node   = XML::XPath::Node::Element->new('smm');
+my $attr_state = XML::XPath::Node::Attribute->new('state');
+$attr_state -> setNodeValue("on");
+$smm_node -> appendAttribute($attr_state);
+
+my ($root) = $xp->findnodes('/domain/os');
+$root->appendChild($loader_node);
+$root->appendChild($nvram_node);
+($root) = $xp->findnodes('/domain/features');
+$root->appendChild($smm_node);
+
+$xml = $xp->findnodes_as_string('/');
+diag $xml;
+return $xml;
+}
+
+diag "Defining an inactive domain config with nvram";
+my $loader_file_path = '/usr/share/OVMF/OVMF_CODE.secboot.fd';
+my $nvram_file_template = '/usr/share/OVMF/OVMF_VARS.fd';
+my $nvram_file_path = '/var/lib/libvirt/qemu/nvram/test_VARS.fd';
+
+my $xml = setup_nvram($loader_file_path, $nvram_file_template, $nvram_file_path);
+my $dom;
+
+diag "Test Sys::Virt::Domain::UNDEFINE_KEEP_NVRAM";
+ok_domain(sub { $dom = $conn->define_domain($xml) }, "defined domain with nvram configure");
+diag "Checking nvram file already exists";
+my $st = stat($nvram_file_path);
+ok($st, "File '$nvram_file_path' exists as expected");
+$dom->undefine(Sys::Virt::Domain::UNDEFINE_KEEP_NVRAM);
+diag "Checking nvram file still exists";
+$st = stat($nvram_file_path);
+ok($st, "File '$nvram_file_path' still exists as expected");
+
+diag "Test Sys::Virt::Domain::UNDEFINE_NVRAM";
+ok_domain(sub { $dom = $conn->define_domain($xml) }, "defined domain with nvram configure");
+$dom->undefine(Sys::Virt::Domain::UNDEFINE_NVRAM);
+diag "Checking nvram file removed";
+$st = stat($nvram_file_path);
+ok(!$st, "File '$nvram_file_path' is removed");
+
+ok_error(sub { $conn->get_domain_by_name("tck") }, "NO_DOMAIN error raised from missing domain",
+	 Sys::Virt::Error::ERR_NO_DOMAIN);
-- 
2.18.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [libvirt-tck PATCH] Add cases for nvram
Posted by Daniel P. Berrangé 4 years, 4 months ago
On Fri, Dec 13, 2019 at 04:59:24PM +0800, Dan Zheng wrote:
> This is to add the tests for below flags:
> - Sys::Virt::Domain::UNDEFINE_KEEP_NVRAM
> - Sys::Virt::Domain::UNDEFINE_NVRAM
> 
> Signed-off-by: Dan Zheng <dzheng@redhat.com>
> ---
>  scripts/domain/401-ovmf-nvram.t | 143 ++++++++++++++++++++++++++++++++
>  1 file changed, 143 insertions(+)
>  create mode 100644 scripts/domain/401-ovmf-nvram.t
> 
> diff --git a/scripts/domain/401-ovmf-nvram.t b/scripts/domain/401-ovmf-nvram.t
> new file mode 100644
> index 0000000..5310dd0
> --- /dev/null
> +++ b/scripts/domain/401-ovmf-nvram.t
> @@ -0,0 +1,143 @@
> +# -*- perl -*-
> +#
> +# Copyright (C) 2009 Red Hat, Inc.
> +# Copyright (C) 2018 Dan Zheng (dzheng@redhat.com)
> +#
> +# 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
> +
> +domain/401-ovmf-nvram.t - Test OVMF related functions and flags
> +
> +=head1 DESCRIPTION
> +
> +The test cases validates OVMF related APIs and flags
> +
> +Sys::Virt::Domain::UNDEFINE_KEEP_NVRAM
> +Sys::Virt::Domain::UNDEFINE_NVRAM
> +
> +=cut
> +
> +use strict;
> +use warnings;
> +
> +use Test::More tests => 8;
> +
> +use Sys::Virt::TCK;
> +use File::stat;
> +use File::Copy;
> +
> +
> +my $tck = Sys::Virt::TCK->new();
> +my $conn = eval { $tck->setup(); };
> +BAIL_OUT "failed to setup test harness: $@" if $@;
> +END { $tck->cleanup if $tck; }
> +
> +
> +sub setup_nvram {
> +
> +my $loader_path = shift;
> +my $nvram_template = shift;
> +my $nvram_path = shift;

Everything inside the function should be indented 4 space.

> +
> +# Install OVMF and check the two files should exist
> +#  - /usr/share/OVMF/OVMF_CODE.secboot.fd
> +#  - /usr/share/OVMF/OVMF_VARS.fd
> +
> +my $ret = `yum install -y OVMF`;
> +diag "yum install OVMF: $ret";

We shouldn't install extra RPMs in the scripts really. Insxtead
we should look to see if the files we need exist or not. If they
don't exist, then we shuld return 'undef' from this method. THe
caller should then arrange to skip execution of the rest of the
test.

> +my $st = stat($loader_path);
> +ok($st, "path $loader_path exists after OVMF is installed");
> +$st = stat($nvram_template);
> +ok($st, "path $nvram_template exists after OVMF is installed");
> +
> +# Ensure the sample nvram file exists
> +copy($nvram_template, $nvram_path) or die "Copy failed: $!";
> +
> +# Use 'q35' as machine type and add below lines to guest xml
> +#     <loader readonly='yes' secure='yes' type='pflash'>/usr/share/OVMF/OVMF_CODE.secboot.fd</loader>
> +#     <nvram template='/usr/share/OVMF/OVMF_VARS.fd'>/var/lib/libvirt/qemu/nvram/test_VARS.fd</nvram>
> +
> +my $xml = $tck->generic_domain(name => "tck")->as_xml;
> +my $xp = XML::XPath->new($xml);
> +diag $xp->getNodeText("/domain/os/type/\@machine");
> +
> +diag "Changing guest machine type to q35";
> +$xp->setNodeText("/domain/os/type/\@machine", "q35");
> +
> +my $loader_node = XML::XPath::Node::Element->new('loader');
> +my $loader_text   = XML::XPath::Node::Text->new($loader_path);
> +my $attr_ro     = XML::XPath::Node::Attribute->new('readonly');
> +my $attr_secure = XML::XPath::Node::Attribute->new('secure');
> +my $attr_type = XML::XPath::Node::Attribute->new('type');
> +
> +$attr_ro     -> setNodeValue('yes');
> +$attr_secure -> setNodeValue('yes');
> +$attr_type   -> setNodeValue('pflash');
> +
> +$loader_node->appendChild($loader_text);
> +$loader_node->appendAttribute($attr_ro);
> +$loader_node->appendAttribute($attr_secure);
> +$loader_node->appendAttribute($attr_type);
> +
> +my $nvram_node    = XML::XPath::Node::Element->new('nvram');
> +my $nvram_text    = XML::XPath::Node::Text->new($nvram_path);
> +my $attr_template = XML::XPath::Node::Attribute->new('template');
> +
> +$attr_template     -> setNodeValue($nvram_template);
> +
> +$nvram_node->appendChild($nvram_text);
> +$nvram_node->appendAttribute($attr_template);
> +
> +my $smm_node   = XML::XPath::Node::Element->new('smm');
> +my $attr_state = XML::XPath::Node::Attribute->new('state');
> +$attr_state -> setNodeValue("on");
> +$smm_node -> appendAttribute($attr_state);
> +
> +my ($root) = $xp->findnodes('/domain/os');
> +$root->appendChild($loader_node);
> +$root->appendChild($nvram_node);
> +($root) = $xp->findnodes('/domain/features');
> +$root->appendChild($smm_node);
> +
> +$xml = $xp->findnodes_as_string('/');
> +diag $xml;
> +return $xml;
> +}
> +
> +diag "Defining an inactive domain config with nvram";
> +my $loader_file_path = '/usr/share/OVMF/OVMF_CODE.secboot.fd';
> +my $nvram_file_template = '/usr/share/OVMF/OVMF_VARS.fd';
> +my $nvram_file_path = '/var/lib/libvirt/qemu/nvram/test_VARS.fd';
> +
> +my $xml = setup_nvram($loader_file_path, $nvram_file_template, $nvram_file_path);
> +my $dom;
> +
> +diag "Test Sys::Virt::Domain::UNDEFINE_KEEP_NVRAM";
> +ok_domain(sub { $dom = $conn->define_domain($xml) }, "defined domain with nvram configure");
> +diag "Checking nvram file already exists";
> +my $st = stat($nvram_file_path);
> +ok($st, "File '$nvram_file_path' exists as expected");
> +$dom->undefine(Sys::Virt::Domain::UNDEFINE_KEEP_NVRAM);
> +diag "Checking nvram file still exists";
> +$st = stat($nvram_file_path);
> +ok($st, "File '$nvram_file_path' still exists as expected");
> +
> +diag "Test Sys::Virt::Domain::UNDEFINE_NVRAM";
> +ok_domain(sub { $dom = $conn->define_domain($xml) }, "defined domain with nvram configure");
> +$dom->undefine(Sys::Virt::Domain::UNDEFINE_NVRAM);
> +diag "Checking nvram file removed";
> +$st = stat($nvram_file_path);
> +ok(!$st, "File '$nvram_file_path' is removed");
> +
> +ok_error(sub { $conn->get_domain_by_name("tck") }, "NO_DOMAIN error raised from missing domain",
> +	 Sys::Virt::Error::ERR_NO_DOMAIN);
> -- 
> 2.18.1
> 
> --
> libvir-list mailing list
> libvir-list@redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list