[OOM-CERT-SERVICE] Add logic for KUR/CR detection
[oom/platform/cert-service.git] / certService / src / test / java / org / onap / oom / certservice / certification / CertificationModelFactoryTest.java
index 705ae00..c898b68 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * PROJECT
+ * Cert Service
  * ================================================================================
  * Copyright (C) 2020-2021 Nokia. All rights reserved.
  * ================================================================================
 
 package org.onap.oom.certservice.certification;
 
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import static org.onap.oom.certservice.certification.CertificationData.CA_CERT;
+import static org.onap.oom.certservice.certification.CertificationData.ENTITY_CERT;
+import static org.onap.oom.certservice.certification.CertificationData.EXTRA_CA_CERT;
+import static org.onap.oom.certservice.certification.CertificationData.INTERMEDIATE_CERT;
+import static org.onap.oom.certservice.certification.TestData.TEST_CSR;
+import static org.onap.oom.certservice.certification.TestData.TEST_PK;
+import static org.onap.oom.certservice.certification.TestData.TEST_WRONG_CSR;
+import static org.onap.oom.certservice.certification.TestData.TEST_WRONG_PEM;
+
+import java.util.Arrays;
+import java.util.Base64;
+import java.util.List;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -27,33 +46,18 @@ import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.onap.oom.certservice.certification.configuration.Cmpv2ServerProvider;
 import org.onap.oom.certservice.certification.configuration.model.Cmpv2Server;
+import org.onap.oom.certservice.certification.exception.CertificateDecryptionException;
 import org.onap.oom.certservice.certification.exception.Cmpv2ClientAdapterException;
 import org.onap.oom.certservice.certification.exception.Cmpv2ServerNotFoundException;
 import org.onap.oom.certservice.certification.exception.CsrDecryptionException;
 import org.onap.oom.certservice.certification.exception.DecryptionException;
+import org.onap.oom.certservice.certification.model.CertificateUpdateModel;
+import org.onap.oom.certservice.certification.model.CertificateUpdateModel.CertificateUpdateModelBuilder;
 import org.onap.oom.certservice.certification.model.CertificationModel;
 import org.onap.oom.certservice.certification.model.CsrModel;
+import org.onap.oom.certservice.certification.model.X509CertificateModel;
 import org.onap.oom.certservice.cmpv2client.exceptions.CmpClientException;
 
