Beispiel #1
0
def test_class4_ex3c():
    base_path = "../class4/exercises/exercise3/"
    cmd_list = ["python", "exercise3c.py"]

    exercise_hosts = [
        "arista1", "arista2", "arista3", "arista4", "nxos1", "nxos2"
    ]

    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    assert return_code == 0
    assert std_out.count(
        "Vlan 123 with name ntp_vlan exists, nothing to do!") == 6
    assert std_err == ""

    remove_vlan()

    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    assert return_code == 0
    for host in exercise_hosts:
        if host.startswith("arista"):
            assert f"{host}(config)#vlan 123" in std_out
        else:
            pattern = rf"{host}.*config.*vlan 123"
            assert re.search(pattern, std_out)
    assert std_err == ""
def test_runner_collateral(test_case_dir, inventory_check):

    # Needed for ansible-vault test
    os.environ["VAULT_PASSWORD"] = "******"

    path_obj = Path(test_case_dir)
    script = path_obj.name
    script_dir = path_obj.parents[0]

    # Inventory Checks
    if inventory_check is None:
        pass
    else:
        nornir_inventory = gen_inventory_dict(script_dir)
        nr = InitNornir(inventory=nornir_inventory, logging=NORNIR_LOGGING)
        assert isinstance(nr, nornir.core.Nornir)
        assert isinstance(nr.inventory.hosts, nornir.core.inventory.Hosts)
        if inventory_check == "all":
            assert nr.inventory.hosts
            assert nr.inventory.groups
            assert nr.inventory.defaults
        elif inventory_check == "hosts":
            assert nr.inventory.hosts
        elif inventory_check == "hosts-groups":
            assert nr.inventory.hosts
            assert nr.inventory.groups

    # Script Check
    cmd_list = ["python", script]
    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=script_dir)
    assert return_code == 0
    assert std_err == ""
Beispiel #3
0
def test_class5_ex1():

    base_path = "../class5/exercises/exercise1"
    cmd_list = ["ansible-playbook", "exercise1.yml", "-f 12"]
    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    std_err = remove_ansible_warnings(std_err)

    assert "TASK [IOS global config]" in std_out
    assert "TASK [IOS-XE global config]" in std_out
    assert "TASK [EOS global config]" in std_out
    assert "TASK [NX-OS global config]" in std_out
    assert "TASK [Juniper global config]" in std_out
    for device in [
            "cisco1",
            "cisco2",
            "cisco5",
            "cisco6",
            "arista5",
            "arista6",
            "arista7",
            "arista8",
            "nxos1",
            "nxos2",
            "vmx1",
            "vmx2",
    ]:
        assert std_out.count(device) == 7

    assert std_err == ""
    assert return_code == 0
Beispiel #4
0
def test_class5_ex2():
    base_path = "../class5/exercises/exercise2"
    cmd_list = ["ansible-playbook", "exercise2.yml", "-f 12"]
    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    std_err = remove_ansible_warnings(std_err)
    assert std_err == ""
    assert return_code == 0

    # Should be idempotent as would have been configured in exercise1.
    for device in [
            "cisco1",
            "cisco2",
            "cisco5",
            "cisco6",
            "arista5",
            "arista6",
            "arista7",
            "arista8",
            "nxos1",
            "nxos2",
            "vmx1",
            "vmx2",
    ]:
        pattern = rf"^{device}.*changed=0 .*$"
        assert re.search(pattern, std_out, flags=re.M)
def test_class1_ex3():
    base_path = "../class1/exercises/exercise3/"
    cmd_list = ["python", "exercise3.py"]

    nornir_inventory = gen_inventory_dict(base_path)
    nr = InitNornir(inventory=nornir_inventory, logging=NORNIR_LOGGING)
    assert len(nr.inventory.hosts) == 2
    for host_name, host_obj in nr.inventory.hosts.items():
        assert host_obj.hostname is not None
        assert len(host_obj.groups) == 1
        assert host_obj.groups[0].name == "ios"
        assert host_obj.platform == "cisco_ios"
        assert host_obj.username == "pyclass"
        assert host_obj.password == "cisco123"
        assert host_obj.port == 22

    my_group = nr.inventory.groups["ios"]
    assert my_group.hostname is None
    assert my_group.platform == "cisco_ios"
    assert my_group.port == 22

    defaults = nr.inventory.defaults
    assert defaults.username == "pyclass"
    assert defaults.password == "cisco123"

    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    assert return_code == 0
    assert "cisco3" in std_out
    assert "cisco_ios" in std_out
    assert std_err == ""
