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

Daniel P. Berrangé berrange at redhat.com
Fri Dec 13 16:59:45 UTC 2019


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 at 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 at 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 at 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 :|




More information about the libvir-list mailing list