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 )