~dave-terei/libmemcached/sasl-fixes

« back to all changes in this revision

Viewing changes to memcached/t/stats.t

Merging bzr://gaz.tangent.org/libmemcached/build/ to Build branch

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/perl
 
2
 
 
3
use strict;
 
4
use Test::More tests => 95;
 
5
use FindBin qw($Bin);
 
6
use lib "$Bin/lib";
 
7
use MemcachedTest;
 
8
 
 
9
my $server = new_memcached();
 
10
my $sock = $server->sock;
 
11
 
 
12
 
 
13
## Output looks like this:
 
14
##
 
15
## STAT pid 22969
 
16
## STAT uptime 13
 
17
## STAT time 1259170891
 
18
## STAT version 1.4.3
 
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
 
26
## STAT cmd_get 0
 
27
## STAT cmd_set 0
 
28
## STAT cmd_flush 0
 
29
## STAT get_hits 0
 
30
## STAT get_misses 0
 
31
## STAT delete_misses 0
 
32
## STAT delete_hits 0
 
33
## STAT incr_misses 0
 
34
## STAT incr_hits 0
 
35
## STAT decr_misses 0
 
36
## STAT decr_hits 0
 
37
## STAT cas_misses 0
 
38
## STAT cas_hits 0
 
39
## STAT cas_badval 0
 
40
## STAT auth_cmds 0
 
41
## STAT auth_unknowns 0
 
42
## STAT bytes_read 7
 
43
## STAT bytes_written 0
 
44
## STAT limit_maxbytes 67108864
 
45
## STAT accepting_conns 1
 
46
## STAT listen_disabled_num 0
 
47
## STAT threads 4
 
48
## STAT conn_yields 0
 
49
## STAT bytes 0
 
50
## STAT curr_items 0
 
51
## STAT total_items 0
 
52
## STAT evictions 0
 
53
## STAT reclaimed 0
 
54
 
 
55
# note that auth stats are tested in auth specfic tests
 
56
 
 
57
 
 
58
my $stats = mem_stats($sock);
 
59
 
 
60
# Test number of keys
 
61
is(scalar(keys(%$stats)), 48, "48 stats values");
 
62
 
 
63
# Test initial state
 
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");
 
68
}
 
69
is($stats->{accepting_conns}, 1, "initial accepting_conns is one");
 
70
 
 
71
# Do some operations
 
72
 
 
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");
 
76
 
 
77
my $stats = mem_stats($sock);
 
78
 
 
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");
 
81
}
 
82
 
 
83
my $cache_dump = mem_stats($sock, " cachedump 1 100");
 
84
ok(defined $cache_dump->{'foo'}, "got foo from cachedump");
 
85
 
 
86
print $sock "delete foo\r\n";
 
87
is(scalar <$sock>, "DELETED\r\n", "deleted foo");
 
88
 
 
89
my $stats = mem_stats($sock);
 
90
is($stats->{delete_hits}, 1);
 
91
is($stats->{delete_misses}, 0);
 
92
 
 
93
print $sock "delete foo\r\n";
 
94
is(scalar <$sock>, "NOT_FOUND\r\n", "shouldn't delete foo again");
 
95
 
 
96
my $stats = mem_stats($sock);
 
97
is($stats->{delete_hits}, 1);
 
98
is($stats->{delete_misses}, 1);
 
99
 
 
100
# incr stats
 
101
 
 
102
sub check_incr_stats {
 
103
    my ($ih, $im, $dh, $dm) = @_;
 
104
    my $stats = mem_stats($sock);
 
105
 
 
106
    is($stats->{incr_hits}, $ih);
 
107
    is($stats->{incr_misses}, $im);
 
108
    is($stats->{decr_hits}, $dh);
 
109
    is($stats->{decr_misses}, $dm);
 
110
}
 
111
 
 
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);
 
115
 
 
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);
 
119
 
 
120
print $sock "set n 0 0 1\r\n0\r\n";
 
121
is(scalar <$sock>, "STORED\r\n", "stored n");
 
122
 
 
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);
 
126
 
 
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);
 
130
 
 
131
# cas stats
 
132
 
 
133
sub check_cas_stats {
 
134
    my ($ch, $cm, $cb) = @_;
 
135
    my $stats = mem_stats($sock);
 
136
 
 
137
    is($stats->{cas_hits}, $ch);
 
138
    is($stats->{cas_misses}, $cm);
 
139
    is($stats->{cas_badval}, $cb);
 
140
}
 
141
 
 
142
check_cas_stats(0, 0, 0);
 
143
 
 
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);
 
147
 
 
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');
 
152
 
 
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');
 
158
 
 
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');
 
164
 
 
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'});
 
171
 
 
172
print $sock "stats reset\r\n";
 
173
is(scalar <$sock>, "RESET\r\n", "good stats reset");
 
174
 
 
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'});
 
191
 
 
192
print $sock "flush_all\r\n";
 
193
is(scalar <$sock>, "OK\r\n", "flushed");
 
194
 
 
195
my $stats = mem_stats($sock);
 
196
is($stats->{cmd_flush}, 1, "after one flush cmd_flush is 1");