129 lines
3.5 KiB
Python
129 lines
3.5 KiB
Python
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
from sshctl.core.models import HostBlock, SshConfig, ZonePath
|
|
|
|
|
|
def test_host_block_defaults() -> None:
|
|
host = HostBlock(alias="test")
|
|
assert host.alias == "test"
|
|
assert host.options == {}
|
|
assert host.hostname is None
|
|
assert host.user is None
|
|
assert host.port is None
|
|
assert host.proxy_jump is None
|
|
|
|
|
|
def test_host_block_set_get() -> None:
|
|
host = HostBlock(alias="test")
|
|
host.set("HostName", "10.0.0.1")
|
|
host.set("User", "admin")
|
|
assert host.hostname == "10.0.0.1"
|
|
assert host.user == "admin"
|
|
|
|
|
|
def test_host_block_port() -> None:
|
|
host = HostBlock(alias="test")
|
|
host.set("Port", "2222")
|
|
assert host.port == 2222
|
|
|
|
|
|
def test_host_block_port_none() -> None:
|
|
host = HostBlock(alias="test")
|
|
assert host.port is None
|
|
|
|
|
|
def test_host_block_default_get() -> None:
|
|
host = HostBlock(alias="test")
|
|
assert host.get("Nonexistent") is None
|
|
assert host.get("Nonexistent", "default") == "default"
|
|
|
|
|
|
def test_ssh_config_find() -> None:
|
|
config = SshConfig()
|
|
config.blocks.append(HostBlock(alias="server1"))
|
|
config.blocks.append(HostBlock(alias="server2"))
|
|
|
|
found = config.find("server1")
|
|
assert found is not None
|
|
assert found.alias == "server1"
|
|
assert config.find("nonexistent") is None
|
|
|
|
|
|
def test_ssh_config_aliases() -> None:
|
|
config = SshConfig()
|
|
config.blocks.append(HostBlock(alias="*"))
|
|
config.blocks.append(HostBlock(alias="server1"))
|
|
config.blocks.append(HostBlock(alias="server2"))
|
|
|
|
assert config.aliases == ["server1", "server2"]
|
|
|
|
|
|
def test_ssh_config_aliases_exclude_glob_patterns() -> None:
|
|
config = SshConfig()
|
|
config.blocks.append(HostBlock(alias="web01"))
|
|
config.blocks.append(HostBlock(alias="192.168.*"))
|
|
config.blocks.append(HostBlock(alias="10.*"))
|
|
config.blocks.append(HostBlock(alias="203.0.113.* 198.51.100.*"))
|
|
config.blocks.append(HostBlock(alias="web[0-9]"))
|
|
config.blocks.append(HostBlock(alias="db?"))
|
|
config.blocks.append(HostBlock(alias="*"))
|
|
|
|
assert config.aliases == ["web01"]
|
|
|
|
|
|
def test_ssh_config_find_all() -> None:
|
|
config = SshConfig()
|
|
config.blocks.append(HostBlock(alias="web01"))
|
|
config.blocks.append(HostBlock(alias="web02"))
|
|
config.blocks.append(HostBlock(alias="db01"))
|
|
|
|
result = config.find_all("web*")
|
|
assert len(result) == 2
|
|
assert result[0].alias == "web01"
|
|
assert result[1].alias == "web02"
|
|
|
|
|
|
def test_zone_path_internal() -> None:
|
|
zp = ZonePath(
|
|
universe="internal",
|
|
sector="AZ",
|
|
cluster="cluster1",
|
|
zone="8xx-serverfarm",
|
|
vlan="82-k8s",
|
|
)
|
|
expected = Path("conf.d/internal/AZ/cluster1/8xx-serverfarm/82-k8s")
|
|
assert zp.to_rel_path() == expected
|
|
|
|
|
|
def test_zone_path_external() -> None:
|
|
zp = ZonePath(universe="external")
|
|
assert zp.to_rel_path() == Path("conf.d/external")
|
|
|
|
|
|
def test_zone_path_from_rel_path() -> None:
|
|
zp = ZonePath.from_rel_path(Path("conf.d/internal/AZ/cluster1"))
|
|
assert zp.universe == "internal"
|
|
assert zp.sector == "AZ"
|
|
assert zp.cluster == "cluster1"
|
|
assert zp.zone is None
|
|
|
|
|
|
def test_zone_path_invalid() -> None:
|
|
raised = False
|
|
try:
|
|
ZonePath.from_rel_path(Path("other/file"))
|
|
except ValueError:
|
|
raised = True
|
|
assert raised, "Expected ValueError"
|
|
|
|
|
|
def test_zone_path_unknown_universe() -> None:
|
|
raised = False
|
|
try:
|
|
ZonePath.from_rel_path(Path("conf.d/unknown"))
|
|
except ValueError:
|
|
raised = True
|
|
assert raised, "Expected ValueError"
|