mailbox referrals in 2.4.12
Greg Banks
gnb at fastmail.fm
Sun Dec 18 22:46:36 EST 2011
On Fri, Dec 16, 2011, at 02:05 PM, Andrew Morgan wrote:
>
> I have never looked at Cassandane before (neat stuff!).
>
> There were two tests I ran to verify referrals were disabled:
>
> 1. Check that MAILBOX-REFERRALS is not present in the CAPABILITIES string
> when connecting.
Easy enough to do, you can start by copying code from any of the several tests in Cassandane::Cyrus::Conversations which do something similar:
sub test_append
{
my ($self) = @_;
my %exp;
# check IMAP server has the XCONVERSATIONS capability
$self->assert($self->{store}->get_client()->capability()->{xconversations});
>
> 2. Verify that a mailbox referral is not given:
>
> a. Connect to Cyrus as a regular user
> b. RLIST "" "*"
> c. CREATE "test"
> d. DELETE "test"
>
> When referrals are allowed, step 2d (DELETE "test") will cause a referral
> to be generated.
Also reasonably straightforward, there are several tests which create and delete mailboxes, e.g. in Cassandane::Cyrus::Quota
sub test_using_storage
{
my ($self) = @_;
...
my $talk = $self->{store}->get_client();
$talk->create("INBOX.sub") || die "Failed to create subfolder";
...
# delete subfolder
$talk->delete("INBOX.sub") || die "Failed to delete subfolder";
}
You may also find $talk->get_last_completion_response(), and $talk->get_response_code('referral') useful.
>
> Of course, these tests only make sense in a Murder.
>
Ah, now here you're heading off the beaten path a little bit. We haven't currently got any Murder tests in Cassandane. Now Cassandane is designed with multi-instance setups in mind, and we do test replication with a pair of instances, so it's entirely possible, but you'll be pioneering.
You need to be basically familiar with the Cassandane::Config and Cassandane::Instance classes; there's some documentation for them in doc/adding_tests.txt. What you'll be doing is creating two or more Instance objects with carefully tuned Configs which set them all up in a Murder. The code which does this for all the existing cases is in Cassandane::Cyrus::TestCase::_create_instances(). You'll want to copy that code and tweak it, and also disable the original by passing an argument to the TestCase constructor thusly
sub new
{
my $class = shift;
return $class->SUPER::new({
instance => 0,
}, @_);
}
I would also suggest writing a test for the non-Murder case first just to get the hang of the Cassandane environment.
Do let me know if you have any difficulty or need any more help.
--
Greg.
More information about the Info-cyrus
mailing list