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 180s180s # 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] 180s180s # 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