Re: [libvirt] [libvirt-tck 2/3] Add module for hooks testing

updated patches attached.. adopted 'Slurp' in function 'compare_log' instead of using "$/". :-) and add 'Slurp' requirement in 'Build.pl' - Osier ----- "Osier" <jyang@redhat.com> wrote:
----- "Daniel P. Berrange" <berrange@redhat.com> 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@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list

On Tue, Oct 19, 2010 at 03:40:15AM -0400, Osier wrote:
From ebab27920ed2bc1984a8b93c354c31947b58f942 Mon Sep 17 00:00:00 2001 From: Osier Yang <jyang@redhat.com> Date: Tue, 19 Oct 2010 15:31:12 +0800 Subject: [libvirt-tck 3/4] Add module for hooks testing
To validate daemon, qemu, and lxc hook is invoked correctly --- lib/Sys/Virt/TCK/Hooks.pm | 257 +++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 257 insertions(+), 0 deletions(-) create mode 100644 lib/Sys/Virt/TCK/Hooks.pm
ACK, looks good 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 :|
participants (2)
-
Daniel P. Berrange
-
Osier