Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions tests/circular/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
"""Circular config workflow tests."""
241 changes: 241 additions & 0 deletions tests/circular/conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,241 @@
"""Fixtures for circular config workflow tests."""

from pathlib import Path

import pytest


def _fixture_file_read(filename: str) -> str:
"""Read a fixture file from the fixtures directory."""
return str(
Path(__file__)
.resolve()
.parent.joinpath("fixtures")
.joinpath(filename)
.read_text(encoding="utf8"),
)


# Cisco IOS fixtures
@pytest.fixture(scope="module")
def ios_running_config() -> str:
"""Load IOS running config fixture."""
return _fixture_file_read("ios_running.conf")


@pytest.fixture(scope="module")
def ios_generated_config() -> str:
"""Load IOS generated config fixture."""
return _fixture_file_read("ios_generated.conf")


@pytest.fixture(scope="module")
def ios_remediation_config() -> str:
"""Load IOS remediation config fixture."""
return _fixture_file_read("ios_remediation.conf")


@pytest.fixture(scope="module")
def ios_rollback_config() -> str:
"""Load IOS rollback config fixture."""
return _fixture_file_read("ios_rollback.conf")


# Arista EOS fixtures
@pytest.fixture(scope="module")
def eos_running_config() -> str:
"""Load EOS running config fixture."""
return _fixture_file_read("eos_running.conf")


@pytest.fixture(scope="module")
def eos_generated_config() -> str:
"""Load EOS generated config fixture."""
return _fixture_file_read("eos_generated.conf")


@pytest.fixture(scope="module")
def eos_remediation_config() -> str:
"""Load EOS remediation config fixture."""
return _fixture_file_read("eos_remediation.conf")


@pytest.fixture(scope="module")
def eos_rollback_config() -> str:
"""Load EOS rollback config fixture."""
return _fixture_file_read("eos_rollback.conf")


# Cisco NXOS fixtures
@pytest.fixture(scope="module")
def nxos_running_config() -> str:
"""Load NXOS running config fixture."""
return _fixture_file_read("nxos_running.conf")


@pytest.fixture(scope="module")
def nxos_generated_config() -> str:
"""Load NXOS generated config fixture."""
return _fixture_file_read("nxos_generated.conf")


@pytest.fixture(scope="module")
def nxos_remediation_config() -> str:
"""Load NXOS remediation config fixture."""
return _fixture_file_read("nxos_remediation.conf")


@pytest.fixture(scope="module")
def nxos_rollback_config() -> str:
"""Load NXOS rollback config fixture."""
return _fixture_file_read("nxos_rollback.conf")


# Cisco IOS-XR fixtures
@pytest.fixture(scope="module")
def iosxr_running_config() -> str:
"""Load IOS-XR running config fixture."""
return _fixture_file_read("iosxr_running.conf")


@pytest.fixture(scope="module")
def iosxr_generated_config() -> str:
"""Load IOS-XR generated config fixture."""
return _fixture_file_read("iosxr_generated.conf")


@pytest.fixture(scope="module")
def iosxr_remediation_config() -> str:
"""Load IOS-XR remediation config fixture."""
return _fixture_file_read("iosxr_remediation.conf")


@pytest.fixture(scope="module")
def iosxr_rollback_config() -> str:
"""Load IOS-XR rollback config fixture."""
return _fixture_file_read("iosxr_rollback.conf")


# Juniper JunOS fixtures
@pytest.fixture(scope="module")
def junos_running_config() -> str:
"""Load JunOS running config fixture."""
return _fixture_file_read("junos_running.conf")


@pytest.fixture(scope="module")
def junos_generated_config() -> str:
"""Load JunOS generated config fixture."""
return _fixture_file_read("junos_generated.conf")


@pytest.fixture(scope="module")
def junos_remediation_config() -> str:
"""Load JunOS remediation config fixture."""
return _fixture_file_read("junos_remediation.conf")


@pytest.fixture(scope="module")
def junos_rollback_config() -> str:
"""Load JunOS rollback config fixture."""
return _fixture_file_read("junos_rollback.conf")


