be19bde98ebf6012588f5843f5fa6b0ceac5dbf1
[oom/platform/cert-service.git] / certServiceK8sExternalProvider / src / cmpv2provisioner / cmpv2_provisioner_factory_test.go
1 /*
2  * ============LICENSE_START=======================================================
3  * oom-certservice-k8s-external-provider
4  * ================================================================================
5  * Copyright (C) 2020 Nokia. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package cmpv2provisioner
22
23 import (
24         "encoding/base64"
25         "fmt"
26         "testing"
27
28         "github.com/stretchr/testify/assert"
29         v1 "k8s.io/api/core/v1"
30
31         "onap.org/oom-certservice/k8s-external-provider/src/cmpv2api"
32         "onap.org/oom-certservice/k8s-external-provider/src/testdata"
33 )
34
35 const (
36         secretName      = "issuer-cert-secret"
37         url             = "https://oom-cert-service:8443/v1/certificate/"
38         healthEndpoint  = "actuator/health"
39         certEndpoint    = "v1/certificate"
40         caName          = "RA"
41         keySecretKey    = "cmpv2Issuer-key.pem"
42         certSecretKey   = "cmpv2Issuer-cert.pem"
43         cacertSecretKey = "cacert.pem"
44 )
45
46 func Test_shouldCreateProvisioner(t *testing.T) {
47         issuer, secret := getValidIssuerAndSecret()
48
49         provisioner, _ := CreateProvisioner(&issuer, secret)
50
51         assert.NotNil(t, provisioner)
52         assert.Equal(t, url, provisioner.url)
53         assert.Equal(t, caName, provisioner.caName)
54         assert.Equal(t, healthEndpoint, provisioner.healthEndpoint)
55         assert.Equal(t, certEndpoint, provisioner.certEndpoint)
56 }
57
58 func Test_shouldReturnError_whenSecretMissingKeyRef(t *testing.T) {
59         issuer, secret := getValidIssuerAndSecret()
60         delete(secret.Data, keySecretKey)
61
62         provisioner, err := CreateProvisioner(&issuer, secret)
63
64         assert.Nil(t, provisioner)
65         if assert.Error(t, err) {
66                 assert.Equal(t, fmt.Errorf("secret %s does not contain key %s", secretName, keySecretKey), err)
67         }
68 }
69
70 func Test_shouldReturnError_whenSecretMissingCertRef(t *testing.T) {
71         issuer, secret := getValidIssuerAndSecret()
72         delete(secret.Data, certSecretKey)
73
74         provisioner, err := CreateProvisioner(&issuer, secret)
75
76         assert.Nil(t, provisioner)
77         if assert.Error(t, err) {
78                 assert.Equal(t, fmt.Errorf("secret %s does not contain key %s", secretName, certSecretKey), err)
79         }
80 }
81
82 func Test_shouldReturnError_whenSecretMissingCacertRef(t *testing.T) {
83         issuer, secret := getValidIssuerAndSecret()
84         delete(secret.Data, cacertSecretKey)
85
86         provisioner, err := CreateProvisioner(&issuer, secret)
87
88         assert.Nil(t, provisioner)
89         if assert.Error(t, err) {
90                 assert.Equal(t, fmt.Errorf("secret %s does not contain key %s", secretName, cacertSecretKey), err)
91         }
92 }
93
94 func Test_shouldReturnError_whenCreationOfCertServiceClientReturnsError(t *testing.T) {
95         issuer, secret := getValidIssuerAndSecret()
96         invalidKeySecretValue, _ := base64.StdEncoding.DecodeString("")
97         secret.Data[keySecretKey] = invalidKeySecretValue
98
99         provisioner, err := CreateProvisioner(&issuer, secret)
100
101         assert.Nil(t, provisioner)
102         assert.Error(t, err)
103 }
104
105 func getValidIssuerAndSecret() (cmpv2api.CMPv2Issuer, v1.Secret) {
106         issuer := cmpv2api.CMPv2Issuer{
107                 Spec: cmpv2api.CMPv2IssuerSpec{
108                         URL:            url,
109                         HealthEndpoint: healthEndpoint,
110                         CertEndpoint:   certEndpoint,
111                         CaName:         caName,
112                         CertSecretRef: cmpv2api.SecretKeySelector{
113                                 Name:      secretName,
114                                 KeyRef:    keySecretKey,
115                                 CertRef:   certSecretKey,
116                                 CacertRef: cacertSecretKey,
117                         },
118                 },
119         }
120         secret := v1.Secret{
121
122                 Data: map[string][]byte{
123                         keySecretKey:    testdata.KeyBytes,
124                         certSecretKey:   testdata.CertBytes,
125                         cacertSecretKey: testdata.CacertBytes,
126                 },
127         }
128         secret.Name = secretName
129         return issuer, secret
130 }