def run_test(name, template_path, json_path, match_path): template_path = os.path.join(TEMPLATE_PATH, template_path) json_path = os.path.join(DATA_PATH, json_path) cfggen = os.path.abspath("../sonic-config-engine/sonic-cfggen") command = [ '/usr/bin/python2.7', cfggen, "-T", TEMPLATE_PATH, "-t", template_path, "-y", json_path ] p = subprocess.Popen(command, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env={"PYTHONPATH": "."}) stdout, stderr = p.communicate() assert p.returncode == 0, "sonic-cfggen for %s test returned %d code. stderr='%s'" % ( name, p.returncode, stderr) raw_generated_result = stdout.decode("ascii") assert "None" not in raw_generated_result, "Test %s" % name canonical_generated_result = ConfigMgr.to_canonical(raw_generated_result) match_path = os.path.join(DATA_PATH, match_path) # only for development write_result(match_path, raw_generated_result) with open(match_path) as result_fp: raw_saved_result = result_fp.read() canonical_saved_result = ConfigMgr.to_canonical(raw_saved_result) assert canonical_saved_result == canonical_generated_result, "Test %s" % name
def test_reset(): frr = MagicMock() c = ConfigMgr(frr) c.reset() assert c.frr == frr assert c.current_config is None assert c.current_config_raw is None assert c.changes == "" assert c.peer_groups_to_restart == []
def test_restart_get_text(): frr = MagicMock() frr.get_config = MagicMock(return_value="""! text1 ! comment text2 text3 ! comment text4 """) c = ConfigMgr(frr) c.update() assert c.get_text() == [ ' text1', ' text2', ' text3', ' text4', ' ', ' ' ]
def run_tests(test_name, template_fname, tests): tf = TemplateFabric(TEMPLATE_PATH) template = tf.from_file(template_fname) for case_name, param_fname, result_fname in tests: params = load_json(param_fname) raw_generated_result = str(template.render(params)) assert "None" not in raw_generated_result, "Test %s.%s" % (test_name, case_name) # this is used only for initial generation write_result(result_fname, raw_generated_result) canonical_generated_result = ConfigMgr.to_canonical( raw_generated_result) with open(result_fname) as result_fp: raw_saved_result = result_fp.read() canonical_saved_result = ConfigMgr.to_canonical(raw_saved_result) assert canonical_saved_result == canonical_generated_result, "Test %s.%s" % ( test_name, case_name)
def test_update(): frr = MagicMock() frr.get_config = MagicMock(return_value="""! text1 ! comment text2 text3 ! comment text4 """) c = ConfigMgr(frr) c.update() assert c.current_config_raw == [ ' text1', ' text2', ' text3', ' text4', ' ', ' ' ] assert c.current_config == [['text1'], ['text2'], ['text3'], ['text4']]
def commit_changes_common(write_error, restart_error, result): frr = MagicMock() frr.write = MagicMock(return_value=write_error) frr.restart_peer_groups = MagicMock(return_value=restart_error) c = ConfigMgr(frr) c.reset = MagicMock() c.push_list(["change1", "change2"]) c.restart_peer_groups(["pg1", "pg2"]) res = c.commit() assert res == result assert c.reset.called frr.write.assert_called_with('change1\nchange2\n') frr.restart_peer_groups.assert_called_with(["pg1", "pg2"])
def test_restart_peer_groups(): frr = MagicMock() c = ConfigMgr(frr) c.restart_peer_groups(["pg_1", "pg_2"]) assert c.peer_groups_to_restart == ["pg_1", "pg_2"] c.restart_peer_groups(["pg_3", "pg_4"]) assert c.peer_groups_to_restart == ["pg_1", "pg_2", "pg_3", "pg_4"]
def test_push(): frr = MagicMock() c = ConfigMgr(frr) c.push("update1\nupdate2\n") assert c.changes == "update1\nupdate2\n\n" c.push("update3\nupdate4\n") assert c.changes == "update1\nupdate2\n\nupdate3\nupdate4\n\n"
def test_push_list(): frr = MagicMock() c = ConfigMgr(frr) c.push_list(["change1", "change2"]) assert c.changes == "change1\nchange2\n" c.push_list(["change3", "change4"]) assert c.changes == "change1\nchange2\nchange3\nchange4\n"
def test_from_canonical(): canonical = [['router bgp 12345'], ['router bgp 12345', 'bgp router-id 1020'], ['router bgp 12345', 'address-family ipv4'], [ 'router bgp 12345', 'address-family ipv4', 'neighbor PEER_V4 peer-group' ], [ 'router bgp 12345', 'address-family ipv4', 'neighbor PEER_V4 route-map A10 in' ], ['router bgp 12345', 'exit-address-family'], ['router bgp 12345', 'address-family ipv6'], [ 'router bgp 12345', 'address-family ipv6', 'neighbor PEER_V6 peer-group' ], [ 'router bgp 12345', 'address-family ipv6', 'neighbor PEER_V6 route-map A20 in' ], ['router bgp 12345', 'exit-address-family'], ['route-map A10 permit 10'], ['route-map A20 permit 10']] expected = 'router bgp 12345\n' \ ' bgp router-id 1020\n' \ ' address-family ipv4\n' \ ' neighbor PEER_V4 peer-group\n' \ ' neighbor PEER_V4 route-map A10 in\n' \ ' exit-address-family\n' \ ' address-family ipv6\n' \ ' neighbor PEER_V6 peer-group\n' \ ' neighbor PEER_V6 route-map A20 in\n' \ ' exit-address-family\n' \ 'route-map A10 permit 10\n' \ 'route-map A20 permit 10\n' frr = MagicMock() c = ConfigMgr(frr) raw = c.from_canonical(canonical) assert raw == expected
def test_commit_empty_changes(): frr = MagicMock() c = ConfigMgr(frr) res = c.commit() assert res assert not frr.write.called
def test_push_and_push_list(): frr = MagicMock() c = ConfigMgr(frr) c.push("update1\nupdate2\n") c.push_list(["change1", "change2"]) assert c.changes == "update1\nupdate2\n\nchange1\nchange2\n"
def test_count_spaces(): frr = MagicMock() c = ConfigMgr(frr) assert c.count_spaces(" !") == 2 assert c.count_spaces("!") == 0 assert c.count_spaces("") == 0
def to_canonical_common(raw_text, expected_canonical): frr = MagicMock() c = ConfigMgr(frr) assert c.to_canonical(raw_text) == expected_canonical