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

dzheng@redhat.com 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/20191218085203.2914-1-dzheng@redhat.com
scripts/domain/401-ovmf-nvram.t | 144 ++++++++++++++++++++++++++++++++
1 file changed, 144 insertions(+)
create mode 100644 scripts/domain/401-ovmf-nvram.t
[libvirt] [libvirt-tck PATCH v2] Add cases for nvram
Posted by dzheng@redhat.com 4 years, 4 months ago
From: Dan Zheng <dzheng@redhat.com>

This is to add the tests for below flags:
- Sys::Virt::Domain::UNDEFINE_KEEP_NVRAM
- Sys::Virt::Domain::UNDEFINE_NVRAM

v1: https://www.redhat.com/archives/libvir-list/2019-December/msg00932.html

Signed-off-by: Dan Zheng <dzheng@redhat.com>
---
 scripts/domain/401-ovmf-nvram.t | 144 ++++++++++++++++++++++++++++++++
 1 file changed, 144 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..4af2117
--- /dev/null
+++ b/scripts/domain/401-ovmf-nvram.t
@@ -0,0 +1,144 @@
+# -*- 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 => 6;
+
+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;
+
+    # Check below two files should exist
+    #  - /usr/share/OVMF/OVMF_CODE.secboot.fd
+    #  - /usr/share/OVMF/OVMF_VARS.fd
+    if (!stat($loader_path) or !stat($nvram_template)) {
+        return undef;
+    }
+
+    # 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);
+
+    if ($xp->getNodeText("/domain/os/type/\@machine") ne 'q35') {
+        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);
+
+SKIP: {
+    diag "Require files ($loader_file_path, $nvram_file_template) for testing";
+    skip "Please install OVMF and ensure necessary files exist", 5 if !defined($xml);
+    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 v2] Add cases for nvram
Posted by Daniel P. Berrangé 4 years, 4 months ago
On Wed, Dec 18, 2019 at 04:52:03PM +0800, dzheng@redhat.com wrote:
> From: Dan Zheng <dzheng@redhat.com>
> 
> This is to add the tests for below flags:
> - Sys::Virt::Domain::UNDEFINE_KEEP_NVRAM
> - Sys::Virt::Domain::UNDEFINE_NVRAM
> 
> v1: https://www.redhat.com/archives/libvir-list/2019-December/msg00932.html

FWIW, any notes about previous versions are best put after
the '---' marker...

> 
> Signed-off-by: Dan Zheng <dzheng@redhat.com>
> ---

...just here. This ensures that when the patch is applied to
git, the notes get discarded from the history.

>  scripts/domain/401-ovmf-nvram.t | 144 ++++++++++++++++++++++++++++++++
>  1 file changed, 144 insertions(+)
>  create mode 100644 scripts/domain/401-ovmf-nvram.t

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>

and pushed to git master

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