Skip to content

Commit aeca38a

Browse files
committed
Create int tests for Reserved IPs networking endpoints
1 parent 9b0629f commit aeca38a

1 file changed

Lines changed: 120 additions & 2 deletions

File tree

test/integration/models/networking/test_networking.py

Lines changed: 120 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import ipaddress
12
import time
23
from test.integration.conftest import (
34
get_api_ca_file,
@@ -13,8 +14,8 @@
1314

1415
import pytest
1516

16-
from linode_api4 import Instance, LinodeClient
17-
from linode_api4.objects import Config, ConfigInterfaceIPv4, Firewall, IPAddress
17+
from linode_api4 import Instance, LinodeClient, ApiError
18+
from linode_api4.objects import Config, ConfigInterfaceIPv4, Firewall, IPAddress, ReservedIPAddress
1819
from linode_api4.objects.networking import (
1920
FirewallCreateDevicesOptions,
2021
NetworkTransferPrice,
@@ -351,3 +352,120 @@ def test_ip_info(test_linode_client, create_linode):
351352
assert ip_info.subnet_mask is not None
352353
assert ip_info.type == "ipv4"
353354
assert ip_info.vpc_nat_1_1 is None
355+
356+
357+
@pytest.fixture
358+
def create_reserved_ip(test_linode_client):
359+
client = test_linode_client
360+
reserved_ip = client.networking.reserved_ip_create(
361+
region=TEST_REGION,
362+
tags=["test1"]
363+
)
364+
365+
yield reserved_ip
366+
367+
reserved_ip.delete()
368+
369+
370+
@pytest.fixture
371+
def create_reserved_ip_assigned(test_linode_client, create_linode):
372+
client = test_linode_client
373+
linode = create_linode
374+
reserved_ip = client.networking.reserved_ip_create(
375+
region=linode.region,
376+
tags=["test", "assigned"],
377+
)
378+
379+
client.networking.ip_addresses_assign(
380+
assignments=[{"address": reserved_ip.address, "linode_id": linode.id}],
381+
region=linode.region,
382+
)
383+
384+
reserved_ip = test_linode_client.load(ReservedIPAddress, reserved_ip.address)
385+
386+
yield linode, reserved_ip
387+
388+
# Delete only if IP exists (some tests delete it earlier)
389+
if reserved_ip.address in [ip.address for ip in client.networking.reserved_ips()]:
390+
reserved_ip.delete()
391+
392+
393+
@pytest.mark.smoke
394+
@pytest.mark.parametrize("region, tags", [
395+
(TEST_REGION, ["test"]),
396+
(TEST_REGION, None),
397+
])
398+
def test_create_reserved_ip(request, test_linode_client, region, tags):
399+
client = test_linode_client
400+
reserved_ip = client.networking.reserved_ip_create(
401+
region=region,
402+
tags=tags
403+
)
404+
405+
request.addfinalizer(reserved_ip.delete)
406+
407+
assert isinstance(ipaddress.ip_address(reserved_ip.address), ipaddress.IPv4Address)
408+
assert reserved_ip.type == "ipv4"
409+
assert reserved_ip.public == True
410+
assert reserved_ip.linode_id is None
411+
assert reserved_ip.reserved == True
412+
# assert reserved_ip.tags == tags # NOTE: Skipped as tags not available in the API yet
413+
assert reserved_ip.assigned_entity is None
414+
415+
416+
def test_create_reserved_ip_wo_region_fail(test_linode_client):
417+
client = test_linode_client
418+
419+
with pytest.raises(ApiError) as exc_info:
420+
client.networking.reserved_ip_create(
421+
region=None,
422+
tags=["test"]
423+
)
424+
425+
error_msg = str(exc_info.value.json)
426+
assert exc_info.value.status == 400
427+
assert "region is required" in error_msg
428+
429+
430+
@pytest.mark.skip # NOTE: Skipped as tags not available in the API yet
431+
def test_update_reserved_ip_tags(create_reserved_ip):
432+
reserved_ip = create_reserved_ip
433+
assert reserved_ip.tags == ["test"]
434+
435+
reserved_ip.save(tags=["updated"])
436+
assert reserved_ip.tags == ["updated"]
437+
438+
439+
def test_create_reserved_ip_assigned(test_linode_client, create_reserved_ip_assigned):
440+
client = test_linode_client
441+
linode, reserved_ip = create_reserved_ip_assigned
442+
443+
assert reserved_ip.reserved == True
444+
# assert reserved_ip.tags == tags # NOTE: Skipped as tags not available in the API yet
445+
assert reserved_ip.linode_id == linode.id
446+
assert reserved_ip.assigned_entity.id == linode.id
447+
assert reserved_ip.assigned_entity.type == "linode"
448+
assert reserved_ip.assigned_entity.label == linode.label
449+
assert reserved_ip.assigned_entity.url == f"/v4/linode/instances/{linode.id}"
450+
451+
ips_list = client.networking.ips()
452+
assert reserved_ip.address in [ip.address for ip in ips_list]
453+
454+
reserved_ips_list = client.networking.reserved_ips()
455+
assert reserved_ip.address in [ip.address for ip in reserved_ips_list]
456+
457+
# linode_ips = linode.ips.ipv4.public
458+
# assert len(linode_ips) == 2
459+
# assert any([ip.reserved for ip in linode_ips])
460+
461+
reserved_ip.delete()
462+
reserved_ips_list = client.networking.reserved_ips()
463+
assert reserved_ip.address not in [ip.address for ip in reserved_ips_list]
464+
465+
reserved_ips_list = client.networking.reserved_ips(ReservedIPAddress.address==reserved_ip.address)
466+
assert len(reserved_ips_list) == 0
467+
468+
# delattr(linode, "_ips")
469+
# linode_ips = linode.ips.ipv4.public
470+
# assert len(linode_ips) == 2
471+
# assert not any([ip.reserved for ip in linode_ips])

0 commit comments

Comments
 (0)