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 if (defined($ENV{KVM_SNAPSHOT})) {
105 $opts .= " -loadvm $ENV{KVM_SNAPSHOT}";
108 my ($ifup_script, $dhcpd_pidfile, $ip_address) = $self->write_kvm_ifup($path, "192.168.9");
110 system("kvm $opts -monitor unix:$path/kvm.monitor,server,nowait -daemonize -pidfile $pidfile -snapshot $image -net nic -net tap,script=$ifup_script");
112 return (read_pidfile($pidfile), read_pidfile($dhcpd_pidfile), $ip_address);
117 my ($self, $envname, $path) = @_;
119 if ($envname eq "dc") {
120 ($self->{dc_pid}, $self->{dc_dhcpd_pid}, $self->{dc_ip}) = $self->start($path, $self->{dc_image});
123 my ($name, $default) = @_;
124 return defined($ENV{"KVM_DC_$name"})?$ENV{"KVM_DC_$name"}:$default;
127 if ($envname eq "dc") {
129 KVM_PID => $self->{dc_pid},
130 DHCPD_PID => $self->{dc_dhcpd_pid},
131 USERNAME => choose_var("USERNAME", "Administrator"),
132 PASSWORD => choose_var("PASSWORD", "penguin"),
133 DOMAIN => choose_var("DOMAIN", "SAMBA"),
134 REALM => choose_var("REALM", "SAMBA"),
135 SERVER => choose_var("SERVER", "DC"),
136 SERVER_IP => $self->{dc_ip},
137 NETBIOSNAME => choose_var("NETBIOSNAME", "DC"),
138 NETBIOSALIAS => choose_var("NETBIOSALIAS", "DC"),