fix: pytest raft_status assertion message
Since commit d87dd4ca (see !120 (merged)) leader_id
became an Option
, so the None
value isn't rendered in the picolib.raft_status
response:
status={'is_ready': False, 'raft_state': 'Follower', 'id': 1}
It makes pytest complain about missing argument:
cluster2 = Cluster("127.0.0.1:3300", n=2)
def test_restart_leader(cluster2: Cluster):
i1, i2 = cluster2.instances
i1.assert_raft_status('Leader')
i2.assert_raft_status('Follower')
i1.restart()
> i1.wait_ready()
test/int/test_joining.py:209:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../../.local/share/virtualenvs/picodata-6sv6l6y-/lib/python3.10/site-packages/funcy/decorators.py:45:
in wrapper
return deco(call, *dargs, **dkwargs)
../../.local/share/virtualenvs/picodata-6sv6l6y-/lib/python3.10/site-packages/funcy/flow.py:127:
in retry
return call()
../../.local/share/virtualenvs/picodata-6sv6l6y-/lib/python3.10/site-packages/funcy/decorators.py:66:
in __call__
return self._func(*self._args, **self._kwargs)
test/int/conftest.py:305: in wait_ready
status = self._raft_status()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = Instance(i1, listen=127.0.0.1:3301)
def _raft_status(self) -> RaftStatus:
status = self.call("picolib.raft_status")
assert isinstance(status, dict)
eprint(f"{status=}")
> return RaftStatus(**status)
E TypeError: RaftStatus.__init__() missing 1 required positional
argument: 'leader_id'
test/int/conftest.py:280: TypeError
This patch fixes the failure message:
self = Instance(i1, listen=127.0.0.1:3301)
@funcy.retry(tries=20, timeout=0.1)
def wait_ready(self):
status = self._raft_status()
> assert status.is_ready
E AssertionError: assert False
E + where False = RaftStatus(id=1, raft_state='Follower',
is_ready=False, leader_id=None).is_ready
test/int/conftest.py:306: AssertionError