Beispiel #6
0
def test_netmiko_ex1():
    base_path = "."
    cmd_list = ["python", "netmiko_ex1.py"]

    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)

    # import ipdb; ipdb.set_trace()

    assert return_code == 0
    assert std_err == ""
    assert "sros1" in std_out
    assert "vmx1" in std_out
    assert "TiMOS-B-20.5.R2" in std_out
    assert "18.4R1.8" in std_out

    # Checks SR-OS
    assert "A:sros1#" in std_out
    assert re.search(r"TiMOS-B-20.5.R2.*Nokia", std_out)

    # Checks Juniper
    assert "pyclass@vmx1>" in std_out
    assert re.search(r"Hostname:.*vmx1", std_out)
    assert re.search(r"Model:.vmx", std_out)
    assert re.search(r"Junos:.18.4R1.8", std_out)

    # Check for file existence
    files = ["A:sros1.txt", "*****@*****.**"]
    for a_file in files:
        assert os.path.isfile(a_file)
Beispiel #7
0
def test_class4_ex4():
    base_path = "../class4/exercises/exercise4"
    cmd_list = ["ansible-playbook", "exercise4.yml"]
    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    assert std_err == ""
    assert return_code == 0
def test_class2_ex1():
    base_path = "../class2/exercises/"
    cmd_list = ["python", "exercise1.py"]
    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    assert return_code == 0
    assert std_err == ""
    assert std_out.count("10.220.88.1") == 4
Beispiel #9
0
def test_bonus2_ex5():
    base_path = "../bonus2/exercises/exercise5"
    cmd_list = ["ansible-playbook", "exercise5.yml"]
    std_out, std_err, return_code = subprocess_runner(cmd_list, exercise_dir=base_path)
    std_err = remove_ansible_warnings(std_err)
    assert std_err == ""
    assert return_code == 0
    assert re.search(r"cisco1.*ok=1.*changed=1.*failed=0 ", std_out)
Beispiel #10
0
def test_class8_ex7a():
    """Should fail when no vault password is provided."""
    base_path = "../class8/exercises/exercise7"
    cmd_list = ["ansible-playbook", "exercise7.yml"]
    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    std_err = remove_ansible_warnings(std_err)
    assert return_code != 0
Beispiel #11
0
def test_class8_ex6_fixed(playbook):
    base_path = "../class8/exercises/exercise6/solutions"
    cmd_list = ["ansible-playbook", playbook]
    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    std_err = remove_ansible_warnings(std_err)
    assert std_err == ""
    assert return_code == 0
Beispiel #12
0
def test_class8_ex6_errors(playbook):
    """Each of these tests should have errors on std_err."""
    base_path = "../class8/exercises/exercise6"
    cmd_list = ["ansible-playbook", playbook]
    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    std_err = remove_ansible_warnings(std_err)
    assert return_code != 0
def test_class1_ex3():
    base_path = "../class1/exercises/"
    cmd_list = ["python", "exercise3.py"]
    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    assert return_code == 0
    assert std_err == ""
    assert "nxos1#" in std_out
Beispiel #14
0
def test_class4_ex4b():
    base_path = "../class4/exercises/exercise4/"
    cmd_list = ["python", "exercise4b.py"]

    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    assert return_code == 0
    assert std_out.count("False") == 18
    assert std_err == ""

    remove_vlan()

    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    assert return_code == 0
    assert std_out.count("name ntp_vlan") == 6
    assert std_err == ""
Beispiel #15
0
def test_class1_ex1b():
    base_path = "../class1/exercises/exercise1"
    cmd_list = ["python", "print_yaml.py", "exercise1b.yml"]

    std_out, std_err, return_code = subprocess_runner(cmd_list, exercise_dir=base_path)
    assert "['rtr1', 701, 3356, '10.1.1.100', '192.168.200.17']" in std_out
    assert std_err == ""
    assert return_code == 0
Beispiel #16
0
def test_class6_ex2a_2b(exercise):
    base_path = "../class6/exercises/exercise2"
    cmd_list = ["ansible-playbook", exercise]
    std_out, std_err, return_code = subprocess_runner(cmd_list, exercise_dir=base_path)
    std_err = remove_ansible_warnings(std_err)
    assert std_err == ""
    assert return_code == 0
    assert "localhost                  : ok=2" in std_out
Beispiel #17
0
def test_class7_ex1():
    base_path = "../class7/exercises/"
    cmd_list = ["python", "exercise1.py"]
    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    assert return_code == 0
    assert std_err == ""
    assert "Address         Age       MAC Address     Interface       Flags" in std_out
Beispiel #18
0
def test_class6_ex3():
    """Should be idempotent on the second execution."""
    base_path = "../class6/exercises/exercise3"
    cmd_list = ["ansible-playbook", "exercise3.yml"]
    std_out, std_err, return_code = subprocess_runner(cmd_list, exercise_dir=base_path)
    std_err = remove_ansible_warnings(std_err)
    assert std_err == ""
    assert return_code == 0
    # Execute script again
    std_out, std_err, return_code = subprocess_runner(cmd_list, exercise_dir=base_path)
    std_err = remove_ansible_warnings(std_err)
    assert std_err == ""
    assert return_code == 0
    assert re.search(r"^cisco1\s+:\s+ok=2.*skipped=1.*$", std_out, flags=re.M)
    assert re.search(r"^cisco2\s+:\s+ok=2.*skipped=1.*$", std_out, flags=re.M)
    assert re.search(r"^cisco5\s+:\s+ok=2.*skipped=1.*$", std_out, flags=re.M)
    assert re.search(r"^cisco6\s+:\s+ok=2.*skipped=1.*$", std_out, flags=re.M)
