diff --git a/.github/workflows/integration.yaml b/.github/workflows/integration.yaml index cca7fbb793..cbd210c14a 100644 --- a/.github/workflows/integration.yaml +++ b/.github/workflows/integration.yaml @@ -27,6 +27,8 @@ env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} # this speeds up coverage with Python 3.12: https://github.com/nedbat/coveragepy/issues/1665 COVERAGE_CORE: sysmon + # patch releases get included in the base version image when they are published + # for example after 8.2.1 is published, 8.2 image contains 8.2.1 content CURRENT_CLIENT_LIBS_TEST_STACK_IMAGE_TAG: '8.2' CURRENT_REDIS_VERSION: '8.2' @@ -74,7 +76,7 @@ jobs: max-parallel: 15 fail-fast: false matrix: - redis-version: ['8.2.1-pre', '${{ needs.redis_version.outputs.CURRENT }}', '8.0.2' ,'7.4.4', '7.2.9'] + redis-version: ['8.4-M01-pre', '${{ needs.redis_version.outputs.CURRENT }}', '8.0.2' ,'7.4.4', '7.2.9'] python-version: ['3.9', '3.13'] parser-backend: ['plain'] event-loop: ['asyncio'] diff --git a/tests/test_asyncio/test_commands.py b/tests/test_asyncio/test_commands.py index 9db7d200e6..dda4dc2a1c 100644 --- a/tests/test_asyncio/test_commands.py +++ b/tests/test_asyncio/test_commands.py @@ -3158,6 +3158,7 @@ async def test_xgroup_destroy(self, r: redis.Redis): assert await r.xgroup_destroy(stream, group) @skip_if_server_version_lt("7.0.0") + @skip_if_server_version_gte("8.2.2") async def test_xgroup_setid(self, r: redis.Redis): stream = "stream" group = "group" @@ -3178,6 +3179,28 @@ async def test_xgroup_setid(self, r: redis.Redis): ] assert await r.xinfo_groups(stream) == expected + @skip_if_server_version_lt("8.2.2") + async def test_xgroup_setid_fixed_max_entries_read(self, r): + stream = "stream" + group = "group" + message_id = await r.xadd(stream, {"foo": "bar"}) + await r.xadd(stream, {"foo1": "bar1"}) + + await r.xgroup_create(stream, group, 0) + # advance the last_delivered_id to the message_id + await r.xgroup_setid(stream, group, message_id, entries_read=2) + expected = [ + { + "name": group.encode(), + "consumers": 0, + "pending": 0, + "last-delivered-id": message_id, + "entries-read": 2, + "lag": 0, + } + ] + assert await r.xinfo_groups(stream) == expected + @skip_if_server_version_lt("7.2.0") async def test_xinfo_consumers(self, r: redis.Redis): stream = "stream" diff --git a/tests/test_asyncio/test_vsets.py b/tests/test_asyncio/test_vsets.py index e2b2bc1d4f..896d98b192 100644 --- a/tests/test_asyncio/test_vsets.py +++ b/tests/test_asyncio/test_vsets.py @@ -502,8 +502,8 @@ async def test_vsim_epsilon(d_client): await d_client.vset().vadd("myset", [2, 1, 1], "a") await d_client.vset().vadd("myset", [2, 0, 1], "b") await d_client.vset().vadd("myset", [2, 0, 0], "c") - await d_client.vset().vadd("myset", [2, 0, -1], "d") - await d_client.vset().vadd("myset", [2, -1, -1], "e") + await d_client.vset().vadd("myset", [2, 0, 2], "d") + await d_client.vset().vadd("myset", [-2, -1, -1], "e") res1 = await d_client.vset().vsim("myset", [2, 1, 1]) assert 5 == len(res1) diff --git a/tests/test_commands.py b/tests/test_commands.py index 42530a47d2..2871dc45bf 100644 --- a/tests/test_commands.py +++ b/tests/test_commands.py @@ -4607,6 +4607,7 @@ def test_xgroup_create_mkstream(self, r): assert r.xinfo_groups(stream) == expected @skip_if_server_version_lt("7.0.0") + @skip_if_server_version_gte("8.2.2") def test_xgroup_create_entriesread(self, r: redis.Redis): stream = "stream" group = "group" @@ -4628,6 +4629,33 @@ def test_xgroup_create_entriesread(self, r: redis.Redis): ] assert r.xinfo_groups(stream) == expected + @skip_if_server_version_lt("8.2.2") + def test_xgroup_create_entriesread_fixed_max_entries_read(self, r: redis.Redis): + stream = "stream" + group = "group" + r.xadd(stream, {"foo": "bar"}) + r.xadd(stream, {"foo1": "bar1"}) + r.xadd(stream, {"foo2": "bar2"}) + + # no group is setup yet, no info to obtain + assert r.xinfo_groups(stream) == [] + + assert r.xgroup_create(stream, group, 0, entries_read=7) + # validate the entries-read is max the number of entries + # in the stream and lag shows the entries between + # last_delivered_id and entries_added + expected = [ + { + "name": group.encode(), + "consumers": 0, + "pending": 0, + "last-delivered-id": b"0-0", + "entries-read": 3, + "lag": 3, + } + ] + assert r.xinfo_groups(stream) == expected + @skip_if_server_version_lt("5.0.0") def test_xgroup_delconsumer(self, r): stream = "stream" @@ -4675,6 +4703,7 @@ def test_xgroup_destroy(self, r): assert r.xgroup_destroy(stream, group) @skip_if_server_version_lt("7.0.0") + @skip_if_server_version_gte("8.2.2") def test_xgroup_setid(self, r): stream = "stream" group = "group" @@ -4695,6 +4724,28 @@ def test_xgroup_setid(self, r): ] assert r.xinfo_groups(stream) == expected + @skip_if_server_version_lt("8.2.2") + def test_xgroup_setid_fixed_max_entries_read(self, r): + stream = "stream" + group = "group" + message_id = r.xadd(stream, {"foo": "bar"}) + r.xadd(stream, {"foo1": "bar1"}) + + r.xgroup_create(stream, group, 0) + # advance the last_delivered_id to the message_id + r.xgroup_setid(stream, group, message_id, entries_read=5) + expected = [ + { + "name": group.encode(), + "consumers": 0, + "pending": 0, + "last-delivered-id": message_id, + "entries-read": 2, + "lag": 0, + } + ] + assert r.xinfo_groups(stream) == expected + @skip_if_server_version_lt("7.2.0") def test_xinfo_consumers(self, r): stream = "stream" diff --git a/tests/test_vsets.py b/tests/test_vsets.py index cba7115bf1..36295201e7 100644 --- a/tests/test_vsets.py +++ b/tests/test_vsets.py @@ -504,8 +504,8 @@ def test_vsim_epsilon(d_client): d_client.vset().vadd("myset", [2, 1, 1], "a") d_client.vset().vadd("myset", [2, 0, 1], "b") d_client.vset().vadd("myset", [2, 0, 0], "c") - d_client.vset().vadd("myset", [2, 0, -1], "d") - d_client.vset().vadd("myset", [2, -1, -1], "e") + d_client.vset().vadd("myset", [2, 0, 2], "d") + d_client.vset().vadd("myset", [-2, -1, -1], "e") res1 = d_client.vset().vsim("myset", [2, 1, 1]) assert 5 == len(res1)