Control: reopen -1 Hi,
On 21-05-2025 22:39, Debian Bug Tracking System wrote:
python-fakeredis (2.29.0-3) unstable; urgency=medium
.
* Address autopkgtest regression issues:
- Require Redis >= 8.x and python3-mock to run the latest autopkgtests.
- Disable the "test_time" test due to an incompatibility with the new
version of Mock and mock_use_standalone_module.
<https://github.com/pytest-dev/pytest-mock/issues/70>
(Closes: #1105992)
It looks like this wasn't enough. I triggered tests in unstable and only amd64, arm64 and armhf passed. Failures are not the same across the architectures. Examples (i386 and s390x) below.
Paul https://ci.debian.net/packages/p/python-fakeredis/unstable/i386/60917905/180s =================================== FAILURES =================================== 180s _______________ test_hgetex_expiration_configs[FakeStrictRedis] ________________
180s180s r = <fakeredis._connection.FakeStrictRedis(<redis.connection.ConnectionPool(<fakeredis._connection.FakeConnection(server=<fakeredis._server.FakeServer object at 0xf540b308>,db=2)>)>)>
180s
180s def test_hgetex_expiration_configs(r):
180s r.delete("test:hash")
180s r.hset("test:hash", "foo", "bar", mapping={"1": 1, "3":
"three", "4": b"four"})
180s test_keys = ["foo", "1", "4"] 180s180s # test get with multiple fields with expiration set through 'ex' 180s assert r.hgetex("test:hash", *test_keys, ex=10) == [b"bar", b"1", b"four"]
180s ttls = r.httl("test:hash", *test_keys)
180s for ttl in ttls:
180s assert pytest.approx(ttl, 1) == 10
180s
180s # test get with multiple fields removing expiration
settings with 'persist'
180s assert r.hgetex("test:hash", *test_keys, persist=True) == [
180s b"bar",
180s b"1",
180s b"four",
180s ]
180s assert r.httl("test:hash", *test_keys) == [-1, -1, -1]
180s
180s # test get with multiple fields with expiration set through
'px'
180s assert r.hgetex("test:hash", *test_keys, px=6000) ==
[b"bar", b"1", b"four"]
180s ttls = r.httl("test:hash", *test_keys)
180s for ttl in ttls:
180s > assert pytest.approx(ttl) == 6
180s E assert 5 ± 5.0e-06 == 6
180s E
180s E comparison failed
180s E Obtained: 6
180s E Expected: 5 ± 5.0e-06
180s
180s test/test_mixins/test_hash_expire_redispy6.py:68: AssertionError
https://ci.debian.net/packages/p/python-fakeredis/unstable/s390x/60917908/
345s ____________________________ TestZSetNoScores.test
_____________________________
345s345s self = <test.test_hypothesis.test_zset.TestZSetNoScores object at 0x3ffb9a9e710>
345s 345s @pytest.mark.slow 345s def test(self): 345s class Machine(CommonMachine): 345s create_command_strategy = self.create_command_strategy 345s command_strategy = self.command_strategy 345s if server_type == "redis":345s command_strategy = command_strategy | self.command_strategy_redis_only
345s if server_type == "redis" and redis_ver >= (7,):345s command_strategy = command_strategy | self.command_strategy_redis7
345s345s # hypothesis.settings.register_profile("debug", max_examples=10, verbosity=hypothesis.Verbosity.debug)
345s # hypothesis.settings.load_profile("debug")
345s > hypothesis.stateful.run_state_machine_as_test(Machine)
345s
345s test/test_hypothesis/base.py:344:
345s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _
345s /usr/lib/python3/dist-packages/hypothesis/stateful.py:261: in
run_state_machine_as_test
345s state_machine_test(state_machine_factory)345s /usr/lib/python3/dist-packages/hypothesis/stateful.py:115: in run_state_machine
345s @given(st.data()) 345s test/test_hypothesis/base.py:321: in one_command 345s self._compare(command)345s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
345s
345s self = Machine({})
345s command = Command('zrangebylex', b'A', b'-', b'+', 'limit', -1, 1)
345s
345s def _compare(self, command):
345s fake_result, fake_exc = self._evaluate(self.fake, command)
345s real_result, real_exc = self._evaluate(self.real, command)
345s
345s if fake_exc is not None and real_exc is None:
345s print(f"{fake_exc} raised on only on fake when running
{command}", file=sys.stderr)
345s raise fake_exc 345s elif real_exc is not None and fake_exc is None:345s assert real_exc == fake_exc, f"Expected exception `{real_exc}` not raised when running {command}" 345s elif real_exc is None and isinstance(real_result, list) and command.args and command.args[0].lower() == "exec":
345s assert fake_result is not None 345s # Transactions need to use the normalize functions of the 345s # component commands. 345s assert len(self.transaction_normalize) == len(real_result) 345s assert len(self.transaction_normalize) == len(fake_result)345s for n, r, f in zip(self.transaction_normalize, real_result, fake_result):
345s assert n(f) == n(r) 345s self.transaction_normalize = [] 345s elif isinstance(fake_result, list): 345s > assert len(fake_result) == len(real_result), (345s f"Discrepancy when running command {command}, fake({fake_result}) != real({real_result})",
345s )345s E AssertionError: ("Discrepancy when running command Command('zrangebylex', b'A', b'-', b'+', 'limit', -1, 1), fake([]) != real([b'A'])",)
345s E Falsifying example:
345s E state = Machine()
345s E state.init_attrs(attrs={'keys': [b'A', b'B'],
345s E 'fields': [b'A', b'AA'],
345s E 'values': [b'A', b'0'],
345s E 'scores': [0.0, 1.0]})
345s E
state.init_data(commands=[functools.partial(test.test_hypothesis.base.Command)(
345s E 'zadd', 345s E b'B', 345s E [(0, b'A'), (0, b'A')], 345s E )])345s E state.one_command(command=functools.partial(test.test_hypothesis.base.Command)(
345s E 'zadd', 345s E b'A', 345s E None, 345s E None, 345s E None, 345s E None, 345s E [], 345s E ))345s E state.one_command(command=functools.partial(test.test_hypothesis.base.Command)(
345s E 'zadd', 345s E b'A', 345s E None, 345s E None, 345s E None, 345s E None, 345s E [], 345s E ))345s E state.one_command(command=functools.partial(test.test_hypothesis.base.Command)(
345s E 'zadd', 345s E b'A', 345s E None, 345s E None, 345s E None, 345s E None, 345s E [], 345s E ))345s E state.one_command(command=functools.partial(test.test_hypothesis.base.Command)(
345s E 'zadd', 345s E b'A', 345s E None, 345s E None, 345s E None, 345s E None, 345s E [], 345s E ))345s E state.one_command(command=functools.partial(test.test_hypothesis.base.Command)(
345s E 'zadd', 345s E b'A', 345s E None, 345s E None, 345s E None, 345s E None, 345s E [], 345s E ))345s E state.one_command(command=functools.partial(test.test_hypothesis.base.Command)(
345s E 'zadd', 345s E b'A', 345s E None, 345s E None, 345s E None, 345s E None, 345s E [], 345s E ))345s E state.one_command(command=functools.partial(test.test_hypothesis.base.Command)(
345s E 'zadd', 345s E b'A', 345s E None, 345s E None, 345s E None, 345s E None, 345s E [], 345s E ))345s E state.one_command(command=functools.partial(test.test_hypothesis.base.Command)(
345s E 'zadd', 345s E b'A', 345s E None, 345s E None, 345s E None, 345s E None, 345s E [], 345s E ))345s E state.one_command(command=functools.partial(test.test_hypothesis.base.Command)(
345s E 'zadd', 345s E b'A', 345s E None, 345s E None, 345s E None, 345s E None, 345s E [], 345s E ))345s E state.one_command(command=functools.partial(test.test_hypothesis.base.Command)(
345s E 'zadd', 345s E b'A', 345s E None, 345s E None, 345s E None, 345s E None, 345s E [], 345s E ))345s E state.one_command(command=functools.partial(test.test_hypothesis.base.Command)(
345s E 'sort', 345s E b'B', 345s E None, 345s E None, 345s E None, 345s E ))345s E state.one_command(command=functools.partial(test.test_hypothesis.base.Command)(
345s E 'zadd', 345s E b'A', 345s E None, 345s E None, 345s E None, 345s E None, 345s E [], 345s E ))345s E state.one_command(command=functools.partial(test.test_hypothesis.base.Command)(
345s E 'zadd', 345s E b'A', 345s E None, 345s E None, 345s E None, 345s E None, 345s E [], 345s E ))345s E state.one_command(command=functools.partial(test.test_hypothesis.base.Command)(
345s E 'zadd', 345s E b'A', 345s E None, 345s E None, 345s E None, 345s E None, 345s E [], 345s E ))345s E state.one_command(command=functools.partial(test.test_hypothesis.base.Command)(
345s E 'zadd', 345s E b'A', 345s E None, 345s E None, 345s E None, 345s E None, 345s E [], 345s E ))345s E state.one_command(command=functools.partial(test.test_hypothesis.base.Command)('rename', b'B', b'A')) 345s E state.one_command(command=functools.partial(test.test_hypothesis.base.Command)(
345s E 'zrangebylex',
345s E b'A',
345s E b'-',
345s E b'+',
345s E ('limit', -1, 1),
345s E ))
345s E state.teardown()
345s E Explanation:
345s E These lines were always and only run by failing
examples:
345s E
/tmp/autopkgtest-lxc.6_8srlqn/downtmp/build.1uN/src/test/test_hypothesis/base.py:274
345s 345s test/test_hypothesis/base.py:273: AssertionError
OpenPGP_signature.asc
Description: OpenPGP digital signature

