From: TJ S. <cas...@us...> - 2008-11-24 22:38:00
|
Update of /cvsroot/proftp/proftpd/tests/t/lib/ProFTPD/Tests/Config In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv757/t/lib/ProFTPD/Tests/Config Added Files: MaxInstances.pm Log Message: Added test for the MaxInstances directive. --- NEW FILE --- package ProFTPD::Tests::Config::MaxInstances; use lib qw(t/lib); use base qw(Test::Unit::TestCase ProFTPD::TestSuite::Child); use strict; use File::Path qw(mkpath rmtree); use File::Spec; use IO::Handle; use ProFTPD::TestSuite::FTP; use ProFTPD::TestSuite::Utils qw(:auth :config :running :test :testsuite); $| = 1; my $order = 0; my $TESTS = { maxinstances_one => { order => ++$order, test_class => [qw(forking)], }, }; sub new { return shift()->SUPER::new(@_); } sub list_tests { return testsuite_get_runnable_tests($TESTS); } sub set_up { my $self = shift; $self->{tmpdir} = testsuite_get_tmp_dir(); # Create temporary scratch dir eval { mkpath($self->{tmpdir}) }; if ($@) { my $abs_path = File::Spec->rel2abs($self->{tmpdir}); die("Can't create dir $abs_path: $@"); } } sub tear_down { my $self = shift; # Remove temporary scratch dir if ($self->{tmpdir}) { eval { rmtree($self->{tmpdir}) }; } undef $self; }; sub maxinstances_one { my $self = shift; my $tmpdir = $self->{tmpdir}; my $config_file = "$tmpdir/config.conf"; my $pid_file = File::Spec->rel2abs("$tmpdir/config.pid"); my $scoreboard_file = File::Spec->rel2abs("$tmpdir/config.scoreboard"); my $log_file = File::Spec->rel2abs('config.log'); my $auth_user_file = File::Spec->rel2abs("$tmpdir/config.passwd"); my $auth_group_file = File::Spec->rel2abs("$tmpdir/config.group"); my $user = 'proftpd'; my $passwd = 'test'; my $home_dir = File::Spec->rel2abs($tmpdir); auth_user_write($auth_user_file, $user, $passwd, 500, 500, $home_dir, '/bin/bash'); auth_group_write($auth_group_file, 'ftpd', 500, $user); my $max_instances = 1; my $config = { PidFile => $pid_file, ScoreboardFile => $scoreboard_file, SystemLog => $log_file, AuthUserFile => $auth_user_file, AuthGroupFile => $auth_group_file, MaxInstances => $max_instances, IfModules => { 'mod_delay.c' => { DelayEngine => 'off', }, }, }; my ($port, $config_user, $config_group) = config_write($config_file, $config); # Open pipes, for use between the parent and child processes. Specifically, # the child will indicate when it's done with its test by writing a message # to the parent. my ($rfh, $wfh); unless (pipe($rfh, $wfh)) { die("Can't open pipe: $!"); } my $ex; # Fork child $self->handle_sigchld(); defined(my $pid = fork()) or die("Can't fork: $!"); if ($pid) { eval { # First client should be able to connect and log in... my $client1 = ProFTPD::TestSuite::FTP->new('127.0.0.1', $port); $client1->login($user, $passwd); # ...but the second client should not be able to connect. eval { my $client2 = ProFTPD::TestSuite::FTP->new('127.0.0.1', $port, undef, 1) }; unless ($@) { die("Connect succeeded unexpectedly"); } $client1->quit(); }; if ($@) { $ex = $@; } $wfh->print("done\n"); $wfh->flush(); } else { eval { server_wait($config_file, $rfh) }; if ($@) { warn($@); exit 1; } exit 0; } # Stop server server_stop($pid_file); $self->assert_child_ok($pid); if ($ex) { die($ex); } unlink($log_file); } 1; |