#!/usr/bin/env perl use strict; use warnings; use OpenStack::MetaAPI (); use Test2::Bundle::Extended; use Test2::Tools::Explain; use Test2::Plugin::NoWarnings; use FindBin; use lib "$FindBin::Bin/lib"; use Test::OpenStack::MetaAPI qw{:all}; use Test::OpenStack::MetaAPI::Auth qw{:all}; 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 images service"; mock_get_request( 'http://127.0.0.1:9292/v2/images/170fafa5-1329-44a3-9c27-9bb77b77206d', application_json(json_for_image()), ); # sub image_from_name { my $IMAGE_UID = '170fafa5-1329-44a3-9c27-9bb77b77206d'; my $IMAGE_NAME = 'myimage'; like $api->image_from_uid($IMAGE_UID), { 'base' => 'False', 'checksum' => 'fdbb43d0cd6019f82b4cf73b882608d1', 'container_format' => 'bare', 'created_at' => '2019-04-10T20:23:09Z', 'disk_format' => 'raw', 'file' => '/v2/images/6056cbf415fd5f8c223c8a69341e44ee/file', 'id' => 'b763530-fe64d-2116b5-c627a7-7f0cf71b', 'min_disk' => 0, 'min_ram' => 0, 'name' => 'MyImage', 'os_arch' => 'x86_64', 'os_distro' => 'centos', 'os_version' => '7', 'owner' => '84862e1b8aa5d5a6a6d9106e377fff96', 'protected' => D(), 'schema' => '/v2/schemas/image', 'self' => '/v2/images/6056cbf415fd5f8c223c8a69341e44ee', 'size' => '12884901888', 'status' => 'active', 'tags' => [], 'updated_at' => '2019-04-10T20:24:49Z', 'virtual_size' => undef, 'visibility' => 'shared'} , "image_from_uid"; # mock_get_request( 'http://127.0.0.1:9292/v2/images?name=in:%22myimage%22', application_json(json_for_image_name()), ); is $api->image_from_name($IMAGE_NAME), { 'base' => 'False', 'checksum' => '11c3b2d38e00b0cce4ab0dec720d42ad', 'container_format' => 'bare', 'created_at' => '2019-04-10T20:23:09Z', 'disk_format' => 'raw', 'file' => '/v2/images/11c3b2d38e00b0cce4ab0dec720d42ad/file', 'id' => '2ad246436b89fa939e3ac435f268d8e9', 'min_disk' => 0, 'min_ram' => 0, 'name' => 'myimage-from-name', 'os_arch' => 'x86_64', 'os_distro' => 'centos', 'os_version' => '7', 'owner' => '79ee01d32d3c2dfec7d693743aeffa7b', 'protected' => bless(do { \(my $o = 0) }, 'JSON::PP::Boolean'), 'schema' => '/v2/schemas/image', 'self' => '/v2/images/11c3b2d38e00b0cce4ab0dec720d42ad', 'size' => '12884901888', 'status' => 'active', 'tags' => [], 'updated_at' => '2019-04-10T20:24:49Z', 'virtual_size' => undef, 'visibility' => 'shared' }, "image_from_name"; is last_http_request(), 'GET http://127.0.0.1:9292/v2/images?name=in:%22myimage%22', 'last_http_request'; } done_testing; sub json_for_image { # https://developer.openstack.org/api-ref/compute/?expanded=show-server-details-detail return <<'JSON'; { "min_ram" : 0, "id" : "b763530-fe64d-2116b5-c627a7-7f0cf71b", "os_version" : "7", "created_at" : "2019-04-10T20:23:09Z", "os_arch" : "x86_64", "min_disk" : 0, "owner" : "84862e1b8aa5d5a6a6d9106e377fff96", "name" : "MyImage", "container_format" : "bare", "visibility" : "shared", "updated_at" : "2019-04-10T20:24:49Z", "size" : 12884901888, "status" : "active", "tags" : [], "protected" : false, "base" : "False", "self" : "/v2/images/6056cbf415fd5f8c223c8a69341e44ee", "file" : "/v2/images/6056cbf415fd5f8c223c8a69341e44ee/file", "schema" : "/v2/schemas/image", "disk_format" : "raw", "os_distro" : "centos", "checksum" : "fdbb43d0cd6019f82b4cf73b882608d1", "virtual_size" : null } JSON } sub json_for_image_name { return <<'JSON'; { "first" : "/v2/images?name=in%3A%22myimage%22", "schema" : "/v2/schemas/images", "images" : [ { "file" : "/v2/images/11c3b2d38e00b0cce4ab0dec720d42ad/file", "virtual_size" : null, "min_ram" : 0, "min_disk" : 0, "name" : "myimage-from-name", "updated_at" : "2019-04-10T20:24:49Z", "protected" : false, "checksum" : "11c3b2d38e00b0cce4ab0dec720d42ad", "self" : "/v2/images/11c3b2d38e00b0cce4ab0dec720d42ad", "os_distro" : "centos", "os_arch" : "x86_64", "size" : 12884901888, "container_format" : "bare", "status" : "active", "visibility" : "shared", "disk_format" : "raw", "schema" : "/v2/schemas/image", "id" : "2ad246436b89fa939e3ac435f268d8e9", "tags" : [], "os_version" : "7", "created_at" : "2019-04-10T20:23:09Z", "base" : "False", "owner" : "79ee01d32d3c2dfec7d693743aeffa7b" } ] } JSON } __END__