97a5b7ca541f3b332ef4f911cdea971d882478a8
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");