[OOM-K8S-CERT-EXTERNAL-PROVIDER] Provide certs to CMPv2 Issuer
[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         "fmt"
25         "testing"
26
27         "github.com/stretchr/testify/assert"
28         v1 "k8s.io/api/core/v1"
29
30         "onap.org/oom-certservice/k8s-external-provider/src/cmpv2api"
31 )
32
33 const (
34         secretName      = "issuer-cert-secret"
35         url             = "https://oom-cert-service:8443/v1/certificate/"
36         caName          = "RA"
37         keySecretKey    = "cmpv2Issuer-key.pem"
38         certSecretKey   = "cmpv2Issuer-cert.pem"
39         cacertSecretKey = "cacert.pem"
40 )
41
42 var (
43         keySecretValue    = []byte("keyData")
44         certSecretValue   = []byte("certData")
45         cacertSecretValue = []byte("cacertData")
46 )
47
48 func Test_shouldCreateProvisioner(t *testing.T) {
49         issuer, secret := getValidIssuerAndSecret()
50
51         provisioner, _ := CreateProvisioner(&issuer, secret)
52
53         assert.NotNil(t, provisioner)
54         assert.Equal(t, url, provisioner.url)
55         assert.Equal(t, caName, provisioner.caName)
56         assert.Equal(t, keySecretValue, provisioner.key)
57         assert.Equal(t, certSecretValue, provisioner.cert)
58         assert.Equal(t, cacertSecretValue, provisioner.cacert)
59 }
60
61 func Test_shouldReturnError_whenSecretMissingKeyRef(t *testing.T) {
62         issuer, secret := getValidIssuerAndSecret()
63         delete(secret.Data, keySecretKey)
64
65         provisioner, err := CreateProvisioner(&issuer, secret)
66
67         assert.Nil(t, provisioner)
68         if assert.Error(t, err) {
69                 assert.Equal(t, fmt.Errorf("secret %s does not contain key %s", secretName, keySecretKey), err)
70         }
71 }
72
73 func Test_shouldReturnError_whenSecretMissingCertRef(t *testing.T) {
74         issuer, secret := getValidIssuerAndSecret()
75         delete(secret.Data, certSecretKey)
76
77         provisioner, err := CreateProvisioner(&issuer, secret)
78
79         assert.Nil(t, provisioner)
80         if assert.Error(t, err) {
81                 assert.Equal(t, fmt.Errorf("secret %s does not contain key %s", secretName, certSecretKey), err)
82         }
83 }
84
85 func Test_shouldReturnError_whenSecretMissingCacertRef(t *testing.T) {
86         issuer, secret := getValidIssuerAndSecret()
87         delete(secret.Data, cacertSecretKey)
88
89         provisioner, err := CreateProvisioner(&issuer, secret)
90
91         assert.Nil(t, provisioner)
92         if assert.Error(t, err) {
93                 assert.Equal(t, fmt.Errorf("secret %s does not contain key %s", secretName, cacertSecretKey), err)
94         }
95 }
96
97 func getValidIssuerAndSecret() (cmpv2api.CMPv2Issuer, v1.Secret) {
98         issuer := cmpv2api.CMPv2Issuer{
99                 Spec: cmpv2api.CMPv2IssuerSpec{
100                         URL:    url,
101                         CaName: caName,
102                         CertSecretRef: cmpv2api.SecretKeySelector{
103                                 Name:      secretName,
104                                 KeyRef:    keySecretKey,
105                                 CertRef:   certSecretKey,
106                                 CacertRef: cacertSecretKey,
107                         },
108                 },
109         }
110         secret := v1.Secret{
111
112                 Data: map[string][]byte{
113                         keySecretKey:    keySecretValue,
114                         certSecretKey:   certSecretValue,
115                         cacertSecretKey: cacertSecretValue,
116                 },
117         }
118         secret.Name = secretName
119         return issuer, secret
120 }