Skip to content

Commit 6cd6105

Browse files
committed
tighten up some tests
1 parent 6ec807f commit 6cd6105

File tree

1 file changed

+19
-59
lines changed

1 file changed

+19
-59
lines changed

vlib/db/redis/redis_test.v

Lines changed: 19 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
// vtest build: started_redis?
2+
import db.redis
23
import os
4+
import rand
35
import time
4-
import db.redis
56

67
const redis_password = os.getenv('VREDIS_PASSWORD')
78

@@ -291,31 +292,21 @@ fn test_large_binary_bulk_string() ! {
291292

292293
// Create a large binary payload (~200 KB) with a repeating pattern,
293294
// including zero bytes and CRLF sequences to exercise edge cases.
294-
size := 200 * 1024 // 200 KiB
295-
mut data := []u8{len: size, init: u8(index % 256)}
295+
mut data := []u8{len: 204800, init: u8(index & 0xFF)}
296296

297297
// inject some CRLF and zero-byte sequences at several spots
298-
if size > 100 {
299-
data[50] = `\r`
300-
data[51] = `\n`
301-
data[1000] = 0
302-
data[1001] = `\r`
303-
data[1002] = `\n`
304-
}
298+
data[50] = `\r`
299+
data[51] = `\n`
300+
data[1000] = 0
301+
data[1001] = `\r`
302+
data[1002] = `\n`
305303

306304
// store binary data
307305
assert db.set('bigbin', data.clone())! == 'OK'
308306

309307
// retrieve as []u8 using typed get
310308
got := db.get[[]u8]('bigbin')!
311-
assert got.len == data.len
312-
// spot-check a few offsets to ensure exact match
313-
assert got[0] == data[0]
314-
assert got[50] == data[50]
315-
assert got[51] == data[51]
316-
assert got[1000] == data[1000]
317-
assert got[1001] == data[1001]
318-
assert got[1002] == data[1002]
309+
assert got == data
319310

320311
// also test with small binary containing embedded CRLF and NUL
321312
small := [u8(0), `a`, `b`, `\r`, `\n`, `c`]
@@ -338,7 +329,7 @@ fn test_very_large_payload() ! {
338329

339330
// Build a very large payload (> 1 MiB). Use ~1.2 MiB to be safely above 1 MiB.
340331
size := 1_200_000
341-
mut big := []u8{len: size, init: u8(index % 256)}
332+
mut big := []u8{len: size, init: u8(index & 0xFF)}
342333
// Put a few sentinel checks
343334
big[0] = 0
344335
big[1023] = `\r`
@@ -348,12 +339,7 @@ fn test_very_large_payload() ! {
348339
// store and retrieve
349340
assert db.set('hugebin', big.clone())! == 'OK'
350341
got := db.get[[]u8]('hugebin')!
351-
assert got.len == big.len
352-
// spot checks
353-
assert got[0] == big[0]
354-
assert got[1023] == big[1023]
355-
assert got[1024] == big[1024]
356-
assert got[size - 1] == big[size - 1]
342+
assert got == big
357343

358344
// cleanup
359345
db.del('hugebin')!
@@ -405,31 +391,20 @@ fn test_fuzz_random_binary_many() ! {
405391
db.cmd('FLUSHALL')!
406392

407393
// LCG PRNG seed using process id
408-
seed := u64(os.getpid())
409-
mut x := seed
394+
mut x := u64(os.getpid())
410395

411396
count := 50
412-
for iter := 0; iter < count; iter++ {
397+
for iter in 0 .. count {
413398
// size up to ~200 KiB
414399
size := int((x % 200_000) + 1)
415-
mut data := []u8{len: size}
416-
for i in 0 .. size {
417-
x = x * 6364136223846793005 + 1442695040888963407
418-
data[i] = u8((x >> 16) & 0xFF)
419-
}
400+
mut data := []u8{len: size, init: rand.u8()}
420401
key := 'fuzz_big_${iter}'
421402
assert db.set(key, data.clone())! == 'OK'
422403
got := db.get[[]u8](key)!
423-
assert got.len == data.len
424-
// quick spot-checks for integrity
425-
if data.len > 3 {
426-
assert got[0] == data[0]
427-
assert got[data.len / 2] == data[data.len / 2]
428-
assert got[data.len - 1] == data[data.len - 1]
429-
}
404+
assert got == data
430405
// clean up
431406
db.del(key)!
432-
// mix seed
407+
433408
x += u64(size) * u64(iter + 1)
434409
}
435410
}
@@ -449,11 +424,7 @@ fn test_fuzz_crlf_random_positions() ! {
449424
for t in 0 .. trials {
450425
// size between 1 KiB and 32 KiB
451426
size := int((x % 31_744) + 1024)
452-
mut data := []u8{len: size}
453-
for i in 0 .. size {
454-
x = x * 6364136223846793005 + 1442695040888963407
455-
data[i] = u8((x >> 8) & 0xFF)
456-
}
427+
mut data := []u8{len: size, init: rand.u8()}
457428
// place a CRLF at a pseudo-random position; sometimes force it near boundaries
458429
pos := int(x % u64(size - 2))
459430
data[pos] = `\r`
@@ -466,13 +437,7 @@ fn test_fuzz_crlf_random_positions() ! {
466437
key := 'fuzz_crlf_${t}'
467438
assert db.set(key, data.clone())! == 'OK'
468439
got := db.get[[]u8](key)!
469-
assert got.len == data.len
470-
assert got[pos] == `\r`
471-
assert got[pos + 1] == `\n`
472-
if t % 5 == 0 && size > 4097 {
473-
assert got[4095] == `\r`
474-
assert got[4096] == `\n`
475-
}
440+
assert got == data
476441
db.del(key)!
477442
x += u64(pos) + 1
478443
}
@@ -519,12 +484,7 @@ fn test_fuzz_random_binary_small() {
519484
for iter := 0; iter < 20; iter++ {
520485
// pseudo-random size in [1, 4096]
521486
size := int((x % 4096) + 1)
522-
mut data := []u8{len: size}
523-
for i in 0 .. size {
524-
// LCG step
525-
x = x * 6364136223846793005 + 1442695040888963407
526-
data[i] = u8((x >> 32) & 0xFF)
527-
}
487+
mut data := []u8{len: size, init: rand.u32()}
528488
k := 'fuzz_small_${iter}'
529489
assert db.set(k, data.clone())! == 'OK'
530490
got := db.get[[]u8](k)!

0 commit comments

Comments
 (0)