From a71c3714323b6dce2fbeea68c2d007c223467f26 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 19 Feb 2008 02:44:31 +0100 Subject: Add framework for Kvm test. (This used to be commit e4efbb2906f4f3876986e21c12b58791c3526bed) --- source4/selftest/target/Kvm.pm | 55 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 source4/selftest/target/Kvm.pm (limited to 'source4/selftest/target/Kvm.pm') diff --git a/source4/selftest/target/Kvm.pm b/source4/selftest/target/Kvm.pm new file mode 100644 index 0000000000..533fb302d0 --- /dev/null +++ b/source4/selftest/target/Kvm.pm @@ -0,0 +1,55 @@ +#!/usr/bin/perl +# Start a KVM machine and run a number of tests against it. +# Copyright (C) 2005-2008 Jelmer Vernooij +# Published under the GNU GPL, v3 or later. + +package Kvm; + +use strict; +use Cwd qw(abs_path); +use FindBin qw($RealBin); +use POSIX; + +sub new($$$$) { + my ($classname, $image) = @_; + my $self = { + image => $image + }; + bless $self; + return $self; +} + +sub teardown_env($$) +{ + my ($self, $envvars) = @_; + + return 0; +} + +sub getlog_env($$) +{ + my ($self, $envvars) = @_; + + return ""; +} + +sub check_env($$) +{ + my ($self, $envvars) = @_; + + return 1; +} + +sub setup_env($$$) +{ + my ($self, $envname, $path) = @_; + + die("No implemented yet"); +} + +sub stop($) +{ + my ($self) = @_; +} + +1; -- cgit From 12e08782b3bef67395d9508fed9487d0217174d6 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 19 Feb 2008 03:29:03 +0100 Subject: Add Kvm start code. (This used to be commit 6308c134b225dfa8574aa1370a7874ed6e572ccc) --- source4/selftest/target/Kvm.pm | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'source4/selftest/target/Kvm.pm') diff --git a/source4/selftest/target/Kvm.pm b/source4/selftest/target/Kvm.pm index 533fb302d0..efd4fa2f7a 100644 --- a/source4/selftest/target/Kvm.pm +++ b/source4/selftest/target/Kvm.pm @@ -40,16 +40,39 @@ sub check_env($$) return 1; } +sub start($) +{ + my ($self) = @_; + + my $pidfile = "kvm.pid"; + + system("kvm $ENV{KVM_OPTIONS} -daemonize -pidfile $pidfile -net user -vnc unix:kvm.vnc -snapshot $self->{image}"); + + open(PID, $pidfile); + $self->{pid} = ; + close(PID); +} + sub setup_env($$$) { my ($self, $envname, $path) = @_; + if ($envname eq "dc") { + unless (defined($self->{pid})) { + $self->start(); + } + } elsif ($envname eq "member") { + return undef; + } + die("No implemented yet"); } sub stop($) { my ($self) = @_; + + kill $self->{pid}; } 1; -- cgit From 33f63de66bb16c4ca96255a17975268a7d958281 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 19 Feb 2008 04:44:30 +0100 Subject: kvm fixes. (This used to be commit 3a5e2f9ba3131a2a264e21640db8bea255fe9ea3) --- source4/selftest/target/Kvm.pm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'source4/selftest/target/Kvm.pm') diff --git a/source4/selftest/target/Kvm.pm b/source4/selftest/target/Kvm.pm index efd4fa2f7a..74b726d183 100644 --- a/source4/selftest/target/Kvm.pm +++ b/source4/selftest/target/Kvm.pm @@ -46,7 +46,9 @@ sub start($) my $pidfile = "kvm.pid"; - system("kvm $ENV{KVM_OPTIONS} -daemonize -pidfile $pidfile -net user -vnc unix:kvm.vnc -snapshot $self->{image}"); + my $opts = ($ENV{KVM_OPTIONS} or ""); + + system("kvm $opts -daemonize -pidfile $pidfile -vnc unix:kvm.vnc -snapshot $self->{image}"); open(PID, $pidfile); $self->{pid} = ; -- cgit From 87f611ed69b2ba16d2a36ed439a685a36a49937c Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 19 Feb 2008 15:12:57 +0100 Subject: Start and kill kvm instance properly. (This used to be commit 78e49765a2ec5fac485dbf56143716e151b4b562) --- source4/selftest/target/Kvm.pm | 45 +++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 14 deletions(-) (limited to 'source4/selftest/target/Kvm.pm') diff --git a/source4/selftest/target/Kvm.pm b/source4/selftest/target/Kvm.pm index 74b726d183..7fa7e02184 100644 --- a/source4/selftest/target/Kvm.pm +++ b/source4/selftest/target/Kvm.pm @@ -11,9 +11,9 @@ use FindBin qw($RealBin); use POSIX; sub new($$$$) { - my ($classname, $image) = @_; + my ($classname, $dc_image) = @_; my $self = { - image => $image + dc_image => $dc_image, }; bless $self; return $self; @@ -23,6 +23,10 @@ sub teardown_env($$) { my ($self, $envvars) = @_; + print "Killing kvm instance $envvars->{KVM_PID}\n"; + + kill 9, $envvars->{KVM_PID}; + return 0; } @@ -37,22 +41,26 @@ sub check_env($$) { my ($self, $envvars) = @_; + # FIXME: Check whether $self->{pid} is still running + return 1; } -sub start($) +sub start($$$) { - my ($self) = @_; + my ($self, $path, $image) = @_; - my $pidfile = "kvm.pid"; + my $pidfile = "$path/kvm.pid"; my $opts = ($ENV{KVM_OPTIONS} or ""); - system("kvm $opts -daemonize -pidfile $pidfile -vnc unix:kvm.vnc -snapshot $self->{image}"); + system("kvm $opts -daemonize -pidfile $pidfile -vnc unix:$path/kvm.vnc -snapshot $image"); open(PID, $pidfile); - $self->{pid} = ; + =~ /([0-9]+)/; + my ($pid) = $1; close(PID); + return $pid; } sub setup_env($$$) @@ -60,21 +68,30 @@ sub setup_env($$$) my ($self, $envname, $path) = @_; if ($envname eq "dc") { - unless (defined($self->{pid})) { - $self->start(); + $self->{dc_pid} = $self->start($path, $self->{dc_image}); + if ($envname eq "dc") { + return { + KVM_PID => $self->{dc_pid}, + USERNAME => "Administrator", + PASSWORD => "penguin", + DOMAIN => "SAMBA", + REALM => "SAMBA", + SERVER => "", + SERVER_IP => "", + NETBIOSNAME => "", + NETBIOSALIAS => "", + }; + } else { + return undef; } - } elsif ($envname eq "member") { + } else { return undef; } - - die("No implemented yet"); } sub stop($) { my ($self) = @_; - - kill $self->{pid}; } 1; -- cgit From d3e182098a69a20035ee5eb0e9ab453dfdcb9c8b Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 19 Feb 2008 16:28:32 +0100 Subject: Start dhcp server for kvm machine. (This used to be commit a54507dbd6bfaafb42eb95ec8a57897096b19583) --- source4/selftest/target/Kvm.pm | 84 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 68 insertions(+), 16 deletions(-) (limited to 'source4/selftest/target/Kvm.pm') diff --git a/source4/selftest/target/Kvm.pm b/source4/selftest/target/Kvm.pm index 7fa7e02184..1037f23c59 100644 --- a/source4/selftest/target/Kvm.pm +++ b/source4/selftest/target/Kvm.pm @@ -19,6 +19,39 @@ sub new($$$$) { return $self; } +sub write_kvm_ifup($$$) +{ + my ($self, $path, $ip_prefix) = @_; + open(SCRIPT, ">$path/kvm-ifup"); + + print SCRIPT <<__EOF__; +#!/bin/sh + +PREFIX=$ip_prefix + +/sbin/ifconfig \$1 \$PREFIX.1 up + +cat <$path/udhcpd.conf +interface \$1 +start \$PREFIX.20 +end \$PREFIX.20 +max_leases 1 +lease_file $path/udhcpd.leases +pidfile $path/udhcpd.pid +EOF + +touch $path/udhcpd.leases + +/usr/sbin/udhcpd $path/udhcpd.conf + +exit 0 +__EOF__ + close(SCRIPT); + chmod(0755, "$path/kvm-ifup"); + + return ("$path/kvm-ifup", "$path/udhcpd.pid", "$ip_prefix.20"); +} + sub teardown_env($$) { my ($self, $envvars) = @_; @@ -27,6 +60,9 @@ sub teardown_env($$) kill 9, $envvars->{KVM_PID}; + print "Killing dhcpd instance $envvars->{DHCPD_PID}\n"; + kill 9, $envvars->{DHCPD_PID}; + return 0; } @@ -46,21 +82,30 @@ sub check_env($$) return 1; } +sub read_pidfile($) +{ + my ($path) = @_; + + open(PID, $path); + =~ /([0-9]+)/; + my ($pid) = $1; + close(PID); + return $pid; +} + sub start($$$) { my ($self, $path, $image) = @_; my $pidfile = "$path/kvm.pid"; - my $opts = ($ENV{KVM_OPTIONS} or ""); + my $opts = ($ENV{KVM_OPTIONS} or "-nographic"); - system("kvm $opts -daemonize -pidfile $pidfile -vnc unix:$path/kvm.vnc -snapshot $image"); + my ($ifup_script, $dhcpd_pidfile, $ip_address) = $self->write_kvm_ifup($path, "192.168.9"); - open(PID, $pidfile); - =~ /([0-9]+)/; - my ($pid) = $1; - close(PID); - return $pid; + system("kvm $opts -daemonize -pidfile $pidfile -snapshot $image -net nic -net tap,script=$ifup_script"); + + return (read_pidfile($pidfile), read_pidfile($dhcpd_pidfile), $ip_address); } sub setup_env($$$) @@ -68,18 +113,25 @@ sub setup_env($$$) my ($self, $envname, $path) = @_; if ($envname eq "dc") { - $self->{dc_pid} = $self->start($path, $self->{dc_image}); + ($self->{dc_pid}, $self->{dc_dhcpd_pid}, $self->{dc_ip}) = $self->start($path, $self->{dc_image}); + + sub choose_var($$) { + my ($name, $default) = @_; + return defined($ENV{"KVM_DC_$name"})?$ENV{"KVM_DC_$name"}:$default; + } + if ($envname eq "dc") { return { KVM_PID => $self->{dc_pid}, - USERNAME => "Administrator", - PASSWORD => "penguin", - DOMAIN => "SAMBA", - REALM => "SAMBA", - SERVER => "", - SERVER_IP => "", - NETBIOSNAME => "", - NETBIOSALIAS => "", + DHCPD_PID => $self->{dc_dhcpd_pid}, + USERNAME => choose_var("USERNAME", "Administrator"), + PASSWORD => choose_var("PASSWORD", "penguin"), + DOMAIN => choose_var("DOMAIN", "SAMBA"), + REALM => choose_var("REALM", "SAMBA"), + SERVER => choose_var("SERVER", "DC"), + SERVER_IP => $self->{dc_ip}, + NETBIOSNAME => choose_var("NETBIOSNAME", "DC"), + NETBIOSALIAS => choose_var("NETBIOSALIAS", "DC"), }; } else { return undef; -- cgit From a31a2f082f26785967d8cb302ca940e76d513ac6 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 19 Feb 2008 16:49:29 +0100 Subject: Allow connecting to screen. (This used to be commit a021408c9d78260b9abf7ebec4230b7958033a38) --- source4/selftest/target/Kvm.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/selftest/target/Kvm.pm') diff --git a/source4/selftest/target/Kvm.pm b/source4/selftest/target/Kvm.pm index 1037f23c59..7799cb7ec0 100644 --- a/source4/selftest/target/Kvm.pm +++ b/source4/selftest/target/Kvm.pm @@ -99,7 +99,7 @@ sub start($$$) my $pidfile = "$path/kvm.pid"; - my $opts = ($ENV{KVM_OPTIONS} or "-nographic"); + my $opts = (defined($ENV{KVM_OPTIONS})?$ENV{KVM_OPTIONS}:"-nographic"); my ($ifup_script, $dhcpd_pidfile, $ip_address) = $self->write_kvm_ifup($path, "192.168.9"); -- cgit From 7f11952199af28797d49e42e1a336275412538c8 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 19 Feb 2008 17:23:38 +0100 Subject: Allow loading kvm snapshots. (This used to be commit 8ef295bb9cba4a47ff19894364e9d5f4dc15a935) --- source4/selftest/target/Kvm.pm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'source4/selftest/target/Kvm.pm') diff --git a/source4/selftest/target/Kvm.pm b/source4/selftest/target/Kvm.pm index 7799cb7ec0..b1ad8fcefa 100644 --- a/source4/selftest/target/Kvm.pm +++ b/source4/selftest/target/Kvm.pm @@ -101,9 +101,13 @@ sub start($$$) my $opts = (defined($ENV{KVM_OPTIONS})?$ENV{KVM_OPTIONS}:"-nographic"); + if (defined($ENV{KVM_SNAPSHOT})) { + $opts .= " -loadvm $ENV{KVM_SNAPSHOT}"; + } + my ($ifup_script, $dhcpd_pidfile, $ip_address) = $self->write_kvm_ifup($path, "192.168.9"); - system("kvm $opts -daemonize -pidfile $pidfile -snapshot $image -net nic -net tap,script=$ifup_script"); + system("kvm $opts -monitor unix:$path/kvm.monitor,server,nowait -daemonize -pidfile $pidfile -snapshot $image -net nic -net tap,script=$ifup_script"); return (read_pidfile($pidfile), read_pidfile($dhcpd_pidfile), $ip_address); } -- cgit From dbb79b683338a26d8c5d4f66efec4eae6987688c Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 19 Feb 2008 17:26:02 +0100 Subject: Add kvm name. (This used to be commit 228710e2656f8635697cdf4b7ce0c931683fbf86) --- source4/selftest/target/Kvm.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/selftest/target/Kvm.pm') diff --git a/source4/selftest/target/Kvm.pm b/source4/selftest/target/Kvm.pm index b1ad8fcefa..253f3b53af 100644 --- a/source4/selftest/target/Kvm.pm +++ b/source4/selftest/target/Kvm.pm @@ -107,7 +107,7 @@ sub start($$$) my ($ifup_script, $dhcpd_pidfile, $ip_address) = $self->write_kvm_ifup($path, "192.168.9"); - system("kvm $opts -monitor unix:$path/kvm.monitor,server,nowait -daemonize -pidfile $pidfile -snapshot $image -net nic -net tap,script=$ifup_script"); + system("kvm -name \"Samba 4 Test Subject\" $opts -monitor unix:$path/kvm.monitor,server,nowait -daemonize -pidfile $pidfile -snapshot $image -net nic -net tap,script=$ifup_script"); return (read_pidfile($pidfile), read_pidfile($dhcpd_pidfile), $ip_address); } -- cgit From c2941c9f0b8a48e4ab190c087b7f32c64d76aa8e Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 19 Feb 2008 21:51:09 +0100 Subject: Initial work on vde support. (This used to be commit 9b0dcac0bd805c3e1741448167b461c3fa0e33fd) --- source4/selftest/target/Kvm.pm | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'source4/selftest/target/Kvm.pm') diff --git a/source4/selftest/target/Kvm.pm b/source4/selftest/target/Kvm.pm index 253f3b53af..3b17a2909c 100644 --- a/source4/selftest/target/Kvm.pm +++ b/source4/selftest/target/Kvm.pm @@ -11,9 +11,10 @@ use FindBin qw($RealBin); use POSIX; sub new($$$$) { - my ($classname, $dc_image) = @_; + my ($classname, $dc_image, $vdesocket) = @_; my $self = { dc_image => $dc_image, + vdesocket => $vdesocket, }; bless $self; return $self; @@ -60,8 +61,10 @@ sub teardown_env($$) kill 9, $envvars->{KVM_PID}; - print "Killing dhcpd instance $envvars->{DHCPD_PID}\n"; - kill 9, $envvars->{DHCPD_PID}; + if (defined($envvars->{DHCPD_PID})) { + print "Killing dhcpd instance $envvars->{DHCPD_PID}\n"; + kill 9, $envvars->{DHCPD_PID}; + } return 0; } @@ -105,11 +108,22 @@ sub start($$$) $opts .= " -loadvm $ENV{KVM_SNAPSHOT}"; } - my ($ifup_script, $dhcpd_pidfile, $ip_address) = $self->write_kvm_ifup($path, "192.168.9"); + my $netopts; + my $dhcp_pid; + my $ip_address; + + if ($self->{vdesocket}) { + $netopts = "vde,socket=$self->{vdesocket}"; + } else { + my $ifup_script, $dhcpd_pidfile; + ($ifup_script, $dhcpd_pidfile, $ip_address) = $self->write_kvm_ifup($path, "192.168.9"); + $netopts = "tap,script=$ifup_script"; + $dhcp_pid = read_pidfile($dhcpd_pidfile); + } - system("kvm -name \"Samba 4 Test Subject\" $opts -monitor unix:$path/kvm.monitor,server,nowait -daemonize -pidfile $pidfile -snapshot $image -net nic -net tap,script=$ifup_script"); + system("kvm -name \"Samba 4 Test Subject\" $opts -monitor unix:$path/kvm.monitor,server,nowait -daemonize -pidfile $pidfile -snapshot $image -net nic -net $netopts"); - return (read_pidfile($pidfile), read_pidfile($dhcpd_pidfile), $ip_address); + return (read_pidfile($pidfile), $dhcp_pid, $ip_address); } sub setup_env($$$) -- cgit