# VyOS fixtures
@pytest.fixture(scope="module")
def vyos_running_config() -> str:
"""Load VyOS running config fixture."""
return _fixture_file_read("vyos_running.conf")


@pytest.fixture(scope="module")
def vyos_generated_config() -> str:
"""Load VyOS generated config fixture."""
return _fixture_file_read("vyos_generated.conf")


@pytest.fixture(scope="module")
def vyos_remediation_config() -> str:
"""Load VyOS remediation config fixture."""
return _fixture_file_read("vyos_remediation.conf")


@pytest.fixture(scope="module")
def vyos_rollback_config() -> str:
"""Load VyOS rollback config fixture."""
return _fixture_file_read("vyos_rollback.conf")


# Fortinet FortiOS fixtures
@pytest.fixture(scope="module")
def fortios_running_config() -> str:
"""Load FortiOS running config fixture."""
return _fixture_file_read("fortios_running.conf")


@pytest.fixture(scope="module")
def fortios_generated_config() -> str:
"""Load FortiOS generated config fixture."""
return _fixture_file_read("fortios_generated.conf")


@pytest.fixture(scope="module")
def fortios_remediation_config() -> str:
"""Load FortiOS remediation config fixture."""
return _fixture_file_read("fortios_remediation.conf")


@pytest.fixture(scope="module")
def fortios_rollback_config() -> str:
"""Load FortiOS rollback config fixture."""
return _fixture_file_read("fortios_rollback.conf")


# HP Comware5 fixtures
@pytest.fixture(scope="module")
def comware5_running_config() -> str:
"""Load HP Comware5 running config fixture."""
return _fixture_file_read("comware5_running.conf")


@pytest.fixture(scope="module")
def comware5_generated_config() -> str:
"""Load HP Comware5 generated config fixture."""
return _fixture_file_read("comware5_generated.conf")


@pytest.fixture(scope="module")
def comware5_remediation_config() -> str:
"""Load HP Comware5 remediation config fixture."""
return _fixture_file_read("comware5_remediation.conf")


@pytest.fixture(scope="module")
def comware5_rollback_config() -> str:
"""Load HP Comware5 rollback config fixture."""
return _fixture_file_read("comware5_rollback.conf")


# HP Procurve fixtures
@pytest.fixture(scope="module")
def procurve_running_config() -> str:
"""Load HP Procurve running config fixture."""
return _fixture_file_read("procurve_running.conf")


@pytest.fixture(scope="module")
def procurve_generated_config() -> str:
"""Load HP Procurve generated config fixture."""
return _fixture_file_read("procurve_generated.conf")


@pytest.fixture(scope="module")
def procurve_remediation_config() -> str:
"""Load HP Procurve remediation config fixture."""
return _fixture_file_read("procurve_remediation.conf")


