Skip to content

Commit ea14f70

Browse files
Interface upgrade test
1 parent 0a7340d commit ea14f70

File tree

3 files changed

+120
-1
lines changed

3 files changed

+120
-1
lines changed

linode_api4/objects/linode.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1996,7 +1996,7 @@ def interfaces(self) -> List[LinodeInterface]:
19961996

19971997
def upgrade_interfaces(
19981998
self,
1999-
config: Union[Config, int],
1999+
config: Optional[Union[Config, int]] = None,
20002000
dry_run: bool = False,
20012001
) -> UpgradeInterfacesResult:
20022002
"""

test/integration/conftest.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,28 @@ def create_vpc_with_subnet_and_linode(
432432
instance.delete()
433433

434434

435+
@pytest.fixture(scope="session")
436+
def create_vpc_with_subnet_and_linode_offline(
437+
test_linode_client, create_vpc_with_subnet, e2e_test_firewall
438+
):
439+
vpc, subnet = create_vpc_with_subnet
440+
441+
label = get_test_label(length=8)
442+
443+
instance, password = test_linode_client.linode.instance_create(
444+
"g6-standard-1",
445+
vpc.region,
446+
booted=False,
447+
image="linode/debian11",
448+
label=label,
449+
firewall=e2e_test_firewall,
450+
)
451+
452+
yield vpc, subnet, instance, password
453+
454+
instance.delete()
455+
456+
435457
@pytest.fixture(scope="session")
436458
def create_multiple_vpcs(test_linode_client):
437459
client = test_linode_client

test/integration/models/linode/test_linode.py

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import pytest
1111

12+
from linode_api4 import LinodeInterface
1213
from linode_api4.errors import ApiError
1314
from linode_api4.objects import (
1415
Config,
@@ -588,6 +589,102 @@ def test_linode_initate_migration(test_linode_client, e2e_test_firewall):
588589
assert res
589590

590591

592+
def test_linode_upgrade_interfaces(
593+
linode_for_network_interface_tests,
594+
create_vpc_with_subnet_and_linode_offline,
595+
):
596+
vpc, subnet, linode, _ = create_vpc_with_subnet_and_linode_offline
597+
config = linode.configs[0]
598+
599+
new_interfaces = [
600+
{"purpose": "public"},
601+
ConfigInterface(
602+
purpose="vlan", label="cool-vlan", ipam_address="10.0.0.4/32"
603+
),
604+
ConfigInterface(
605+
purpose="vpc",
606+
subnet_id=subnet.id,
607+
primary=True,
608+
ipv4=ConfigInterfaceIPv4(vpc="10.0.0.2", nat_1_1="any"),
609+
ip_ranges=["10.0.0.5/32"],
610+
),
611+
]
612+
config.interfaces = new_interfaces
613+
614+
config.save()
615+
616+
def __assert_base(iface: LinodeInterface):
617+
assert iface.id is not None
618+
assert iface.created is not None
619+
assert iface.updated is not None
620+
assert iface.version is not None
621+
622+
assert len(iface.mac_address) > 0
623+
624+
def __assert_public(iface: LinodeInterface):
625+
__assert_base(iface)
626+
627+
assert not iface.default_route.ipv4
628+
assert iface.default_route.ipv6
629+
630+
assert len(iface.public.ipv4.addresses) == 0
631+
assert len(iface.public.ipv4.shared) == 0
632+
633+
assert len(iface.public.ipv6.slaac) == 1
634+
assert iface.public.ipv6.slaac[0].address == linode.ipv6.split("/")[0]
635+
636+
assert len(iface.public.ipv6.ranges) == 0
637+
assert len(iface.public.ipv6.shared) == 0
638+
639+
def __assert_vpc(iface: LinodeInterface):
640+
__assert_base(iface)
641+
642+
assert iface.default_route.ipv4
643+
assert not iface.default_route.ipv6
644+
645+
assert iface.vpc.vpc_id == vpc.id
646+
assert iface.vpc.subnet_id == subnet.id
647+
648+
assert len(iface.vpc.ipv4.addresses) == 1
649+
assert iface.vpc.ipv4.addresses[0].address == "10.0.0.2"
650+
assert iface.vpc.ipv4.addresses[0].primary
651+
assert iface.vpc.ipv4.addresses[0].nat_1_1_address is not None
652+
653+
assert len(iface.vpc.ipv4.ranges) == 1
654+
assert iface.vpc.ipv4.ranges[0].range == "10.0.0.5/32"
655+
656+
def __assert_vlan(iface: LinodeInterface):
657+
__assert_base(iface)
658+
659+
assert not iface.default_route.ipv4
660+
assert not iface.default_route.ipv6
661+
662+
assert iface.vlan.vlan_label == "cool-vlan"
663+
assert iface.vlan.ipam_address == "10.0.0.4/32"
664+
665+
result = linode.upgrade_interfaces(dry_run=True)
666+
667+
assert result.dry_run
668+
assert result.config_id == config.id
669+
670+
__assert_public(result.interfaces[0])
671+
__assert_vlan(result.interfaces[1])
672+
__assert_vpc(result.interfaces[2])
673+
674+
result = linode.upgrade_interfaces(config=config)
675+
676+
assert not result.dry_run
677+
assert result.config_id == config.id
678+
679+
__assert_public(result.interfaces[0])
680+
__assert_vlan(result.interfaces[1])
681+
__assert_vpc(result.interfaces[2])
682+
683+
__assert_public(linode.interfaces[0])
684+
__assert_vlan(linode.interfaces[1])
685+
__assert_vpc(linode.interfaces[2])
686+
687+
591688
def test_config_update_interfaces(create_linode):
592689
linode = create_linode
593690
config = linode.configs[0]

0 commit comments

Comments
 (0)