AnyEvent-Memcached

 view release on metacpan or  search on metacpan

t/lib/Test/AE/MC.pm  view on Meta::CPAN

package #hide
	Test::AE::MC;

# Memcached test class

use Test::More;
use AnyEvent::Impl::Perl;
use AnyEvent;
use AnyEvent::Socket;
BEGIN{ eval q{use AnyEvent::Memcached;1} or BAIL_OUT("$@") }
use common::sense;
use utf8;

sub import {
	*{caller().'::runtest'} = \&runtest;
	@_ = 'Test::More';
	goto &{ Test::More->can('import') };
}

sub runtest(&) {
	my $cx = shift;
	my $code = sub {
		alarm 10;
		eval {
			$cx->(@_,noreply => 1, cas => 1);
			1;
		} or do {
			warn "DIED $@";
			die "$@";
		}
		
	};
	my ($host,$port);
	if (defined $ENV{MEMCACHED_SERVER}) {
		my $testaddr = $ENV{MEMCACHED_SERVER};
		($host,$port) = split ':',$testaddr;$host ||= '127.0.0.1'; # allow *_SERVER=:port
		my $do;
		my $cv = AE::cv;
		$port;
		my $cg;$cg = tcp_connect $host,$port, sub {
			undef $cg;
			@_ or plan skip_all => "No memcached instance running at $testaddr\n";
			$cv->send; #connect
		}, sub { 1 };
		$cv->recv;
		$code->($host,$port);
	} else {
		use version;
		my $v = `memcached -h 2>&1`;
		$? == 0 or plan skip_all => "Can't run memcached: $!";
		my ($ver,$sub) = $v =~ m{.*?([\d.]+)(-\w+)?};
		qv($ver) ge qv "1.2.4" or plan skip_all => "Memcached too old: $ver";
		diag "using memcached $ver$sub";
		
		eval q{use Test::TCP;1 } or plan skip_all => "No Test::TCP";
		$host = "127.0.0.1";
		test_tcp(
			client => sub {
				$port = shift;
				$code->($host,$port);
			},
			server => sub {
				my $port = shift;
				exec("memcached -l $host -p $port") or plan skip_all => "Can't run memcached";
			},
		)
	}
}

1;



( run in 1.986 second using v1.01-cache-2.11-cpan-98e64b0badf )