#!/usr/bin/perl

# (C) Maxim Dounin
# (C) Nginx, Inc.

# Tests for mail max_errors.

###############################################################################

use warnings;
use strict;

use Test::More;
use Socket qw/ CRLF /;

BEGIN { use FindBin; chdir($FindBin::Bin); }

use lib 'lib';
use Test::Nginx;
use Test::Nginx::IMAP;
use Test::Nginx::POP3;
use Test::Nginx::SMTP;

###############################################################################

select STDERR; $| = 1;
select STDOUT; $| = 1;

local $SIG{PIPE} = 'IGNORE';

my $t = Test::Nginx->new()->has(qw/mail imap pop3 smtp/)
	->write_file_expand('nginx.conf', <<'EOF');

%%TEST_GLOBALS%%

daemon off;

events {
}

mail {
    auth_http  http://127.0.0.1:8080; # unused

    max_errors 2;

    server {
        listen     127.0.0.1:8143;
        protocol   imap;
    }

    server {
        listen     127.0.0.1:8110;
        protocol   pop3;
    }

    server {
        listen     127.0.0.1:8025;
        protocol   smtp;
    }
}

EOF

$t->try_run('no max_errors')->plan(18);

###############################################################################

# imap

my $s = Test::Nginx::IMAP->new();
$s->read();

$s->send('a01 FOO');
$s->check(qr/^a01 BAD/, 'imap first error');
$s->send('a02 BAR');
$s->check(qr/^a02 BAD/, 'imap second error');
$s->send('a03 BAZZ');
$s->check(qr/^$/, 'imap max errors');

$s = Test::Nginx::IMAP->new();
$s->read();

$s->send('a01 FOO' . CRLF . 'a02 BAR' . CRLF . 'a03 BAZZ');
$s->check(qr/^a01 BAD/, 'imap pipelined first error');
$s->check(qr/^a02 BAD/, 'imap pipelined second error');
$s->check(qr/^$/, 'imap pipelined max errors');

# pop3

$s = Test::Nginx::POP3->new();
$s->read();

$s->send('FOO');
$s->check(qr/^-ERR/, 'pop3 first error');
$s->send('BAR');
$s->check(qr/^-ERR/, 'pop3 second error');
$s->send('BAZZ');
$s->check(qr/^$/, 'pop3 max errors');

$s = Test::Nginx::POP3->new();
$s->read();

$s->send('FOO' . CRLF . 'BAR' . CRLF . 'BAZZ');
$s->check(qr/^-ERR/, 'pop3 pipelined first error');
$s->check(qr/^-ERR/, 'pop3 pipelined second error');
$s->check(qr/^$/, 'pop3 pipelined max errors');

# smtp

$s = Test::Nginx::SMTP->new();
$s->read();

$s->send('FOO');
$s->check(qr/^5.. /, 'smtp first error');
$s->send('BAR');
$s->check(qr/^5.. /, 'smtp second error');
$s->send('BAZZ');
$s->check(qr/^$/, 'smtp max errors');

$s = Test::Nginx::SMTP->new();
$s->read();

$s->send('FOO' . CRLF . 'BAR' . CRLF . 'BAZZ');
$s->check(qr/^5.. /, 'smtp pipelined first error');
$s->check(qr/^5.. /, 'smtp pipelined second error');
$s->check(qr/^$/, 'smtp pipelined max errors');

###############################################################################
