Skip to content

Commit b1f1e97

Browse files
committed
move to function based tests
Minimum Go version is now >=1.9.
1 parent 9bec9d5 commit b1f1e97

File tree

4 files changed

+288
-312
lines changed

4 files changed

+288
-312
lines changed

cmd_scripting_test.go

Lines changed: 160 additions & 174 deletions
Original file line numberDiff line numberDiff line change
@@ -154,24 +154,20 @@ func TestCJSON(t *testing.T) {
154154
ok(t, err)
155155
defer c.Close()
156156

157-
tests := []struct {
158-
expr string
159-
want string
160-
}{
161-
{
162-
expr: `return cjson.decode('{"id":"foo"}')['id']`,
163-
want: "foo",
164-
},
165-
{
166-
expr: `return cjson.encode({foo=42})`,
167-
want: `{"foo":42}`,
168-
},
169-
}
170-
for _, test := range tests {
171-
str, err := redis.String(c.Do("EVAL", test.expr, 0))
157+
test := func(expr, want string) {
158+
t.Helper()
159+
str, err := redis.String(c.Do("EVAL", expr, 0))
172160
ok(t, err)
173-
equals(t, str, test.want)
161+
equals(t, str, want)
174162
}
163+
test(
164+
`return cjson.decode('{"id":"foo"}')['id']`,
165+
"foo",
166+
)
167+
test(
168+
`return cjson.encode({foo=42})`,
169+
`{"foo":42}`,
170+
)
175171

176172
_, err = c.Do("EVAL", `redis.encode()`, 0)
177173
assert(t, err != nil, "lua error")
@@ -193,46 +189,27 @@ func TestSha1Hex(t *testing.T) {
193189
ok(t, err)
194190
defer c.Close()
195191

196-
tests := []struct {
197-
val interface{}
198-
want string
199-
}{
200-
{
201-
val: "foo",
202-
want: "0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33",
203-
},
204-
{
205-
val: "bar",
206-
want: "62cdb7020ff920e5aa642c3d4066950dd1f01f4d",
207-
},
208-
{
209-
val: "0",
210-
want: "b6589fc6ab0dc82cf12099d1c2d40ab994e8410c",
211-
},
212-
{
213-
val: 0,
214-
want: "b6589fc6ab0dc82cf12099d1c2d40ab994e8410c",
215-
},
216-
{
217-
val: nil,
218-
want: "da39a3ee5e6b4b0d3255bfef95601890afd80709",
219-
},
220-
}
221-
for _, test := range tests {
222-
str, err := redis.String(c.Do("EVAL", "return redis.sha1hex(ARGV[1])", 0, test.val))
192+
test1 := func(val interface{}, want string) {
193+
t.Helper()
194+
str, err := redis.String(c.Do("EVAL", "return redis.sha1hex(ARGV[1])", 0, val))
223195
ok(t, err)
224-
equals(t, str, test.want)
196+
equals(t, str, want)
225197
}
226-
227-
for _, cas := range [][2]string{
228-
{"return redis.sha1hex({})", "da39a3ee5e6b4b0d3255bfef95601890afd80709"},
229-
{"return redis.sha1hex(nil)", "da39a3ee5e6b4b0d3255bfef95601890afd80709"},
230-
{"return redis.sha1hex(42)", "92cfceb39d57d914ed8b14d0e37643de0797ae56"},
231-
} {
232-
have, err := redis.String(c.Do("EVAL", cas[0], 0))
198+
test1("foo", "0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33")
199+
test1("bar", "62cdb7020ff920e5aa642c3d4066950dd1f01f4d")
200+
test1("0", "b6589fc6ab0dc82cf12099d1c2d40ab994e8410c")
201+
test1(0, "b6589fc6ab0dc82cf12099d1c2d40ab994e8410c")
202+
test1(nil, "da39a3ee5e6b4b0d3255bfef95601890afd80709")
203+
204+
test2 := func(eval, want string) {
205+
t.Helper()
206+
have, err := redis.String(c.Do("EVAL", eval, 0))
233207
ok(t, err)
234-
equals(t, have, cas[1])
208+
equals(t, have, want)
235209
}
210+
test2("return redis.sha1hex({})", "da39a3ee5e6b4b0d3255bfef95601890afd80709")
211+
test2("return redis.sha1hex(nil)", "da39a3ee5e6b4b0d3255bfef95601890afd80709")
212+
test2("return redis.sha1hex(42)", "92cfceb39d57d914ed8b14d0e37643de0797ae56")
236213

237214
_, err = c.Do("EVAL", "redis.sha1hex()", 0)
238215
assert(t, err != nil, "lua error")
@@ -289,143 +266,152 @@ func TestCmdEvalReply(t *testing.T) {
289266
ok(t, err)
290267
defer c.Close()
291268

292-
cases := map[string]struct {
293-
script string
294-
args []interface{}
295-
expected interface{}
296-
}{
297-
"Return nil": {
298-
script: "",
299-
args: []interface{}{
300-
0,
301-
},
269+
test := func(script string, args []interface{}, expected interface{}) {
270+
t.Helper()
271+
reply, err := c.Do("EVAL", append([]interface{}{script}, args...)...)
272+
if err != nil {
273+
t.Errorf("unexpected error: %v", err)
274+
return
275+
}
276+
equals(t, expected, reply)
277+
}
278+
279+
// return nil
280+
test(
281+
"",
282+
[]interface{}{
283+
0,
302284
},
303-
"Return boolean true": {
304-
script: "return true",
305-
args: []interface{}{
306-
0,
307-
},
308-
expected: int64(1),
285+
nil,
286+
)
287+
// return boolean true
288+
test(
289+
"return true",
290+
[]interface{}{
291+
0,
309292
},
310-
"Return boolean false": {
311-
script: "return false",
312-
args: []interface{}{
313-
0,
314-
},
315-
expected: int64(0),
293+
int64(1),
294+
)
295+
// return boolean false
296+
test(
297+
"return false",
298+
[]interface{}{
299+
0,
316300
},
317-
"Return single number": {
318-
script: "return 10",
319-
args: []interface{}{
320-
0,
321-
},
322-
expected: int64(10),
301+
int64(0),
302+
)
303+
// return single number
304+
test(
305+
"return 10",
306+
[]interface{}{
307+
0,
323308
},
324-
"Return single float": {
325-
script: "return 12.345",
326-
args: []interface{}{
327-
0,
328-
},
329-
expected: int64(12),
309+
int64(10),
310+
)
311+
// return single float
312+
test(
313+
"return 12.345",
314+
[]interface{}{
315+
0,
330316
},
331-
"Return multiple number": {
332-
script: "return 10, 20",
333-
args: []interface{}{
334-
0,
335-
},
336-
expected: int64(10),
317+
int64(12),
318+
)
319+
// return multiple numbers
320+
test(
321+
"return 10, 20",
322+
[]interface{}{
323+
0,
337324
},
338-
"Return single string": {
339-
script: "return 'test'",
340-
args: []interface{}{
341-
0,
342-
},
343-
expected: []byte("test"),
325+
int64(10),
326+
)
327+
// return single string
328+
test(
329+
"return 'test'",
330+
[]interface{}{
331+
0,
344332
},
345-
"Return multiple string": {
346-
script: "return 'test1', 'test2'",
347-
args: []interface{}{
348-
0,
349-
},
350-
expected: []byte("test1"),
333+
[]byte("test"),
334+
)
335+
// return multiple string
336+
test(
337+
"return 'test1', 'test2'",
338+
[]interface{}{
339+
0,
351340
},
352-
"Return single table multiple integer": {
353-
script: "return {10, 20}",
354-
args: []interface{}{
355-
0,
356-
},
357-
expected: []interface{}{
358-
int64(10),
359-
int64(20),
360-
},
341+
[]byte("test1"),
342+
)
343+
// return single table multiple integer
344+
test(
345+
"return {10, 20}",
346+
[]interface{}{
347+
0,
361348
},
362-
"Return single table multiple string": {
363-
script: "return {'test1', 'test2'}",
364-
args: []interface{}{
365-
0,
366-
},
367-
expected: []interface{}{
368-
[]byte("test1"),
369-
[]byte("test2"),
370-
},
349+
[]interface{}{
350+
int64(10),
351+
int64(20),
371352
},
372-
"Return nested table": {
373-
script: "return {10, 20, {30, 40}}",
374-
args: []interface{}{
375-
0,
376-
},
377-
expected: []interface{}{
378-
int64(10),
379-
int64(20),
380-
[]interface{}{
381-
int64(30),
382-
int64(40),
383-
},
384-
},
353+
)
354+
// return single table multiple string
355+
test(
356+
"return {'test1', 'test2'}",
357+
[]interface{}{
358+
0,
385359
},
386-
"Return combination table": {
387-
script: "return {10, 20, {30, 'test', true, 40}, false}",
388-
args: []interface{}{
389-
0,
390-
},
391-
expected: []interface{}{
392-
int64(10),
393-
int64(20),
394-
[]interface{}{
395-
int64(30),
396-
[]byte("test"),
397-
int64(1),
398-
int64(40),
399-
},
400-
int64(0),
401-
},
360+
[]interface{}{
361+
[]byte("test1"),
362+
[]byte("test2"),
402363
},
403-
"KEYS and ARGV": {
404-
script: "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}",
405-
args: []interface{}{
406-
2,
407-
"key1",
408-
"key2",
409-
"first",
410-
"second",
364+
)
365+
// return nested table
366+
test(
367+
"return {10, 20, {30, 40}}",
368+
[]interface{}{
369+
0,
370+
},
371+
[]interface{}{
372+
int64(10),
373+
int64(20),
374+
[]interface{}{
375+
int64(30),
376+
int64(40),
411377
},
412-
expected: []interface{}{
413-
[]byte("key1"),
414-
[]byte("key2"),
415-
[]byte("first"),
416-
[]byte("second"),
378+
},
379+
)
380+
// return combination table
381+
test(
382+
"return {10, 20, {30, 'test', true, 40}, false}",
383+
[]interface{}{
384+
0,
385+
},
386+
[]interface{}{
387+
int64(10),
388+
int64(20),
389+
[]interface{}{
390+
int64(30),
391+
[]byte("test"),
392+
int64(1),
393+
int64(40),
417394
},
395+
int64(0),
418396
},
419-
}
420-
421-
for id, tc := range cases {
422-
reply, err := c.Do("EVAL", append([]interface{}{tc.script}, tc.args...)...)
423-
if err != nil {
424-
t.Errorf("%v: Unexpected error: %v", id, err)
425-
continue
426-
}
427-
equals(t, tc.expected, reply)
428-
}
397+
)
398+
// KEYS and ARGV
399+
test(
400+
"return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}",
401+
[]interface{}{
402+
2,
403+
"key1",
404+
"key2",
405+
"first",
406+
"second",
407+
},
408+
[]interface{}{
409+
[]byte("key1"),
410+
[]byte("key2"),
411+
[]byte("first"),
412+
[]byte("second"),
413+
},
414+
)
429415

430416
{
431417
_, err := c.Do("EVAL", `return {err="broken"}`, 0)

0 commit comments

Comments
 (0)