You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ngcpcfg/t/test_fixture_ngcpcfg.py

123 lines
3.8 KiB

#!/usr/bin/env py.test-3
import pytest
from pathlib import Path
from fixtures.programs import copy_tree
from fixtures.programs import read_cfg
def test_read_cfg():
env = {
"CONFIG_POOL": "/etc",
}
cfg = read_cfg("fixtures/ngcpcfg.cfg", env)
cfg["ngcpcfg"]["CONFIG_POOL"] == env["CONFIG_POOL"]
def test_file_out(tmpdir):
"""src is a file from outside NGCPCTL_MAIN"""
filename = "config.yml"
src = Path("fixtures/repos").joinpath(filename)
dst_dir = Path(tmpdir.mkdir("copy_tree"))
assert copy_tree(dst_dir, src, dst_dir) == None
def test_file_in(tmpdir):
"""src is a file from NGCPCTL_MAIN """
filename = "config.yml"
base = Path("fixtures/repos")
src = base.joinpath(filename)
dst_dir = Path(tmpdir.mkdir("copy_tree"))
rel, dst = copy_tree(base, src, dst_dir)
assert dst_dir.joinpath(filename).exists()
assert str(rel) == filename
assert dst == dst_dir.joinpath(filename)
def test_dir_out(tmpdir):
dirname = tmpdir.mkdir("config")
dst_dir = Path(tmpdir.mkdir("copy_tree"))
assert copy_tree(dst_dir, dirname, dst_dir) == None
def test_dir_in(tmpdir):
src = tmpdir.mkdir("config")
dst_dir = Path(tmpdir.mkdir("copy_tree"))
rel, dst = copy_tree(tmpdir, src, dst_dir)
assert dst_dir.joinpath(src).exists()
assert str(rel) == "config"
assert dst == dst_dir.joinpath("config")
def test_empty(ngcpcfg):
env, cfg = ngcpcfg()
ngcpctl_config = Path(env["NGCPCTL_MAIN"]).joinpath("config.yml")
assert ngcpctl_config.exists()
assert str(ngcpctl_config) != str(cfg["NGCPCTL_CONFIG"])
assert Path(cfg["TEMPLATE_POOL_BASE"]) == Path(env["NGCPCTL_MAIN"]).joinpath(
"templates"
)
def test_config(ngcpcfg):
"""test that templates are properly copied and configs defined in env"""
env, cfg = ngcpcfg({"NGCPCFG": "fixtures/ngcpcfg.cfg"})
tt2_path = Path(cfg["TEMPLATE_POOL_BASE"]).joinpath("etc/bad-syntax.txt.tt2")
assert tt2_path.exists()
assert Path(env["NETWORK_CONFIG"]) == Path("fixtures/repos/network.yml").resolve()
def test_template_pool(ngcpcfg):
pool_path = Path("fixtures/apply_templates").resolve()
env, cfg = ngcpcfg(
{
"TEMPLATE_POOL_BASE": pool_path,
}
)
assert env["TEMPLATE_POOL_BASE"] == env["SERVICES_POOL_BASE"]
tt2_path = Path(cfg["TEMPLATE_POOL_BASE"]).joinpath("etc/fake.txt.tt2")
assert tt2_path.exists()
# no files from fixtures/repos/templates is left
tt2_path = Path(cfg["TEMPLATE_POOL_BASE"]).joinpath("etc/bad-syntax.txt.tt2")
assert not tt2_path.exists()
def test_empty_cli(ngcpcfgcli):
out = ngcpcfgcli(
"status",
)
assert out.returncode == 0
ngcpctl_config = Path(out.env["NGCPCTL_MAIN"]).joinpath("config.yml")
assert ngcpctl_config.exists()
assert str(ngcpctl_config) != str(out.cfg["NGCPCTL_CONFIG"])
def test_template_pool_cli(ngcpcfgcli):
pool_path = Path("fixtures/apply_templates").resolve()
out = ngcpcfgcli(
"status",
env={
"TEMPLATE_POOL_BASE": pool_path,
},
)
tt2_path = Path(out.cfg["TEMPLATE_POOL_BASE"]).joinpath("etc/fake.txt.tt2")
assert tt2_path.exists()
def test_config_cli(ngcpcfgcli):
"""test that templates are properly copied and configs defined in env"""
out = ngcpcfgcli(
"status", env={"NGCPCFG": "fixtures/ngcpcfg_carrier_instances.cfg"}
)
# NGCPCFG is always generated with env values and add as ${NGCPCTL_MAIN}/ngcpcfg.cfg
assert (
out.env["NGCPCFG"]
== Path(out.env["NGCPCTL_MAIN"]).joinpath("ngcpcfg.cfg").resolve()
)
tt2_path = Path(out.cfg["TEMPLATE_POOL_BASE"]).joinpath("etc/bad-syntax.txt.tt2")
assert tt2_path.exists()
assert (
Path(out.env["NETWORK_CONFIG"])
== Path("fixtures/repos/network_carrier_instances.yml").resolve()
)