@pytest.fixture(scope="module")
def procurve_rollback_config() -> str:
"""Load HP Procurve rollback config fixture."""
return _fixture_file_read("procurve_rollback.conf")
31 changes: 31 additions & 0 deletions tests/circular/fixtures/comware5_generated.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
sysname HP-Switch-01
vlan 10
name DATA_VLAN_UPDATED
vlan 20
name VOICE_VLAN
vlan 40
name NEW_VLAN
interface GigabitEthernet1/0/1
port link-mode route
description WAN Interface Primary
ip address 203.0.113.1 255.255.255.252
interface GigabitEthernet1/0/2
port link-mode bridge
description Access Port Updated
port access vlan 10
stp edged-port enable
interface GigabitEthernet1/0/4
port link-mode bridge
description New Interface
port access vlan 40
interface Vlan-interface10
description Data VLAN Interface Updated
ip address 10.100.1.1 255.255.255.0
interface Vlan-interface40
description New VLAN Interface
ip address 10.100.4.1 255.255.255.0
ip route-static 0.0.0.0 0 203.0.113.2
ip route-static 10.10.0.0 16 10.100.1.254
ip route-static 10.20.0.0 16 10.100.1.253
ntp-service unicast-server 10.0.0.50
ntp-service unicast-server 10.0.0.51
26 changes: 26 additions & 0 deletions tests/circular/fixtures/comware5_remediation.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
undo vlan 30
undo interface GigabitEthernet1/0/3
vlan 10
undo name DATA_VLAN
name DATA_VLAN_UPDATED
vlan 40
name NEW_VLAN
interface GigabitEthernet1/0/1
undo description WAN Interface
description WAN Interface Primary
interface GigabitEthernet1/0/2
undo description Access Port
description Access Port Updated
stp edged-port enable
interface GigabitEthernet1/0/4
port link-mode bridge
description New Interface
port access vlan 40
interface Vlan-interface10
undo description Data VLAN Interface
description Data VLAN Interface Updated
interface Vlan-interface40
description New VLAN Interface
ip address 10.100.4.1 255.255.255.0
ip route-static 10.20.0.0 16 10.100.1.253
ntp-service unicast-server 10.0.0.51
25 changes: 25 additions & 0 deletions tests/circular/fixtures/comware5_rollback.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
undo vlan 40
undo interface GigabitEthernet1/0/4
undo interface Vlan-interface40
undo ip route-static 10.20.0.0 16 10.100.1.253
undo ntp-service unicast-server 10.0.0.51
vlan 10
undo name DATA_VLAN_UPDATED
name DATA_VLAN
vlan 30
name OLD_VLAN
interface GigabitEthernet1/0/1
undo description WAN Interface Primary
description WAN Interface
interface GigabitEthernet1/0/2
undo description Access Port Updated
undo stp edged-port enable
description Access Port
interface GigabitEthernet1/0/3
port link-mode bridge
description Old Interface
port access vlan 30
shutdown
interface Vlan-interface10
undo description Data VLAN Interface Updated
description Data VLAN Interface
26 changes: 26 additions & 0 deletions tests/circular/fixtures/comware5_running.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
sysname HP-Switch-01
vlan 10
name DATA_VLAN
vlan 20
name VOICE_VLAN
vlan 30
name OLD_VLAN
interface GigabitEthernet1/0/1
port link-mode route
description WAN Interface
ip address 203.0.113.1 255.255.255.252
interface GigabitEthernet1/0/2
port link-mode bridge
description Access Port
port access vlan 10
interface GigabitEthernet1/0/3
port link-mode bridge
description Old Interface
port access vlan 30
shutdown
interface Vlan-interface10
description Data VLAN Interface
ip address 10.100.1.1 255.255.255.0
ip route-static 0.0.0.0 0 203.0.113.2
ip route-static 10.10.0.0 16 10.100.1.254
ntp-service unicast-server 10.0.0.50
43 changes: 43 additions & 0 deletions tests/circular/fixtures/eos_generated.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
hostname switch-eos-01
vlan 10
name VLAN10_UPDATED
vlan 20
name VLAN20
vlan 40
name NEW_VLAN
interface Ethernet1
description Uplink to Core Primary
no switchport
ip address 192.168.10.1/24
interface Ethernet2
description Access Port Updated
switchport mode access
switchport access vlan 10
spanning-tree portfast
interface Ethernet3
description Trunk Port
switchport mode trunk
switchport trunk allowed vlan 10,20,40
interface Ethernet4
description New Interface
switchport mode access
switchport access vlan 40
interface Vlan10
description VLAN 10 SVI Updated
ip address 10.10.10.1/24
interface Vlan40
description VLAN 40 SVI
ip address 10.10.40.1/24
router bgp 65100
router-id 192.168.10.1
neighbor 192.168.10.2 remote-as 65200
neighbor 192.168.10.2 description Core Switch Primary
neighbor 192.168.10.3 remote-as 65300
neighbor 192.168.10.3 description Secondary Peer
address-family ipv4
neighbor 192.168.10.2 activate
neighbor 192.168.10.3 activate
ip route 0.0.0.0/0 192.168.10.254
ip route 10.20.0.0/16 192.168.10.253
ntp server 10.0.0.20
ntp server 10.0.0.21
Loading