#!perl
use Cassandane::Tiny;

sub test_cyr_expire_noexpire
    :DelayedDelete :min_version_3_9 :NoAltNameSpace
    ($self)
{
    my $store = $self->{store};
    my $talk = $store->get_client();

    my $noexpire_annot = '/shared/vendor/cmu/cyrus-imapd/noexpire_until';

    xlog $self, "Create subfolder";
    my $subfolder = 'INBOX.A';
    $talk->create($subfolder)
        or $self->fail("Cannot create folder $subfolder: $@");
    $self->assert_str_equals('ok', $talk->get_last_completion_response());

    xlog $self, "Set /vendor/cmu/cyrus-imapd/expire annotation on subfolder";
    $talk->setmetadata($subfolder, "/shared/vendor/cmu/cyrus-imapd/expire", '1s');
    $self->assert_str_equals('ok', $talk->get_last_completion_response);

    xlog $self, "Create message";
    $store->set_folder($subfolder);
    $self->make_message('msg1') or die;

    xlog $self, "Set $noexpire_annot annotation on inbox";
    $talk->setmetadata('INBOX', $noexpire_annot, '0');
    $self->assert_str_equals('ok', $talk->get_last_completion_response);

    $talk->unselect();
    $talk->select($subfolder);
    $self->assert_num_equals(1, $talk->get_response_code('exists'));

    sleep(2);
    xlog $self, "Run cyr_expire";
    $self->{instance}->run_command({ cyrus => 1 }, 'cyr_expire', '-X' => '1s', '-v', '-v', '-v' );

    $talk->unselect();
    $talk->select($subfolder);
    $self->assert_num_equals(1, $talk->get_response_code('exists'));

    xlog $self, "Remove $noexpire_annot from inbox";
    $talk->setmetadata('INBOX', $noexpire_annot, '');
    $self->assert_str_equals('ok', $talk->get_last_completion_response);

    xlog $self, "Run cyr_expire";
    $self->{instance}->run_command({ cyrus => 1 }, 'cyr_expire', '-X' => '1s', '-v', '-v', '-v' );

    $talk->unselect();
    $talk->select($subfolder);
    $self->assert_num_equals(0, $talk->get_response_code('exists'));

    $self->check_syslog($self->{instance});
}
