Kubernetes-REST
view release on metacpan or search on metacpan
t/15_advanced_api.t view on Meta::CPAN
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More;
use Test::Exception;
use FindBin;
use lib "$FindBin::Bin/../lib", "$FindBin::Bin/lib";
use Test::Kubernetes::Mock qw(mock_api);
use Kubernetes::REST::HTTPRequest;
# ============================================================================
# HTTPRequest::authenticate()
# ============================================================================
subtest 'HTTPRequest - authenticate with credentials' => sub {
my $req = Kubernetes::REST::HTTPRequest->new(
method => 'GET',
url => 'http://test/api/v1/pods',
headers => {},
credentials => Kubernetes::REST::AuthToken->new(token => 'bearer-123'),
);
$req->authenticate;
is $req->headers->{Authorization}, 'Bearer bearer-123',
'authenticate sets Authorization header';
};
subtest 'HTTPRequest - authenticate without credentials' => sub {
my $req = Kubernetes::REST::HTTPRequest->new(
method => 'GET',
url => 'http://test/api/v1/pods',
headers => {},
);
lives_ok { $req->authenticate } 'authenticate with no credentials does not die';
ok !exists $req->headers->{Authorization}, 'no Authorization header set';
};
subtest 'HTTPRequest - url builder from server + uri' => sub {
require Kubernetes::REST::Server;
my $req = Kubernetes::REST::HTTPRequest->new(
method => 'GET',
uri => '/api/v1/pods',
headers => {},
server => Kubernetes::REST::Server->new(endpoint => 'https://k8s.local:6443'),
);
is $req->url, 'https://k8s.local:6443/api/v1/pods', 'url built from server + uri';
};
# ============================================================================
# REST.pm - fetch_resource_map with mock OpenAPI spec
# ============================================================================
subtest 'fetch_resource_map - parses OpenAPI spec' => sub {
my $api = mock_api();
# Add a mock /openapi/v2 response
$api->io->add_response('GET', '/openapi/v2', {
paths => {
'/api/v1/namespaces' => {
get => {
'x-kubernetes-group-version-kind' => {
group => '',
version => 'v1',
kind => 'Namespace',
},
},
},
'/api/v1/namespaces/{namespace}/pods' => {
get => {
'x-kubernetes-group-version-kind' => {
group => '',
version => 'v1',
kind => 'Pod',
},
},
},
'/apis/apps/v1/namespaces/{namespace}/deployments' => {
get => {
'x-kubernetes-group-version-kind' => {
group => 'apps',
version => 'v1',
kind => 'Deployment',
},
},
},
'/apis/apiextensions.k8s.io/v1/customresourcedefinitions' => {
get => {
'x-kubernetes-group-version-kind' => {
group => 'apiextensions.k8s.io',
version => 'v1',
kind => 'CustomResourceDefinition',
},
},
},
'/apis/apiregistration.k8s.io/v1/apiservices' => {
get => {
'x-kubernetes-group-version-kind' => {
group => 'apiregistration.k8s.io',
version => 'v1',
kind => 'APIService',
},
},
},
},
( run in 1.977 second using v1.01-cache-2.11-cpan-524268b4103 )