blob: 187c9c546502710959ae5935ecc4fc53a4459fe4 [file] [log] [blame]
use strict;
use warnings FATAL => 'all';
use Apache::Test;
use Apache::TestUtil;
use Apache::TestRequest ();
my $module = 'TestProtocol::pseudo_http';
{
# debug
Apache::TestRequest::module($module);
my $hostport = Apache::TestRequest::hostport(Apache::Test::config());
t_debug("connecting to $hostport");
}
my $login = "stas";
my $passgood = "foobar";
my $passbad = "foObaR";
# blocking socket bug fixed in 2.0.52
my $ok = $^O !~ /^(Open|Net)BSD$/i || need_min_apache_version('2.0.52');
# but not in 2.1? hmph.
$ok = skip_reason('skipping on httpd 2.1') if have_min_apache_version('2.1');
plan tests => 13, need need_auth, need_access, $ok;
{
# supply correct credential when prompted for such and ask the
# server get the secret datetime information
my $socket = Apache::TestRequest::vhost_socket($module);
ok $socket;
expect_reply($socket, "HELO", "HELO", "greeting");
expect_reply($socket, "Login:", $login, "login");
expect_reply($socket, "Password:", $passgood, "good password");
expect($socket, "Welcome to TestProtocol::pseudo_http", "banner");
expect_reply($socket, "Available commands: date quit", "date", "date");
expect_reply($socket, qr/The time is:/, "quit", "quit");
expect($socket, "Goodbye", "end of transmission");
}
{
# this time sending wrong credentials and hoping that the server
# won't let us in
my $socket = Apache::TestRequest::vhost_socket($module);
ok $socket;
expect_reply($socket, "HELO", "HELO", "greeting");
expect_reply($socket, "Login:", $login, "login");
t_client_log_error_is_expected();
expect_reply($socket, "Password:", $passbad, "wrong password");
expect($socket, "Access Denied", "end of transmission");
}
sub expect {
my ($socket, $expect, $action) = @_;
chomp(my $recv = <$socket> || '');
ok t_cmp($recv, $expect, $action);
}
sub expect_reply {
my ($socket, $expect, $reply, $action) = @_;
chomp(my $recv = <$socket> || '');
ok t_cmp($recv, $expect, $action);
t_debug("send: $reply");
print $socket $reply;
}