Changeset 768
- Timestamp:
- 03/28/08 04:26:59 (5 months ago)
- Files:
-
- branches/binary/server/t/binary.t (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/binary/server/t/binary.t
r767 r768 22 22 use constant CMD_VERSION => 11; 23 23 24 use constant CMD_GETS => 50;25 use constant CMD_CAS => 51;26 27 24 # CAS, Flags, expiration 28 25 use constant SET_PKT_FMT => "NNNN"; … … 197 194 198 195 { 199 my $rv =()= eval { $mc-> cas("x", 5, 19, 0x7FFFFFFFFF, "bad value") };196 my $rv =()= eval { $mc->set("x", 5, 19, "bad value", 0x7FFFFFFFFF) }; 200 197 is($rv, 0, "Empty return on expected failure"); 201 198 ok($@->not_found, "Error was 'not found' as expected"); … … 204 201 $mc->add("x", 5, 19, "original value"); 205 202 206 my ($flags, $ i, $val) = $mc->gets("x");203 my ($flags, $val, $i) = $mc->get("x"); 207 204 is($val, "original value", "->gets returned proper value"); 208 209 {210 my $rv =()= eval { $mc-> cas("x", 5, 19, $i+1, "broken value") };205 206 { 207 my $rv =()= eval { $mc->set("x", 5, 19, "broken value", $i+1) }; 211 208 is($rv, 0, "Empty return on expected failure (1)"); 212 209 ok($@->exists, "Expected error state of 'exists' (1)"); 213 210 } 214 211 215 $mc-> cas("x", 5, 19, $i, "new value");216 217 my ($newflags, $new i, $newval) = $mc->gets("x");212 $mc->set("x", 5, 19, "new value", $i); 213 214 my ($newflags, $newval, $newi) = $mc->get("x"); 218 215 is($newval, "new value", "CAS properly overwrote value"); 219 216 220 217 { 221 my $rv =()= eval { $mc-> cas("x", 5, 19, $i, "replay value") };218 my $rv =()= eval { $mc->set("x", 5, 19, "replay value", $i) }; 222 219 is($rv, 0, "Empty return on expected failure (2)"); 223 220 ok($@->exists, "Expected error state of 'exists' (2)"); 224 221 } 225 222 226 (undef, undef, my $newval2) = $mc->gets("x");223 (undef, my $newval2) = $mc->get("x"); 227 224 is($newval2, "new value", "CAS replay didn't overwrite value"); 228 225 } … … 330 327 my $self = shift; 331 328 my $rv = shift; # currently contains 4 bytes of 'flag' followed by value 332 my $cas = substr $rv, 0, 8, ''; # $cas contains CAS value, $rv has f, v. 333 my $flag = substr $rv, 0, 4, ''; # Now $flag contains flags, $rv contains value 334 return unpack("N", $flag), $rv; 329 my $header = substr $rv, 0, 12, ''; 330 my ($ident_hi, $ident_lo, $flags) = unpack "NNN", $header; 331 my $ident = ($ident_hi * 2 ** 32) + $ident_lo; 332 333 return $flags, $rv, $ident; 335 334 } 336 335 … … 344 343 sub _mutate { 345 344 my $self = shift; 346 my ($cmd, $key, $exp, $flags, $val) = @_; 347 348 return $self->_doCmd($cmd, $key, $val, pack(::SET_PKT_FMT, 0, 0, $flags, $exp)); 345 my ($cmd, $key, $exp, $flags, $val, $ident) = @_; 346 347 my $ident_hi = 0; 348 my $ident_lo = 0; 349 if ($ident) { 350 $ident_hi = int($ident / 2 ** 32); 351 $ident_lo = int($ident % 2 ** 32); 352 } 353 354 return $self->_doCmd($cmd, $key, $val, pack(::SET_PKT_FMT, $ident_hi, $ident_lo, $flags, $exp)); 349 355 } 350 356 351 357 sub set { 352 358 my $self = shift; 353 my ($key, $exp, $flags, $val ) = @_;354 355 return $self->_mutate(::CMD_SET, $key, $exp, $flags, $val );359 my ($key, $exp, $flags, $val, $ident) = @_; 360 361 return $self->_mutate(::CMD_SET, $key, $exp, $flags, $val, $ident); 356 362 } 357 363 … … 427 433 } 428 434 429 sub gets {435 sub old_gets { 430 436 my $self = shift; 431 437 my $key = shift; 432 438 433 my $data = $self->_doCmd(::CMD_GET S, $key, '');439 my $data = $self->_doCmd(::CMD_GET, $key, ''); 434 440 my $header = substr $data, 0, 12, ''; 435 441 my ($flags, $ident_hi, $ident_lo) = unpack "NNN", $header; … … 437 443 438 444 return $flags, $ident, $data; 439 }440 441 sub cas {442 my $self = shift;443 my ($key, $exp, $flags, $oldVal, $val) = @_;444 445 my $oldVal_hi = int($oldVal / 2 ** 32);446 my $oldVal_lo = int($oldVal % 2 ** 32);447 448 return $self->_doCmd(::CMD_CAS, $key, $val, pack(::CAS_PKT_FMT, $flags, $exp, $oldVal_hi, $oldVal_lo));449 445 } 450 446