-import java.util.Arrays;
-import java.util.Base64;
-import java.util.List;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-import static org.onap.oom.certservice.certification.CertificationData.CA_CERT;
-import static org.onap.oom.certservice.certification.CertificationData.ENTITY_CERT;
-import static org.onap.oom.certservice.certification.CertificationData.INTERMEDIATE_CERT;
-import static org.onap.oom.certservice.certification.CertificationData.EXTRA_CA_CERT;
-import static org.onap.oom.certservice.certification.TestData.TEST_CSR;
-import static org.onap.oom.certservice.certification.TestData.TEST_PK;
-import static org.onap.oom.certservice.certification.TestData.TEST_WRONG_CSR;
-import static org.onap.oom.certservice.certification.TestData.TEST_WRONG_PEM;
-
 @ExtendWith(MockitoExtension.class)
 class CertificationModelFactoryTest {
 
@@ -62,6 +66,18 @@ class CertificationModelFactoryTest {
     private static final String ENCODED_PK = getEncodedString(TEST_PK);
     private static final String ENCODED_WRONG_CSR = getEncodedString(TEST_WRONG_CSR);
     private static final String ENCODED_WRONG_PK = getEncodedString(TEST_WRONG_PEM);
+    private static final String TEST_CA_NAME = "TestCa";
+    private static final String TEST_ENCODED_CSR = "encodedCSR";
+    private static final String TEST_ENCODED_PK = "encodedPK";
+    private static final String TEST_ENCODED_OLD_PK = "encodedOldPK";
+    private static final String TEST_ENCODED_OLD_CERT = "encodedOldCert";
+    private static final CertificateUpdateModel TEST_CERTIFICATE_UPDATE_MODEL = new CertificateUpdateModelBuilder()
+        .setEncodedCsr(TEST_ENCODED_CSR)
+        .setEncodedPrivateKey(TEST_ENCODED_PK)
+        .setEncodedOldCert(TEST_ENCODED_OLD_CERT)
+        .setEncodedOldPrivateKey(TEST_ENCODED_OLD_PK)
+        .setCaName(TEST_CA_NAME)
+        .build();
 
     private CertificationModelFactory certificationModelFactory;
 
@@ -71,7 +87,10 @@ class CertificationModelFactoryTest {
     private CsrModelFactory csrModelFactory;
     @Mock
     private CertificationProvider certificationProvider;
-
+    @Mock
+    private X509CertificateModelFactory x509CertificateModelFactory;
+    @Mock
+    private UpdateRequestTypeDetector updateRequestTypeDetector;
 
     private static String getEncodedString(String testCsr) {
         return Base64.getEncoder().encodeToString(testCsr.getBytes());
@@ -80,12 +99,13 @@ class CertificationModelFactoryTest {
     @BeforeEach
     void setUp() {
         certificationModelFactory =
-                new CertificationModelFactory(csrModelFactory, cmpv2ServerProvider, certificationProvider);
+            new CertificationModelFactory(csrModelFactory, cmpv2ServerProvider, certificationProvider,
+                x509CertificateModelFactory, updateRequestTypeDetector);
     }
 
     @Test
     void shouldCreateProperCertificationModelWhenGivenProperCsrModelAndCaName()
-            throws CmpClientException, DecryptionException, Cmpv2ClientAdapterException {
+        throws CmpClientException, DecryptionException, Cmpv2ClientAdapterException {
 
         // Given
         CsrModel csrModel = mockCsrFactoryModelCreation();
@@ -94,7 +114,7 @@ class CertificationModelFactoryTest {
 
         // When
         CertificationModel certificationModel =
-                certificationModelFactory.createCertificationModel(ENCODED_CSR, ENCODED_PK, TEST_CA);
+            certificationModelFactory.createCertificationModel(ENCODED_CSR, ENCODED_PK, TEST_CA);
 
         // Then
         assertEquals(2, certificationModel.getCertificateChain().size());
@@ -105,22 +125,22 @@ class CertificationModelFactoryTest {
 
     @Test
     void shouldThrowDecryptionExceptionWhenGivenWrongEncodedCsr()
-            throws DecryptionException {
+        throws DecryptionException {
         // Given
         String expectedMessage = "Incorrect CSR, decryption failed";
         when(
-                csrModelFactory.createCsrModel(
-                        new CsrModelFactory.StringBase64(ENCODED_WRONG_CSR),
-                        new CsrModelFactory.StringBase64(ENCODED_WRONG_PK)
-                )
+            csrModelFactory.createCsrModel(
+                new StringBase64(ENCODED_WRONG_CSR),
+                new StringBase64(ENCODED_WRONG_PK)
+            )
         ).thenThrow(
-                new CsrDecryptionException(expectedMessage)
+            new CsrDecryptionException(expectedMessage)
         );
 
         // When
         Exception exception = assertThrows(
-                DecryptionException.class, () ->
-                        certificationModelFactory.createCertificationModel(ENCODED_WRONG_CSR, ENCODED_WRONG_PK, TEST_CA)
+            DecryptionException.class, () ->
+                certificationModelFactory.createCertificationModel(ENCODED_WRONG_CSR, ENCODED_WRONG_PK, TEST_CA)
         );
 
         // Then
@@ -129,20 +149,20 @@ class CertificationModelFactoryTest {
 
     @Test
     void shouldThrowCmpv2ServerNotFoundExceptionWhenGivenWrongCaName()
-            throws DecryptionException {
+        throws DecryptionException {
         // Given
         String expectedMessage = "CA not found";
         mockCsrFactoryModelCreation();
         when(
-                cmpv2ServerProvider.getCmpv2Server(TEST_CA)
+            cmpv2ServerProvider.getCmpv2Server(TEST_CA)
         ).thenThrow(
-                new Cmpv2ServerNotFoundException(expectedMessage)
+            new Cmpv2ServerNotFoundException(expectedMessage)
         );
 
         // When
         Exception exception = assertThrows(
-                Cmpv2ServerNotFoundException.class, () ->
-                        certificationModelFactory.createCertificationModel(ENCODED_CSR, ENCODED_PK, TEST_CA)
+            Cmpv2ServerNotFoundException.class, () ->
+                certificationModelFactory.createCertificationModel(ENCODED_CSR, ENCODED_PK, TEST_CA)
         );
 
         // Then
@@ -151,56 +171,98 @@ class CertificationModelFactoryTest {
 
     @Test
     void shouldThrowCmpClientExceptionWhenSigningCsrFailed()
-            throws DecryptionException, CmpClientException, Cmpv2ClientAdapterException {
+        throws DecryptionException, CmpClientException, Cmpv2ClientAdapterException {
         // Given
         String expectedMessage = "failed to sign certificate";
         CsrModel csrModel = mockCsrFactoryModelCreation();
         Cmpv2Server testServer = mockCmpv2ProviderServerSelection();
         when(
-                certificationProvider.signCsr(csrModel, testServer)
+            certificationProvider.signCsr(csrModel, testServer)
         ).thenThrow(
-                new CmpClientException(expectedMessage)
+            new CmpClientException(expectedMessage)
         );
 
         // When
         Exception exception = assertThrows(
-                CmpClientException.class, () ->
-                        certificationModelFactory.createCertificationModel(ENCODED_CSR, ENCODED_PK, TEST_CA)
+            CmpClientException.class, () ->
+                certificationModelFactory.createCertificationModel(ENCODED_CSR, ENCODED_PK, TEST_CA)
         );
 
         // Then
         assertTrue(exception.getMessage().contains(expectedMessage));
     }
 
+    @Test
+    void shouldPerformKurWhenCsrAndOldCertDataMatch() throws CertificateDecryptionException, DecryptionException {
+        //given
+        mockCsrFactoryModelCreation();
+        mockCertificateFactoryModelCreation();
+        when(updateRequestTypeDetector.isKur(any(), any())).thenReturn(true);
+        //when, then
+        Exception exception = assertThrows(
+            UnsupportedOperationException.class, () ->
+                certificationModelFactory.createCertificationModel(TEST_CERTIFICATE_UPDATE_MODEL)
+        );
+        assertEquals(exception.getMessage(), "TODO: implement KUR in separate MR");
+    }
+
+    @Test
+    void shouldPerformCrWhenCsrAndOldCertDataMatch() throws CertificateDecryptionException, DecryptionException {
+        //given
+        mockCsrFactoryModelCreation();
+        mockCertificateFactoryModelCreation();
+        when(updateRequestTypeDetector.isKur(any(), any())).thenReturn(false);
+        //when, then
+        Exception exception = assertThrows(
+            UnsupportedOperationException.class, () ->
+                certificationModelFactory.createCertificationModel(TEST_CERTIFICATE_UPDATE_MODEL)
+        );
+        assertEquals(exception.getMessage(), "TODO: implement CR in separate MR");
+    }
+
+    @Test
+    void shouldThrowCertificateDecryptionExceptionWhenOldCertificateInvalid()
+        throws CertificateDecryptionException {
+        //given
+        when(x509CertificateModelFactory.createCertificateModel(any()))
+            .thenThrow(new CertificateDecryptionException("Incorrect certificate, decryption failed"));
+        //when, then
+        assertThrows(
+            CertificateDecryptionException.class, () ->
+                certificationModelFactory.createCertificationModel(TEST_CERTIFICATE_UPDATE_MODEL)
+        );
+    }
 
     private void mockCertificateProviderCertificateSigning(CsrModel csrModel, Cmpv2Server testServer)
-            throws CmpClientException, Cmpv2ClientAdapterException {
+        throws CmpClientException, Cmpv2ClientAdapterException {
         CertificationModel expectedCertificationModel = getCertificationModel();
         when(
-                certificationProvider.signCsr(csrModel, testServer)
+            certificationProvider.signCsr(csrModel, testServer)
         ).thenReturn(expectedCertificationModel);
     }
 
     private Cmpv2Server mockCmpv2ProviderServerSelection() {
         Cmpv2Server testServer = getCmpv2Server();
         when(
-                cmpv2ServerProvider.getCmpv2Server(TEST_CA)
+            cmpv2ServerProvider.getCmpv2Server(TEST_CA)
         ).thenReturn(testServer);
         return testServer;
     }
 
     private CsrModel mockCsrFactoryModelCreation()
-            throws DecryptionException {
+        throws DecryptionException {
         CsrModel csrModel = getCsrModel();
-        when(
-                csrModelFactory.createCsrModel(
-                        new CsrModelFactory.StringBase64(ENCODED_CSR),
-                        new CsrModelFactory.StringBase64(ENCODED_PK)
-                )
-        ).thenReturn(csrModel);
+        when(csrModelFactory.createCsrModel(any(), any())).thenReturn(csrModel);
         return csrModel;
     }
 
+    private X509CertificateModel mockCertificateFactoryModelCreation()
+        throws CertificateDecryptionException {
+        final X509CertificateModel certificateModel = mock(X509CertificateModel.class);
+        when(x509CertificateModelFactory.createCertificateModel(any())).thenReturn(certificateModel);
+        return certificateModel;
+    }
+
     private Cmpv2Server getCmpv2Server() {
         return new Cmpv2Server();
     }