Tests: additional IMAP tests.
diff --git a/mail_imap.t b/mail_imap.t
index e116db3..46b7085 100644
--- a/mail_imap.t
+++ b/mail_imap.t
@@ -12,6 +12,7 @@
use Test::More;
use MIME::Base64;
+use Socket qw/ CRLF /;
BEGIN { use FindBin; chdir($FindBin::Bin); }
@@ -60,7 +61,10 @@
set $passw "";
set $userpass "$http_auth_user:$http_auth_pass";
- if ($userpass ~ '^test@example.com:secret$') {
+ if ($userpass = 'test@example.com:secret') {
+ set $reply OK;
+ }
+ if ($userpass = 'te\\"st@example.com:se\\"cret') {
set $reply OK;
}
@@ -71,7 +75,7 @@
}
set $userpass "$http_auth_method:$http_auth_user:$http_auth_pass";
- if ($userpass ~ '^external:test@example.com:$') {
+ if ($userpass = 'external:test@example.com:') {
set $reply OK;
set $passw secret;
}
@@ -89,16 +93,30 @@
EOF
$t->run_daemon(\&Test::Nginx::IMAP::imap_test_daemon);
-$t->run()->plan(14);
+$t->run()->plan(23);
$t->waitforsocket('127.0.0.1:' . port(8144));
###############################################################################
+# login
+
my $s = Test::Nginx::IMAP->new();
$s->ok('greeting');
-# bad auth
+$s->send('a01 LOGIN');
+$s->check(qr/^a01 BAD/, 'login without arguments');
+
+$s->send('a02 LOGIN test@example.com bad');
+$s->check(qr/^a02 NO/, 'login with bad password');
+
+$s->send('a03 LOGIN test@example.com secret');
+$s->ok('login');
+
+# auth
+
+$s = Test::Nginx::IMAP->new();
+$s->read();
$s->send('1 AUTHENTICATE');
$s->check(qr/^\S+ BAD/, 'auth without arguments');
@@ -166,4 +184,51 @@
$s->send('1 AUTHENTICATE EXTERNAL ' . encode_base64('test@example.com', ''));
$s->ok('auth external with username');
+# quoted strings
+
+$s = Test::Nginx::IMAP->new();
+$s->read();
+
+$s->send('a01 LOGIN "te\\\\\"st@example.com" "se\\\\\"cret"');
+$s->ok('quoted strings');
+
+# literals
+
+$s = Test::Nginx::IMAP->new();
+$s->read();
+
+$s->send('a01 LOGIN {18}');
+$s->check(qr/\+ /, 'login username literal continue');
+
+$s->send('te\"st@example.com' . ' {8}');
+$s->check(qr/\+ /, 'login password literal continue');
+
+$s->send('se\"cret');
+$s->ok('login literals');
+
+# non-synchronizing literals
+
+$s = Test::Nginx::IMAP->new();
+$s->read();
+
+$s->send('a01 LOGIN {18+}' . CRLF
+ . 'te\"st@example.com' . ' {8+}' . CRLF
+ . 'se\"cret');
+$s->ok('login non-sync literals');
+
+# backslash in quotes and literals
+
+$s = Test::Nginx::IMAP->new();
+$s->read();
+
+$s->send('a01 LOGIN {18+}' . CRLF
+ . 'te\"st@example.com' . ' "se\\\\\"cret"');
+
+TODO: {
+local $TODO = 'not yet' unless $t->has_version('1.21.0');
+
+$s->ok('backslash in literal');
+
+}
+
###############################################################################