From 444e219abaf52e9bcee3d63159b4dfbc55de6d59 Mon Sep 17 00:00:00 2001 From: godric Date: Thu, 29 Jul 2021 15:28:05 +0200 Subject: [PATCH 1/3] Improve empty stream responses deserialization --- lib/redis.rb | 2 +- test/streams_test.rb | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 test/streams_test.rb diff --git a/lib/redis.rb b/lib/redis.rb index aaa990a08..8d478e2ac 100644 --- a/lib/redis.rb +++ b/lib/redis.rb @@ -3518,7 +3518,7 @@ def method_missing(command, *args) # rubocop:disable Style/MissingRespondToMissi HashifyStreamEntries = lambda { |reply| reply.compact.map do |entry_id, values| - [entry_id, values.each_slice(2).to_h] + [entry_id, values&.each_slice(2)&.to_h] end } diff --git a/test/streams_test.rb b/test/streams_test.rb new file mode 100644 index 000000000..1f557000f --- /dev/null +++ b/test/streams_test.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +require_relative "helper" + +class TestStreams < Minitest::Test + include Helper::Client + + def test_read_a_trimmed_entry + r.xgroup(:create, 'k1', 'g1', '0', mkstream: true) + entry_id = r.xadd('k1', { value: 'v1' }) + + assert_equal r.xreadgroup('g1', 'c1', 'k1', '>'), { 'k1' => [[entry_id, { 'value' => 'v1' }]] } + assert_equal r.xreadgroup('g1', 'c1', 'k1', '0'), { 'k1' => [[entry_id, { 'value' => 'v1' }]] } + r.xtrim('k1', 0) + + assert_equal r.xreadgroup('g1', 'c1', 'k1', '0'), { 'k1' => [[entry_id, { 'value' => nil }]] } + end +end From 5585b673ec12cc43cd8e7a5760c4171a2d7fabf5 Mon Sep 17 00:00:00 2001 From: godric Date: Fri, 30 Jul 2021 15:10:15 +0200 Subject: [PATCH 2/3] Fix streams_test suite --- test/streams_test.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/streams_test.rb b/test/streams_test.rb index 1f557000f..d4f04976a 100644 --- a/test/streams_test.rb +++ b/test/streams_test.rb @@ -9,10 +9,10 @@ def test_read_a_trimmed_entry r.xgroup(:create, 'k1', 'g1', '0', mkstream: true) entry_id = r.xadd('k1', { value: 'v1' }) - assert_equal r.xreadgroup('g1', 'c1', 'k1', '>'), { 'k1' => [[entry_id, { 'value' => 'v1' }]] } - assert_equal r.xreadgroup('g1', 'c1', 'k1', '0'), { 'k1' => [[entry_id, { 'value' => 'v1' }]] } + assert_equal({ 'k1' => [[entry_id, { 'value' => 'v1' }]] }, r.xreadgroup('g1', 'c1', 'k1', '>')) + assert_equal({ 'k1' => [[entry_id, { 'value' => 'v1' }]] }, r.xreadgroup('g1', 'c1', 'k1', '0')) r.xtrim('k1', 0) - assert_equal r.xreadgroup('g1', 'c1', 'k1', '0'), { 'k1' => [[entry_id, { 'value' => nil }]] } + assert_equal({ 'k1' => [[entry_id, nil]] }, r.xreadgroup('g1', 'c1', 'k1', '0')) end end From 2e85516e2e7f14d2ea71decbd7d02d6be70820ea Mon Sep 17 00:00:00 2001 From: godric Date: Tue, 3 Aug 2021 01:28:36 +0200 Subject: [PATCH 3/3] Move test suite to test/lint/streams.rb --- test/lint/streams.rb | 11 +++++++++++ test/streams_test.rb | 18 ------------------ 2 files changed, 11 insertions(+), 18 deletions(-) delete mode 100644 test/streams_test.rb diff --git a/test/lint/streams.rb b/test/lint/streams.rb index a6651ced6..d7060fbb0 100644 --- a/test/lint/streams.rb +++ b/test/lint/streams.rb @@ -491,6 +491,17 @@ def test_xreadgroup_with_invalid_arguments assert_raises(Redis::CommandError) { redis.xreadgroup('g1', 'c1', 's1', %w[> >]) } end + def test_xreadgroup_a_trimmed_entry + redis.xgroup(:create, 'k1', 'g1', '0', mkstream: true) + entry_id = redis.xadd('k1', { value: 'v1' }) + + assert_equal({ 'k1' => [[entry_id, { 'value' => 'v1' }]] }, redis.xreadgroup('g1', 'c1', 'k1', '>')) + assert_equal({ 'k1' => [[entry_id, { 'value' => 'v1' }]] }, redis.xreadgroup('g1', 'c1', 'k1', '0')) + redis.xtrim('k1', 0) + + assert_equal({ 'k1' => [[entry_id, nil]] }, redis.xreadgroup('g1', 'c1', 'k1', '0')) + end + def test_xack_with_a_entry_id redis.xadd('s1', { f: 'v1' }, id: '0-1') redis.xgroup(:create, 's1', 'g1', '$') diff --git a/test/streams_test.rb b/test/streams_test.rb deleted file mode 100644 index d4f04976a..000000000 --- a/test/streams_test.rb +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: true - -require_relative "helper" - -class TestStreams < Minitest::Test - include Helper::Client - - def test_read_a_trimmed_entry - r.xgroup(:create, 'k1', 'g1', '0', mkstream: true) - entry_id = r.xadd('k1', { value: 'v1' }) - - assert_equal({ 'k1' => [[entry_id, { 'value' => 'v1' }]] }, r.xreadgroup('g1', 'c1', 'k1', '>')) - assert_equal({ 'k1' => [[entry_id, { 'value' => 'v1' }]] }, r.xreadgroup('g1', 'c1', 'k1', '0')) - r.xtrim('k1', 0) - - assert_equal({ 'k1' => [[entry_id, nil]] }, r.xreadgroup('g1', 'c1', 'k1', '0')) - end -end