source: branches/samba-3.5.x/selftest/target/Kvm.pm@ 1010

Last change on this file since 1010 was 414, checked in by Herwig Bauernfeind, 15 years ago

Samba 3.5.0: Initial import

File size: 3.2 KB
Line 
1#!/usr/bin/perl
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.
5
6package Kvm;
7
8use strict;
9use Cwd qw(abs_path);
10use FindBin qw($RealBin);
11use POSIX;
12
13sub new($$$$) {
14 my ($classname, $dc_image, $vdesocket) = @_;
15 my $self = {
16 dc_image => $dc_image,
17 vdesocket => $vdesocket,
18 };
19 bless $self;
20 return $self;
21}
22
23sub write_kvm_ifup($$$)
24{
25 my ($self, $path, $ip_prefix) = @_;
26 open(SCRIPT, ">$path/kvm-ifup");
27
28 print SCRIPT <<__EOF__;
29#!/bin/sh
30
31PREFIX=$ip_prefix
32
33/sbin/ifconfig \$1 \$PREFIX.1 up
34
35cat <<EOF>$path/udhcpd.conf
36interface \$1
37start \$PREFIX.20
38end \$PREFIX.20
39max_leases 1
40lease_file $path/udhcpd.leases
41pidfile $path/udhcpd.pid
42EOF
43
44touch $path/udhcpd.leases
45
46/usr/sbin/udhcpd $path/udhcpd.conf
47
48exit 0
49__EOF__
50 close(SCRIPT);
51 chmod(0755, "$path/kvm-ifup");
52
53 return ("$path/kvm-ifup", "$path/udhcpd.pid", "$ip_prefix.20");
54}
55
56sub teardown_env($$)
57{
58 my ($self, $envvars) = @_;
59
60 print "Killing kvm instance $envvars->{KVM_PID}\n";
61
62 kill 9, $envvars->{KVM_PID};
63
64 if (defined($envvars->{DHCPD_PID})) {
65 print "Killing dhcpd instance $envvars->{DHCPD_PID}\n";
66 kill 9, $envvars->{DHCPD_PID};
67 }
68
69 return 0;
70}
71
72sub getlog_env($$)
73{
74 my ($self, $envvars) = @_;
75
76 return "";
77}
78
79sub check_env($$)
80{
81 my ($self, $envvars) = @_;
82
83 # FIXME: Check whether $self->{pid} is still running
84
85 return 1;
86}
87
88sub read_pidfile($)
89{
90 my ($path) = @_;
91
92 open(PID, $path);
93 <PID> =~ /([0-9]+)/;
94 my ($pid) = $1;
95 close(PID);
96 return $pid;
97}
98
99sub start($$$)
100{
101 my ($self, $path, $image) = @_;
102
103 my $pidfile = "$path/kvm.pid";
104
105 my $opts = (defined($ENV{KVM_OPTIONS})?$ENV{KVM_OPTIONS}:"-nographic");
106
107 if (defined($ENV{KVM_SNAPSHOT})) {
108 $opts .= " -loadvm $ENV{KVM_SNAPSHOT}";
109 }
110
111 my $netopts;
112 my $dhcp_pid;
113 my $ip_address;
114
115 if ($self->{vdesocket}) {
116 $netopts = "vde,socket=$self->{vdesocket}";
117 } else {
118 my $ifup_script, $dhcpd_pidfile;
119 ($ifup_script, $dhcpd_pidfile, $ip_address) = $self->write_kvm_ifup($path, "192.168.9");
120 $netopts = "tap,script=$ifup_script";
121 $dhcp_pid = read_pidfile($dhcpd_pidfile);
122 }
123
124 system("kvm -name \"Samba 4 Test Subject\" $opts -monitor unix:$path/kvm.monitor,server,nowait -daemonize -pidfile $pidfile -snapshot $image -net nic -net $netopts");
125
126 return (read_pidfile($pidfile), $dhcp_pid, $ip_address);
127}
128
129sub setup_env($$$)
130{
131 my ($self, $envname, $path) = @_;
132
133 if ($envname eq "dc") {
134 ($self->{dc_pid}, $self->{dc_dhcpd_pid}, $self->{dc_ip}) = $self->start($path, $self->{dc_image});
135
136 sub choose_var($$) {
137 my ($name, $default) = @_;
138 return defined($ENV{"KVM_DC_$name"})?$ENV{"KVM_DC_$name"}:$default;
139 }
140
141 if ($envname eq "dc") {
142 return {
143 KVM_PID => $self->{dc_pid},
144 DHCPD_PID => $self->{dc_dhcpd_pid},
145 USERNAME => choose_var("USERNAME", "Administrator"),
146 PASSWORD => choose_var("PASSWORD", "penguin"),
147 DOMAIN => choose_var("DOMAIN", "SAMBA"),
148 REALM => choose_var("REALM", "SAMBA"),
149 SERVER => choose_var("SERVER", "DC"),
150 SERVER_IP => $self->{dc_ip},
151 NETBIOSNAME => choose_var("NETBIOSNAME", "DC"),
152 NETBIOSALIAS => choose_var("NETBIOSALIAS", "DC"),
153 };
154 } else {
155 return undef;
156 }
157 } else {
158 return undef;
159 }
160}
161
162sub stop($)
163{
164 my ($self) = @_;
165}
166
1671;
Note: See TracBrowser for help on using the repository browser.