r21729: Some more tests
[Samba/ekacnet.git] / source4 / script / tests / Samba4.pm
blobf81d75ffd39fb7c02ffb4b764503a5a67d4b3b4d
1 #!/usr/bin/perl
2 # Bootstrap Samba and run a number of tests against it.
3 # Copyright (C) 2005-2007 Jelmer Vernooij <jelmer@samba.org>
4 # Published under the GNU GPL, v3 or later.
6 package Samba4;
8 use Exporter;
9 @ISA = qw(Exporter);
10 @EXPORT_OK = qw(slapd_start slapd_stop smbd_check_or_start provision);
12 use strict;
13 use FindBin qw($RealBin);
14 use POSIX;
16 sub slapd_start($$)
18 my ($conf, $uri) = @_;
19 # running slapd in the background means it stays in the same process group, so it can be
20 # killed by timelimit
21 if (defined($ENV{FEDORA_DS_PREFIX})) {
22 system("$ENV{FEDORA_DS_PREFIX}/sbin/ns-slapd -D $ENV{FEDORA_DS_DIR} -d0 &");
23 } else {
24 my $oldpath = $ENV{PATH};
25 $ENV{PATH} = "/usr/local/sbin:/usr/sbin:/sbin:$ENV{PATH}";
26 system("slapd -d0 -f $conf -h $uri &");
27 $ENV{PATH} = $oldpath;
29 return 1;
32 sub slapd_stop()
34 if (defined($ENV{FEDORA_DS_PREFIX})) {
35 system("$ENV{LDAPDIR}/slapd-samba4/stop-slapd");
36 } else {
37 open(IN, "<$ENV{PIDDIR}/slapd.pid") or
38 die("unable to open slapd pid file");
39 kill 9, <IN>;
40 close(IN);
44 sub smbd_check_or_start($$$$$$)
46 my ($bindir, $test_fifo, $test_log, $socket_wrapper_dir, $max_time, $conffile) = @_;
47 return 0 if ( -p $test_fifo );
49 warn("Not using socket wrapper, but also not running as root. Will not be able to listen on proper ports") unless
50 defined($socket_wrapper_dir) or $< == 0;
52 if (defined($socket_wrapper_dir)) {
53 if ( -d $socket_wrapper_dir ) {
54 unlink <$socket_wrapper_dir/*>;
55 } else {
56 mkdir($socket_wrapper_dir);
60 unlink($test_fifo);
61 POSIX::mkfifo($test_fifo, 0700);
62 unlink($test_log);
64 my $valgrind = "";
65 if (defined($ENV{SMBD_VALGRIND})) {
66 $valgrind = $ENV{SMBD_VALGRIND};
69 print "STARTING SMBD...";
70 my $pid = fork();
71 if ($pid == 0) {
72 open STDIN, $test_fifo;
73 open STDOUT, ">$test_log";
74 open STDERR, '>&STDOUT';
75 my $optarg = "";
76 if (defined($max_time)) {
77 $optarg = "--maximum-runtime=$max_time ";
79 my $ret = system("$valgrind $bindir/smbd $optarg -s $conffile -M single -i --leak-report-full");
80 if ($? == -1) {
81 print "Unable to start smbd: $ret: $!\n";
82 exit 1;
84 unlink($test_fifo);
85 unlink(<$socket_wrapper_dir/*>) if (defined($socket_wrapper_dir) and -d $socket_wrapper_dir);
86 my $exit = $? >> 8;
87 if ( $ret == 0 ) {
88 print "smbd exits with status $exit\n";
89 } elsif ( $ret & 127 ) {
90 print "smbd got signal ".($ret & 127)." and exits with $exit!\n";
91 } else {
92 $ret = $? >> 8;
93 print "smbd failed with status $exit!\n";
95 exit $exit;
97 print "DONE\n";
99 return $pid;
102 sub wait_for_start()
104 # give time for nbt server to register its names
105 print "delaying for nbt name registration\n";
106 sleep(4);
108 # This will return quickly when things are up, but be slow if we
109 # need to wait for (eg) SSL init
110 system("bin/nmblookup $ENV{CONFIGURATION} $ENV{SERVER}");
111 system("bin/nmblookup $ENV{CONFIGURATION} -U $ENV{SERVER} $ENV{SERVER}");
112 system("bin/nmblookup $ENV{CONFIGURATION} $ENV{SERVER}");
113 system("bin/nmblookup $ENV{CONFIGURATION} -U $ENV{SERVER} $ENV{NETBIOSNAME}");
114 system("bin/nmblookup $ENV{CONFIGURATION} $ENV{NETBIOSNAME}");
115 system("bin/nmblookup $ENV{CONFIGURATION} -U $ENV{SERVER} $ENV{NETBIOSNAME}");
118 sub provision($)
120 my ($prefix) = @_;
121 my %ret = ();
122 print "PROVISIONING...";
123 open(IN, "$RealBin/mktestsetup.sh $prefix|") or die("Unable to setup");
124 while (<IN>) {
125 die ("Error parsing `$_'") unless (/^([A-Z0-9a-z_]+)=(.*)$/);
126 $ret{$1} = $2;
128 close(IN);
129 return \%ret;
132 sub provision_ldap($$)
134 my ($bindir, $setupdir) = @_;
135 system("$bindir/smbscript $setupdir/provision $ENV{PROVISION_OPTIONS} \"$ENV{PROVISION_ACI}\" --ldap-backend=$ENV{LDAP_URI}") and
136 die("LDAP PROVISIONING failed: $bindir/smbscript $setupdir/provision $ENV{PROVISION_OPTIONS} \"$ENV{PROVISION_ACI}\" --ldap-backend=$ENV{LDAP_URI}");