1
1
import collections
2
2
import random
3
3
import socket
4
+ import time
4
5
5
6
from wheatserver_test import WheatServer , PROJECT_PATH , server_socket
6
7
import memcache
@@ -190,7 +191,7 @@ def test_memcache_basic_response():
190
191
191
192
192
193
class MemcacheSynthetic (object ):
193
- def __ini__ (self ):
194
+ def __init__ (self ):
194
195
self .data = collections .defaultdict (str )
195
196
self .c = memcache .Client (["127.0.0.1:10828" ])
196
197
self .num_key = set ()
@@ -203,86 +204,99 @@ def get_str(self, n):
203
204
return s
204
205
205
206
def get (self ):
206
- k = ramdom .choice (self .data .keys ())
207
- assert (self .data [k ] == self .c .get (k ))
207
+ if not self .data :
208
+ return
209
+ k = random .choice (self .data .keys ())
210
+ assert (str (self .data [k ]) == str (self .c .get (k )))
208
211
209
212
def set (self ):
210
213
k = self .get_str (random .randint (10 , 100 ))
211
214
if k not in self .data :
212
215
if len (k ) % 3 == 0 :
213
216
v = random .randint (0 , 1000000 )
214
- self .num_key .insert (k )
217
+ self .num_key .add (k )
215
218
else :
216
219
v = self .get_str (random .randint (100 , 4096 ))
217
- break
220
+ if k in self .num_key :
221
+ self .num_key .remove (k )
222
+
223
+ assert (self .c .set (k , v ))
224
+ self .data [k ] = str (v )
218
225
219
- self .c .set (k , v )
220
- self .data [k ] = v
226
+ def delete (self ):
227
+ if not self .data :
228
+ return
229
+ k = random .choice (self .data .keys ())
230
+ assert (self .c .delete (k ))
231
+ if k in self .num_key :
232
+ self .num_key .remove (k )
233
+ del self .data [k ]
221
234
222
235
def append (self ):
223
- if random .randint (0 , 1 ):
224
- k = ramdom .choice (self .data .keys ())
225
- else :
226
- k = self .get_str (random .randint (10 , 100 ))
236
+ if not self .data :
237
+ return
227
238
239
+ k = random .choice (self .data .keys ())
228
240
v = self .get_str (random .randint (100 , 1024 ))
229
- self .c .append (k , v )
230
- self .data [k ] += v
241
+ assert ( self .c .append (k , v ) )
242
+ self .data [k ] += str ( v )
231
243
if k in self .num_key :
232
244
self .num_key .remove (k )
233
245
234
246
def prepend (self ):
235
- if random .randint (0 , 1 ):
236
- k = ramdom .choice (self .data .keys ())
237
- else :
238
- k = self .get_str (random .randint (10 , 100 ))
247
+ if not self .data :
248
+ return
239
249
250
+ k = random .choice (self .data .keys ())
240
251
v = self .get_str (random .randint (100 , 1024 ))
241
-
242
- self .c .prepend (k , v )
243
- self .data [k ] = v + self .data [k ]
252
+ assert (self .c .prepend (k , v ))
253
+ self .data [k ] = str (v ) + str (self .data [k ])
244
254
if k in self .num_key :
245
255
self .num_key .remove (k )
246
256
247
257
def incr (self ):
248
258
if not self .num_key :
249
259
return
250
- k = ramdom . choice (self .num_key )
260
+ k = random . sample (self .num_key , 1 )[ 0 ]
251
261
v = random .randint (0 , 1000000 )
252
- self .c . incr ( k , n )
253
- self .data [ k ] = int ( self .data [k ]) + n
262
+ self .data [ k ] = str ( int ( self . data [ k ]) + v )
263
+ assert ( str ( self .c . incr ( k , v )) == self .data [k ])
254
264
255
265
def decr (self ):
256
266
if not self .num_key :
257
267
return
258
- k = ramdom . choice (self .num_key )
268
+ k = random . sample (self .num_key , 1 )[ 0 ]
259
269
v = random .randint (0 , 1000000 )
260
- self .c . decr ( k , n )
261
- self . data [ k ] = int (self .data [k ]) - n
262
- if self .data [k ] < 0 :
263
- self .data [k ] = 0
270
+ self .data [ k ] = str ( int ( self . data [ k ]) - v )
271
+ if int (self .data [k ]) < 0 :
272
+ self .data [k ] = "0"
273
+ assert ( str ( self . c . decr ( k , v )) == self .data [k ])
264
274
265
- def add (self , k , v ):
275
+ def add (self ):
266
276
while True :
267
277
k = self .get_str (random .randint (10 , 100 ))
268
278
if k not in self .data :
269
279
if len (k ) % 3 == 0 :
270
280
v = random .randint (0 , 1000000 )
271
- self .num_key .insert (k )
281
+ self .num_key .add (k )
272
282
else :
273
283
v = self .get_str (random .randint (100 , 4096 ))
274
284
break
275
285
276
- self .c .add (k , v )
277
- self .data [k ] = v
286
+ assert (self .c .add (k , v ))
287
+ self .data [k ] = str (v )
288
+ if k in self .num_key :
289
+ self .num_key .remove (k )
278
290
279
291
def replace (self ):
280
292
if not self .data :
281
293
return
282
- k = ramdom .choice (self .data .keys ())
294
+ k = random .choice (self .data .keys ())
283
295
v = self .get_str (random .randint (100 , 4096 ))
284
- self .c .replace (k , v )
285
- self .data [k ] = v
296
+ assert (self .c .replace (k , v ))
297
+ self .data [k ] = str (v )
298
+ if k in self .num_key :
299
+ self .num_key .remove (k )
286
300
287
301
def run (self , num ):
288
302
while num :
@@ -295,16 +309,20 @@ def run(self, num):
295
309
self .incr ()
296
310
elif n > 65 :
297
311
self .decr ()
298
- elif n > 55 :
312
+ elif n > 60 :
299
313
self .prepend ()
300
- elif n > 50 :
314
+ elif n > 55 :
301
315
self .append ()
316
+ elif n > 45 :
317
+ self .delete ()
302
318
elif n > 30 :
303
319
self .set ()
304
320
else :
305
321
self .get ()
322
+ num -= 1
306
323
307
324
308
325
def test_memcache_synthetic ():
309
326
s = MemcacheSynthetic ()
327
+ random .seed (time .time ())
310
328
s .run (10000 )
0 commit comments