[libvirt] [libvirt-tck PATCH] TCK.pm: Define libvirt VMs with an RNG device

Laine Stump laine at laine.org
Mon Sep 23 20:47:06 UTC 2019


On 9/23/19 1:27 PM, Erik Skultety wrote:
> The nwfilter 220-no-ip-spoofing.t test relies on an SSH connection to
> the test VM. However, because the domain definition passed to libvirt
> lacks an RNG device, the SSH server isn't started inside the guest
> (even though that is the default on virt-builder images) and therefore:
>
> "ssh: connect to host 192.168.122.227 port 22: Connection refused"


Strange that this has never happened to me. Is it perhaps because I'm 
using a very old cached image from virt-builder, and had started it up 
manually at some time in the past (thus giving it a long enough time to 
generate the keys, which are now stored away for posterity)?


>
> is returned which in turn makes a bunch of sub tests fail because the
> very basic premise - a working SSH connection - is false.
> This patch makes sure a virtio RNG is contained in the XML definition,
> thus causing the SSH server to be started successfully, thus allowing
> all the subtests to pass.
> ---
>   lib/Sys/Virt/TCK.pm               |  4 ++++
>   lib/Sys/Virt/TCK/DomainBuilder.pm | 21 +++++++++++++++++++++
>   2 files changed, 25 insertions(+)
>
> diff --git a/lib/Sys/Virt/TCK.pm b/lib/Sys/Virt/TCK.pm
> index 389d5cc..3ea06cc 100644
> --- a/lib/Sys/Virt/TCK.pm
> +++ b/lib/Sys/Virt/TCK.pm
> @@ -807,6 +807,8 @@ sub generic_machine_domain {
>           $b->disk(src => $config{root},
>                    dst => $config{dev},
>                    type => "file");
> +        $b->rng(backend_model => "random",
> +                backend => "/dev/urandom");
>   
>           if ($config{firstboot}) {
>               print "# Running the first boot\n";
> @@ -865,6 +867,8 @@ sub generic_machine_domain {
>                    dst => $config{dev},
>                    type => "file",
>                    shareable => $shareddisk);
> +        $b->rng(backend_model => "random",
> +                backend => "/dev/urandom");
>           return $b;
>       }
>   }
> diff --git a/lib/Sys/Virt/TCK/DomainBuilder.pm b/lib/Sys/Virt/TCK/DomainBuilder.pm
> index 45336b5..be8708f 100644
> --- a/lib/Sys/Virt/TCK/DomainBuilder.pm
> +++ b/lib/Sys/Virt/TCK/DomainBuilder.pm
> @@ -49,6 +49,7 @@ sub new {
>           graphics => [],
>           hostdevs => [],
>           seclabel => {},
> +        rng => {},
>       };
>   
>       bless $self, $class;
> @@ -328,6 +329,19 @@ sub seclabel {
>       return $self;
>   }
>   
> +sub rng {
> +    my $self = shift;
> +    my %params = @_;
> +
> +    die "backend model parameter is required" unless $params{backend_model};
> +    die "backend parameter is required" unless $params{backend};
> +
> +    $self->{rng} = \%params;
> +    $self->{rng}->{model} = "virtio" unless defined $self->{rng}->{model};
> +
> +    return $self;
> +}
> +
>   sub as_xml {
>       my $self = shift;
>   
> @@ -504,6 +518,13 @@ sub as_xml {
>           $w->endTag("graphics");
>       }
>       $w->emptyTag("console", type => "pty");
> +
> +    $w->startTag("rng",
> +                 model => $self->{rng}->{model});
> +    $w->dataElement("backend", $self->{rng}->{backend},
> +                    model => $self->{rng}->{backend_model});
> +    $w->endTag("rng");
> +


Because the <rng> element is added unconditionally, 
t/070-domain-builder.t fails when you run "./prepare-release.sh"


I fixed this locally by making that bit of code conditional on having 
backen_model set (see the diff at the end). You could also modify the 
failing test to explicitly add an <rng> element, but I think we still 
should put it in conditionally, in case someone needs to *not* have it 
(e.g., there are xen tests run with libvirt-tck, and they might not like 
it if the domain had an <rng> element; I can't say that for sure, 
because I'm not setup to test Xen, and am too lazy to even look at the 
code and try to figure it out by hand :-)).


 From my POV, if you apply the diff at the end of this message, then:


Reviewed-by: Laine Stump <laine at laine.org>


You may or may not choose to add an rng to the domain-builder test (and 
may or may not get a complaint the next time someone runs a Xen test :-)


diff --git a/lib/Sys/Virt/TCK/DomainBuilder.pm 
b/lib/Sys/Virt/TCK/DomainBuilder.pm
index be8708f..9e0c49c 100644
--- a/lib/Sys/Virt/TCK/DomainBuilder.pm
+++ b/lib/Sys/Virt/TCK/DomainBuilder.pm
@@ -519,11 +519,13 @@ sub as_xml {
      }
      $w->emptyTag("console", type => "pty");

-    $w->startTag("rng",
-                 model => $self->{rng}->{model});
-    $w->dataElement("backend", $self->{rng}->{backend},
-                    model => $self->{rng}->{backend_model});
-    $w->endTag("rng");
+    if ($self->{rng}->{backend_model}) {
+        $w->startTag("rng",
+                     model => $self->{rng}->{model});
+        $w->dataElement("backend", $self->{rng}->{backend},
+                        model => $self->{rng}->{backend_model});
+        $w->endTag("rng");
+    }

      $w->endTag("devices");
      if ($self->{seclabel}->{model}) {




More information about the libvir-list mailing list