Cassandane::Net::FakeManageSieve
NAME
Cassandane::Net::FakeManageSieve - scripted ManageSieve server for client tests
SYNOPSIS
my $srv = Cassandane::Net::FakeManageSieve->new(
main => {
LISTSCRIPTS => sub ($srv, $line, $literal) {
my $port = $srv->port('other');
qq{BYE (REFERRAL "sieve://127.0.0.1:$port") "moved"\r\n};
},
},
other => {
auth => sub ($authzid, $authcid, $password) { "OK\r\n" },
LISTSCRIPTS => sub { qq{"s1" ACTIVE\r\nOK\r\n} },
},
);
my ($status, $output) = $srv->run_client($instance, $code, @args);
DESCRIPTION
Each role named in the constructor gets its own listener on 127.0.0.1, served by a forked process. A role is a hash:
greeting
Text sent on connect. Defaults to capabilities offering only PLAIN.
auth
Called with the PLAIN credentials of each AUTHENTICATE; returns the reply. Defaults to accepting everything.
COMMAND
Called for that command with the server, the command line and any literal that followed it; returns the reply. Commands without a handler get NO.
The connection closes after any greeting or reply that doesn't end in CRLF, after the reply to STARTTLS, and after LOGOUT.
METHODS
port($role)
The port that the listener for $role is on.
run_client($instance, $code, @args)
Runs $code as a Perl program with Cyrus::SIEVE::managesieve loaded,
@args in @ARGV, and a 60 second alarm. Returns its exit status
("ok", "exit N" or "signal N") and its combined stdout and stderr.
stop()
Stops the server. Also called when the object is destroyed.