The service now supports the `streaming` state.
Since we dont check for lag or timeline in this service, a healthy node
is :
* leader : in a running state
* standby_leader : running (pre Patroni 3.0.4), streaming otherwise
* standby & sync_standby : running (pre Patroni 3.0.4), streaming otherwise
Updated the tests for this service.
For patroni >= version 3.0.4:
* the role is `replica` or `sync_standby`
* the state is `streaming` or `in archive recovery`
* the timeline is the same as the leader
* the lag is lower or equal to `max_lag`
For prio versions of patroni:
* the role is `replica` or `sync_standby`
* the state is `running`
* the timeline is the same as the leader
* the lag is lower or equal to `max_lag`
Additionnally, we now display the timeline in the perfstats. We also try
to display the perf stats of unhealthy replica as much as possible.
Update tests for cluster_has_replica:
* Fix the tests to make them work with the new algotithm
* Add a specific test for tl divergences
We introduce a patroni_api fixture, defined in tests/conftest.py, which
sets up an HTTP server serving files in a temporary directory. The
server is itself defined by the PatroniAPI class; it has a 'routes()'
context manager method to be used in actual tests to setup expected
responses based on specified JSON files.
We set up some logging in order to improve debugging.
The direct advantage of this is that PatroniResource.rest_api() method
is now covered by the test suite.
Coverage before this commit:
Name Stmts Miss Cover
-----------------------------------------------
check_patroni/__init__.py 3 0 100%
check_patroni/cli.py 193 18 91%
check_patroni/cluster.py 113 0 100%
check_patroni/convert.py 23 5 78%
check_patroni/node.py 146 1 99%
check_patroni/types.py 50 23 54%
-----------------------------------------------
TOTAL 528 47 91%
and after this commit:
Name Stmts Miss Cover
-----------------------------------------------
check_patroni/__init__.py 3 0 100%
check_patroni/cli.py 193 18 91%
check_patroni/cluster.py 113 0 100%
check_patroni/convert.py 23 5 78%
check_patroni/node.py 146 1 99%
check_patroni/types.py 50 9 82%
-----------------------------------------------
TOTAL 528 33 94%
In actual test functions, we either invoke patroni_api.routes() to
configure which JSON file(s) should be served for each endpoint, or we
define dedicated fixtures (e.g. cluster_config_has_changed()) to
configure this for several test functions or the whole module.
The 'old_replica_state' parametrized fixture is used when needed to
adjust such fixtures, e.g. in cluster_has_replica_ok(), to modify the
JSON content using cluster_api_set_replica_running() (previously in
tests/tools.py, now in tests/__init__.py).
The dependency on pytest-mock is no longer needed.