|
15 | 15 |
|
16 | 16 | from linode_api4 import Instance, LinodeClient |
17 | 17 | from linode_api4.objects import Config, ConfigInterfaceIPv4, Firewall, IPAddress |
18 | | -from linode_api4.objects.networking import NetworkTransferPrice, Price |
| 18 | +from linode_api4.objects.networking import ( |
| 19 | + FirewallCreateDevicesOptions, |
| 20 | + NetworkTransferPrice, |
| 21 | + Price, |
| 22 | +) |
19 | 23 |
|
20 | 24 | TEST_REGION = get_region( |
21 | 25 | LinodeClient( |
@@ -73,6 +77,47 @@ def test_get_networking_rules(test_linode_client, test_firewall): |
73 | 77 | assert "outbound_policy" in str(rules) |
74 | 78 |
|
75 | 79 |
|
| 80 | +@pytest.fixture |
| 81 | +def create_linode_without_firewall(test_linode_client): |
| 82 | + """ |
| 83 | + WARNING: This is specifically reserved for Firewall testing. |
| 84 | + Don't use this if the Linode will not be assigned to a firewall. |
| 85 | + """ |
| 86 | + |
| 87 | + client = test_linode_client |
| 88 | + region = get_region(client, {"Cloud Firewall"}, "core").id |
| 89 | + |
| 90 | + label = get_test_label() |
| 91 | + |
| 92 | + instance = client.linode.instance_create( |
| 93 | + "g6-nanode-1", |
| 94 | + region, |
| 95 | + label=label, |
| 96 | + ) |
| 97 | + |
| 98 | + yield client, instance |
| 99 | + |
| 100 | + instance.delete() |
| 101 | + |
| 102 | + |
| 103 | +@pytest.fixture |
| 104 | +def create_firewall_with_device(create_linode_without_firewall): |
| 105 | + client, target_instance = create_linode_without_firewall |
| 106 | + |
| 107 | + firewall = client.networking.firewall_create( |
| 108 | + get_test_label(), |
| 109 | + rules={ |
| 110 | + "inbound_policy": "DROP", |
| 111 | + "outbound_policy": "DROP", |
| 112 | + }, |
| 113 | + devices=FirewallCreateDevicesOptions(linodes=[target_instance.id]), |
| 114 | + ) |
| 115 | + |
| 116 | + yield firewall, target_instance |
| 117 | + |
| 118 | + firewall.delete() |
| 119 | + |
| 120 | + |
76 | 121 | def test_get_networking_rule_versions(test_linode_client, test_firewall): |
77 | 122 | firewall = test_linode_client.load(Firewall, test_firewall.id) |
78 | 123 |
|
@@ -263,3 +308,43 @@ def test_create_and_delete_vlan(test_linode_client, linode_for_vlan_tests): |
263 | 308 | ) |
264 | 309 |
|
265 | 310 | assert is_deleted is True |
| 311 | + |
| 312 | + |
| 313 | +def test_create_firewall_with_linode_device(create_firewall_with_device): |
| 314 | + firewall, target_instance = create_firewall_with_device |
| 315 | + |
| 316 | + devices = firewall.devices |
| 317 | + |
| 318 | + assert len(devices) == 1 |
| 319 | + assert devices[0].entity.id == target_instance.id |
| 320 | + |
| 321 | + |
| 322 | +# TODO (Enhanced Interfaces): Add test for interface device |
| 323 | + |
| 324 | + |
| 325 | +def test_get_global_firewall_settings(test_linode_client): |
| 326 | + settings = test_linode_client.networking.firewall_settings() |
| 327 | + |
| 328 | + assert settings.default_firewall_ids is not None |
| 329 | + assert all( |
| 330 | + k in {"vpc_interface", "public_interface", "linode", "nodebalancer"} |
| 331 | + for k in vars(settings.default_firewall_ids).keys() |
| 332 | + ) |
| 333 | + |
| 334 | + |
| 335 | +def test_ip_info(test_linode_client, create_linode): |
| 336 | + linode = create_linode |
| 337 | + |
| 338 | + ip_info = test_linode_client.load(IPAddress, linode.ipv4[0]) |
| 339 | + |
| 340 | + assert ip_info.address == linode.ipv4[0] |
| 341 | + assert ip_info.gateway is not None |
| 342 | + assert ip_info.linode_id == linode.id |
| 343 | + assert ip_info.interface_id is None |
| 344 | + assert ip_info.prefix == 24 |
| 345 | + assert ip_info.public |
| 346 | + assert ip_info.rdns is not None |
| 347 | + assert ip_info.region.id == linode.region.id |
| 348 | + assert ip_info.subnet_mask is not None |
| 349 | + assert ip_info.type == "ipv4" |
| 350 | + assert ip_info.vpc_nat_1_1 is None |
0 commit comments