Changeset 617

Show
Ignore:
Timestamp:
10/03/07 20:05:32 (1 year ago)
Author:
plindner
Message:

add tests for CAS functionality (missed this first time around and wrote my own..)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/server/t/lib/MemcachedTest.pm

    r563 r617  
    88use vars qw(@EXPORT); 
    99 
    10 @EXPORT = qw(new_memcached sleep mem_get_is mem_stats free_port); 
     10@EXPORT = qw(new_memcached sleep mem_get_is mem_gets mem_gets_is mem_stats free_port); 
    1111 
    1212sub sleep { 
     
    5959} 
    6060 
     61sub mem_gets { 
     62  # works on single-line values only.  no newlines in value. 
     63  my ($sock_opts, $key) = @_; 
     64  my $opts = ref $sock_opts eq "HASH" ? $sock_opts : {}; 
     65  my $sock = ref $sock_opts eq "HASH" ? $opts->{sock} : $sock_opts; 
     66  my $val; 
     67  my $expect_flags = $opts->{flags} || 0; 
     68 
     69  print $sock "gets $key\r\n"; 
     70  my $response = <$sock>; 
     71  if ($response =~ /^END/) { 
     72    return "NOT_FOUND"; 
     73  } 
     74  else 
     75  { 
     76    $response =~ /VALUE (.*) (\d+) (\d+) (\d+)/; 
     77    my $flags = $2; 
     78    my $len = $3; 
     79    my $identifier = $4; 
     80    read $sock, $val , $len; 
     81    # get the END 
     82    $_ = <$sock>; 
     83    $_ = <$sock>; 
     84 
     85    return ($identifier,$val);     
     86  } 
     87   
     88} 
     89sub mem_gets_is { 
     90    # works on single-line values only.  no newlines in value. 
     91    my ($sock_opts, $identifier, $key, $val, $msg) = @_; 
     92    my $opts = ref $sock_opts eq "HASH" ? $sock_opts : {}; 
     93    my $sock = ref $sock_opts eq "HASH" ? $opts->{sock} : $sock_opts; 
     94 
     95    my $expect_flags = $opts->{flags} || 0; 
     96    my $dval = defined $val ? "'$val'" : "<undef>"; 
     97    $msg ||= "$key == $dval"; 
     98 
     99    print $sock "gets $key\r\n"; 
     100    if (! defined $val) { 
     101        my $line = scalar <$sock>; 
     102        if ($line =~ /^VALUE/) { 
     103            $line .= scalar(<$sock>) . scalar(<$sock>); 
     104        } 
     105        Test::More::is($line, "END\r\n", $msg); 
     106    } else { 
     107        my $len = length($val); 
     108        my $body = scalar(<$sock>); 
     109        my $expected = "VALUE $key $expect_flags $len $identifier\r\n$val\r\nEND\r\n"; 
     110        if (!$body || $body =~ /^END/) { 
     111            Test::More::is($body, $expected, $msg); 
     112            return; 
     113        } 
     114        $body .= scalar(<$sock>) . scalar(<$sock>); 
     115        Test::More::is($body, $expected, $msg); 
     116    } 
     117} 
     118 
    61119sub free_port { 
    62120    my $type = shift || "tcp";