diff lib/Test/Nginx/SMTP.pm @ 540:481d705b8610

Tests: SSL support in mail backends. Socket is now embedded into every mail module. Socket methods are wrapped where appropriate. The new "SSL" extra flag specifies to accept connection over SSL.
author Sergey Kandaurov <pluknet@nginx.com>
date Fri, 03 Apr 2015 00:11:38 +0300
parents 3fcad5e66735
children 9361c7eddfc1
line wrap: on
line diff
--- a/lib/Test/Nginx/SMTP.pm
+++ b/lib/Test/Nginx/SMTP.pm
@@ -15,35 +15,52 @@ use Socket qw/ CRLF /;
 
 use Test::Nginx;
 
-use base qw/ IO::Socket::INET /;
+sub new {
+	my $self = {};
+	bless $self, shift @_;
 
-sub new {
-	my $class = shift;
-
-	my $self = $class->SUPER::new(
+	$self->{_socket} = IO::Socket::INET->new(
 		Proto => "tcp",
 		PeerAddr => "127.0.0.1:8025",
 		@_
 	)
 		or die "Can't connect to nginx: $!\n";
 
-	$self->autoflush(1);
+	if ({@_}->{'SSL'}) {
+		require IO::Socket::SSL;
+		IO::Socket::SSL->start_SSL($self->{_socket}, @_)
+			or die $IO::Socket::SSL::SSL_ERROR . "\n";
+	}
+
+	$self->{_socket}->autoflush(1);
 
 	return $self;
 }
 
+sub eof {
+	my $self = shift;
+	return $self->{_socket}->eof();
+}
+
+sub print {
+	my ($self, $cmd) = @_;
+	log_out($cmd);
+	$self->{_socket}->print($cmd);
+}
+
 sub send {
 	my ($self, $cmd) = @_;
 	log_out($cmd);
-	$self->print($cmd . CRLF);
+	$self->{_socket}->print($cmd . CRLF);
 }
 
 sub read {
 	my ($self) = @_;
+	my $socket = $self->{_socket};
 	eval {
 		local $SIG{ALRM} = sub { die "timeout\n" };
 		alarm(3);
-		while (<$self>) {
+		while (<$socket>) {
 			log_in($_);
 			next if m/^\d\d\d-/;
 			last;