4
use Test::More tests => 95;
9
my $server = new_memcached();
10
my $sock = $server->sock;
13
## Output looks like this:
17
## STAT time 1259170891
19
## STAT libevent 1.4.13-stable.
20
## STAT pointer_size 32
21
## STAT rusage_user 0.001198
22
## STAT rusage_system 0.003523
23
## STAT curr_connections 10
24
## STAT total_connections 11
25
## STAT connection_structures 11
31
## STAT delete_misses 0
41
## STAT auth_unknowns 0
43
## STAT bytes_written 0
44
## STAT limit_maxbytes 67108864
45
## STAT accepting_conns 1
46
## STAT listen_disabled_num 0
55
# note that auth stats are tested in auth specfic tests
58
my $stats = mem_stats($sock);
61
is(scalar(keys(%$stats)), 48, "48 stats values");
64
foreach my $key (qw(curr_items total_items bytes cmd_get cmd_set get_hits evictions get_misses
65
bytes_written delete_hits delete_misses incr_hits incr_misses decr_hits
66
decr_misses listen_disabled_num)) {
67
is($stats->{$key}, 0, "initial $key is zero");
69
is($stats->{accepting_conns}, 1, "initial accepting_conns is one");
73
print $sock "set foo 0 0 6\r\nfooval\r\n";
74
is(scalar <$sock>, "STORED\r\n", "stored foo");
75
mem_get_is($sock, "foo", "fooval");
77
my $stats = mem_stats($sock);
79
foreach my $key (qw(total_items curr_items cmd_get cmd_set get_hits)) {
80
is($stats->{$key}, 1, "after one set/one get $key is 1");
83
my $cache_dump = mem_stats($sock, " cachedump 1 100");
84
ok(defined $cache_dump->{'foo'}, "got foo from cachedump");
86
print $sock "delete foo\r\n";
87
is(scalar <$sock>, "DELETED\r\n", "deleted foo");
89
my $stats = mem_stats($sock);
90
is($stats->{delete_hits}, 1);
91
is($stats->{delete_misses}, 0);
93
print $sock "delete foo\r\n";
94
is(scalar <$sock>, "NOT_FOUND\r\n", "shouldn't delete foo again");
96
my $stats = mem_stats($sock);
97
is($stats->{delete_hits}, 1);
98
is($stats->{delete_misses}, 1);
102
sub check_incr_stats {
103
my ($ih, $im, $dh, $dm) = @_;
104
my $stats = mem_stats($sock);
106
is($stats->{incr_hits}, $ih);
107
is($stats->{incr_misses}, $im);
108
is($stats->{decr_hits}, $dh);
109
is($stats->{decr_misses}, $dm);
112
print $sock "incr i 1\r\n";
113
is(scalar <$sock>, "NOT_FOUND\r\n", "shouldn't incr a missing thing");
114
check_incr_stats(0, 1, 0, 0);
116
print $sock "decr d 1\r\n";
117
is(scalar <$sock>, "NOT_FOUND\r\n", "shouldn't decr a missing thing");
118
check_incr_stats(0, 1, 0, 1);
120
print $sock "set n 0 0 1\r\n0\r\n";
121
is(scalar <$sock>, "STORED\r\n", "stored n");
123
print $sock "incr n 3\r\n";
124
is(scalar <$sock>, "3\r\n", "incr works");
125
check_incr_stats(1, 1, 0, 1);
127
print $sock "decr n 1\r\n";
128
is(scalar <$sock>, "2\r\n", "decr works");
129
check_incr_stats(1, 1, 1, 1);
133
sub check_cas_stats {
134
my ($ch, $cm, $cb) = @_;
135
my $stats = mem_stats($sock);
137
is($stats->{cas_hits}, $ch);
138
is($stats->{cas_misses}, $cm);
139
is($stats->{cas_badval}, $cb);
142
check_cas_stats(0, 0, 0);
144
print $sock "cas c 0 0 1 99999999\r\nz\r\n";
145
is(scalar <$sock>, "NOT_FOUND\r\n", "missed cas");
146
check_cas_stats(0, 1, 0);
148
print $sock "set c 0 0 1\r\nx\r\n";
149
is(scalar <$sock>, "STORED\r\n", "stored c");
150
my ($id, $v) = mem_gets($sock, 'c');
151
is('x', $v, 'got the expected value');
153
print $sock "cas c 0 0 1 99999999\r\nz\r\n";
154
is(scalar <$sock>, "EXISTS\r\n", "missed cas");
155
check_cas_stats(0, 1, 1);
156
my ($newid, $v) = mem_gets($sock, 'c');
157
is('x', $v, 'got the expected value');
159
print $sock "cas c 0 0 1 $id\r\nz\r\n";
160
is(scalar <$sock>, "STORED\r\n", "good cas");
161
check_cas_stats(1, 1, 1);
162
my ($newid, $v) = mem_gets($sock, 'c');
163
is('z', $v, 'got the expected value');
165
my $settings = mem_stats($sock, ' settings');
166
is(1024, $settings->{'maxconns'});
167
is('NULL', $settings->{'domain_socket'});
168
is('on', $settings->{'evictions'});
169
is('yes', $settings->{'cas_enabled'});
170
is('no', $settings->{'auth_enabled_sasl'});
172
print $sock "stats reset\r\n";
173
is(scalar <$sock>, "RESET\r\n", "good stats reset");
175
my $stats = mem_stats($sock);
176
is(0, $stats->{'cmd_get'});
177
is(0, $stats->{'cmd_set'});
178
is(0, $stats->{'get_hits'});
179
is(0, $stats->{'get_misses'});
180
is(0, $stats->{'delete_misses'});
181
is(0, $stats->{'delete_hits'});
182
is(0, $stats->{'incr_misses'});
183
is(0, $stats->{'incr_hits'});
184
is(0, $stats->{'decr_misses'});
185
is(0, $stats->{'decr_hits'});
186
is(0, $stats->{'cas_misses'});
187
is(0, $stats->{'cas_hits'});
188
is(0, $stats->{'cas_badval'});
189
is(0, $stats->{'evictions'});
190
is(0, $stats->{'reclaimed'});
192
print $sock "flush_all\r\n";
193
is(scalar <$sock>, "OK\r\n", "flushed");
195
my $stats = mem_stats($sock);
196
is($stats->{cmd_flush}, 1, "after one flush cmd_flush is 1");