Skip to content

Commit d87ddc5

Browse files
committed
Create int tests for Reserved IPs: types, allocate
1 parent aeca38a commit d87ddc5

1 file changed

Lines changed: 84 additions & 13 deletions

File tree

test/integration/models/networking/test_networking.py

Lines changed: 84 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,28 @@ def create_reserved_ip_assigned(test_linode_client, create_linode):
390390
reserved_ip.delete()
391391

392392

393+
def verify_reserved_ip(reserved_ip):
394+
assert isinstance(ipaddress.ip_address(reserved_ip.address), ipaddress.IPv4Address)
395+
assert reserved_ip.type == "ipv4"
396+
assert reserved_ip.public == True
397+
assert reserved_ip.reserved == True
398+
assert reserved_ip.linode_id is None
399+
assert reserved_ip.assigned_entity is None
400+
401+
402+
def verify_reserved_ip_assigned(reserved_ip, resource):
403+
assert isinstance(ipaddress.ip_address(reserved_ip.address), ipaddress.IPv4Address)
404+
assert reserved_ip.type == "ipv4"
405+
assert reserved_ip.public == True
406+
assert reserved_ip.reserved == True
407+
assert reserved_ip.linode_id == resource.id
408+
assert reserved_ip.region.id == resource.region.id
409+
assert reserved_ip.assigned_entity.id == resource.id
410+
assert reserved_ip.assigned_entity.type == "linode"
411+
assert reserved_ip.assigned_entity.label == resource.label
412+
assert reserved_ip.assigned_entity.url == f"/v4/linode/instances/{resource.id}"
413+
414+
393415
@pytest.mark.smoke
394416
@pytest.mark.parametrize("region, tags", [
395417
(TEST_REGION, ["test"]),
@@ -401,16 +423,10 @@ def test_create_reserved_ip(request, test_linode_client, region, tags):
401423
region=region,
402424
tags=tags
403425
)
404-
405426
request.addfinalizer(reserved_ip.delete)
406427

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
428+
verify_reserved_ip(reserved_ip)
412429
# assert reserved_ip.tags == tags # NOTE: Skipped as tags not available in the API yet
413-
assert reserved_ip.assigned_entity is None
414430

415431

416432
def test_create_reserved_ip_wo_region_fail(test_linode_client):
@@ -430,23 +446,20 @@ def test_create_reserved_ip_wo_region_fail(test_linode_client):
430446
@pytest.mark.skip # NOTE: Skipped as tags not available in the API yet
431447
def test_update_reserved_ip_tags(create_reserved_ip):
432448
reserved_ip = create_reserved_ip
449+
verify_reserved_ip(reserved_ip)
433450
assert reserved_ip.tags == ["test"]
434451

435452
reserved_ip.save(tags=["updated"])
453+
verify_reserved_ip(reserved_ip)
436454
assert reserved_ip.tags == ["updated"]
437455

438456

439457
def test_create_reserved_ip_assigned(test_linode_client, create_reserved_ip_assigned):
440458
client = test_linode_client
441459
linode, reserved_ip = create_reserved_ip_assigned
442460

443-
assert reserved_ip.reserved == True
461+
verify_reserved_ip_assigned(reserved_ip, linode)
444462
# 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}"
450463

451464
ips_list = client.networking.ips()
452465
assert reserved_ip.address in [ip.address for ip in ips_list]
@@ -469,3 +482,61 @@ def test_create_reserved_ip_assigned(test_linode_client, create_reserved_ip_assi
469482
# linode_ips = linode.ips.ipv4.public
470483
# assert len(linode_ips) == 2
471484
# assert not any([ip.reserved for ip in linode_ips])
485+
# assert not any([ip.tags for ip in linode_ips]) # Tags should be removed ???
486+
487+
488+
def test_get_reserved_ip_types(test_linode_client, create_reserved_ip):
489+
# TODO: Currently it uses client (token), should not it be publicly accessible (no token required) ???
490+
client = test_linode_client
491+
types = client.networking.reserved_ip_types()
492+
assert types.only
493+
494+
pricing = types.first()
495+
assert pricing.id == "reserved-ipv4"
496+
assert pricing.label == "Reserved IPv4"
497+
assert pricing.price.hourly
498+
# assert pricing.price.monthly is None
499+
# assert pricing.region_prices == []
500+
501+
502+
@pytest.mark.smoke
503+
@pytest.mark.parametrize("reserved, region", [
504+
(True, TEST_REGION),
505+
(True, None),
506+
])
507+
def test_create_reserved_ip_with_allocate(test_linode_client, create_linode, reserved, region):
508+
client = test_linode_client
509+
linode = create_linode
510+
511+
if region:
512+
reserved_ip = client.networking.ip_allocate(reserved=reserved, region=TEST_REGION)
513+
verify_reserved_ip(reserved_ip)
514+
else:
515+
reserved_ip = client.networking.ip_allocate(reserved=reserved, linode=linode.id)
516+
verify_reserved_ip_assigned(reserved_ip, linode)
517+
518+
# assert reserved_ip.tags == tags # NOTE: Skipped as tags not available in the API yet
519+
520+
521+
def test_create_reserved_ip_with_allocate_fail(test_linode_client, create_linode):
522+
client = test_linode_client
523+
linode = create_linode
524+
region = TEST_REGION
525+
526+
while region == linode.region:
527+
region = get_region(
528+
LinodeClient(
529+
token=get_token(),
530+
base_url=get_api_url(),
531+
ca_path=get_api_ca_file(),
532+
),
533+
{"Linodes", "Cloud Firewall"},
534+
site_type="core",
535+
)
536+
537+
with pytest.raises(ApiError) as exc_info:
538+
client.networking.ip_allocate(reserved=True, region=region, linode=linode.id)
539+
540+
error_msg = str(exc_info.value.json)
541+
assert exc_info.value.status == 400
542+
assert "Region passed in must match Linode's region" in error_msg

0 commit comments

Comments
 (0)