my @full_cmd = $self->make_bin_cmd($binary, $env_vars,
$ENV{NMBD_OPTIONS}, $ENV{NMBD_VALGRIND},
$ENV{NMBD_DONT_LOG_STDOUT});
-
- unlink($env_vars->{NMBD_TEST_LOG});
+ my %daemon_ctx = (
+ NAME => "nmbd",
+ BINARY_PATH => $binary,
+ FULL_CMD => [ @full_cmd ],
+ LOG_FILE => $env_vars->{NMBD_TEST_LOG},
+ NO_RESOLV => 1,
+ );
+ if ($nmbd ne "yes") {
+ $daemon_ctx{SKIP_DAEMON} = 1;
+ }
+
+ unlink($daemon_ctx{LOG_FILE});
print "STARTING NMBD...";
my $pid = fork();
if ($pid == 0) {
- open STDOUT, ">$env_vars->{NMBD_TEST_LOG}";
+ open STDOUT, ">$daemon_ctx{LOG_FILE}";
open STDERR, '>&STDOUT';
SocketWrapper::set_default_iface($env_vars->{SOCKET_WRAPPER_DEFAULT_IFACE});
- my $skip_resolv_wrapper = 1;
- Samba::set_env_for_process("nmbd", $env_vars, $skip_resolv_wrapper);
+ Samba::set_env_for_process($daemon_ctx{NAME}, $env_vars, $daemon_ctx{NO_RESOLV});
- if ($nmbd ne "yes") {
+ if (defined($daemon_ctx{SKIP_DAEMON})) {
$SIG{USR1} = $SIG{ALRM} = $SIG{INT} = $SIG{QUIT} = $SIG{TERM} = sub {
my $signame = shift;
- print("Skip nmbd received signal $signame");
+ print("Skip $daemon_ctx{NAME} received signal $signame");
exit 0;
};
sleep($self->{server_maxtime});
exit 0;
}
- $ENV{MAKE_TEST_BINARY} = $binary;
+ $ENV{MAKE_TEST_BINARY} = $daemon_ctx{BINARY_PATH};
close($env_vars->{STDIN_PIPE});
open STDIN, ">&", \*STDIN_READER or die "can't dup STDIN_READER to STDIN: $!";
- exec(@full_cmd)
+ exec(@{ $daemon_ctx{FULL_CMD} })
or die("Unable to start $ENV{MAKE_TEST_BINARY}: $!");
}
$env_vars->{NMBD_TL_PID} = $pid;
if (not defined($ENV{WINBINDD_DONT_LOG_STDOUT})) {
push(@full_cmd, "--stdout");
}
+ %daemon_ctx = (
+ NAME => "winbindd",
+ BINARY_PATH => $binary,
+ FULL_CMD => [ @full_cmd ],
+ LOG_FILE => $env_vars->{WINBINDD_TEST_LOG},
+ );
+ if ($winbindd ne "yes") {
+ $daemon_ctx{SKIP_DAEMON} = 1;
+ }
- unlink($env_vars->{WINBINDD_TEST_LOG});
+ unlink($daemon_ctx{LOG_FILE});
print "STARTING WINBINDD...";
$pid = fork();
if ($pid == 0) {
- open STDOUT, ">$env_vars->{WINBINDD_TEST_LOG}";
+ open STDOUT, ">$daemon_ctx{LOG_FILE}";
open STDERR, '>&STDOUT';
SocketWrapper::set_default_iface($env_vars->{SOCKET_WRAPPER_DEFAULT_IFACE});
- Samba::set_env_for_process("winbindd", $env_vars);
+ Samba::set_env_for_process($daemon_ctx{NAME}, $env_vars);
- if ($winbindd ne "yes") {
+ if (defined($daemon_ctx{SKIP_DAEMON})) {
$SIG{USR1} = $SIG{ALRM} = $SIG{INT} = $SIG{QUIT} = $SIG{TERM} = sub {
my $signame = shift;
- print("Skip winbindd received signal $signame");
+ print("Skip $daemon_ctx{NAME} received signal $signame");
exit 0;
};
sleep($self->{server_maxtime});
exit 0;
}
- $ENV{MAKE_TEST_BINARY} = $binary;
+ $ENV{MAKE_TEST_BINARY} = $daemon_ctx{BINARY_PATH};
close($env_vars->{STDIN_PIPE});
open STDIN, ">&", \*STDIN_READER or die "can't dup STDIN_READER to STDIN: $!";
- exec(@full_cmd)
+ exec(@{ $daemon_ctx{FULL_CMD} })
or die("Unable to start $ENV{MAKE_TEST_BINARY}: $!");
}
$env_vars->{WINBINDD_TL_PID} = $pid;
@full_cmd = $self->make_bin_cmd($binary, $env_vars,
$ENV{SMBD_OPTIONS}, $ENV{SMBD_VALGRIND},
$ENV{SMBD_DONT_LOG_STDOUT});
+ %daemon_ctx = (
+ NAME => "smbd",
+ BINARY_PATH => $binary,
+ FULL_CMD => [ @full_cmd ],
+ LOG_FILE => $env_vars->{SMBD_TEST_LOG},
+ );
+ if ($smbd ne "yes") {
+ $daemon_ctx{SKIP_DAEMON} = 1;
+ }
- unlink($env_vars->{SMBD_TEST_LOG});
+ unlink($daemon_ctx{LOG_FILE});
print "STARTING SMBD...";
$pid = fork();
if ($pid == 0) {
- open STDOUT, ">$env_vars->{SMBD_TEST_LOG}";
+ open STDOUT, ">$daemon_ctx{LOG_FILE}";
open STDERR, '>&STDOUT';
SocketWrapper::set_default_iface($env_vars->{SOCKET_WRAPPER_DEFAULT_IFACE});
- Samba::set_env_for_process("smbd", $env_vars);
+ Samba::set_env_for_process($daemon_ctx{NAME}, $env_vars);
- if ($smbd ne "yes") {
+ if (defined($daemon_ctx{SKIP_DAEMON})) {
$SIG{USR1} = $SIG{ALRM} = $SIG{INT} = $SIG{QUIT} = $SIG{TERM} = sub {
my $signame = shift;
- print("Skip smbd received signal $signame");
+ print("Skip $daemon_ctx{NAME} received signal $signame");
exit 0;
};
sleep($self->{server_maxtime});
exit 0;
}
- $ENV{MAKE_TEST_BINARY} = $binary;
+ $ENV{MAKE_TEST_BINARY} = $daemon_ctx{BINARY_PATH};
close($env_vars->{STDIN_PIPE});
open STDIN, ">&", \*STDIN_READER or die "can't dup STDIN_READER to STDIN: $!";
- exec(@full_cmd)
+ exec(@{ $daemon_ctx{FULL_CMD} })
or die("Unable to start $ENV{MAKE_TEST_BINARY}: $!");
}
$env_vars->{SMBD_TL_PID} = $pid;
}
}
+ # build up the command to run samba
my @preargs = ();
my @optargs = ();
if (defined($ENV{SAMBA_OPTIONS})) {
if (defined($process_model)) {
push @optargs, ("-M", $process_model);
}
- my @full_cmd = (@preargs, Samba::bindir_path($self, "samba"), "-i",
+ my $binary = Samba::bindir_path($self, "samba");
+ my @full_cmd = (@preargs, $binary, "-i",
"--no-process-group", "--maximum-runtime=$self->{server_maxtime}",
$env_vars->{CONFIGURATION}, @optargs);
+ my %daemon_ctx = (
+ NAME => "samba",
+ BINARY_PATH => $binary,
+ FULL_CMD => [ @full_cmd ],
+ LOG_FILE => $env_vars->{SAMBA_TEST_LOG},
+ TEE_STDOUT => 1,
+ );
print "STARTING SAMBA...\n";
my $pid = fork();
# we want out from samba to go to the log file, but also
# to the users terminal when running 'make test' on the command
# line. This puts it on stderr on the terminal
- open STDOUT, "| tee $env_vars->{SAMBA_TEST_LOG} 1>&2";
+ open STDOUT, "| tee $daemon_ctx{LOG_FILE} 1>&2";
open STDERR, '>&STDOUT';
SocketWrapper::set_default_iface($env_vars->{SOCKET_WRAPPER_DEFAULT_IFACE});
# setup common samba env variables
- Samba::set_env_for_process("samba", $env_vars);
+ Samba::set_env_for_process($daemon_ctx{NAME}, $env_vars);
# setup additional env variables for s4
$ENV{RESOLV_CONF} = $env_vars->{RESOLV_CONF};
$ENV{KRB5_KDC_PROFILE} = $env_vars->{MITKDC_CONFIG};
}
- $ENV{MAKE_TEST_BINARY} = Samba::bindir_path($self, "samba");
+ $ENV{MAKE_TEST_BINARY} = $daemon_ctx{BINARY_PATH};
close($env_vars->{STDIN_PIPE});
open STDIN, ">&", $STDIN_READER or die "can't dup STDIN_READER to STDIN: $!";
- exec(@full_cmd) or die("Unable to start samba: $!");
+ exec(@{ $daemon_ctx{FULL_CMD} }) or die("Unable to start $daemon_ctx{BINARY_NAME}: $!");
}
$env_vars->{SAMBA_PID} = $pid;
print "DONE ($pid)\n";
$env->{SERVER_IP} = Samba::get_ipv4_addr($hostname);
$env->{SERVER_IPV6} = Samba::get_ipv6_addr($hostname);
-
+ $env->{SOCKET_WRAPPER_DEFAULT_IFACE} = Samba::get_interface($hostname);
$env->{DNS_HUB_LOG} = "$prefix_abs/dns_hub.log";
$env->{RESOLV_CONF} = "$prefix_abs/resolv.conf";
push (@args, "$env->{SERVER_IP}");
push (@args, Samba::realm_to_ip_mappings());
my @full_cmd = (@preargs, $binary, @args);
+ my %daemon_ctx = (
+ NAME => "dnshub",
+ BINARY_PATH => $binary,
+ FULL_CMD => [ @full_cmd ],
+ LOG_FILE => $env->{DNS_HUB_LOG},
+ TEE_STDOUT => 1,
+ PCAP_FILE => "$ENV{SOCKET_WRAPPER_PCAP_DIR}/env-$hostname$.pcap",
+ );
# use a pipe for stdin in the child processes. This allows
# those processes to monitor the pipe for EOF to ensure they
# we want out from samba to go to the log file, but also
# to the users terminal when running 'make test' on the command
# line. This puts it on stderr on the terminal
- open STDOUT, "| tee $env->{DNS_HUB_LOG} 1>&2";
+ open STDOUT, "| tee $daemon_ctx{LOG_FILE} 1>&2";
open STDERR, '>&STDOUT';
- my $swiface = Samba::get_interface($hostname);
- SocketWrapper::set_default_iface($swiface);
- my $pcap_file = "$ENV{SOCKET_WRAPPER_PCAP_DIR}/env-$hostname$.pcap";
- SocketWrapper::setup_pcap($pcap_file);
+ SocketWrapper::set_default_iface($env->{SOCKET_WRAPPER_DEFAULT_IFACE});
+ SocketWrapper::setup_pcap($daemon_ctx{PCAP_FILE});
- $ENV{MAKE_TEST_BINARY} = $binary;
+ $ENV{MAKE_TEST_BINARY} = $daemon_ctx{BINARY_PATH};
close($env->{STDIN_PIPE});
open STDIN, ">&", $STDIN_READER or die "can't dup STDIN_READER to STDIN: $!";
- exec(@full_cmd)
- or die("Unable to start $ENV{MAKE_TEST_BINARY}: $!");
+ exec(@{ $daemon_ctx{FULL_CMD} })
+ or die("Unable to start $daemon_ctx{NAME}: $!");
}
$env->{SAMBA_PID} = $pid;
$env->{KRB5_CONFIG} = "$prefix_abs/no_krb5.conf";