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_ngcpcfg_apply_instance...

113 lines
3.8 KiB

#!/usr/bin/env py.test-3
from pathlib import Path
import pytest
import re
import shutil
from fixtures.fs import check_stdoutput
def test_apply_instances(ngcpcfgcli, tmpdir):
commit_msg = "instance changes"
out = ngcpcfgcli(
"apply",
"--force-all-services",
commit_msg,
env={
"NGCP_HOSTNAME": "lb01a",
"TEMPLATE_POOL_BASE": "fixtures/build_instances",
"TEMPLATE_INSTANCES": "fixtures/repos/instances.yml",
"NGCPCFG": "fixtures/ngcpcfg_carrier_instances.cfg",
},
)
assert out.returncode == 0
assert not re.search(r"Error", out.stdout)
assert not re.search(r"Error", out.stderr)
base_dir = out.env["OUTPUT_DIRECTORY"]
output_file = base_dir.joinpath("ngcpcfg.service")
check_stdoutput("INSTANCE_NAME:\n", str(output_file), tmpdir)
assert re.search(
r"Executing action for .*/etc/kamailio/lb/ngcpcfg.services", out.stdout
)
output_file = base_dir.joinpath("ngcpcfg.serviceA")
check_stdoutput("INSTANCE_NAME:A\n", str(output_file), tmpdir)
assert re.search(
r"Executing action for .*/etc/kamailio/lb/ngcpcfg.services\[A\]", out.stdout
)
output_file = base_dir.joinpath("ngcpcfg.serviceB")
check_stdoutput("INSTANCE_NAME:B\n", str(output_file), tmpdir)
assert re.search(
r"Executing action for .*/etc/kamailio/lb/ngcpcfg.services\[B\]", out.stdout
)
def test_apply_instances_changes(ngcpcfg, ngcpcfgcli, tmpdir, gitrepo):
commit_msg = "instance changes for B"
env, cfg = ngcpcfg(
env={
"NGCP_HOSTNAME": "lb01a",
"TEMPLATE_POOL_BASE": "fixtures/apply_instances",
"TEMPLATE_INSTANCES": "fixtures/repos/instances.yml",
"NGCPCFG": "fixtures/ngcpcfg_carrier_instances.cfg",
}
)
base_dir = env["OUTPUT_DIRECTORY"]
base_git = Path(base_dir).joinpath("etc")
base_path = Path(base_dir).joinpath("etc/kamailio")
base_orig = Path("fixtures/output")
orig = [
("lb_kamailio_cfg_carrier", "lb"),
("lb_kamailio_cfg_instances_A", "lb_A"),
("lb_kamailio_cfg_instances_B", "lb_B"),
]
# put expected output of build_instances
with gitrepo.in_folder(base_git) as git:
# ensure we have valid user information
git.config("--local", "user.email", "pytest@example.com")
git.config("--local", "user.name", "pytest")
for file, dir in orig:
dst_path = base_path.joinpath(dir)
dst_path.mkdir(parents=True, exist_ok=True)
dst_file = dst_path.joinpath("kamailio.cfg")
shutil.copy(base_orig.joinpath(file), dst_file)
git.add(dst_file)
ex, out, err = git.commit("-a", "-m", "old conf done")
print("{}\nstdout:\n{}stderr:{}\n".format("git commit", out, err))
assert ex == 0
out = ngcpcfgcli(
"apply",
commit_msg,
env=env,
)
assert out.returncode == 0
assert re.search(
r"Executing action for .*/etc/kamailio/lb/ngcpcfg.services", out.stdout
)
assert not re.search(r"Error", out.stdout)
assert not re.search(r"Error", out.stderr)
output_file = base_dir.joinpath("ngcpcfg.service")
assert not output_file.exists()
assert not re.search(
r"Executing action for .*/etc/kamailio/lb/ngcpcfg.services$", out.stdout
)
output_file = base_dir.joinpath("ngcpcfg.serviceA")
assert not output_file.exists()
assert not re.search(
r"Executing action for .*/etc/kamailio/lb/ngcpcfg.services\[A\]$", out.stdout
)
output_file = base_dir.joinpath("ngcpcfg.serviceB")
check_stdoutput("INSTANCE_NAME:B\n", str(output_file), tmpdir)
assert re.search(
r"Executing action for .*/etc/kamailio/lb/ngcpcfg.services\[B\]", out.stdout
)