At file:///home/jelmer/bzr.samba/4.0-envs/ ------------------------------------------------------------ revno: 11694 revision-id: [EMAIL PROTECTED] parent: [EMAIL PROTECTED] committer: Jelmer Vernooij <[EMAIL PROTECTED]> branch nick: 4.0-envs timestamp: Wed 2007-03-21 02:36:59 +0100 message: Initial work on support for a Samba3 target. added: source/script/tests/Samba3.pm samba3.pm-20070321010054-iuaa65j1qcdh0i66-1 modified: source/script/tests/Samba4.pm svn-v2:[EMAIL PROTECTED] source/script/tests/selftest.pl svn-v2:[EMAIL PROTECTED] === added file 'source/script/tests/Samba3.pm' --- a/source/script/tests/Samba3.pm 1970-01-01 00:00:00 +0000 +++ b/source/script/tests/Samba3.pm 2007-03-21 01:36:59 +0000 @@ -0,0 +1,129 @@ +#!/usr/bin/perl +# Bootstrap Samba and run a number of tests against it. +# Copyright (C) 2005-2007 Jelmer Vernooij <[EMAIL PROTECTED]> +# Published under the GNU GPL, v3 or later. + +package Samba3; + +use strict; +use FindBin qw($RealBin); +use POSIX; + +sub new($$$) { + my ($classname, $bindir, $setupdir) = @_; + my $self = { bindir => $bindir, setupdir => $setupdir }; + bless $self; + return $self; +} + +sub check_or_start($$$$) +{ + my ($self, $env_vars, $socket_wrapper_dir, $max_time) = @_; + return 0 if ( -p $env_vars->{SMBD_TEST_FIFO}); + + warn("Not using socket wrapper, but also not running as root. Will not be able to listen on proper ports") unless + defined($socket_wrapper_dir) or $< == 0; + + unlink($env_vars->{SMBD_TEST_FIFO}); + POSIX::mkfifo($env_vars->{SMBD_TEST_FIFO}, 0700); + unlink($env_vars->{SMBD_TEST_LOG}); + + my $valgrind = ""; + if (defined($ENV{SMBD_VALGRIND})) { + $valgrind = $ENV{SMBD_VALGRIND}; + } + + print "STARTING SMBD... "; + my $pid = fork(); + if ($pid == 0) { + open STDIN, $env_vars->{SMBD_TEST_FIFO}; + open STDOUT, ">$env_vars->{SMBD_TEST_LOG}"; + open STDERR, '>&STDOUT'; + my $optarg = ""; + if (defined($max_time)) { + $optarg = "--maximum-runtime=$max_time "; + } + my $ret = system("$valgrind $self->{bindir}/smbd $optarg -s $env_vars->{CONFFILE} -M single -i --leak-report-full"); + if ($? == -1) { + print "Unable to start smbd: $ret: $!\n"; + exit 1; + } + unlink($env_vars->{SMBD_TEST_FIFO}); + unlink(<$socket_wrapper_dir/*>) if (defined($socket_wrapper_dir) and -d $socket_wrapper_dir); + my $exit = $? >> 8; + if ( $ret == 0 ) { + print "smbd exits with status $exit\n"; + } elsif ( $ret & 127 ) { + print "smbd got signal ".($ret & 127)." and exits with $exit!\n"; + } else { + $ret = $? >> 8; + print "smbd failed with status $exit!\n"; + } + exit $exit; + } + print "DONE\n"; + + open(DATA, ">$env_vars->{SMBD_TEST_FIFO}"); + + return $pid; +} + +sub wait_for_start($) +{ + # give time for nbt server to register its names + print "delaying for nbt name registration\n"; + + # This will return quickly when things are up, but be slow if we + # need to wait for (eg) SSL init + system("bin/nmblookup $ENV{CONFIGURATION} $ENV{SERVER}"); + system("bin/nmblookup $ENV{CONFIGURATION} -U $ENV{SERVER} $ENV{SERVER}"); + system("bin/nmblookup $ENV{CONFIGURATION} $ENV{SERVER}"); + system("bin/nmblookup $ENV{CONFIGURATION} -U $ENV{SERVER} $ENV{NETBIOSNAME}"); + system("bin/nmblookup $ENV{CONFIGURATION} $ENV{NETBIOSNAME}"); + system("bin/nmblookup $ENV{CONFIGURATION} -U $ENV{SERVER} $ENV{NETBIOSNAME}"); + system("bin/nmblookup $ENV{CONFIGURATION} $ENV{NETBIOSNAME}"); + system("bin/nmblookup $ENV{CONFIGURATION} -U $ENV{SERVER} $ENV{NETBIOSNAME}"); +} + +sub provision($$$) +{ + my ($self, $environment, $prefix) = @_; + my %ret = (); + print "PROVISIONING..."; + open(IN, "$RealBin/mktestdc.sh $prefix|") or die("Unable to setup"); + while (<IN>) { + die ("Error parsing `$_'") unless (/^([A-Z0-9a-z_]+)=(.*)$/); + $ret{$1} = $2; + } + close(IN); + + $ret{SMBD_TEST_FIFO} = "$prefix/smbd_test.fifo"; + $ret{SMBD_TEST_LOG} = "$prefix/smbd_test.log"; + return \%ret; +} + +sub stop($) +{ + my ($self) = @_; + + close(DATA); + + sleep(2); + + my $failed = $? >> 8; + + if (-f "$ENV{PIDDIR}/smbd.pid" ) { + open(IN, "<$ENV{PIDDIR}/smbd.pid") or die("unable to open smbd pid file"); + kill 9, <IN>; + close(IN); + } + + return $failed; +} + +sub setup_env($$) +{ + my ($self, $name) = @_; +} + +1;
=== modified file 'source/script/tests/Samba4.pm' --- a/source/script/tests/Samba4.pm 2007-03-21 00:52:30 +0000 +++ b/source/script/tests/Samba4.pm 2007-03-21 01:36:59 +0000 @@ -5,10 +5,6 @@ package Samba4; -use Exporter; [EMAIL PROTECTED] = qw(Exporter); [EMAIL PROTECTED] = qw(slapd_start slapd_stop smbd_check_or_start provision); - use strict; use FindBin qw($RealBin); use POSIX; @@ -58,7 +54,7 @@ } } -sub smbd_check_or_start($$$$) +sub check_or_start($$$$) { my ($self, $env_vars, $socket_wrapper_dir, $max_time) = @_; return 0 if ( -p $env_vars->{SMBD_TEST_FIFO}); === modified file 'source/script/tests/selftest.pl' --- a/source/script/tests/selftest.pl 2007-03-21 00:14:56 +0000 +++ b/source/script/tests/selftest.pl 2007-03-21 01:36:59 +0000 @@ -115,6 +115,7 @@ use POSIX; use Cwd; use lib "$RealBin"; +use Samba3; use Samba4; use SocketWrapper; @@ -432,7 +433,7 @@ } SocketWrapper::set_default_iface(1); -$target->smbd_check_or_start($testenv_vars, $socket_wrapper_dir, +$target->check_or_start($testenv_vars, $socket_wrapper_dir, ($ENV{SMBD_MAX_TIME} or 5400)); SocketWrapper::set_default_iface(6);