Changeset 677

Show
Ignore:
Timestamp:
12/13/07 01:12:36 (1 year ago)
Author:
hachi
Message:

Now working, set get delete flush and version

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/binary/server/t/binary.t

    r676 r677  
    99 
    1010# Command constants 
    11 # CMD_GET = 0 
     11use constant CMD_GET => 0; 
    1212use constant CMD_SET => 1; 
    1313# CMD_ADD = 2 
    1414# CMD_REPLACE = 3 
    15 # CMD_DELETE = 4 
     15use constant CMD_DELETE => 4; 
    1616# CMD_INCR = 5 
    1717# CMD_QUIT = 6 
     
    2525# 
    2626# Flags, expiration 
    27 use constant SET_PKT_FMT => "Ll"; 
     27use constant SET_PKT_FMT => "NN"; 
    2828# flags, expiration, id 
    2929# CAS_PKT_FMT=">IiQ" 
    3030# 
    3131# How long until the deletion takes effect. 
    32 # DEL_PKT_FMT=">i" 
     32use constant DEL_PKT_FMT => "N"; 
    3333# 
    3434# amount, initial value, expiration 
     
    3838use constant RES_MAGIC_BYTE => 0xf0; 
    3939# 
    40 use constant PKT_FMT => "CCCxLL"; 
     40use constant PKT_FMT => "CCCxNN"; 
    4141#min recv packet size 
    4242use constant MIN_RECV_PACKET => length(pack(PKT_FMT)); 
     
    5050$mc->flush; 
    5151 
    52 # Test Version 
     52diag "Test Version"; 
    5353{ 
    5454        my $v = $mc->version; 
     
    5656} 
    5757 
    58 # Simple set/get 
    59 
    60         $mc->set('x', 5, 19, "somevalue"); 
    61         my ($flags, $value) = $mc->get("x"); 
    62         is($flags, 19, "Flags is set properly"); 
    63         is($value, "somevalue", "Value is set properly"); 
    64 
     58my $set = sub { 
     59        my ($key, $exp, $orig_flags, $orig_value) = @_; 
     60        $mc->set($key, $exp, $orig_flags, $orig_value); 
     61        my ($flags, $value) = $mc->get($key); 
     62        is($flags, $orig_flags, "Flags is set properly"); 
     63        is($value, $orig_value, "Value is set properly"); 
     64}; 
     65 
     66diag "Simple set/get"; 
     67$set->('x', 5, 19, "somevalue"); 
     68 
     69my $delete = sub { 
     70        my ($key) = @_; 
     71        $mc->delete($key); 
     72        my $rv =()= $mc->get($key); 
     73        is($rv, 0, "Empty array from get means nothing stored here"); 
     74}; 
     75 
     76diag "Delete"; 
     77$delete->('x'); 
    6578 
    6679<<EOT; 
    67     def assertNotExists(self, key): 
    68         try: 
    69             x=self.mc.get(key) 
    70             self.fail("Expected an exception, got " + `x`) 
    71         except MemcachedError, e: 
    72             self.assertEquals(memcacheConstants.ERR_NOT_FOUND, e.status) 
    73  
    74     def testDelete(self): 
    75         """Test a set, get, delete, get sequence.""" 
    76         self.mc.set("x", 5, 19, "somevalue") 
    77         self.assertEquals((19, "somevalue"), self.mc.get("x")) 
    78         self.mc.delete("x") 
    79         self.assertNotExists("x") 
    80  
    8180    def testReservedDelete(self): 
    8281        """Test a delete with a reservation timestamp.""" 
     
    253252sub close { 
    254253        my $self = shift; 
    255         return $self->close(@_); 
     254        return $self->{socket}->close(@_); 
    256255} 
    257256 
     
    315314} 
    316315 
     316sub __parseGet { 
     317        my $self = shift; 
     318        my $rv = shift; # currently contains 4 bytes of 'flag' followed by value 
     319        my $flag = substr $rv, 0, 4, ''; # Now $flag contains flags, $rv contains value 
     320        return unpack("N", $flag), $rv; 
     321} 
     322 
     323sub get { 
     324        my $self = shift; 
     325        my $key = shift; 
     326        my $parts = $self->_doCmd(::CMD_GET, $key, ''); 
     327        return $self->__parseGet($parts); 
     328} 
     329 
    317330sub _mutate { 
    318331        my $self = shift; 
     
    350363        """Replace a value in the memcached server iff it already exists.""" 
    351364        self._mutate(memcacheConstants.CMD_REPLACE, key, exp, flags, val) 
    352  
    353     def __parseGet(self, data): 
    354         return struct.unpack(">I", data[:4])[0], data[4:] 
    355  
    356     def get(self, key): 
    357         """Get the value for a given key within the memcached server.""" 
    358         parts=self._doCmd(memcacheConstants.CMD_GET, key, '') 
    359         return self.__parseGet(parts) 
    360365 
    361366    def gets(self, key): 
     
    405410EOT 
    406411 
     412sub delete { 
     413        my $self = shift; 
     414        my ($key, $when) = @_; 
     415        $when = 0 unless defined $when; 
     416 
     417        return $self->_doCmd(::CMD_DELETE, $key, '', pack(::DEL_PKT_FMT, $when)); 
     418} 
     419 
    407420sub version { 
    408421        my $self = shift;