Refactor truststore merger logic
[oom/platform/cert-service.git] / trustStoreMerger / src / test / java / org / onap / oom / truststoremerger / merger / model / PemTruststoreTest.java
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.oom.truststoremerger.certification.file.provider;
+package org.onap.oom.truststoremerger.merger.model;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+import static org.mockito.Mockito.mock;
 
 import java.io.File;
 import java.io.IOException;
+import java.security.KeyStore;
+import java.security.KeyStoreSpi;
 import java.security.cert.Certificate;
 import java.util.List;
 import java.util.stream.Collectors;
 import org.junit.jupiter.api.Test;
 import org.onap.oom.truststoremerger.api.ExitableException;
-import org.onap.oom.truststoremerger.certification.file.provider.entry.CertificateWithAlias;
-import org.onap.oom.truststoremerger.certification.file.TestCertificateProvider;
-import org.onap.oom.truststoremerger.certification.file.exception.MissingTruststoreException;
-import org.onap.oom.truststoremerger.certification.file.exception.TruststoreDataOperationException;
-import org.onap.oom.truststoremerger.certification.file.model.PemTruststore;
+import org.onap.oom.truststoremerger.merger.exception.MissingTruststoreException;
+import org.onap.oom.truststoremerger.merger.exception.TruststoreDataOperationException;
+import org.onap.oom.truststoremerger.merger.exception.WriteTruststoreFileException;
+import org.onap.oom.truststoremerger.merger.model.certificate.CertificateWithAlias;
 
-class PemCertificateControllerTest {
+class PemTruststoreTest {
+
+    private static final int EXPECTED_ONE = 1;
 
     @Test
-    void getNotEmptyCertificateListShouldThrowExceptionWhenFileNotContainsCertificate() {
+    void getCertificatesShouldThrowExceptionWhenFileNotContainsCertificate() {
         //given
-        File emptyPemFile = TestCertificateProvider.getEmptyPemTruststoreFile().getFile();
-        PemCertificateController pemCertificateController = new PemCertificateController(emptyPemFile);
+        File emptyPemFile = TestCertificateProvider.getEmptyPemFile();
+        PemTruststore pemCertificate = new PemTruststore(emptyPemFile);
         //when//then
         assertThatExceptionOfType(MissingTruststoreException.class)
-            .isThrownBy(pemCertificateController::getNotEmptyCertificateList);
+            .isThrownBy(pemCertificate::getCertificates);
+    }
+
+    @Test
+    void shouldThrowExceptionWhenCannotSaveFile() {
+        //given
+        KeyStoreSpi keyStoreSpi = mock(KeyStoreSpi.class);
+        KeyStore keyStore = new KeyStore(keyStoreSpi, null, "") {
+        };
+        File pemFile = TestCertificateProvider.getEmptyPemFile();
+        pemFile.setWritable(false);
+        PemTruststore pem = new PemTruststore(pemFile);
+
+        //when. then
+        assertThatExceptionOfType(WriteTruststoreFileException.class)
+            .isThrownBy(pem::saveFile);
     }
 
     @Test
     void transformToStringInPemFormatShouldCorrectlyTransform() throws ExitableException, IOException {
         //given
-        PemTruststore pemTruststore = TestCertificateProvider.getSamplePemTruststoreFile();
+        Truststore pemTruststore = TestCertificateProvider.getSamplePemTruststoreFile();
+
         List<CertificateWithAlias> wrappedCertificates = pemTruststore.getCertificates();
-        File notEmptyPemFile = pemTruststore.getFile();
         List<Certificate> certificateList = unWrapCertificate(wrappedCertificates);
-        PemCertificateController pemCertificateController = new PemCertificateController(notEmptyPemFile);
-        String expected = TestCertificateProvider.getExpectedPemCertificateAsString();
+        File notEmptyPemFile = TestCertificateProvider.getNotEmptyPemFile();
+        PemTruststore pemCertificate = new PemTruststore(notEmptyPemFile);
 
         //when
-        String certificateTransformed = pemCertificateController.transformToStringInPemFormat(certificateList);
+        String certificateTransformed = pemCertificate.transformToStringInPemFormat(certificateList);
 
         //then
+        String expected = TestCertificateProvider.getExpectedPemCertificateAsString();
         assertThat(certificateTransformed).isEqualTo(expected);
     }
 
@@ -68,21 +88,34 @@ class PemCertificateControllerTest {
     void fileNotContainsPemCertificateShouldReturnTrueIfFileNotContainsCertificate()
         throws TruststoreDataOperationException {
         //given
-        File emptyPemFile = TestCertificateProvider.getEmptyPemTruststoreFile().getFile();
-        PemCertificateController pemCertificateController = new PemCertificateController(emptyPemFile);
+        File emptyPemFile = TestCertificateProvider.getEmptyPemFile();
+        PemTruststore pemCertificate = new PemTruststore(emptyPemFile);
         //when//then
-        assertThat(pemCertificateController.isFileWithoutPemCertificate()).isTrue();
+        assertThat(pemCertificate.isFileWithoutPemCertificate()).isTrue();
     }
 
     @Test
     void fileNotContainsPemCertificateShouldReturnFalseIfFileContainsCertificate()
         throws TruststoreDataOperationException {
         //given
-        File notEmptyPemFile = TestCertificateProvider.getSamplePemTruststoreFile().getFile();
-        PemCertificateController pemCertificateController = new PemCertificateController(notEmptyPemFile);
+        File notEmptyPemFile = TestCertificateProvider.getNotEmptyPemFile();
+        PemTruststore pemCertificate = new PemTruststore(notEmptyPemFile);
 
         //when//then
-        assertThat(pemCertificateController.isFileWithoutPemCertificate()).isFalse();
+        assertThat(pemCertificate.isFileWithoutPemCertificate()).isFalse();
+    }
+
+    @Test
+    void privateKeyIsSkippedWhileReadingCertificates() throws ExitableException {
+        //given
+        File pemTruststoreFile = TestCertificateProvider.getPemWithPrivateKeyFile();
+        PemTruststore pemCertificate = new PemTruststore(pemTruststoreFile);
+
+        //when
+        List<CertificateWithAlias> certificate = pemCertificate.getCertificates();
+
+        //then
+        assertThat(certificate).hasSize(EXPECTED_ONE);
     }
 
     private List<Certificate> unWrapCertificate(List<CertificateWithAlias> certificateWithAliases) {