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 )