Cache-Elasticache-Memcache

 view release on metacpan or  search on metacpan

t/config_endpoint.t  view on Meta::CPAN

        my $self = shift;
        return {
            'good' => $self->build_mock_socket($self->config_lines, gensym),
            'bad_send' => $self->build_mock_socket($self->config_lines,gensym, 'send' => sub { die; }),
        };
    }
);

has parent_overrides => (
    is => 'ro',
    lazy => 1,
    clearer => '_clear_parent_overrides',
    default => sub {
        my $self = shift;
        my $overrides = Sub::Override->new()
                                     ->replace('IO::Socket::IP::new',
            sub{
                my $object = shift;
                my @args = @_;
                return $self->mock_sockets->{'good'} if ({@args}->{'PeerAddr'} eq $self->endpoint_location);
                return $self->mock_sockets->{'bad_send'} if ({@args}->{'PeerAddr'} eq 'bad_send:11211');
                croak "GAAAAAAAA";
            })
                                     ->replace('Cache::Memcached::Fast::new' ,
            sub {
                my $object = shift;
                my @args = @_;


                $self->last_parent_object($object);
                $self->last_parent_args(\@args);

                return Test::MockObject->new();
            })
                                     ->replace('Cache::Memcached::Fast::DESTROY' , sub { });
        return $overrides;
    }
);

before run_test => sub {
    my $self = shift;
    $self->_clear_config_lines;
    $self->reset_overrides;
};

sub reset_overrides {
    my $self = shift;
    $self->_clear_mock_sockets;
    $self->_clear_parent_overrides();
    $self->parent_overrides;
}

sub build_mock_socket {
    my $self = shift;
    my $config_lines = shift;
    my $glob = shift;
    my %args = @_;

    my $mock = Test::MockObject->new($glob);
    $mock->set_isa('IO::Socket');
    foreach my $method (qw(autoflush sockopt send close connected setsockopt write_Timeout)) {
        $mock->mock($method, (exists $args{$method}) ? $args{$method} : $self->default_mock_method($method));
    }
    my @lines = @{$config_lines};
    $mock->mock('getline', sub { return shift @lines });

   return $mock;
}

sub default_mock_method {
    my $self = shift;
    my $method_name = shift;
    return sub { return 1 };
}

test "get_servers_from_endpoint" => sub {
    my $self = shift;
    my $result = $self->test_class->getServersFromEndpoint($self->endpoint_location);
    cmp_deeply( $result, ['10.112.21.1:11211','10.112.21.2:11211', '10.112.21.3:11211'] );
};

test "get_servers_from_endpoint_split_END" => sub {
    my $self = shift;
    $self->config_lines(["\nmycluster.0001.cache.amazonaws.com|10.112.21.4|11211\n\r\n","E","ND\r\n"]);
    $self->reset_overrides;
    my $result = $self->test_class->getServersFromEndpoint($self->endpoint_location);
    cmp_deeply( $result, ['10.112.21.4:11211'] );
};

test "get_servers_from_endpoint_timeout" => sub {
    my $self = shift;
    $self->config_lines(["\nmycluster.0001.cache.amazonaws.com|10.112.21.4|11211\n\r\n"]);
    $self->reset_overrides;
    my $result = $self->test_class->getServersFromEndpoint($self->endpoint_location);
    cmp_deeply( $result, ['10.112.21.4:11211'] );
};

test "update_servers_no_change" => sub {
    my $self = shift;

    my $memd = $self->test_class->new(config_endpoint => $self->endpoint_location);
    my $original_update = $memd->{_last_update};
    my $original_servers = $memd->{servers};
    my $original_memd_obj = $memd->{_memd};
    sleep 1;

    $self->reset_overrides;
    delete $memd->{_sockets}->{$self->endpoint_location};
    $memd->updateServers;

    ok $original_update < $memd->{_last_update};
    cmp_deeply($original_servers, $memd->{servers});
    cmp_ok($original_memd_obj, '==', $memd->{_memd});
};

test "update_servers" => sub {
    my $self = shift;

    my $memd = $self->test_class->new(config_endpoint => $self->endpoint_location);
    my $original_update = $memd->{_last_update};
    my $original_servers = $memd->{servers};



( run in 0.561 second using v1.01-cache-2.11-cpan-39bf76dae61 )