[OOM-K8S-CERT-EXTERNAL-PROVIDER] Refactoring & code improvements
[oom/platform/cert-service.git] / certServiceK8sExternalProvider / src / cmpv2controller / logger / certificate_request_logger_test.go
index 7d1abc2..250fab8 100644 (file)
@@ -22,7 +22,8 @@ package logger
 
 import (
        "bytes"
-       "flag"
+       "io/ioutil"
+       "log"
        "os"
        "strings"
        "testing"
@@ -31,55 +32,97 @@ import (
        cmapi "github.com/jetstack/cert-manager/pkg/apis/certmanager/v1"
        "github.com/stretchr/testify/assert"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-       "k8s.io/klog/v2"
-       "k8s.io/klog/v2/klogr"
+
+       "onap.org/oom-certservice/k8s-external-provider/src/leveledlogger"
+       x509utils "onap.org/oom-certservice/k8s-external-provider/src/x509"
 )
 
-var checkedLogMessages = [7]string{"Property 'duration'", "Property 'usages'", "Property 'ipAddresses'",
-       "Property 'isCA'", "Property 'subject.streetAddress'", "Property 'subject.postalCodes'",
-       "Property 'subject.serialNumber'"}
+var unsupportedProperties = []string{
+       "* property 'duration'",
+       "* property 'usages'",
+       "- property 'ipAddresses'",
+       "- property 'isCA'",
+       "- property 'subject.streetAddress'",
+       "- property 'subject.postalCodes'",
+       "- property 'subject.serialNumber'"}
+
+var supportedProperties = []string{
+       "+ property 'common name'",
+       "+ property 'organization'",
+       "+ property 'organization unit'",
+       "+ property 'country'",
+       "+ property 'state'",
+       "+ property 'location'",
+       "+ property 'dns names'"}
+
+const RESULT_LOG = "testdata/test_result.log"
 
 func TestMain(m *testing.M) {
-       klog.InitFlags(nil)
-       flag.CommandLine.Set("v", "10")
-       flag.CommandLine.Set("skip_headers", "true")
-       flag.CommandLine.Set("logtostderr", "false")
-       flag.CommandLine.Set("alsologtostderr", "false")
-       flag.Parse()
+       leveledlogger.SetConfigFileName("testdata/test_logger_config.json")
        os.Exit(m.Run())
 }
 
 func TestLogShouldNotProvideInformationAboutSkippedPropertiesIfNotExistInCSR(t *testing.T) {
        //given
-       logger := klogr.New()
+       logger := leveledlogger.GetLoggerWithName("test")
        request := getCertificateRequestWithoutSkippedProperties()
-       tmpWriteBuffer := getLogBuffer()
+
+       csr, err := x509utils.DecodeCSR(request.Spec.Request)
+       if err != nil {
+               assert.FailNow(t, "Could not parse Certificate Sign Request")
+       }
 
        //when
-       LogCertRequestProperties(logger, request)
-       closeLogBuffer()
-       logsArray := convertBufferToStringArray(tmpWriteBuffer)
+       LogCertRequestProperties(logger, request, csr)
+       logsArray := convertLogFileToStringArray(RESULT_LOG)
+
        //then
-       for _, logMsg := range checkedLogMessages {
-               assert.False(t, logsContainExpectedMessage(logsArray, logMsg), "Logs contain: "+logMsg+", but should not")
+       for _, logMsg := range unsupportedProperties {
+               assert.False(t, logsContainExpectedMessage(logsArray, logMsg), "Logs should not contain: ["+logMsg+"]")
        }
+       removeTemporaryFile(RESULT_LOG)
 }
 
 func TestLogShouldProvideInformationAboutSkippedPropertiesIfExistInCSR(t *testing.T) {
        //given
-       logger := klogr.New()
+       logger := leveledlogger.GetLoggerWithName("test")
        request := getCertificateRequestWithSkippedProperties()
-       tmpWriteBuffer := getLogBuffer()
+
+       csr, err := x509utils.DecodeCSR(request.Spec.Request)
+       if err != nil {
+               assert.FailNow(t, "Could not parse Certificate Sign Request")
+       }
+
+       //when
+       LogCertRequestProperties(logger, request, csr)
+       logsArray := convertLogFileToStringArray(RESULT_LOG)
+
+       //then
+       for _, logMsg := range unsupportedProperties {
+               assert.True(t, logsContainExpectedMessage(logsArray, logMsg), "Logs should contain: ["+logMsg+"]")
+       }
+       removeTemporaryFile(RESULT_LOG)
+}
+
+func TestLogShouldListSupportedProperties(t *testing.T) {
+       //given
+       logger := leveledlogger.GetLoggerWithName("test")
+       request := getCertificateRequestWithoutSkippedProperties()
+
+       csr, err := x509utils.DecodeCSR(request.Spec.Request)
+       if err != nil {
+               assert.FailNow(t, "Could not parse Certificate Sign Request")
+       }
 
        //when
-       LogCertRequestProperties(logger, request)
-       closeLogBuffer()
-       logsArray := convertBufferToStringArray(tmpWriteBuffer)
+       LogCertRequestProperties(logger, request, csr)
+       logsArray := convertLogFileToStringArray(RESULT_LOG)
 
        //then
-       for _, logMsg := range checkedLogMessages {
-               assert.True(t, logsContainExpectedMessage(logsArray, logMsg), "Logs not contain: "+logMsg)
+       for _, logMsg := range supportedProperties {
+               assert.True(t, logsContainExpectedMessage(logsArray, logMsg), "Logs should contain: ["+logMsg+"]")
        }
+       removeTemporaryFile(RESULT_LOG)
 }
 
 func getCertificateRequestWithoutSkippedProperties() *cmapi.CertificateRequest {
@@ -97,18 +140,31 @@ func getCertificateRequestWithSkippedProperties() *cmapi.CertificateRequest {
        return request
 }
 
-func getLogBuffer() *bytes.Buffer {
-       tmpWriteBuffer := bytes.NewBuffer(nil)
-       klog.SetOutput(tmpWriteBuffer)
-       return tmpWriteBuffer
+func convertBufferToStringArray(buffer *bytes.Buffer) []string {
+       return strings.Split(buffer.String(), "\n")
 }
 
-func closeLogBuffer() {
-       klog.Flush()
+func convertLogFileToStringArray(filename string) []string {
+       buffer := bytes.NewBuffer(make([]byte, 0))
+       buffer.Write(readFile(filename))
+       return convertBufferToStringArray(buffer)
 }
 
-func convertBufferToStringArray(buffer *bytes.Buffer) []string {
-       return strings.Split(buffer.String(), "\n")
+func readFile(filename string) []byte {
+       certRequest, err := ioutil.ReadFile(filename)
+       if err != nil {
+               log.Fatal(err)
+       }
+       return certRequest
+}
+
+func removeTemporaryFile(fileName string) {
+       if _, err := os.Stat(fileName); err == nil {
+               e := os.Remove(fileName)
+               if e != nil {
+                       log.Fatal(e)
+               }
+       }
 }
 
 func logsContainExpectedMessage(array []string, expectedMsg string) bool {