From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

#!/usr/bin/env perl
use strict;
use FindBin;
use lib "$FindBin::Bin/lib";
use JSON;
mock_lwp_useragent();
$Test::OpenStack::MetaAPI::UA_DISPLAY_OUTPUT = 1;
my $api = get_api_object(use_env => 0);
ok $api, "got one api object" or die;
{
note "Testing Network service";
mock_get_request(
application_json(json_for_floatingips()),
);
my $IMAGE_UID = '170fafa5-1329-44a3-9c27-9bb77b77206d';
my $IMAGE_NAME = 'myimage';
like [$api->floatingips()],
[
{ 'created_at' => '2016-12-21T10:55:50Z',
'description' => 'for test',
'dns_domain' => 'my-domain.org.',
'dns_name' => 'myfip',
'fixed_ip_address' => '10.0.0.3',
'floating_ip_address' => '172.24.4.228',
'floating_network_id' => '376da547-b977-4cfe-9cba-275c80debf57',
'id' => '2f245a7b-796b-4f26-9cf9-9e82d248fda7',
'port_details' => {
'admin_state_up' =>
bless(do { \(my $o = 1) }, 'JSON::PP::Boolean'),
'device_id' => '8e3941b4-a6e9-499f-a1ac-2a4662025cba',
'device_owner' => 'compute:nova',
'mac_address' => 'fa:16:3e:b1:3b:30',
'name' => '',
'network_id' => '02dd8479-ef26-4398-a102-d19d0a7b3a1f',
'status' => 'ACTIVE'
},
'port_forwardings' => [],
'port_id' => 'ce705c24-c1ef-408a-bda3-7bbd946164ab',
'project_id' => '4969c491a3c74ee4af974e6d800c62de',
'revision_number' => 1,
'router_id' => 'd23abc8d-2991-4a55-ba98-2aaea84cc72f',
'status' => 'ACTIVE',
'tags' => ['tag1,tag2'],
'tenant_id' => '4969c491a3c74ee4af974e6d800c62de',
'updated_at' => '2016-12-21T10:55:53Z'
},
{ 'created_at' => '2016-12-21T11:55:50Z',
'description' => 'for test',
'dns_domain' => 'my-domain.org.',
'dns_name' => 'myfip2',
'fixed_ip_address' => undef,
'floating_ip_address' => '172.24.4.227',
'floating_network_id' => '376da547-b977-4cfe-9cba-275c80debf57',
'id' => '61cea855-49cb-4846-997d-801b70c71bdd',
'port_details' => undef,
'port_forwardings' => [],
'port_id' => undef,
'project_id' => '4969c491a3c74ee4af974e6d800c62de',
'revision_number' => 2,
'router_id' => undef,
'status' => 'DOWN',
'tags' => ['tag1,tag2'],
'tenant_id' => '4969c491a3c74ee4af974e6d800c62de',
'updated_at' => '2016-12-21T11:55:53Z'
},
{ 'created_at' => '2018-06-15T02:12:48Z',
'description' => 'for test with port forwarding',
'dns_domain' => 'my-domain.org.',
'dns_name' => 'myfip3',
'fixed_ip_address' => undef,
'floating_ip_address' => '172.24.4.42',
'floating_network_id' => '376da547-b977-4cfe-9cba-275c80debf57',
'id' => '898b198e-49f7-47d6-a7e1-53f626a548e6',
'port_forwardings' => [
{ 'external_port' => 2225,
'internal_ip_address' => '10.0.0.19',
'internal_port' => 25,
'protocol' => 'tcp'
},
{ 'external_port' => 8786,
'internal_ip_address' => '10.0.0.18',
'internal_port' => 16666,
'protocol' => 'tcp'
}
],
'port_id' => undef,
'project_id' => '4969c491a3c74ee4af974e6d800c62de',
'revision_number' => 1,
'router_id' => '0303bf18-2c52-479c-bd68-e0ad712a1639',
'status' => 'ACTIVE',
'tags' => [],
'tenant_id' => '4969c491a3c74ee4af974e6d800c62de',
'updated_at' => '2018-06-15T02:12:57Z'
}]
, "floatingips";
#
mock_get_request(
application_json(json_for_security_groups()),
);
is $api->security_groups, {
'created_at' => '2018-03-19T19:16:56Z',
'description' => 'default',
'id' => '85cc3048-abc3-43cc-89b3-377341426ac5',
'name' => 'default',
'project_id' => 'e4f50856753b4dc6afee5fa6b9b6c550',
'revision_number' => 8,
'security_group_rules' => [
{ 'created_at' => '2018-03-19T19:16:56Z',
'description' => '',
'direction' => 'egress',
'ethertype' => 'IPv6',
'id' => '3c0e45ff-adaf-4124-b083-bf390e5482ff',
'port_range_max' => undef,
'port_range_min' => undef,
'project_id' => 'e4f50856753b4dc6afee5fa6b9b6c550',
'protocol' => undef,
'remote_group_id' => undef,
'remote_ip_prefix' => undef,
'revision_number' => 1,
'security_group_id' => '85cc3048-abc3-43cc-89b3-377341426ac5',
'tags' => ['tag1,tag2'],
'tenant_id' => 'e4f50856753b4dc6afee5fa6b9b6c550',
'updated_at' => '2018-03-19T19:16:56Z'
},
{ 'created_at' => '2018-03-19T19:16:56Z',
'description' => '',
'direction' => 'egress',
'ethertype' => 'IPv4',
'id' => '93aa42e5-80db-4581-9391-3a608bd0e448',
'port_range_max' => undef,
'port_range_min' => undef,
'project_id' => 'e4f50856753b4dc6afee5fa6b9b6c550',
'protocol' => undef,
'remote_group_id' => undef,
'remote_ip_prefix' => undef,
'revision_number' => 2,
'security_group_id' => '85cc3048-abc3-43cc-89b3-377341426ac5',
'tags' => ['tag1,tag2'],
'tenant_id' => 'e4f50856753b4dc6afee5fa6b9b6c550',
'updated_at' => '2018-03-19T19:16:56Z'
},
{ 'created_at' => '2018-03-19T19:16:56Z',
'description' => '',
'direction' => 'ingress',
'ethertype' => 'IPv6',
'id' => 'c0b09f00-1d49-4e64-a0a7-8a186d928138',
'port_range_max' => undef,
'port_range_min' => undef,
'project_id' => 'e4f50856753b4dc6afee5fa6b9b6c550',
'protocol' => undef,
'remote_group_id' => '85cc3048-abc3-43cc-89b3-377341426ac5',
'remote_ip_prefix' => undef,
'revision_number' => 1,
'security_group_id' => '85cc3048-abc3-43cc-89b3-377341426ac5',
'tags' => ['tag1,tag2'],
'tenant_id' => 'e4f50856753b4dc6afee5fa6b9b6c550',
'updated_at' => '2018-03-19T19:16:56Z'
},
{ 'created_at' => '2018-03-19T19:16:56Z',
'description' => '',
'direction' => 'ingress',
'ethertype' => 'IPv4',
'id' => 'f7d45c89-008e-4bab-88ad-d6811724c51c',
'port_range_max' => undef,
'port_range_min' => undef,
'project_id' => 'e4f50856753b4dc6afee5fa6b9b6c550',
'protocol' => undef,
'remote_group_id' => '85cc3048-abc3-43cc-89b3-377341426ac5',
'remote_ip_prefix' => undef,
'revision_number' => 1,
'security_group_id' => '85cc3048-abc3-43cc-89b3-377341426ac5',
'tags' => ['tag1,tag2'],
'tenant_id' => 'e4f50856753b4dc6afee5fa6b9b6c550',
'updated_at' => '2018-03-19T19:16:56Z'
}
],
'tags' => ['tag1,tag2'],
'tenant_id' => 'e4f50856753b4dc6afee5fa6b9b6c550',
'updated_at' => '2018-03-19T19:16:56Z'
},
"security_groups";
}
done_testing;
sub json_for_floatingips {
return <<'JSON';
{
"floatingips": [
{
"router_id": "d23abc8d-2991-4a55-ba98-2aaea84cc72f",
"description": "for test",
"dns_domain": "my-domain.org.",
"dns_name": "myfip",
"created_at": "2016-12-21T10:55:50Z",
"updated_at": "2016-12-21T10:55:53Z",
"revision_number": 1,
"project_id": "4969c491a3c74ee4af974e6d800c62de",
"tenant_id": "4969c491a3c74ee4af974e6d800c62de",
"floating_network_id": "376da547-b977-4cfe-9cba-275c80debf57",
"fixed_ip_address": "10.0.0.3",
"floating_ip_address": "172.24.4.228",
"port_id": "ce705c24-c1ef-408a-bda3-7bbd946164ab",
"id": "2f245a7b-796b-4f26-9cf9-9e82d248fda7",
"status": "ACTIVE",
"port_details": {
"status": "ACTIVE",
"name": "",
"admin_state_up": true,
"network_id": "02dd8479-ef26-4398-a102-d19d0a7b3a1f",
"device_owner": "compute:nova",
"mac_address": "fa:16:3e:b1:3b:30",
"device_id": "8e3941b4-a6e9-499f-a1ac-2a4662025cba"
},
"tags": ["tag1,tag2"],
"port_forwardings": []
},
{
"router_id": null,
"description": "for test",
"dns_domain": "my-domain.org.",
"dns_name": "myfip2",
"created_at": "2016-12-21T11:55:50Z",
"updated_at": "2016-12-21T11:55:53Z",
"revision_number": 2,
"project_id": "4969c491a3c74ee4af974e6d800c62de",
"tenant_id": "4969c491a3c74ee4af974e6d800c62de",
"floating_network_id": "376da547-b977-4cfe-9cba-275c80debf57",
"fixed_ip_address": null,
"floating_ip_address": "172.24.4.227",
"port_id": null,
"id": "61cea855-49cb-4846-997d-801b70c71bdd",
"status": "DOWN",
"port_details": null,
"tags": ["tag1,tag2"],
"port_forwardings": []
},
{
"router_id": "0303bf18-2c52-479c-bd68-e0ad712a1639",
"description": "for test with port forwarding",
"dns_domain": "my-domain.org.",
"dns_name": "myfip3",
"created_at": "2018-06-15T02:12:48Z",
"updated_at": "2018-06-15T02:12:57Z",
"revision_number": 1,
"project_id": "4969c491a3c74ee4af974e6d800c62de",
"tenant_id": "4969c491a3c74ee4af974e6d800c62de",
"floating_network_id": "376da547-b977-4cfe-9cba-275c80debf57",
"fixed_ip_address": null,
"floating_ip_address": "172.24.4.42",
"port_id": null,
"id": "898b198e-49f7-47d6-a7e1-53f626a548e6",
"status": "ACTIVE",
"tags": [],
"port_forwardings": [
{
"protocol": "tcp",
"internal_ip_address": "10.0.0.19",
"internal_port": 25,
"external_port": 2225
},
{
"protocol": "tcp",
"internal_ip_address": "10.0.0.18",
"internal_port": 16666,
"external_port": 8786
}
]
}
]
}
JSON
}
sub json_for_security_groups {
return <<JSON;
{
"security_groups": [
{
"description": "default",
"id": "85cc3048-abc3-43cc-89b3-377341426ac5",
"name": "default",
"security_group_rules": [
{
"direction": "egress",
"ethertype": "IPv6",
"id": "3c0e45ff-adaf-4124-b083-bf390e5482ff",
"port_range_max": null,
"port_range_min": null,
"protocol": null,
"remote_group_id": null,
"remote_ip_prefix": null,
"security_group_id": "85cc3048-abc3-43cc-89b3-377341426ac5",
"project_id": "e4f50856753b4dc6afee5fa6b9b6c550",
"revision_number": 1,
"tags": ["tag1,tag2"],
"tenant_id": "e4f50856753b4dc6afee5fa6b9b6c550",
"created_at": "2018-03-19T19:16:56Z",
"updated_at": "2018-03-19T19:16:56Z",
"description": ""
},
{
"direction": "egress",
"ethertype": "IPv4",
"id": "93aa42e5-80db-4581-9391-3a608bd0e448",
"port_range_max": null,
"port_range_min": null,
"protocol": null,
"remote_group_id": null,
"remote_ip_prefix": null,
"security_group_id": "85cc3048-abc3-43cc-89b3-377341426ac5",
"project_id": "e4f50856753b4dc6afee5fa6b9b6c550",
"revision_number": 2,
"tags": ["tag1,tag2"],
"tenant_id": "e4f50856753b4dc6afee5fa6b9b6c550",
"created_at": "2018-03-19T19:16:56Z",
"updated_at": "2018-03-19T19:16:56Z",
"description": ""
},
{
"direction": "ingress",
"ethertype": "IPv6",
"id": "c0b09f00-1d49-4e64-a0a7-8a186d928138",
"port_range_max": null,
"port_range_min": null,
"protocol": null,
"remote_group_id": "85cc3048-abc3-43cc-89b3-377341426ac5",
"remote_ip_prefix": null,
"security_group_id": "85cc3048-abc3-43cc-89b3-377341426ac5",
"project_id": "e4f50856753b4dc6afee5fa6b9b6c550",
"revision_number": 1,
"tags": ["tag1,tag2"],
"tenant_id": "e4f50856753b4dc6afee5fa6b9b6c550",
"created_at": "2018-03-19T19:16:56Z",
"updated_at": "2018-03-19T19:16:56Z",
"description": ""
},
{
"direction": "ingress",
"ethertype": "IPv4",
"id": "f7d45c89-008e-4bab-88ad-d6811724c51c",
"port_range_max": null,
"port_range_min": null,
"protocol": null,
"remote_group_id": "85cc3048-abc3-43cc-89b3-377341426ac5",
"remote_ip_prefix": null,
"security_group_id": "85cc3048-abc3-43cc-89b3-377341426ac5",
"project_id": "e4f50856753b4dc6afee5fa6b9b6c550",
"revision_number": 1,
"tags": ["tag1,tag2"],
"tenant_id": "e4f50856753b4dc6afee5fa6b9b6c550",
"created_at": "2018-03-19T19:16:56Z",
"updated_at": "2018-03-19T19:16:56Z",
"description": ""
}
],
"project_id": "e4f50856753b4dc6afee5fa6b9b6c550",
"revision_number": 8,
"created_at": "2018-03-19T19:16:56Z",
"updated_at": "2018-03-19T19:16:56Z",
"tags": ["tag1,tag2"],
"tenant_id": "e4f50856753b4dc6afee5fa6b9b6c550"
}
]
}
JSON
}
__END__