#!/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() )