Net-Async-Kubernetes

 view release on metacpan or  search on metacpan

t/04-ssl-options.t  view on Meta::CPAN

# ============================================================================

subtest 'ssl options with verify disabled' => sub {
    my $kube = Net::Async::Kubernetes->new(
        server => Kubernetes::REST::Server->new(
            endpoint          => 'https://k8s.local:6443',
            ssl_verify_server => 0,
        ),
        credentials => Kubernetes::REST::AuthToken->new(token => 'test'),
    );

    my %opts = $kube->_ssl_options;
    is($opts{SSL_verify_mode}, SSL_VERIFY_NONE, 'SSL_verify_mode is VERIFY_NONE');
    ok(!exists $opts{SSL_ca_file}, 'no SSL_ca_file when not set');
    ok(!exists $opts{SSL_cert_file}, 'no SSL_cert_file when not set');
    ok(!exists $opts{SSL_key_file}, 'no SSL_key_file when not set');
};

# ============================================================================
# SSL with only CA cert
# ============================================================================

subtest 'ssl options with only CA cert' => sub {
    my $kube = Net::Async::Kubernetes->new(
        server => Kubernetes::REST::Server->new(
            endpoint          => 'https://k8s.local:6443',
            ssl_verify_server => 1,
            ssl_ca_file       => '/path/to/ca.crt',
        ),
        credentials => Kubernetes::REST::AuthToken->new(token => 'test'),
    );

    my %opts = $kube->_ssl_options;
    is($opts{SSL_verify_mode}, SSL_VERIFY_PEER, 'verify enabled');
    is($opts{SSL_ca_file}, '/path/to/ca.crt', 'CA file set');
    ok(!exists $opts{SSL_cert_file}, 'no client cert');
    ok(!exists $opts{SSL_key_file}, 'no client key');
};

# ============================================================================
# SSL with inline PEM data
# ============================================================================

subtest 'ssl options with inline pem data' => sub {
    my $kube = Net::Async::Kubernetes->new(
        server => Kubernetes::REST::Server->new(
            endpoint          => 'https://k8s.local:6443',
            ssl_verify_server => 1,
            ssl_ca_pem        => "CA-PEM\n",
            ssl_cert_pem      => "CERT-PEM\n",
            ssl_key_pem       => "KEY-PEM\n",
        ),
        credentials => Kubernetes::REST::AuthToken->new(token => ''),
    );

    my %opts = $kube->_ssl_options;
    is($opts{SSL_verify_mode}, SSL_VERIFY_PEER, 'verify enabled for pem config');
    ok($opts{SSL_ca_file}, 'CA pem materialized to temp file');
    ok($opts{SSL_cert_file}, 'client cert pem materialized to temp file');
    ok($opts{SSL_key_file}, 'client key pem materialized to temp file');
    is(do { local (@ARGV, $/) = $opts{SSL_ca_file}; <> }, "CA-PEM\n", 'CA pem contents preserved');
    is(do { local (@ARGV, $/) = $opts{SSL_cert_file}; <> }, "CERT-PEM\n", 'client cert pem contents preserved');
    is(do { local (@ARGV, $/) = $opts{SSL_key_file}; <> }, "KEY-PEM\n", 'client key pem contents preserved');
};

# ============================================================================
# SSL options are cached
# ============================================================================

subtest 'ssl options cached' => sub {
    my $kube = Net::Async::Kubernetes->new(
        server => Kubernetes::REST::Server->new(
            endpoint          => 'https://k8s.local:6443',
            ssl_verify_server => 1,
            ssl_ca_file       => '/path/to/ca.crt',
        ),
        credentials => Kubernetes::REST::AuthToken->new(token => 'test'),
    );

    my @opts1 = $kube->_ssl_options;
    my @opts2 = $kube->_ssl_options;
    is_deeply(\@opts1, \@opts2, 'ssl options consistent across calls');
};

done_testing;



( run in 2.249 seconds using v1.01-cache-2.11-cpan-df04353d9ac )