Files
mdella 037782e1ff fix: accept sites fmt|cbs|pdx|roam (tenancy 0.7.x) and keep the identity read grant alive across tunneller rewrites — 0.1.10
deployd#3 (DD-0620): every kit for a backend registered since 2026-09-08 died at `--site`.
env-dev-08 (2026-09-11..13): two days of "identity is not readable" ticks — ziti-edge-tunnel
re-creates the file with mode 0600, the ACL mask goes to ---, group membership stops helping.
identity-acl.sh + monky-deployd-identity-acl.path re-apply the grant on every directory change.

Doc-Drift: DD-0620 fixed
Closes #3

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ASnneBmT7rfaJLE8NGNw7S
2026-09-13 00:17:35 +00:00

89 lines
3.5 KiB
Python

import pytest
from monky_deployd import config as c
KIT = """\
# written by the install kit
env_id: env-qa-02
site: cbs
transport: sdk
identity: /opt/openziti/etc/identities/monky-host.env-qa-02.json
tenancy:
service: monky.tenancy.deploy
base_url: http://monky.tenancy.deploy:443
bao:
service: openbao
addr: https://bao.cbs.tikali.net:8200 # intercept, not public DNS
ca_bundle: /etc/monky-deployd/openbao-ca.pem
mount: jwt-tenancy
role: see-env
kv_mount: monky
interval_s: 60
laptop_mode: false
volumes_on_absent: keep
"""
def test_yaml_subset_parses_nested_maps_and_types():
d = c.parse_yaml_subset(KIT)
assert d["env_id"] == "env-qa-02"
assert d["tenancy"]["base_url"] == "http://monky.tenancy.deploy:443"
assert d["bao"]["addr"] == "https://bao.cbs.tikali.net:8200"
assert d["interval_s"] == 60 and d["laptop_mode"] is False
def test_yaml_subset_lists_quotes_and_comments():
d = c.parse_yaml_subset("a: \"x # not a comment\"\nb: 'q'\nlist:\n - one\n - 2\nn: ~\n")
assert d == {"a": "x # not a comment", "b": "q", "list": ["one", 2], "n": None}
def test_yaml_subset_refuses_flow_style_and_tabs():
with pytest.raises(c.ConfigError):
c.parse_yaml_subset("a: [1, 2]\n")
with pytest.raises(c.ConfigError):
c.parse_yaml_subset("a:\n\tb: 1\n")
def test_config_defaults_and_derivations():
cfg = c.from_dict(c.parse_yaml_subset(KIT))
assert cfg.tenancy.host == "monky.tenancy.deploy" and cfg.tenancy.port == 443 and cfg.tenancy.scheme == "http"
assert cfg.bao_url == ("https", "bao.cbs.tikali.net", 8200)
assert cfg.deploy_dir == "/var/lib/monky-deployd/env-qa-02"
assert cfg.compose_project == "monky-env-qa-02"
assert str(cfg.token_path) == "/var/lib/monky-deployd/bao.token"
assert cfg.is_prod is False
assert cfg.bao.mount == "jwt-tenancy" and cfg.bao.role == "see-env"
def test_config_prod_detection_and_legacy_ids():
assert c.from_dict({"env_id": "env-prod-01", "site": "pdx"}).is_prod is True
assert c.from_dict({"env_id": "prod-cedar", "site": "cbs"}).is_prod is True
assert c.from_dict({"env_id": "dev-env-2", "site": "cbs"}).is_prod is False
with pytest.raises(c.ConfigError):
c.from_dict({"env_id": "dev-env-1", "site": "cbs"}) # retired 2026-09-04
def test_config_rejects_approle_and_unknown_keys():
with pytest.raises(c.ConfigError, match="approle"):
c.from_dict({"env_id": "env-dev-06", "site": "cbs", "bao": {"approle": {"path": "approle"}}})
with pytest.raises(c.ConfigError, match="unknown key"):
c.from_dict({"env_id": "env-dev-06", "site": "cbs", "tenancy": {"nope": 1}})
with pytest.raises(c.ConfigError, match="transport"):
c.from_dict({"env_id": "env-dev-06", "site": "cbs", "transport": "carrier-pigeon"})
with pytest.raises(c.ConfigError, match="site"):
c.from_dict({"env_id": "env-dev-06", "site": "sfo"})
def test_config_sites_match_tenancy():
"""tenancy 0.7.x registers `fmt | pdx | roam`; `cbs` stays as the deprecated alias every row
registered before 2026-09-08 carries (deployd#3: kits died with 'site must be cbs|pdx')."""
assert set(c.SITES) == {"fmt", "cbs", "pdx", "roam"}
for site in ("fmt", "roam", "pdx", "cbs"):
assert c.from_dict({"env_id": "env-dev-06", "site": site}).site == site
assert c.from_dict({"env_id": "env-dev-06", "site": "FMT"}).site == "fmt"
def test_sdk_identity_defaults_to_host_identity():
cfg = c.from_dict({"env_id": "env-dev-07", "site": "cbs"})
assert cfg.identity == "/opt/openziti/etc/identities/monky-host.env-dev-07.json"