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 :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list