]> git.saurik.com Git - redis.git/blame - tests/unit/other.tcl
the test runs less iterations of slow tests if no --accurate is given.
[redis.git] / tests / unit / other.tcl
CommitLineData
08f55b78 1start_server {tags {"other"}} {
98578b57
PN
2 test {SAVE - make sure there are all the types as values} {
3 # Wait for a background saving in progress to terminate
4 waitForBgsave r
5 r lpush mysavelist hello
6 r lpush mysavelist world
7 r set myemptykey {}
8 r set mynormalkey {blablablba}
9 r zadd mytestzset 10 a
10 r zadd mytestzset 20 b
11 r zadd mytestzset 30 c
12 r save
13 } {OK}
14
13566085 15 tags {slow} {
30cf7be6 16 if {$::accurate} {set iterations 10000} else {set iterations 1000}
6b6f101c
PN
17 foreach fuzztype {binary alpha compr} {
18 test "FUZZ stresser with data model $fuzztype" {
19 set err 0
30cf7be6 20 for {set i 0} {$i < $iterations} {incr i} {
6b6f101c
PN
21 set fuzz [randstring 0 512 $fuzztype]
22 r set foo $fuzz
23 set got [r get foo]
24 if {$got ne $fuzz} {
25 set err [list $fuzz $got]
26 break
27 }
98578b57 28 }
6b6f101c
PN
29 set _ $err
30 } {0}
31 }
98578b57
PN
32 }
33
34 test {BGSAVE} {
35 waitForBgsave r
36 r flushdb
37 r save
38 r set x 10
39 r bgsave
40 waitForBgsave r
41 r debug reload
42 r get x
43 } {10}
44
45 test {SELECT an out of range DB} {
46 catch {r select 1000000} err
47 set _ $err
48 } {*invalid*}
49
13566085 50 tags {consistency} {
dd3f505f 51 if {![catch {package require sha1}]} {
30cf7be6 52 if {$::accurate} {set numops 10000} else {set numops 1000}
dd3f505f 53 test {Check consistency of different data types after a reload} {
54 r flushdb
30cf7be6 55 createComplexDataset r $numops
dd3f505f 56 set dump [csvdump r]
57 set sha1 [r debug digest]
58 r debug reload
dd3f505f 59 set sha1_after [r debug digest]
60 if {$sha1 eq $sha1_after} {
61 set _ 1
62 } else {
63 set newdump [csvdump r]
64 puts "Consistency test failed!"
65 puts "You can inspect the two dumps in /tmp/repldump*.txt"
98578b57 66
dd3f505f 67 set fd [open /tmp/repldump1.txt w]
68 puts $fd $dump
69 close $fd
70 set fd [open /tmp/repldump2.txt w]
71 puts $fd $newdump
72 close $fd
73
74 set _ 0
75 }
76 } {1}
77
78 test {Same dataset digest if saving/reloading as AOF?} {
79 r bgrewriteaof
80 waitForBgrewriteaof r
81 r debug loadaof
82 set sha1_after [r debug digest]
83 if {$sha1 eq $sha1_after} {
84 set _ 1
85 } else {
86 set newdump [csvdump r]
87 puts "Consistency test failed!"
88 puts "You can inspect the two dumps in /tmp/aofdump*.txt"
89
90 set fd [open /tmp/aofdump1.txt w]
91 puts $fd $dump
92 close $fd
93 set fd [open /tmp/aofdump2.txt w]
94 puts $fd $newdump
95 close $fd
96
97 set _ 0
98 }
99 } {1}
100 }
98578b57
PN
101 }
102
103 test {EXPIRES after a reload (snapshot + append only file)} {
104 r flushdb
105 r set x 10
106 r expire x 1000
13566085 107 r save
108 r debug reload
98578b57
PN
109 set ttl [r ttl x]
110 set e1 [expr {$ttl > 900 && $ttl <= 1000}]
13566085 111 r bgrewriteaof
112 waitForBgrewriteaof r
113 r debug loadaof
98578b57
PN
114 set ttl [r ttl x]
115 set e2 [expr {$ttl > 900 && $ttl <= 1000}]
116 list $e1 $e2
117 } {1 1}
118
13566085 119 tags {protocol} {
322ea972 120 test {PIPELINING stresser (also a regression for the old epoll bug)} {
121 set fd2 [socket $::host $::port]
122 fconfigure $fd2 -encoding binary -translation binary
123 puts -nonewline $fd2 "SELECT 9\r\n"
124 flush $fd2
125 gets $fd2
98578b57 126
322ea972 127 for {set i 0} {$i < 100000} {incr i} {
128 set q {}
129 set val "0000${i}0000"
130 append q "SET key:$i $val\r\n"
131 puts -nonewline $fd2 $q
132 set q {}
133 append q "GET key:$i\r\n"
134 puts -nonewline $fd2 $q
135 }
136 flush $fd2
98578b57 137
322ea972 138 for {set i 0} {$i < 100000} {incr i} {
139 gets $fd2 line
140 gets $fd2 count
141 set count [string range $count 1 end]
142 set val [read $fd2 $count]
143 read $fd2 2
144 }
145 close $fd2
146 set _ 1
147 } {1}
148 }
98578b57
PN
149
150 test {MUTLI / EXEC basics} {
151 r del mylist
152 r rpush mylist a
153 r rpush mylist b
154 r rpush mylist c
155 r multi
156 set v1 [r lrange mylist 0 -1]
157 set v2 [r ping]
158 set v3 [r exec]
159 list $v1 $v2 $v3
160 } {QUEUED QUEUED {{a b c} PONG}}
161
162 test {DISCARD} {
163 r del mylist
164 r rpush mylist a
165 r rpush mylist b
166 r rpush mylist c
167 r multi
168 set v1 [r del mylist]
169 set v2 [r discard]
170 set v3 [r lrange mylist 0 -1]
171 list $v1 $v2 $v3
172 } {QUEUED OK {a b c}}
173
4ea93ad3 174 test {Nested MULTI are not allowed} {
175 set err {}
176 r multi
177 catch {[r multi]} err
178 r exec
179 set _ $err
180 } {*ERR MULTI*}
181
6c682e55
PN
182 test {MULTI where commands alter argc/argv} {
183 r sadd myset a
184 r multi
185 r spop myset
186 list [r exec] [r exists myset]
187 } {a 0}
188
4ea93ad3 189 test {WATCH inside MULTI is not allowed} {
190 set err {}
191 r multi
192 catch {[r watch x]} err
193 r exec
194 set _ $err
195 } {*ERR WATCH*}
196
98578b57
PN
197 test {APPEND basics} {
198 list [r append foo bar] [r get foo] \
199 [r append foo 100] [r get foo]
200 } {3 bar 6 bar100}
201
202 test {APPEND basics, integer encoded values} {
203 set res {}
204 r del foo
205 r append foo 1
206 r append foo 2
207 lappend res [r get foo]
208 r set foo 1
209 r append foo 2
210 lappend res [r get foo]
211 } {12 12}
212
213 test {APPEND fuzzing} {
214 set err {}
215 foreach type {binary alpha compr} {
216 set buf {}
217 r del x
218 for {set i 0} {$i < 1000} {incr i} {
219 set bin [randstring 0 10 $type]
220 append buf $bin
221 r append x $bin
222 }
223 if {$buf != [r get x]} {
224 set err "Expected '$buf' found '[r get x]'"
225 break
226 }
227 }
228 set _ $err
229 } {}
230
98578b57
PN
231 # Leave the user with a clean DB before to exit
232 test {FLUSHDB} {
233 set aux {}
234 r select 9
235 r flushdb
236 lappend aux [r dbsize]
237 r select 10
238 r flushdb
239 lappend aux [r dbsize]
240 } {0 0}
241
242 test {Perform a final SAVE to leave a clean DB on disk} {
243 r save
244 } {OK}
245}