def test_class5_ex2():
    base_path = "../class5/exercises/"
    cmd_list = ["python", "exercise2.py"]
    std_out, std_err, return_code = subprocess_runner(cmd_list, exercise_dir=base_path)
    assert return_code == 0
    assert std_err == ""
    assert std_out.count("vlan 501") == 2
    assert std_out.count("vlan 502") == 2
def test_class5_ex1():
    base_path = "../class5/exercises/"
    cmd_list = ["python", "exercise1.py"]
    std_out, std_err, return_code = subprocess_runner(cmd_list, exercise_dir=base_path)
    assert return_code == 0
    assert std_err == ""
    assert std_out.count("ip domain-lookup") == 2
    assert std_out.count("ip domain-name bogus.com") == 2
Beispiel #21
0
def test_runner_collateral(test_case):
    path_obj = Path(test_case)
    script = path_obj.name
    script_dir = path_obj.parents[0]
    cmd_list = ["ansible-playbook", script]
    std_out, std_err, return_code = subprocess_runner(cmd_list, script_dir)
    std_err = remove_ansible_warnings(std_err)
    assert return_code == 0
    assert std_err == ""
Beispiel #22
0
def test_class6_ex6():
    base_path = "../class6/exercises/exercise6"
    cmd_list = ["ansible-playbook", "exercise6.yml"]
    std_out, std_err, return_code = subprocess_runner(cmd_list, exercise_dir=base_path)
    std_err = remove_ansible_warnings(std_err)
    assert std_err == ""
    assert return_code == 0
    assert re.search(r"^cisco5\s+:\s+ok=1 ", std_out, flags=re.M)
    assert re.search(r"^cisco6\s+:\s+ok=1 ", std_out, flags=re.M)
Beispiel #23
0
def test_class12_ex1():
    base_path = "../class12/exercises/"
    cmd_list = ["python", "exercise1.py"]
    std_out, std_err, return_code = subprocess_runner(cmd_list, exercise_dir=base_path)
    assert return_code == 1
    assert "OSError" in std_err
    assert "Fast CLI state" in std_out
    assert "Global Delay Factor state" in std_out
    assert "Command execution time" in std_out
Beispiel #24
0
def test_class12_ex2():
    base_path = "../class12/exercises/"
    cmd_list = ["python", "exercise2.py"]
    std_out, std_err, return_code = subprocess_runner(cmd_list, exercise_dir=base_path)
    assert return_code == 0
    assert std_err == ""
    assert std_out.count("cisco4") == 3
    assert re.search(r"cisco4.*\(config\)#", std_out)
    assert "cisco4-testing#" in std_out
def test_class2_ex2():
    base_path = "../class2/exercises/"
    cmd_list = ["python", "exercise2.py"]
    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    assert return_code == 0
    assert std_err == ""
    assert "cisco3>" in std_out
    assert "cisco3#" in std_out
Beispiel #26
0
def test_class5_ex3a():
    base_path = "../class5/exercises/exercise3"
    cmd_list = ["ansible-playbook", "exercise3a.yml"]
    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    std_err = remove_ansible_warnings(std_err)
    assert std_out.count("permit") == 20
    assert std_err == ""
    assert return_code == 0
def test_class9_ex1():
    base_path = "../class9/exercises/"
    cmd_list = ["python", "exercise1.py"]
    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    assert return_code == 0
    assert std_err == ""
    assert std_out.count("Name servers are correct") == 2
    assert std_out.count("Domain name is correct") == 2
def test_class3_ex1():
    base_path = "../class3/exercises/"
    cmd_list = ["python", "exercise1.py"]
    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    assert return_code == 0
    assert std_err == ""
    assert "VLAN ID: 7" in std_out
    assert "VLAN0007" in std_out
def test_class3_ex2():
    base_path = "../class3/exercises/"
    cmd_list = ["python", "exercise2.py"]
    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    assert return_code == 0
    assert std_err == ""
    assert std_out.count("nxos2") == 4
    assert std_out.count("10.0.2.16") == 4
def test_class10_ex3():
    base_path = "../class10/exercises/"
    cmd_list = ["python", "exercise3.py"]
    std_out, std_err, return_code = subprocess_runner(cmd_list,
                                                      exercise_dir=base_path)
    assert return_code == 0
    assert std_err == ""
    assert std_out.count("cisco3") == 3
    assert "Trying 10.220.88.22" in std_out