check-patroni/tests/test_node_tl_has_changed.py
benoit 908669f073 Add a --save option when state files are used
The checks `cluster_config_has_changed` and `node_tl_has_changed` use a
state file to store the previous value of the config hash and the
timeline.

Previously the check would fail if something changed, but the new value
would be saved directly. This behavious has changed. The new value
is saved only if `--save` is passed to the check.

The mimics the way [check_pgactivity] manages this kind of checks.

[check_pgactivity]: https://github.com/OPMDG/check_pgactivity
2023-03-02 17:32:18 +01:00

136 lines
3.3 KiB
Python

from click.testing import CliRunner
from pytest_mock import MockerFixture
from check_patroni.cli import main
import nagiosplugin
from tools import my_mock, here
def test_node_tl_has_changed_params(mocker: MockerFixture) -> None:
runner = CliRunner()
my_mock(mocker, "node_tl_has_changed", 200)
result = runner.invoke(
main,
[
"-e",
"https://10.20.199.3:8008",
"node_tl_has_changed",
"--timeline",
"58",
"--state-file",
str(here / "fake_file_name.state_file"),
],
)
assert result.exit_code == 3
result = runner.invoke(
main, ["-e", "https://10.20.199.3:8008", "node_tl_has_changed"]
)
assert result.exit_code == 3
def test_node_tl_has_changed_ok_with_timeline(mocker: MockerFixture) -> None:
runner = CliRunner()
my_mock(mocker, "node_tl_has_changed", 200)
result = runner.invoke(
main,
[
"-e",
"https://10.20.199.3:8008",
"node_tl_has_changed",
"--timeline",
"58",
],
)
assert result.exit_code == 0
def test_node_tl_has_changed_ok_with_state_file(mocker: MockerFixture) -> None:
runner = CliRunner()
with open(here / "node_tl_has_changed.state_file", "w") as f:
f.write('{"timeline": 58}')
my_mock(mocker, "node_tl_has_changed", 200)
result = runner.invoke(
main,
[
"-e",
"https://10.20.199.3:8008",
"node_tl_has_changed",
"--state-file",
str(here / "node_tl_has_changed.state_file"),
],
)
assert result.exit_code == 0
def test_node_tl_has_changed_ko_with_timeline(mocker: MockerFixture) -> None:
runner = CliRunner()
my_mock(mocker, "node_tl_has_changed", 200)
result = runner.invoke(
main,
[
"-e",
"https://10.20.199.3:8008",
"node_tl_has_changed",
"--timeline",
"700",
],
)
assert result.exit_code == 2
def test_node_tl_has_changed_ko_with_state_file_and_save(mocker: MockerFixture) -> None:
runner = CliRunner()
with open(here / "node_tl_has_changed.state_file", "w") as f:
f.write('{"timeline": 700}')
my_mock(mocker, "node_tl_has_changed", 200)
# test without saving the new tl
result = runner.invoke(
main,
[
"-e",
"https://10.20.199.3:8008",
"node_tl_has_changed",
"--state-file",
str(here / "node_tl_has_changed.state_file"),
],
)
assert result.exit_code == 2
cookie = nagiosplugin.Cookie(here / "node_tl_has_changed.state_file")
cookie.open()
new_tl = cookie.get("timeline")
cookie.close()
assert new_tl == 700
# test when we save the hash
result = runner.invoke(
main,
[
"-e",
"https://10.20.199.3:8008",
"node_tl_has_changed",
"--state-file",
str(here / "node_tl_has_changed.state_file"),
"--save",
],
)
assert result.exit_code == 2
cookie = nagiosplugin.Cookie(here / "node_tl_has_changed.state_file")
cookie.open()
new_tl = cookie.get("timeline")
cookie.close()
assert new_tl == 58