[OOM-K8S-CERT-EXTERNAL-PROVIDER] Add client for CertService API
[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         caName          = "RA"
39         keySecretKey    = "cmpv2Issuer-key.pem"
40         certSecretKey   = "cmpv2Issuer-cert.pem"
41         cacertSecretKey = "cacert.pem"
42 )
43
44 func Test_shouldCreateProvisioner(t *testing.T) {
45         issuer, secret := getValidIssuerAndSecret()
46
47         provisioner, _ := CreateProvisioner(&issuer, secret)
48
49         assert.NotNil(t, provisioner)
50         assert.Equal(t, url, provisioner.url)
51         assert.Equal(t, caName, provisioner.caName)
52 }
53
54 func Test_shouldReturnError_whenSecretMissingKeyRef(t *testing.T) {
55         issuer, secret := getValidIssuerAndSecret()
56         delete(secret.Data, keySecretKey)
57
58         provisioner, err := CreateProvisioner(&issuer, secret)
59
60         assert.Nil(t, provisioner)
61         if assert.Error(t, err) {
62                 assert.Equal(t, fmt.Errorf("secret %s does not contain key %s", secretName, keySecretKey), err)
63         }
64 }
65
66 func Test_shouldReturnError_whenSecretMissingCertRef(t *testing.T) {
67         issuer, secret := getValidIssuerAndSecret()
68         delete(secret.Data, certSecretKey)
69
70         provisioner, err := CreateProvisioner(&issuer, secret)
71
72         assert.Nil(t, provisioner)
73         if assert.Error(t, err) {
74                 assert.Equal(t, fmt.Errorf("secret %s does not contain key %s", secretName, certSecretKey), err)
75         }
76 }
77
78 func Test_shouldReturnError_whenSecretMissingCacertRef(t *testing.T) {
79         issuer, secret := getValidIssuerAndSecret()
80         delete(secret.Data, cacertSecretKey)
81
82         provisioner, err := CreateProvisioner(&issuer, secret)
83
84         assert.Nil(t, provisioner)
85         if assert.Error(t, err) {
86                 assert.Equal(t, fmt.Errorf("secret %s does not contain key %s", secretName, cacertSecretKey), err)
87         }
88 }
89
90
91 func Test_shouldReturnError_whenCreationOfCertServiceClientReturnsError(t *testing.T) {
92         issuer, secret := getValidIssuerAndSecret()
93         invalidKeySecretValue, _    := base64.StdEncoding.DecodeString("")
94         secret.Data[keySecretKey] = invalidKeySecretValue
95
96         provisioner, err := CreateProvisioner(&issuer, secret)
97
98         assert.Nil(t, provisioner)
99         assert.Error(t, err)
100 }
101
102 func getValidIssuerAndSecret() (cmpv2api.CMPv2Issuer, v1.Secret) {
103         issuer := cmpv2api.CMPv2Issuer{
104                 Spec: cmpv2api.CMPv2IssuerSpec{
105                         URL:    url,
106                         CaName: caName,
107                         CertSecretRef: cmpv2api.SecretKeySelector{
108                                 Name:      secretName,
109                                 KeyRef:    keySecretKey,
110                                 CertRef:   certSecretKey,
111                                 CacertRef: cacertSecretKey,
112                         },
113                 },
114         }
115         secret := v1.Secret{
116
117                 Data: map[string][]byte{
118                         keySecretKey:    testdata.KeyBytes,
119                         certSecretKey:   testdata.CertBytes,
120                         cacertSecretKey: testdata.CacertBytes,
121                 },
122         }
123         secret.Name = secretName
124         return issuer, secret
125 }