diff --git a/tests/test_helper.tcl b/tests/test_helper.tcl index 41c867803..7def9a7f6 100644 --- a/tests/test_helper.tcl +++ b/tests/test_helper.tcl @@ -26,6 +26,7 @@ set ::all_tests { unit/type/set unit/type/zset unit/type/hash + unit/type/stream unit/sort unit/expire unit/other diff --git a/tests/unit/type/stream.tcl b/tests/unit/type/stream.tcl new file mode 100644 index 000000000..a668ddf42 --- /dev/null +++ b/tests/unit/type/stream.tcl @@ -0,0 +1,42 @@ +# return value is like strcmp() and similar. +proc streamCompareID {a b} { + if {$a == $b} {return 0} + lassign [split $a .] a_ms a_seq + lassign [split $b .] b_ms b_seq + if {$a_ms > $b_ms} {return 1} + if {$a_ms < $b_ms} {return -1} + # Same ms case, compare seq. + if {$a_seq > $b_seq} {return 1} + if {$a_seq < $b_seq} {return -1} +} + +start_server { + tags {"stream"} +} { + test {XADD can add entries into a stream that XRANGE can fetch} { + r XADD mystream * item 1 value a + r XADD mystream * item 2 value b + assert_equal 2 [r XLEN mystream] + set items [r XRANGE mystream - +] + assert_equal [lindex $items 0 1] {item 1 value a} + assert_equal [lindex $items 1 1] {item 2 value b} + } + + test {XADD IDs are incremental} { + set id1 [r XADD mystream * item 1 value a] + set id2 [r XADD mystream * item 2 value b] + set id3 [r XADD mystream * item 3 value c] + assert {[streamCompareID $id1 $id2] == -1} + assert {[streamCompareID $id2 $id3] == -1} + } + + test {XADD IDs are incremental when ms is the same as well} { + r multi + r XADD mystream * item 1 value a + r XADD mystream * item 2 value b + r XADD mystream * item 3 value c + lassign [r exec] id1 id2 id3 + assert {[streamCompareID $id1 $id2] == -1} + assert {[streamCompareID $id2 $id3] == -1} + } +}