[OOM-K8S-CERT-EXTERNAL-PROVIDER] Add logging of not supported/overridden CSR info
[oom/platform/cert-service.git] / certServiceK8sExternalProvider / src / cmpv2controller / logger / certificate_request_logger_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 logger
22
23 import (
24         "bytes"
25         "flag"
26         "os"
27         "strings"
28         "testing"
29         "time"
30
31         cmapi "github.com/jetstack/cert-manager/pkg/apis/certmanager/v1"
32         "github.com/stretchr/testify/assert"
33         metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
34         "k8s.io/klog/v2"
35         "k8s.io/klog/v2/klogr"
36 )
37
38 var checkedLogMessages = [7]string{"Property 'duration'", "Property 'usages'", "Property 'ipAddresses'",
39         "Property 'isCA'", "Property 'subject.streetAddress'", "Property 'subject.postalCodes'",
40         "Property 'subject.serialNumber'"}
41
42 func TestMain(m *testing.M) {
43         klog.InitFlags(nil)
44         flag.CommandLine.Set("v", "10")
45         flag.CommandLine.Set("skip_headers", "true")
46         flag.CommandLine.Set("logtostderr", "false")
47         flag.CommandLine.Set("alsologtostderr", "false")
48         flag.Parse()
49         os.Exit(m.Run())
50 }
51
52 func TestLogShouldNotProvideInformationAboutSkippedPropertiesIfNotExistInCSR(t *testing.T) {
53         //given
54         logger := klogr.New()
55         request := getCertificateRequestWithoutSkippedProperties()
56         tmpWriteBuffer := getLogBuffer()
57
58         //when
59         LogCertRequestProperties(logger, request)
60         closeLogBuffer()
61         logsArray := convertBufferToStringArray(tmpWriteBuffer)
62         //then
63         for _, logMsg := range checkedLogMessages {
64                 assert.False(t, logsContainExpectedMessage(logsArray, logMsg), "Logs contain: "+logMsg+", but should not")
65         }
66 }
67
68 func TestLogShouldProvideInformationAboutSkippedPropertiesIfExistInCSR(t *testing.T) {
69         //given
70         logger := klogr.New()
71         request := getCertificateRequestWithSkippedProperties()
72         tmpWriteBuffer := getLogBuffer()
73
74         //when
75         LogCertRequestProperties(logger, request)
76         closeLogBuffer()
77         logsArray := convertBufferToStringArray(tmpWriteBuffer)
78
79         //then
80         for _, logMsg := range checkedLogMessages {
81                 assert.True(t, logsContainExpectedMessage(logsArray, logMsg), "Logs not contain: "+logMsg)
82         }
83 }
84
85 func getCertificateRequestWithoutSkippedProperties() *cmapi.CertificateRequest {
86         request := new(cmapi.CertificateRequest)
87         request.Spec.Request = []byte(csrWithoutSkippedProperties)
88         return request
89 }
90
91 func getCertificateRequestWithSkippedProperties() *cmapi.CertificateRequest {
92         request := new(cmapi.CertificateRequest)
93         request.Spec.Request = []byte(csrWithSkippedProperties)
94         request.Spec.Duration = &metav1.Duration{Duration: time.Hour}
95         request.Spec.IsCA = true
96         request.Spec.Usages = cmapi.DefaultKeyUsages()
97         return request
98 }
99
100 func getLogBuffer() *bytes.Buffer {
101         tmpWriteBuffer := bytes.NewBuffer(nil)
102         klog.SetOutput(tmpWriteBuffer)
103         return tmpWriteBuffer
104 }
105
106 func closeLogBuffer() {
107         klog.Flush()
108 }
109
110 func convertBufferToStringArray(buffer *bytes.Buffer) []string {
111         return strings.Split(buffer.String(), "\n")
112 }
113
114 func logsContainExpectedMessage(array []string, expectedMsg string) bool {
115         for _, logMsg := range array {
116                 if strings.Contains(logMsg, expectedMsg) {
117                         return true
118                 }
119         }
120         return false
121 }