----- "Daniel P. Berrange" <berrange@xxxxxxxxxx> wrote: > On Mon, Oct 18, 2010 at 07:18:08AM +0800, Osier Yang wrote: > > To test daemon, qemu, lxc hook. > > > > * lib/Sys/Virt/TCK/Hooks.pm > > --- > > lib/Sys/Virt/TCK/Hooks.pm | 262 > +++++++++++++++++++++++++++++++++++++++++++++ > > 1 files changed, 262 insertions(+), 0 deletions(-) > > create mode 100644 lib/Sys/Virt/TCK/Hooks.pm > > > > diff --git a/lib/Sys/Virt/TCK/Hooks.pm b/lib/Sys/Virt/TCK/Hooks.pm > > > +sub libvirtd_status { > > + my $self = shift; > > + my $status = `service libvirtd status`; > > + my $_ = $status; > > + > > + if (/running/) { > > + $self->{libvirtd_status} = 'running'; > > + } elsif (/stopped/) { > > + $self->{libvirtd_status} = 'stopped'; > > + } > > + > > + return $self; > > +} > > > +sub service_libvirtd { > > + my $self = shift; > > + my $action = $self->{action}; > > + > > + truncate $self->{log_name}, 0 if -f $self->{log_name}; > > + > > + die "failed on $action daemon" if system "service libvirtd > $action"; > > + > > + $self->libvirtd_status; > > +} > > Is there any way we can avoid having to start/stop libvirtd > for this testing ? The general goal of the TCK is that it > is testing an existing deployment, so it should be expecting > that libvirtd is already up & running in a desired configuration. > > If we have to stop/start libvirtd, then the test script using > these APIs will need to be protected to make sure it only > runs when used with 'qemu:///system' or 'lxc://'. ie is skipped > with qemu:///session or vmware, or virtualbox, etc > For daemon hook testing, It's neccessary to start/stop/restart the libvirtd. Otherwise we can't see if the hook script is invoked or not. It doesn't relate to which hypervisor driver is used.. > > + > > +sub compare_log { > > + my $self = shift; > > + > > + my $expect_log = $self->{expect_log}; > > + my $log_name = $self->{log_name}; > > + > > + open LOG, "< $log_name" or die "failed on opening $log_name: > $!"; > > + > > + my @lines = <LOG>; > > + > > + return 0 unless @lines; > > + > > + chomp foreach @lines; > > + my $actual_log = join "\n", @lines; > > + > > + close LOG; > > Little perl black magic tip for you.... > > If you want to read the entire file contents into a single > string, then you can do > > open LOG, "<$log_name"; > local $/ = undef; > my $actual_log = <LOG>; > close LOG; > > '$/' is the line separator. By setting it to 'undef' we tell > Perl that there is no line separator, so it will immediately > read until end of file :-) BTW see 'man perlvar' for this > particular example > cool trick.. will update it.. thanks.. :-) > > 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