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