2 # Start a KVM machine and run a number of tests against it.
3 # Copyright (C) 2005-2008 Jelmer Vernooij <jelmer@samba.org>
4 # Published under the GNU GPL, v3 or later.
10 use FindBin qw($RealBin);
14 my ($classname, $dc_image) = @_;
16 dc_image => $dc_image,
22 sub write_kvm_ifup($$$)
24 my ($self, $path, $ip_prefix) = @_;
25 open(SCRIPT, ">$path/kvm-ifup");
27 print SCRIPT <<__EOF__;
32 /sbin/ifconfig \$1 \$PREFIX.1 up
34 cat <<EOF>$path/udhcpd.conf
39 lease_file $path/udhcpd.leases
40 pidfile $path/udhcpd.pid
43 touch $path/udhcpd.leases
45 /usr/sbin/udhcpd $path/udhcpd.conf
50 chmod(0755, "$path/kvm-ifup");
52 return ("$path/kvm-ifup", "$path/udhcpd.pid", "$ip_prefix.20");
57 my ($self, $envvars) = @_;
59 print "Killing kvm instance $envvars->{KVM_PID}\n";
61 kill 9, $envvars->{KVM_PID};
63 print "Killing dhcpd instance $envvars->{DHCPD_PID}\n";
64 kill 9, $envvars->{DHCPD_PID};
71 my ($self, $envvars) = @_;
78 my ($self, $envvars) = @_;
80 # FIXME: Check whether $self->{pid} is still running
98 my ($self, $path, $image) = @_;
100 my $pidfile = "$path/kvm.pid";
102 my $opts = (defined($ENV{KVM_OPTIONS})?$ENV{KVM_OPTIONS}:"-nographic");
104 my ($ifup_script, $dhcpd_pidfile, $ip_address) = $self->write_kvm_ifup($path, "192.168.9");
106 system("kvm $opts -daemonize -pidfile $pidfile -snapshot $image -net nic -net tap,script=$ifup_script");
108 return (read_pidfile($pidfile), read_pidfile($dhcpd_pidfile), $ip_address);
113 my ($self, $envname, $path) = @_;
115 if ($envname eq "dc") {
116 ($self->{dc_pid}, $self->{dc_dhcpd_pid}, $self->{dc_ip}) = $self->start($path, $self->{dc_image});
119 my ($name, $default) = @_;
120 return defined($ENV{"KVM_DC_$name"})?$ENV{"KVM_DC_$name"}:$default;
123 if ($envname eq "dc") {
125 KVM_PID => $self->{dc_pid},
126 DHCPD_PID => $self->{dc_dhcpd_pid},
127 USERNAME => choose_var("USERNAME", "Administrator"),
128 PASSWORD => choose_var("PASSWORD", "penguin"),
129 DOMAIN => choose_var("DOMAIN", "SAMBA"),
130 REALM => choose_var("REALM", "SAMBA"),
131 SERVER => choose_var("SERVER", "DC"),
132 SERVER_IP => $self->{dc_ip},
133 NETBIOSNAME => choose_var("NETBIOSNAME", "DC"),
134 NETBIOSALIAS => choose_var("NETBIOSALIAS", "DC"),