summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Hopps <chopps@labn.net>2021-08-01 10:36:09 +0000
committerChristian Hopps <chopps@labn.net>2021-09-04 09:04:47 -0400
commit04464749b666e4e04ce35c3a078c6f25dca1079e (patch)
tree0a5f6948706d6570a99ef54839f5beca324f7b4b
parent1973df1d3970d5e24fe50ec17acacfd91c7c1be2 (diff)
tests: keep revisions of configs
Signed-off-by: Christian Hopps <chopps@labn.net>
-rw-r--r--tests/topotests/lib/common_config.py32
-rw-r--r--tests/topotests/lib/topogen.py1
2 files changed, 23 insertions, 10 deletions
diff --git a/tests/topotests/lib/common_config.py b/tests/topotests/lib/common_config.py
index fc51b11141..a4f2ac8050 100644
--- a/tests/topotests/lib/common_config.py
+++ b/tests/topotests/lib/common_config.py
@@ -488,6 +488,9 @@ def reset_config_on_routers(tgen, routerName=None):
logger.debug("Entering API: reset_config_on_routers")
+ tgen.cfg_gen += 1
+ gen = tgen.cfg_gen
+
# Trim the router list if needed
router_list = tgen.routers()
if routerName:
@@ -496,9 +499,10 @@ def reset_config_on_routers(tgen, routerName=None):
return True
router_list = { routerName: router_list[routerName] }
- delta_fmt = tgen.logdir + "/{}/delta.conf"
- init_cfg_fmt = tgen.logdir + "/{}/frr_json_initial.conf"
- run_cfg_fmt = tgen.logdir + "/{}/frr.sav"
+ delta_fmt = tgen.logdir + "/{}/delta-{}.conf"
+ # FRRCFG_BKUP_FILE
+ target_cfg_fmt = tgen.logdir + "/{}/frr_json_initial.conf"
+ run_cfg_fmt = tgen.logdir + "/{}/frr-{}.sav"
#
# Get all running configs in parallel
@@ -509,7 +513,7 @@ def reset_config_on_routers(tgen, routerName=None):
procs[rname] = router_list[rname].popen(
["/usr/bin/env", "vtysh", "-c", "show running-config no-header"],
stdin=None,
- stdout=open(run_cfg_fmt.format(rname), "w"),
+ stdout=open(run_cfg_fmt.format(rname, gen), "w"),
stderr=subprocess.PIPE,
)
for rname, p in procs.items():
@@ -523,16 +527,16 @@ def reset_config_on_routers(tgen, routerName=None):
#
procs = {}
for rname in router_list:
- logger.info("Generating delta for router %s to new configuration", rname)
+ logger.info("Generating delta for router %s to new configuration (gen %d)", rname, gen)
procs[rname] = tgen.net.popen(
[ "/usr/lib/frr/frr-reload.py",
"--test-reset",
"--input",
- run_cfg_fmt.format(rname),
+ run_cfg_fmt.format(rname, gen),
"--test",
- init_cfg_fmt.format(rname) ],
+ target_cfg_fmt.format(rname) ],
stdin=None,
- stdout=open(delta_fmt.format(rname), "w"),
+ stdout=open(delta_fmt.format(rname, gen), "w"),
stderr=subprocess.PIPE,
)
for rname, p in procs.items():
@@ -549,14 +553,14 @@ def reset_config_on_routers(tgen, routerName=None):
logger.info("Applying delta config on router %s", rname)
procs[rname] = router_list[rname].popen(
- ["/usr/bin/env", "vtysh", "-f", delta_fmt.format(rname)],
+ ["/usr/bin/env", "vtysh", "-f", delta_fmt.format(rname, gen)],
stdin=None,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
)
for rname, p in procs.items():
output, _ = p.communicate()
- vtysh_command = "vtysh -f {}".format(delta_fmt.format(rname))
+ vtysh_command = "vtysh -f {}".format(delta_fmt.format(rname, gen))
if not p.returncode:
router_list[rname].logger.info(
'\nvtysh config apply => "{}"\nvtysh output <= "{}"'.format(vtysh_command, output)
@@ -615,6 +619,9 @@ def load_config_to_routers(tgen, routers, save_bkup=False):
logger.debug("Entering API: load_config_to_routers")
+ tgen.cfg_gen += 1
+ gen = tgen.cfg_gen
+
base_router_list = tgen.routers()
router_list = {}
for router in routers:
@@ -623,6 +630,7 @@ def load_config_to_routers(tgen, routers, save_bkup=False):
router_list[router] = base_router_list[router]
frr_cfg_file_fmt = tgen.logdir + "/{}/" + FRRCFG_FILE
+ frr_cfg_save_file_fmt = tgen.logdir + "/{}/{}-" + FRRCFG_FILE
frr_cfg_bkup_fmt = tgen.logdir + "/{}/" + FRRCFG_BKUP_FILE
procs = {}
@@ -630,6 +638,7 @@ def load_config_to_routers(tgen, routers, save_bkup=False):
router = router_list[rname]
try:
frr_cfg_file = frr_cfg_file_fmt.format(rname)
+ frr_cfg_save_file = frr_cfg_save_file_fmt.format(rname, gen)
frr_cfg_bkup = frr_cfg_bkup_fmt.format(rname)
with open(frr_cfg_file, "r+") as cfg:
data = cfg.read()
@@ -637,6 +646,9 @@ def load_config_to_routers(tgen, routers, save_bkup=False):
"Applying following configuration on router %s (gen: %d):\n%s",
rname, gen, data
)
+ # Always save a copy of what we just did
+ with open(frr_cfg_save_file, "w") as bkup:
+ bkup.write(data)
if save_bkup:
with open(frr_cfg_bkup, "w") as bkup:
bkup.write(data)
diff --git a/tests/topotests/lib/topogen.py b/tests/topotests/lib/topogen.py
index 5c2ff1bf85..495c286b13 100644
--- a/tests/topotests/lib/topogen.py
+++ b/tests/topotests/lib/topogen.py
@@ -172,6 +172,7 @@ class Topogen(object):
self.exabgp_cmd = None
self._init_topo(topodef)
+
logger.info("loading topology: {}".format(self.modname))
# @staticmethod