
On Thu, Oct 07, 2010 at 02:07:23PM +0200, Gerhard Stenzel wrote:
On Wed, 2010-10-06 at 12:52 +0100, Daniel P. Berrange wrote:
I don't like this approach. JUst add an optional parameter to the build_domain methods
my $mode = @_ ? shift : "bridge";
eg so it default to traditional bridging, but you can pass in 'vepa' if you desire to change it. Or something like that.
Thanks for the feedback. The changes are in the attached new versions of the patches. It would be great if you could push at least modify_library_functions.patch to the git.
-- Best regards,
Gerhard Stenzel, ----------------------------------------------------------------------------------------------------------------------------------- IBM Deutschland Research & Development GmbH Vorsitzender des Aufsichtsrats: Martin Jetter Geschäftsführung: Dirk Wittkopp Sitz der Gesellschaft: Böblingen Registergericht: Amtsgericht Stuttgart, HRB 243294
Index: libvirt-tck/scripts/nwfilter/300-vsitype.t =================================================================== --- /dev/null +++ libvirt-tck/scripts/nwfilter/300-vsitype.t @@ -0,0 +1,71 @@ +# -*- perl -*- +# +# Copyright (C) 2010 IBM Corp. +# +# 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 + +nwfilter/300-vsitype.t - verify VSI informatio + +=head1 DESCRIPTION + +The test case validates that the corrrect VSI is set in the adjacent switch + +=cut + +use strict; +use warnings; + +use Test::More tests => 3; + +use Sys::Virt::TCK; +use Sys::Virt::TCK::NetworkHelpers; +use Test::Exception; +use Net::SSH::Perl; +use File::Spec::Functions qw(catfile catdir rootdir); + +my $tck = Sys::Virt::TCK->new(); +my $conn = eval { $tck->setup(); }; +BAIL_OUT "failed to setup test harness: $@" if $@; +END { + $tck->cleanup if $tck; +}
Since most systems won't yet have lldptool present, you should surround the entire test from here onwards in a big 'SKIP : {}' block. eg SKIP: { skip "lldptool not present", 3 unless -e "/usr/sbin/lldptool"; .....
+ +# creating domain +my $dom1; +my $dom_name ="tck8021Qbgtest"; + +# speficy mode="vepa" for a direct interface +$dom1 = prepare_test_disk_and_vm($tck, $conn, $dom_name, "vepa"); +$dom1->create(); + +ok($dom1->get_id() > 0, "running domain has an ID > 0"); +my $xml = $dom1->get_xml_description; +diag $xml; +my $mac1 = get_first_macaddress($dom1); +diag "mac is $mac1"; + +sleep(30); + +# check vsi information +diag "Verifying VSI information using lldptool"; +my $lldptool = `/usr/sbin/lldptool -t -i eth2 -V vdp mode`; +diag $lldptool; +# check if instance is listed +ok($lldptool =~ "instance", "check instance"); +ok($lldptool =~ $mac1, "check mac as well"); + + +shutdown_vm_gracefully($dom1); + +exit 0;
}; This will ensure that the TCK simply skips over the test rather than showing a failure
Index: libvirt-tck/lib/Sys/Virt/TCK/DomainBuilder.pm =================================================================== --- libvirt-tck.orig/lib/Sys/Virt/TCK/DomainBuilder.pm +++ libvirt-tck/lib/Sys/Virt/TCK/DomainBuilder.pm @@ -410,8 +410,25 @@ sub as_xml {
$w->emptyTag("mac", address => $interface->{mac}); - $w->emptyTag("source", - network => $interface->{source}); + + if( $interface->{dev}) { + $w->emptyTag("source", + dev => $interface->{dev}, + mode => $interface->{mode}); + } else { + $w->emptyTag("source", + network => $interface->{source}); + } + if( $interface->{virtualport}) { + $w->startTag("virtualport", + type => $interface->{virtualport}); + $w->emptyTag("parameters", + managerid => '1', + typeid => '2', + typeidversion => '3', + instanceid => '40000000-0000-0000-0000-000000000000'); + $w->endTag("virtualport"); + } $w->emptyTag("model", type => $interface->{model}); if( $interface->{filterref}) { Index: libvirt-tck/lib/Sys/Virt/TCK/NetworkHelpers.pm =================================================================== --- libvirt-tck.orig/lib/Sys/Virt/TCK/NetworkHelpers.pm +++ libvirt-tck/lib/Sys/Virt/TCK/NetworkHelpers.pm @@ -42,6 +42,7 @@ sub build_cdrom_ks_image { sub build_domain{ my $tck = shift; my $domain_name = shift; + my $mode = @_ ? shift : "bridge";
my $guest; my $mac = "52:54:00:11:11:11"; @@ -50,10 +51,19 @@ sub build_domain{ my $filterref = "clean-traffic"; my $network = "network"; my $source = "default"; + my $dev = "eth2"; + my $virtualport;
my ($cdrom, $ksurl) = build_cdrom_ks_image($tck);
my $guest = $tck->generic_domain($domain_name); + + # change the type of network connection for 802.1Qbg tests + if ($mode eq "vepa") { + $network ="direct"; + $virtualport = "802.1Qbg"; + } + # We want a bigger disk than normal $guest->rmdisk(); my $diskpath = $tck->create_sparse_disk("nwfilter", "main.img", 2048); @@ -79,12 +89,23 @@ sub build_domain{ } else { diag "Do normal boot"; $guest->clear_kernel_initrd_cmdline(); - $guest->interface(type => $network, - source => $source, - model => $model, - mac => $mac, - filterref => $filterref); + if ($mode eq "vepa") { + $guest->interface(type => $network, + source => $source, + model => $model, + mac => $mac, + dev => $dev, + mode => $mode, + virtualport => $virtualport); + } else { + $guest->interface(type => $network, + source => $source, + model => $model, + mac => $mac, + filterref => $filterref); + } } + # common configuration $guest->maxmem("524288"); $guest->memory("524288"); @@ -111,8 +132,9 @@ sub prepare_test_disk_and_vm{ my $tck = shift; my $conn = shift; my $domain_name = shift; + my $mode = @_ ? shift : "bridge";
- my ($guest, $need_install) = build_domain($tck, $domain_name); + my ($guest, $need_install) = build_domain($tck, $domain_name, $mode); if ($need_install) { my $dom = $conn->define_domain($guest->as_xml); diag "Starting installation domain"; @@ -129,7 +151,7 @@ sub prepare_test_disk_and_vm{ diag " .. done"; }
- ($guest, $need_install) = build_domain($tck, $domain_name); + ($guest, $need_install) = build_domain($tck, $domain_name, $mode); if ($need_install) { die "guest install appears to have failed"; }
This all looks fine now. Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|