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

Erik Skultety eskultet at redhat.com
Tue Sep 24 06:25:19 UTC 2019


On Mon, Sep 23, 2019 at 04:47:06PM -0400, Laine Stump wrote:
> 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"

Ah, missed that one, good catch :).

>
>
> 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}) {

Hmm, wouldn't it be actually better to test for an empty hash instead? IOW
    if (%{$self->{rng}}) {
        ...

sounds a bit more generic to me rather than test presence of a specific
attribute within the hash and it seems to be working in context of both the
nwfilter test and the domain builder test with an Xen XML in prepare_release.sh
If you're okay with that kind of adjustment instead, I'll proceed with merging
the patch.

Thanks for review,
Erik

> +        $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}) {
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list




More information about the libvir-list mailing list