Mercurial > hg > nginx-tests
diff lib/Test/Nginx/POP3.pm @ 1861:7b7b64569f55
Tests: reworked mail SSL tests to use IO::Socket::SSL.
Relevant infrastructure is provided in Test::Nginx::IMAP (and also POP3
and SMTP for completeness). This also ensures that SSL handshake and
various read operations are guarded with timeouts.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Thu, 18 May 2023 18:07:08 +0300 |
parents | 3629eda94c1b |
children | 6d3a8f4eb9b2 |
line wrap: on
line diff
--- a/lib/Test/Nginx/POP3.pm +++ b/lib/Test/Nginx/POP3.pm @@ -20,17 +20,40 @@ sub new { my $self = {}; bless $self, shift @_; - $self->{_socket} = IO::Socket::INET->new( - Proto => "tcp", - PeerAddr => "127.0.0.1:" . port(8110), - @_ - ) - or die "Can't connect to nginx: $!\n"; + my $port = {@_}->{'SSL'} ? 8995 : 8110; + + eval { + local $SIG{ALRM} = sub { die "timeout\n" }; + local $SIG{PIPE} = sub { die "sigpipe\n" }; + alarm(8); + + $self->{_socket} = IO::Socket::INET->new( + Proto => "tcp", + PeerAddr => "127.0.0.1:" . port($port), + @_ + ) + or die "Can't connect to nginx: $!\n"; - if ({@_}->{'SSL'}) { - require IO::Socket::SSL; - IO::Socket::SSL->start_SSL($self->{_socket}, @_) - or die $IO::Socket::SSL::SSL_ERROR . "\n"; + if ({@_}->{'SSL'}) { + require IO::Socket::SSL; + IO::Socket::SSL->start_SSL( + $self->{_socket}, + SSL_verify_mode => + IO::Socket::SSL::SSL_VERIFY_NONE(), + @_ + ) + or die $IO::Socket::SSL::SSL_ERROR . "\n"; + + my $s = $self->{_socket}; + log_in("ssl cipher: " . $s->get_cipher()); + log_in("ssl cert: " . $s->peer_certificate('issuer')); + } + + alarm(0); + }; + alarm(0); + if ($@) { + log_in("died: $@"); } $self->{_socket}->autoflush(1); @@ -39,6 +62,11 @@ sub new { return $self; } +sub DESTROY { + my $self = shift; + $self->{_socket}->close(); +} + sub eof { my $self = shift; return $self->{_socket}->eof(); @@ -109,6 +137,11 @@ sub can_read { IO::Select->new($self->{_socket})->can_read($timo || 3); } +sub socket { + my ($self) = @_; + $self->{_socket}; +} + ############################################################################### sub pop3_test_daemon {