| | 61 | sub 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 | } |
|---|
| | 89 | sub 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 | |
|---|