mirror of
https://github.com/redis/redis.git
synced 2026-05-27 19:52:35 -04:00
The test introduced in #11482 fail on mac: ``` *** [err]: RESP3: RM_ReplyWithDouble: inf in tests/unit/moduleapi/reply.tcl Expected 'Inf' to be equal to 'inf' (context: type eval line 6 cmd {assert_equal Inf [r rw.double inf]} proc ::test) ``` Looks like the mac platform returns inf instead of Inf in this case, this PR uses readraw to verify the protocol.
128 lines
4.3 KiB
Tcl
128 lines
4.3 KiB
Tcl
set testmodule [file normalize tests/modules/reply.so]
|
|
|
|
start_server {tags {"modules"}} {
|
|
r module load $testmodule
|
|
|
|
# test all with hello 2/3
|
|
for {set proto 2} {$proto <= 3} {incr proto} {
|
|
r hello $proto
|
|
|
|
test "RESP$proto: RM_ReplyWithString: an string reply" {
|
|
# RedisString
|
|
set string [r rw.string "Redis"]
|
|
assert_equal "Redis" $string
|
|
# C string
|
|
set string [r rw.cstring]
|
|
assert_equal "A simple string" $string
|
|
}
|
|
|
|
test "RESP$proto: RM_ReplyWithBigNumber: an string reply" {
|
|
assert_equal "123456778901234567890" [r rw.bignumber "123456778901234567890"]
|
|
}
|
|
|
|
test "RESP$proto: RM_ReplyWithInt: an integer reply" {
|
|
assert_equal 42 [r rw.int 42]
|
|
}
|
|
|
|
test "RESP$proto: RM_ReplyWithDouble: a float reply" {
|
|
assert_equal 3.141 [r rw.double 3.141]
|
|
}
|
|
|
|
test "RESP$proto: RM_ReplyWithDouble: inf" {
|
|
if {$proto == 2} {
|
|
assert_equal "inf" [r rw.double inf]
|
|
assert_equal "-inf" [r rw.double -inf]
|
|
} else {
|
|
# TCL convert inf to different results on different platforms, e.g. inf on mac
|
|
# and Inf on others, so use readraw to verify the protocol
|
|
r readraw 1
|
|
assert_equal ",inf" [r rw.double inf]
|
|
assert_equal ",-inf" [r rw.double -inf]
|
|
r readraw 0
|
|
}
|
|
}
|
|
|
|
test "RESP$proto: RM_ReplyWithDouble: NaN" {
|
|
if {$proto == 2} {
|
|
assert_equal "-nan" [r rw.double 0 0]
|
|
assert_equal "nan" [r rw.double]
|
|
} else {
|
|
# TCL won't convert nan into a double, use readraw to verify the protocol
|
|
r readraw 1
|
|
assert_equal ",-nan" [r rw.double 0 0]
|
|
assert_equal ",nan" [r rw.double]
|
|
r readraw 0
|
|
}
|
|
}
|
|
|
|
set ld 0.00000000000000001
|
|
test "RESP$proto: RM_ReplyWithLongDouble: a float reply" {
|
|
if {$proto == 2} {
|
|
# here the response gets to TCL as a string
|
|
assert_equal $ld [r rw.longdouble $ld]
|
|
} else {
|
|
# TCL doesn't support long double and the test infra converts it to a
|
|
# normal double which causes precision loss. so we use readraw instead
|
|
r readraw 1
|
|
assert_equal ",$ld" [r rw.longdouble $ld]
|
|
r readraw 0
|
|
}
|
|
}
|
|
|
|
test "RESP$proto: RM_ReplyWithVerbatimString: a string reply" {
|
|
assert_equal "bla\nbla\nbla" [r rw.verbatim "bla\nbla\nbla"]
|
|
}
|
|
|
|
test "RESP$proto: RM_ReplyWithArray: an array reply" {
|
|
assert_equal {0 1 2 3 4} [r rw.array 5]
|
|
}
|
|
|
|
test "RESP$proto: RM_ReplyWithMap: an map reply" {
|
|
set res [r rw.map 3]
|
|
if {$proto == 2} {
|
|
assert_equal {0 0 1 1.5 2 3} $res
|
|
} else {
|
|
assert_equal [dict create 0 0.0 1 1.5 2 3.0] $res
|
|
}
|
|
}
|
|
|
|
test "RESP$proto: RM_ReplyWithSet: an set reply" {
|
|
assert_equal {0 1 2} [r rw.set 3]
|
|
}
|
|
|
|
test "RESP$proto: RM_ReplyWithAttribute: an set reply" {
|
|
if {$proto == 2} {
|
|
catch {[r rw.attribute 3]} e
|
|
assert_match "Attributes aren't supported by RESP 2" $e
|
|
} else {
|
|
r readraw 1
|
|
set res [r rw.attribute 3]
|
|
assert_equal [r read] {:0}
|
|
assert_equal [r read] {,0}
|
|
assert_equal [r read] {:1}
|
|
assert_equal [r read] {,1.5}
|
|
assert_equal [r read] {:2}
|
|
assert_equal [r read] {,3}
|
|
assert_equal [r read] {+OK}
|
|
r readraw 0
|
|
}
|
|
}
|
|
|
|
test "RESP$proto: RM_ReplyWithBool: a boolean reply" {
|
|
assert_equal {0 1} [r rw.bool]
|
|
}
|
|
|
|
test "RESP$proto: RM_ReplyWithNull: a NULL reply" {
|
|
assert_equal {} [r rw.null]
|
|
}
|
|
|
|
test "RESP$proto: RM_ReplyWithError: an error reply" {
|
|
catch {r rw.error} e
|
|
assert_match "An error" $e
|
|
}
|
|
}
|
|
|
|
test "Unload the module - replywith" {
|
|
assert_equal {OK} [r module unload replywith]
|
|
}
|
|
}
|