53 行
1.8 KiB
Python
53 行
1.8 KiB
Python
import json
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
import yaml
|
|
from jinja2 import Environment, StrictUndefined
|
|
|
|
|
|
class ReadinessTest(unittest.TestCase):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
tasks = yaml.safe_load(
|
|
(Path(__file__).parents[1] / "roles/k3s/tasks/main.yml").read_text()
|
|
)
|
|
env = Environment(undefined=StrictUndefined)
|
|
env.filters["from_json"] = json.loads
|
|
cls.conditions = {
|
|
task["register"]: env.compile_expression(task["until"])
|
|
for task in tasks
|
|
if "until" in task
|
|
}
|
|
|
|
def test_node_must_be_ready_at_the_requested_version(self):
|
|
condition = self.conditions["k3s_node_status"]
|
|
for version, ready, expected in [
|
|
("v1.35.9+k3s1", "True", True),
|
|
("v1.35.6+k3s1", "True", False),
|
|
("v1.35.9+k3s1", "False", False),
|
|
]:
|
|
with self.subTest(version=version, ready=ready):
|
|
status = {"status": {
|
|
"nodeInfo": {"kubeletVersion": version},
|
|
"conditions": [{"type": "Ready", "status": ready}],
|
|
}}
|
|
self.assertEqual(condition(
|
|
k3s_node_status={"rc": 0, "stdout": json.dumps(status)},
|
|
k3s_version="v1.35.9+k3s1",
|
|
), expected)
|
|
self.assertFalse(condition(
|
|
k3s_node_status={"rc": 1, "stdout": ""},
|
|
k3s_version="v1.35.9+k3s1",
|
|
))
|
|
|
|
def test_api_requires_a_successful_readyz_response(self):
|
|
condition = self.conditions["k3s_api_ready"]
|
|
for rc, stdout, expected in [(0, "ok", True), (1, "ok", False), (0, "", False)]:
|
|
with self.subTest(rc=rc, stdout=stdout):
|
|
self.assertEqual(condition(k3s_api_ready={"rc": rc, "stdout": stdout}), expected)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|