Merge "Improve code coverage"
authorPaweł Baniewski <pawel.baniewski@nokia.com>
Tue, 24 Mar 2020 07:37:59 +0000 (07:37 +0000)
committerGerrit Code Review <gerrit@onap.org>
Tue, 24 Mar 2020 07:37:59 +0000 (07:37 +0000)
44 files changed:
certService/pom.xml
certService/src/main/java/org/onap/aaf/certservice/certification/CertificateFactoryProvider.java [moved from certService/src/main/java/org/onap/aaf/certservice/certification/adapter/CertificateFactoryProvider.java with 96% similarity]
certService/src/main/java/org/onap/aaf/certservice/certification/CertificationProvider.java
certService/src/main/java/org/onap/aaf/certservice/certification/RsaContentSignerBuilder.java [moved from certService/src/main/java/org/onap/aaf/certservice/certification/adapter/RsaContentSignerBuilder.java with 97% similarity]
certService/src/main/java/org/onap/aaf/certservice/certification/X509CertificateBuilder.java [moved from certService/src/main/java/org/onap/aaf/certservice/certification/adapter/X509CertificateBuilder.java with 93% similarity]
certService/src/main/java/org/onap/aaf/certservice/certification/adapter/Cmpv2ClientAdapter.java [deleted file]
certService/src/main/java/org/onap/aaf/certservice/cmpv2client/api/CmpClient.java
certService/src/main/java/org/onap/aaf/certservice/cmpv2client/impl/CmpClientImpl.java
certService/src/main/java/org/onap/aaf/certservice/cmpv2client/impl/CreateCertRequest.java
certService/src/test/java/org/onap/aaf/certservice/certification/CertificationProviderTest.java
certService/src/test/java/org/onap/aaf/certservice/certification/RsaContentSignerBuilderTest.java [moved from certService/src/test/java/org/onap/aaf/certservice/certification/adapter/RsaContentSignerBuilderTest.java with 95% similarity]
certService/src/test/java/org/onap/aaf/certservice/certification/X509CertificateBuilderTest.java [moved from certService/src/test/java/org/onap/aaf/certservice/certification/adapter/X509CertificateBuilderTest.java with 91% similarity]
certService/src/test/java/org/onap/aaf/certservice/certification/adapter/Cmpv2ClientAdapterTest.java [deleted file]
certService/src/test/java/org/onap/aaf/certservice/cmpv2client/Cmpv2ClientTest.java
certServiceClient/README.md
certServiceClient/pom.xml
certServiceClient/src/main/java/org/onap/aaf/certservice/client/AppExitHandler.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/CertServiceClient.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/api/ExitStatus.java [moved from certServiceClient/src/main/java/org/onap/aaf/certservice/client/api/ExitCode.java with 57% similarity]
certServiceClient/src/main/java/org/onap/aaf/certservice/client/api/ExitableException.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/certification/CsrFactory.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/certification/KeyPairFactory.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/certification/PrivateKeyToPemEncoder.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/certification/conversion/PKCS12FilesCreator.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/certification/conversion/PemToPKCS12Converter.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/certification/exception/CsrGenerationException.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/certification/exception/KeyPairGenerationException.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/certification/exception/PemToPKCS12ConverterException.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/certification/exception/PkEncodingException.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/exception/ClientConfigurationException.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/exception/CsrConfigurationException.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/factory/ClientConfigurationFactory.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/factory/CsrConfigurationFactory.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/model/ClientConfiguration.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/model/CsrConfiguration.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/CloseableHttpClientProvider.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/HttpClient.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/exception/CertServiceApiResponseException.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/exception/HttpClientException.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/httpclient/model/ErrorCertServiceResponse.java
certServiceClient/src/test/java/org/onap/aaf/certservice/client/CertServiceClientTest.java
certServiceClient/src/test/java/org/onap/aaf/certservice/client/DummyExitableException.java [deleted file]
certServiceClient/src/test/java/org/onap/aaf/certservice/client/configuration/model/CsrConfigurationFactoryTest.java
certServiceClient/src/test/java/org/onap/aaf/certservice/client/httpclient/HttpClientTest.java

index c61501b..87888f1 100644 (file)
                                         <dockerFileDir>${project.basedir}</dockerFileDir>
                                         <tags>
                                             <tag>${project.version}-${maven.build.timestamp}Z</tag>
-                                            <tag>${project.version}</tag>
-                                            <tag>${docker-image.latest}</tag>
                                         </tags>
                                     </build>
                                 </image>
index fa2d88a..4435aa7 100644 (file)
 
 package org.onap.aaf.certservice.certification;
 
-import org.onap.aaf.certservice.certification.adapter.Cmpv2ClientAdapter;
+import org.bouncycastle.openssl.jcajce.JcaMiscPEMGenerator;
+import org.bouncycastle.util.io.pem.PemObjectGenerator;
+import org.bouncycastle.util.io.pem.PemWriter;
 import org.onap.aaf.certservice.certification.configuration.model.Cmpv2Server;
-import org.onap.aaf.certservice.certification.exception.Cmpv2ClientAdapterException;
 import org.onap.aaf.certservice.certification.model.CertificationModel;
 import org.onap.aaf.certservice.certification.model.CsrModel;
+import org.onap.aaf.certservice.cmpv2client.api.CmpClient;
 import org.onap.aaf.certservice.cmpv2client.exceptions.CmpClientException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.io.IOException;
+import java.io.StringWriter;
+import java.security.cert.X509Certificate;
+import java.util.List;
+import java.util.stream.Collectors;
+
 @Service
 public class CertificationProvider {
 
-    private final Cmpv2ClientAdapter cmpv2ClientAdapter;
+    private static final Logger LOGGER = LoggerFactory.getLogger(CertificationProvider.class);
+
+    private final CmpClient cmpClient;
 
     @Autowired
-    public  CertificationProvider(Cmpv2ClientAdapter cmpv2ClientAdapter) {
-        this.cmpv2ClientAdapter = cmpv2ClientAdapter;
+    public CertificationProvider(CmpClient cmpClient) {
+        this.cmpClient = cmpClient;
+    }
+
+    public CertificationModel signCsr(CsrModel csrModel, Cmpv2Server server)
+            throws CmpClientException {
+        List<List<X509Certificate>> certificates = cmpClient.createCertificate(csrModel, server);
+        return new CertificationModel(convertFromX509CertificateListToPemList(certificates.get(0)),
+                convertFromX509CertificateListToPemList(certificates.get(1)));
+    }
+
+    private static List<String> convertFromX509CertificateListToPemList(List<X509Certificate> certificates) {
+        return certificates.stream().map(CertificationProvider::convertFromX509CertificateToPem).filter(cert -> !cert.isEmpty())
+                .collect(Collectors.toList());
     }
 
-    CertificationModel signCsr(CsrModel csrModel, Cmpv2Server server)
-            throws CmpClientException, Cmpv2ClientAdapterException {
-        return cmpv2ClientAdapter.callCmpClient(csrModel, server);
+    private static String convertFromX509CertificateToPem(X509Certificate certificate) {
+        StringWriter sw = new StringWriter();
+        try (PemWriter pw = new PemWriter(sw)) {
+            PemObjectGenerator gen = new JcaMiscPEMGenerator(certificate);
+            pw.writeObject(gen);
+        } catch (IOException e) {
+            LOGGER.error("Exception occurred during convert of X509 certificate", e);
+        }
+        return sw.toString();
     }
 
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.aaf.certservice.certification.adapter;
+package org.onap.aaf.certservice.certification;
 
 import java.io.IOException;
 import java.math.BigInteger;
@@ -38,7 +38,7 @@ public class X509CertificateBuilder {
     private static final int SECURE_NEXT_BYTES = 16;
     private static final int VALID_PERIOD_IN_DAYS = 365;
 
-    X509v3CertificateBuilder build(PKCS10CertificationRequest csr) throws IOException {
+    public X509v3CertificateBuilder build(PKCS10CertificationRequest csr) throws IOException {
         return new X509v3CertificateBuilder(csr.getSubject(), createSerial(),
                 Date.from(LocalDateTime.now().toInstant(ZoneOffset.UTC)),
                 Date.from(LocalDateTime.now().plusDays(VALID_PERIOD_IN_DAYS).toInstant(ZoneOffset.UTC)),
diff --git a/certService/src/main/java/org/onap/aaf/certservice/certification/adapter/Cmpv2ClientAdapter.java b/certService/src/main/java/org/onap/aaf/certservice/certification/adapter/Cmpv2ClientAdapter.java
deleted file mode 100644 (file)
index 2477c42..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Cert Service
- * ================================================================================
- * Copyright (C) 2020 Nokia. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.aaf.certservice.certification.adapter;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.security.NoSuchProviderException;
-import java.security.PrivateKey;
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import org.bouncycastle.cert.X509CertificateHolder;
-import org.bouncycastle.cert.X509v3CertificateBuilder;
-import org.bouncycastle.openssl.jcajce.JcaMiscPEMGenerator;
-import org.bouncycastle.operator.ContentSigner;
-import org.bouncycastle.operator.OperatorCreationException;
-import org.bouncycastle.pkcs.PKCS10CertificationRequest;
-import org.bouncycastle.util.io.pem.PemObjectGenerator;
-import org.bouncycastle.util.io.pem.PemWriter;
-import org.onap.aaf.certservice.certification.configuration.model.Cmpv2Server;
-import org.onap.aaf.certservice.certification.exception.Cmpv2ClientAdapterException;
-import org.onap.aaf.certservice.certification.model.CertificationModel;
-import org.onap.aaf.certservice.certification.model.CsrModel;
-import org.onap.aaf.certservice.cmpv2client.api.CmpClient;
-import org.onap.aaf.certservice.cmpv2client.exceptions.CmpClientException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-@Component
-public class Cmpv2ClientAdapter {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(Cmpv2ClientAdapter.class);
-
-    private final CmpClient cmpClient;
-    private final RsaContentSignerBuilder rsaContentSignerBuilder;
-    private final X509CertificateBuilder x509CertificateBuilder;
-    private final CertificateFactoryProvider certificateFactoryProvider;
-
-    @Autowired
-    public Cmpv2ClientAdapter(CmpClient cmpClient, RsaContentSignerBuilder rsaContentSignerBuilder,
-                              X509CertificateBuilder x509CertificateBuilder,
-                              CertificateFactoryProvider certificateFactoryProvider) {
-        this.cmpClient = cmpClient;
-        this.rsaContentSignerBuilder = rsaContentSignerBuilder;
-        this.x509CertificateBuilder = x509CertificateBuilder;
-        this.certificateFactoryProvider = certificateFactoryProvider;
-    }
-
-    /**
-     * Uses CmpClient to call to Cmp Server and gather certificates data
-     *
-     * @param csrModel Certificate Signing Request from Service external  API
-     * @param server   Cmp Server configuration from cmpServers.json
-     * @return container for returned certificates
-     * @throws CmpClientException          Exceptions which comes from Cmp Client
-     * @throws Cmpv2ClientAdapterException Exceptions which comes from Adapter itself
-     */
-    public CertificationModel callCmpClient(CsrModel csrModel, Cmpv2Server server)
-            throws CmpClientException, Cmpv2ClientAdapterException {
-        List<List<X509Certificate>> certificates = cmpClient.createCertificate(server.getCaName(),
-                server.getCaMode().getProfile(), csrModel, server,
-                convertCsrToX509Certificate(csrModel.getCsr(), csrModel.getPrivateKey()));
-        return new CertificationModel(convertFromX509CertificateListToPemList(certificates.get(0)),
-                convertFromX509CertificateListToPemList(certificates.get(1)));
-    }
-
-    private String convertFromX509CertificateToPem(X509Certificate certificate) {
-        StringWriter sw = new StringWriter();
-        try (PemWriter pw = new PemWriter(sw)) {
-            PemObjectGenerator gen = new JcaMiscPEMGenerator(certificate);
-            pw.writeObject(gen);
-        } catch (IOException e) {
-            LOGGER.error("Exception occurred during convert of X509 certificate", e);
-        }
-        return sw.toString();
-    }
-
-    private X509Certificate convertCsrToX509Certificate(PKCS10CertificationRequest csr, PrivateKey privateKey)
-            throws Cmpv2ClientAdapterException {
-        try {
-            X509v3CertificateBuilder certificateGenerator = x509CertificateBuilder.build(csr);
-            ContentSigner signer = rsaContentSignerBuilder.build(csr, privateKey);
-            X509CertificateHolder holder = certificateGenerator.build(signer);
-            return certificateFactoryProvider
-                    .generateCertificate(new ByteArrayInputStream(holder.toASN1Structure().getEncoded()));
-        } catch (IOException | CertificateException | OperatorCreationException | NoSuchProviderException e) {
-            throw new Cmpv2ClientAdapterException(e);
-        }
-    }
-
-    private List<String> convertFromX509CertificateListToPemList(List<X509Certificate> certificates) {
-        return certificates.stream().map(this::convertFromX509CertificateToPem).filter(cert -> !cert.isEmpty())
-                .collect(Collectors.toList());
-    }
-
-}
index 7de3b71..6ff1bf6 100644 (file)
@@ -41,13 +41,8 @@ public interface CmpClient {
    * IAK/RV, Verification of the signature (proof-of-possession) on the request is performed and an
    * Exception thrown if verification fails or issue encountered in fetching certificate from CA.
    *
-   * @param caName    Information about the External Root Certificate Authority (CA) performing the
-   *                  event CA Name. Could be {@code null}.
-   * @param profile   Profile on CA server Client/RA Mode configuration on Server. Could be {@code
-   *                  null}.
    * @param csrModel  Certificate Signing Request model. Must not be {@code null}.
    * @param server    CMPv2 Server. Must not be {@code null}.
-   * @param csr       Certificate Signing Request {.cer} file. Must not be {@code null}.
    * @param notBefore An optional validity to set in the created certificate, Certificate not valid
    *                  before this date.
    * @param notAfter  An optional validity to set in the created certificate, Certificate not valid
@@ -56,11 +51,8 @@ public interface CmpClient {
    * @throws CmpClientException if client error occurs.
    */
   List<List<X509Certificate>> createCertificate(
-      String caName,
-      String profile,
       CsrModel csrModel,
       Cmpv2Server server,
-      X509Certificate csr,
       Date notBefore,
       Date notAfter)
       throws CmpClientException;
@@ -71,21 +63,13 @@ public interface CmpClient {
    * IAK/RV, Verification of the signature (proof-of-possession) on the request is performed and an
    * Exception thrown if verification fails or issue encountered in fetching certificate from CA.
    *
-   * @param caName    Information about the External Root Certificate Authority (CA) performing the
-   *                  event CA Name. Could be {@code null}.
-   * @param profile   Profile on CA server Client/RA Mode configuration on Server. Could be {@code
-   *                  null}.
    * @param csrModel  Certificate Signing Request Model. Must not be {@code null}.
    * @param server    CMPv2 server. Must not be {@code null}.
-   * @param csr       Certificate Signing Request {.cer} file. Must not be {@code null}.
    * @return {@link X509Certificate} The newly created Certificate.
    * @throws CmpClientException if client error occurs.
    */
   List<List<X509Certificate>> createCertificate(
-      String caName,
-      String profile,
       CsrModel csrModel,
-      Cmpv2Server server,
-      X509Certificate csr)
+      Cmpv2Server server)
       throws CmpClientException;
 }
index 79656e9..28731f2 100644 (file)
@@ -48,6 +48,7 @@ import org.bouncycastle.asn1.cmp.PKIBody;
 import org.bouncycastle.asn1.cmp.PKIHeader;
 import org.bouncycastle.asn1.cmp.PKIMessage;
 import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
+import org.onap.aaf.certservice.certification.configuration.model.CaMode;
 import org.onap.aaf.certservice.certification.configuration.model.Cmpv2Server;
 import org.onap.aaf.certservice.certification.model.CsrModel;
 import org.onap.aaf.certservice.cmpv2client.exceptions.CmpClientException;
@@ -64,8 +65,8 @@ public class CmpClientImpl implements CmpClient {
     private static final Logger LOG = LoggerFactory.getLogger(CmpClientImpl.class);
     private final CloseableHttpClient httpClient;
 
-    private static final String DEFAULT_PROFILE = "RA";
     private static final String DEFAULT_CA_NAME = "Certification Authority";
+    private static final String DEFAULT_PROFILE = CaMode.RA.getProfile();
 
     public CmpClientImpl(CloseableHttpClient httpClient) {
         this.httpClient = httpClient;
@@ -73,16 +74,13 @@ public class CmpClientImpl implements CmpClient {
 
     @Override
     public List<List<X509Certificate>> createCertificate(
-            String caName,
-            String profile,
             CsrModel csrModel,
             Cmpv2Server server,
-            X509Certificate cert,
             Date notBefore,
             Date notAfter)
             throws CmpClientException {
 
-        validate(csrModel, server, cert, caName, profile, httpClient, notBefore, notAfter);
+        validate(csrModel, server, httpClient, notBefore, notAfter);
         KeyPair keyPair = new KeyPair(csrModel.getPublicKey(), csrModel.getPrivateKey());
 
         final CreateCertRequest certRequest =
@@ -99,14 +97,13 @@ public class CmpClientImpl implements CmpClient {
 
         final PKIMessage pkiMessage = certRequest.generateCertReq();
         Cmpv2HttpClient cmpv2HttpClient = new Cmpv2HttpClient(httpClient);
-        return retrieveCertificates(caName, csrModel, server, pkiMessage, cmpv2HttpClient);
+        return retrieveCertificates(csrModel, server, pkiMessage, cmpv2HttpClient);
     }
 
     @Override
-    public List<List<X509Certificate>> createCertificate(
-            String caName, String profile, CsrModel csrModel, Cmpv2Server server, X509Certificate csr)
+    public List<List<X509Certificate>> createCertificate(CsrModel csrModel, Cmpv2Server server)
             throws CmpClientException {
-        return createCertificate(caName, profile, csrModel, server, csr, null, null);
+        return createCertificate(csrModel, server, null, null);
     }
 
     private void checkCmpResponse(
@@ -197,25 +194,19 @@ public class CmpClientImpl implements CmpClient {
      *
      * @param csrModel        Certificate Signing Request model. Must not be {@code null}.
      * @param server          CMPv2 Server. Must not be {@code null}.
-     * @param cert            Certificate object needed to validate response from CA server.
-     * @param incomingCaName  Date specifying certificate is not valid before this date.
-     * @param incomingProfile Date specifying certificate is not valid after this date.
      * @throws IllegalArgumentException if Before Date is set after the After Date.
      */
     private static void validate(
             final CsrModel csrModel,
             final Cmpv2Server server,
-            final X509Certificate cert,
-            final String incomingCaName,
-            final String incomingProfile,
             final CloseableHttpClient httpClient,
             final Date notBefore,
             final Date notAfter) {
 
-        String caName = CmpUtil.isNullOrEmpty(incomingCaName) ? incomingCaName : DEFAULT_CA_NAME;
-        String caProfile = CmpUtil.isNullOrEmpty(incomingProfile) ? incomingProfile : DEFAULT_PROFILE;
+        String caName = CmpUtil.isNullOrEmpty(server.getCaName()) ? server.getCaName() : DEFAULT_CA_NAME;
+        String profile = server.getCaMode() != null ? server.getCaMode().getProfile() : DEFAULT_PROFILE;
         LOG.info(
-                "Validate before creating Certificate Request for CA :{} in Mode {} ", caName, caProfile);
+                "Validate before creating Certificate Request for CA :{} in Mode {} ", caName, profile);
 
         CmpUtil.notNull(csrModel, "CsrModel Instance");
         CmpUtil.notNull(csrModel.getSubjectData(), "Subject DN");
@@ -224,7 +215,6 @@ public class CmpClientImpl implements CmpClient {
         CmpUtil.notNull(server.getIssuerDN(), "Issuer DN");
         CmpUtil.notNull(server.getUrl(), "External CA URL");
         CmpUtil.notNull(server.getAuthentication().getIak(), "IAK/RV Password");
-        CmpUtil.notNull(cert, "Certificate Signing Request (CSR)");
         CmpUtil.notNull(httpClient, "Closeable Http Client");
 
         if (notBefore != null && notAfter != null && notBefore.compareTo(notAfter) > 0) {
@@ -233,9 +223,9 @@ public class CmpClientImpl implements CmpClient {
     }
 
     private List<List<X509Certificate>> retrieveCertificates(
-            String caName, CsrModel csrModel, Cmpv2Server server, PKIMessage pkiMessage, Cmpv2HttpClient cmpv2HttpClient)
+            CsrModel csrModel, Cmpv2Server server, PKIMessage pkiMessage, Cmpv2HttpClient cmpv2HttpClient)
             throws CmpClientException {
-        final byte[] respBytes = cmpv2HttpClient.postRequest(pkiMessage, server.getUrl(), caName);
+        final byte[] respBytes = cmpv2HttpClient.postRequest(pkiMessage, server.getUrl(), server.getCaName());
         try {
             final PKIMessage respPkiMessage = PKIMessage.getInstance(respBytes);
             LOG.info("Received response from Server");
index 687c47d..74380d8 100644 (file)
@@ -28,12 +28,9 @@ import java.security.KeyPair;
 import java.util.Date;
 import java.util.List;
 
-import org.bouncycastle.asn1.DERUTF8String;
 import org.bouncycastle.asn1.cmp.PKIBody;
 import org.bouncycastle.asn1.cmp.PKIHeader;
 import org.bouncycastle.asn1.cmp.PKIMessage;
-import org.bouncycastle.asn1.crmf.AttributeTypeAndValue;
-import org.bouncycastle.asn1.crmf.CRMFObjectIdentifiers;
 import org.bouncycastle.asn1.crmf.CertReqMessages;
 import org.bouncycastle.asn1.crmf.CertReqMsg;
 import org.bouncycastle.asn1.crmf.CertRequest;
@@ -114,12 +111,7 @@ class CreateCertRequest {
         final ProofOfPossession proofOfPossession =
                 CmpMessageHelper.generateProofOfPossession(certRequest, subjectKeyPair);
 
-        final AttributeTypeAndValue[] attrTypeVal = {
-                new AttributeTypeAndValue(
-                        CRMFObjectIdentifiers.id_regCtrl_regToken, new DERUTF8String(initAuthPassword))
-        };
-
-        final CertReqMsg certReqMsg = new CertReqMsg(certRequest, proofOfPossession, attrTypeVal);
+        final CertReqMsg certReqMsg = new CertReqMsg(certRequest, proofOfPossession, null);
         final CertReqMessages certReqMessages = new CertReqMessages(certReqMsg);
 
         final PKIHeader pkiHeader =
index f75bd60..cf3c723 100644 (file)
 
 package org.onap.aaf.certservice.certification;
 
+import org.apache.commons.io.IOUtils;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
-import org.onap.aaf.certservice.certification.adapter.Cmpv2ClientAdapter;
 import org.onap.aaf.certservice.certification.configuration.model.Cmpv2Server;
-import org.onap.aaf.certservice.certification.exception.Cmpv2ClientAdapterException;
-import org.onap.aaf.certservice.certification.exception.DecryptionException;
 import org.onap.aaf.certservice.certification.model.CertificationModel;
 import org.onap.aaf.certservice.certification.model.CsrModel;
+import org.onap.aaf.certservice.cmpv2client.api.CmpClient;
 import org.onap.aaf.certservice.cmpv2client.exceptions.CmpClientException;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.security.NoSuchProviderException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mock;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.when;
 
 @ExtendWith(MockitoExtension.class)
 class CertificationProviderTest {
 
-    private CertificationProvider certificationProvider;
-
     @Mock
-    private Cmpv2ClientAdapter cmpv2ClientAdapter;
+    private CsrModel csrModel;
+    @Mock
+    private Cmpv2Server server;
+    @Mock
+    private CsrModel testCsrModel;
+    @Mock
+    private Cmpv2Server testServer;
+    @Mock
+    private CmpClient cmpClient;
+
+    private CertificationProvider certificationProvider;
 
     @BeforeEach
-    void setUp() {
-        certificationProvider = new CertificationProvider(cmpv2ClientAdapter);
+    public void init() {
+        certificationProvider = new CertificationProvider(cmpClient);
     }
 
     @Test
-    void certificationProviderShouldReturnCertificationModelWhenProvidedProperCsrModelAndCmpv2Server()
-            throws CmpClientException, Cmpv2ClientAdapterException {
-        // Given
-        CsrModel testCsrModel = mock(CsrModel.class);
-        Cmpv2Server testServer = mock(Cmpv2Server.class);
-        CertificationModel expectedCertificationModel = mock(CertificationModel.class);
+    void shouldConvertToCertificationModel()
+            throws CertificateException, NoSuchProviderException, IOException, CmpClientException {
+        // When
         when(
-                cmpv2ClientAdapter.callCmpClient(eq(testCsrModel), eq(testServer))
-        ).thenReturn(expectedCertificationModel);
+                cmpClient.createCertificate(any(CsrModel.class), any(Cmpv2Server.class))
+        ).thenReturn(createCorrectClientResponse());
 
-        // When
-        CertificationModel receivedCertificationModel = certificationProvider.signCsr(testCsrModel, testServer);
+        CertificationModel certificationModel = certificationProvider.signCsr(csrModel, server);
 
         // Then
-        assertThat(receivedCertificationModel).isEqualTo(expectedCertificationModel);
+        InputStream certificate = getClass().getClassLoader().getResourceAsStream("certificateModelChain.first");
+        InputStream trustedCertificate =
+                getClass().getClassLoader().getResourceAsStream("trustedCertificatesModel.first");
+        String certificateModel = removeLineEndings(certificationModel.getCertificateChain().get(0));
+        String expectedCertificate =
+                removeLineEndings(IOUtils.toString(Objects.requireNonNull(certificate), StandardCharsets.UTF_8));
+        String trustedCertificateModel = removeLineEndings(certificationModel.getTrustedCertificates().get(0));
+        String expectedTrustedCertificate =
+                removeLineEndings(IOUtils.toString(Objects.requireNonNull(trustedCertificate), StandardCharsets.UTF_8));
+
+        assertThat(certificateModel).isEqualTo(expectedCertificate);
+        assertThat(trustedCertificateModel).isEqualTo(expectedTrustedCertificate);
     }
 
+
     @Test
     void certificationProviderThrowCmpClientWhenCallingClientFails()
-            throws CmpClientException, Cmpv2ClientAdapterException {
+            throws CmpClientException {
         // Given
-        CsrModel testCsrModel = mock(CsrModel.class);
-        Cmpv2Server testServer = mock(Cmpv2Server.class);
         String expectedErrorMessage = "connecting to CMP client failed";
+
         when(
-                cmpv2ClientAdapter.callCmpClient(eq(testCsrModel), eq(testServer))
+                cmpClient.createCertificate(any(CsrModel.class), any(Cmpv2Server.class))
         ).thenThrow(new CmpClientException(expectedErrorMessage));
 
         // When
@@ -91,4 +115,18 @@ class CertificationProviderTest {
         assertThat(exception.getMessage()).isEqualTo(expectedErrorMessage);
     }
 
+    private List<List<X509Certificate>> createCorrectClientResponse()
+            throws CertificateException, NoSuchProviderException {
+        InputStream certificateChain = getClass().getClassLoader().getResourceAsStream("certificateChain.first");
+        InputStream trustedCertificate = getClass().getClassLoader().getResourceAsStream("trustedCertificates.first");
+        X509Certificate x509Certificate = new CertificateFactoryProvider().generateCertificate(certificateChain);
+        X509Certificate x509TrustedCertificate =
+                new CertificateFactoryProvider().generateCertificate(trustedCertificate);
+        return Arrays.asList(Collections.singletonList(x509Certificate),
+                Collections.singletonList(x509TrustedCertificate));
+    }
+
+    private String removeLineEndings(String string) {
+        return string.replace("\n", "").replace("\r", "");
+    }
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.aaf.certservice.certification.adapter;
+package org.onap.aaf.certservice.certification;
 
 import org.bouncycastle.operator.ContentSigner;
 import org.bouncycastle.operator.OperatorCreationException;
 import org.bouncycastle.pkcs.PKCS10CertificationRequest;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.onap.aaf.certservice.certification.RsaContentSignerBuilder;
 import org.onap.aaf.certservice.certification.exception.DecryptionException;
 import org.onap.aaf.certservice.certification.model.CsrModel;
 
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.aaf.certservice.certification.adapter;
+package org.onap.aaf.certservice.certification;
 
 import org.bouncycastle.cert.X509CertificateHolder;
 import org.bouncycastle.cert.X509v3CertificateBuilder;
@@ -38,12 +38,12 @@ import static org.onap.aaf.certservice.certification.TestUtils.createCsrModel;
 
 public class X509CertificateBuilderTest {
 
-    private X509CertificateBuilder certificateBuilde;
+    private X509CertificateBuilder certificateBuilder;
 
 
     @BeforeEach
     void setUp() {
-        certificateBuilde = new X509CertificateBuilder();
+        certificateBuilder = new X509CertificateBuilder();
     }
 
     @Test
@@ -57,7 +57,7 @@ public class X509CertificateBuilderTest {
         ContentSigner createdContentSigner = rsaContentSignerBuilder.build(testCertificationRequest, testPrivateKey);
 
         // When
-        X509v3CertificateBuilder certificateBuilder = certificateBuilde.build(testCertificationRequest);
+        X509v3CertificateBuilder certificateBuilder = this.certificateBuilder.build(testCertificationRequest);
         X509CertificateHolder certificateHolder = certificateBuilder.build(createdContentSigner);
 
         // Then
diff --git a/certService/src/test/java/org/onap/aaf/certservice/certification/adapter/Cmpv2ClientAdapterTest.java b/certService/src/test/java/org/onap/aaf/certservice/certification/adapter/Cmpv2ClientAdapterTest.java
deleted file mode 100644 (file)
index e18d1ff..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Cert Service
- * ================================================================================
- * Copyright (C) 2020 Nokia. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.aaf.certservice.certification.adapter;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-import java.security.NoSuchProviderException;
-import java.security.PrivateKey;
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-
-import org.apache.commons.io.IOUtils;
-import org.bouncycastle.asn1.x509.Certificate;
-import org.bouncycastle.cert.X509CertificateHolder;
-import org.bouncycastle.cert.X509v3CertificateBuilder;
-import org.bouncycastle.operator.ContentSigner;
-import org.bouncycastle.operator.OperatorCreationException;
-import org.bouncycastle.pkcs.PKCS10CertificationRequest;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.onap.aaf.certservice.certification.configuration.model.CaMode;
-import org.onap.aaf.certservice.certification.configuration.model.Cmpv2Server;
-import org.onap.aaf.certservice.certification.exception.Cmpv2ClientAdapterException;
-import org.onap.aaf.certservice.certification.model.CertificationModel;
-import org.onap.aaf.certservice.certification.model.CsrModel;
-import org.onap.aaf.certservice.cmpv2client.api.CmpClient;
-import org.onap.aaf.certservice.cmpv2client.exceptions.CmpClientException;
-import org.springframework.boot.test.context.SpringBootTest;
-
-@SpringBootTest
-class Cmpv2ClientAdapterTest {
-
-    @Mock
-    private CmpClient cmpClient;
-    @Mock
-    private CsrModel csrModel;
-    @Mock
-    private Cmpv2Server server;
-    @Mock
-    private RsaContentSignerBuilder rsaContentSignerBuilder;
-    @Mock
-    private X509CertificateBuilder x509CertificateBuilder;
-    @Mock
-    private PKCS10CertificationRequest csr;
-    @Mock
-    private PrivateKey privateKey;
-    @Mock
-    private X509v3CertificateBuilder x509V3CertificateBuilder;
-    @Mock
-    private ContentSigner contentSigner;
-    @Mock
-    private X509CertificateHolder holder;
-    @Mock
-    private Certificate asn1Certificate;
-    @Mock
-    private X509Certificate certificate;
-    @Mock
-    private CertificateFactoryProvider certificateFactoryProvider;
-
-    @InjectMocks
-    private Cmpv2ClientAdapter adapter;
-
-    private static final CaMode CA_MODEL = CaMode.CLIENT;
-    private static final String TEST_MSG = "Test";
-
-    @Test
-    void adapterShouldRethrowClientExceptionOnFailure()
-            throws CmpClientException, IOException, OperatorCreationException, CertificateException,
-            NoSuchProviderException {
-        // Given
-        stubInternalProperties();
-
-        // When
-        Mockito.when(cmpClient.createCertificate(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any()))
-                .thenThrow(new CmpClientException(TEST_MSG));
-
-        // Then
-        Assertions.assertThrows(CmpClientException.class, () -> adapter.callCmpClient(csrModel, server));
-    }
-
-    @Test
-    void shouldConvertToCertificationModel()
-            throws OperatorCreationException, CertificateException, NoSuchProviderException, IOException,
-            CmpClientException, Cmpv2ClientAdapterException {
-        // Given
-        stubInternalProperties();
-
-        // When
-        Mockito.when(cmpClient.createCertificate(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any()))
-                .thenReturn(createCorrectClientResponse());
-        CertificationModel certificationModel = adapter.callCmpClient(csrModel, server);
-
-        // Then
-        InputStream certificate = getClass().getClassLoader().getResourceAsStream("certificateModelChain.first");
-        InputStream trustedCertificate =
-                getClass().getClassLoader().getResourceAsStream("trustedCertificatesModel.first");
-        String certificateModel = removeLineEndings(certificationModel.getCertificateChain().get(0));
-        String expectedCertificate =
-                removeLineEndings(IOUtils.toString(Objects.requireNonNull(certificate), StandardCharsets.UTF_8));
-        String trustedCertificateModel = removeLineEndings(certificationModel.getTrustedCertificates().get(0));
-        String expectedTrustedCertificate =
-                removeLineEndings(IOUtils.toString(Objects.requireNonNull(trustedCertificate), StandardCharsets.UTF_8));
-
-        Assertions.assertEquals(certificateModel, expectedCertificate);
-        Assertions.assertEquals(trustedCertificateModel, expectedTrustedCertificate);
-    }
-
-    @Test
-    void adapterShouldThrowClientAdapterExceptionOnFailure()
-            throws OperatorCreationException, CertificateException, NoSuchProviderException, IOException,
-            CmpClientException {
-        // Given
-        stubInternalProperties();
-
-        // When
-        Mockito.when(cmpClient.createCertificate(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any()))
-                .thenReturn(createCorrectClientResponse());
-        Mockito.when(certificateFactoryProvider.generateCertificate(Mockito.any()))
-                .thenThrow(new CertificateException(TEST_MSG));
-
-        // Then
-        Assertions.assertThrows(Cmpv2ClientAdapterException.class, () -> adapter.callCmpClient(csrModel, server));
-    }
-
-    private List<List<X509Certificate>> createCorrectClientResponse()
-            throws CertificateException, NoSuchProviderException {
-        InputStream certificateChain = getClass().getClassLoader().getResourceAsStream("certificateChain.first");
-        InputStream trustedCertificate = getClass().getClassLoader().getResourceAsStream("trustedCertificates.first");
-        X509Certificate x509Certificate = new CertificateFactoryProvider().generateCertificate(certificateChain);
-        X509Certificate x509TrustedCertificate =
-                new CertificateFactoryProvider().generateCertificate(trustedCertificate);
-        return Arrays.asList(Collections.singletonList(x509Certificate),
-                Collections.singletonList(x509TrustedCertificate));
-    }
-
-    private String removeLineEndings(String string) {
-        return string.replace("\n", "").replace("\r", "");
-    }
-
-    private void stubInternalProperties()
-            throws IOException, OperatorCreationException, CertificateException, NoSuchProviderException {
-        Mockito.when(server.getCaMode()).thenReturn(CA_MODEL);
-        Mockito.when(csrModel.getCsr()).thenReturn(csr);
-        Mockito.when(csrModel.getPrivateKey()).thenReturn(privateKey);
-        Mockito.when(x509CertificateBuilder.build(csr)).thenReturn(x509V3CertificateBuilder);
-        Mockito.when(rsaContentSignerBuilder.build(csr, privateKey)).thenReturn(contentSigner);
-        Mockito.when(x509V3CertificateBuilder.build(contentSigner)).thenReturn(holder);
-        Mockito.when(holder.toASN1Structure()).thenReturn(asn1Certificate);
-        Mockito.when(certificateFactoryProvider.generateCertificate(Mockito.any())).thenReturn(certificate);
-        Mockito.when(holder.toASN1Structure().getEncoded()).thenReturn("".getBytes());
-    }
-
-}
index bea6b6a..06eeecc 100644 (file)
@@ -153,7 +153,7 @@ class Cmpv2ClientTest {
         CmpClientImpl cmpClient = spy(new CmpClientImpl(httpClient));
         // when
         List<List<X509Certificate>> cmpClientResult =
-                cmpClient.createCertificate("data", "RA", csrModel, server, cert, notBefore, notAfter);
+                cmpClient.createCertificate(csrModel, server, notBefore, notAfter);
         // then
         assertNotNull(cmpClientResult);
     }
@@ -192,7 +192,7 @@ class Cmpv2ClientTest {
         // then
         Assertions.assertThrows(
                 CmpClientException.class,
-                () -> cmpClient.createCertificate("data", "RA", csrModel, server, cert, notBefore, notAfter));
+                () -> cmpClient.createCertificate(csrModel, server, notBefore, notAfter));
     }
 
     @Test
@@ -229,7 +229,7 @@ class Cmpv2ClientTest {
         // then
         Assertions.assertThrows(
                 CmpClientException.class,
-                () -> cmpClient.createCertificate("data", "RA", csrModel, server, cert, notBefore, notAfter));
+                () -> cmpClient.createCertificate(csrModel, server, notBefore, notAfter));
     }
 
     @Test
@@ -248,7 +248,7 @@ class Cmpv2ClientTest {
         // then
         Assertions.assertThrows(
                 IllegalArgumentException.class,
-                () -> cmpClient.createCertificate("data", "RA", csrModel, server, cert, notBefore, notAfter));
+                () -> cmpClient.createCertificate(csrModel, server, notBefore, notAfter));
     }
 
     @Test
@@ -268,7 +268,7 @@ class Cmpv2ClientTest {
         // then
         Assertions.assertThrows(
                 CmpClientException.class,
-                () -> cmpClient.createCertificate("data", "RA", csrModel, server, cert, notBefore, notAfter));
+                () -> cmpClient.createCertificate(csrModel, server, notBefore, notAfter));
     }
 
     private void setCsrModelAndServerValues(String iak, String rv, String externalCaUrl, Date notBefore, Date notAfter) {
index 092eb32..1252021 100644 (file)
@@ -69,11 +69,10 @@ docker logs aaf-certservice-client
 ```
 0      Success
 1      Invalid client configuration
-2      Invalid CSR data 
-3      Failed key pair generation
-4      Failed CSR generation
-5      API return unsuccessful response
-6      Problem with Http Client connection
-7      Failed PKCS12 conversion
-8      Failed Private Key to PEM Encoding
-```
\ No newline at end of file
+2      Invalid CSR configuration 
+3      Fail in key pair generation
+4      Fail in  CSR generation
+5      CertService HTTP unsuccessful response
+6      Internal HTTP Client connection problem
+7      Fail in PKCS12 conversion
+8      Fail in Private Key to PEM Encoding
index 4b7c0cf..0b3b147 100644 (file)
                                         <dockerFileDir>${project.basedir}</dockerFileDir>
                                         <tags>
                                             <tag>${project.version}-${maven.build.timestamp}Z</tag>
-                                            <tag>${project.version}</tag>
-                                            <tag>${docker-image.latest}</tag>
                                         </tags>
                                     </build>
                                 </image>
         </dependency>
     </dependencies>
 
-</project>
\ No newline at end of file
+</project>
index e29142e..caeca37 100644 (file)
  */
 package org.onap.aaf.certservice.client;
 
+import org.onap.aaf.certservice.client.api.ExitStatus;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class AppExitHandler {
-    public static final Logger LOGGER = LoggerFactory.getLogger(AppExitHandler.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(AppExitHandler.class);
 
-    public void exit(int exitCode) {
-        LOGGER.debug("Application exits with following exit code: {}", exitCode);
-        System.exit(exitCode);
+    public void exit(ExitStatus exitStatus) {
+        LOGGER.info(String.format("Application exits with following exit code: %s and message: %s",
+                exitStatus.getExitCodeValue(), exitStatus.getMessage()));
+        System.exit(exitStatus.getExitCodeValue());
     }
-}
\ No newline at end of file
+}
index d3d7f26..0916bb8 100644 (file)
@@ -36,13 +36,17 @@ import org.onap.aaf.certservice.client.configuration.model.CsrConfiguration;
 import org.onap.aaf.certservice.client.httpclient.CloseableHttpClientProvider;
 import org.onap.aaf.certservice.client.httpclient.HttpClient;
 import org.onap.aaf.certservice.client.httpclient.model.CertServiceResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
-import static org.onap.aaf.certservice.client.api.ExitCode.SUCCESS_EXIT_CODE;
+import static org.onap.aaf.certservice.client.api.ExitStatus.SUCCESS;
 import static org.onap.aaf.certservice.client.certification.EncryptionAlgorithmConstants.KEY_SIZE;
 import static org.onap.aaf.certservice.client.certification.EncryptionAlgorithmConstants.RSA_ENCRYPTION_ALGORITHM;
 
 public class CertServiceClient {
 
+    private static final Logger LOGGER = LoggerFactory.getLogger(CertServiceClient.class);
+
     private AppExitHandler appExitHandler;
 
     public CertServiceClient(AppExitHandler appExitHandler) {
@@ -74,8 +78,9 @@ public class CertServiceClient {
             filesCreator.createKeystore(certServiceData.getCertificateChain(), keyPair.getPrivate());
             filesCreator.createTruststore(certServiceData.getTrustedCertificates());
         } catch (ExitableException e) {
-            appExitHandler.exit(e.applicationExitCode());
+            LOGGER.error("Cert Service Client fail in execution: ", e);
+            appExitHandler.exit(e.applicationExitStatus());
         }
-        appExitHandler.exit(SUCCESS_EXIT_CODE.getValue());
+        appExitHandler.exit(SUCCESS);
     }
 }
  */
 package org.onap.aaf.certservice.client.api;
 
-public enum ExitCode {
-    SUCCESS_EXIT_CODE(0),
-    CLIENT_CONFIGURATION_EXCEPTION(1),
-    CSR_CONFIGURATION_EXCEPTION(2),
-    KEY_PAIR_GENERATION_EXCEPTION(3),
-    CSR_GENERATION_EXCEPTION(4),
-    CERT_SERVICE_API_CONNECTION_EXCEPTION(5),
-    HTTP_CLIENT_EXCEPTION(6),
-    PKCS12_CONVERSION_EXCEPTION(7),
-    PK_TO_PEM_ENCODING_EXCEPTION(8);
+public enum ExitStatus {
+
+    SUCCESS(0, "Success"),
+    CLIENT_CONFIGURATION_EXCEPTION(1,"Invalid client configuration"),
+    CSR_CONFIGURATION_EXCEPTION(2,"Invalid CSR configuration"),
+    KEY_PAIR_GENERATION_EXCEPTION(3,"Fail in key pair generation"),
+    CSR_GENERATION_EXCEPTION(4,"Fail in CSR generation"),
+    CERT_SERVICE_API_CONNECTION_EXCEPTION(5,"CertService HTTP unsuccessful response"),
+    HTTP_CLIENT_EXCEPTION(6,"Internal HTTP Client connection problem"),
+    PKCS12_CONVERSION_EXCEPTION(7,"Fail in PKCS12 conversion"),
+    PK_TO_PEM_ENCODING_EXCEPTION(8,"Fail in Private Key to PEM Encoding");
 
     private final int value;
+    private final String message;
 
-    ExitCode(int value) {
+    ExitStatus(int value, String message) {
         this.value = value;
+        this.message = message;
     }
 
-    public int getValue() {
+    public int getExitCodeValue() {
         return value;
     }
+
+    public String getMessage(){
+        return message;
+    }
 }
index f9166c9..fc1bc76 100644 (file)
@@ -26,5 +26,5 @@ public abstract class ExitableException extends Exception {
     public ExitableException(String message) {
         super(message);
     }
-    public abstract int applicationExitCode();
+    public abstract ExitStatus applicationExitStatus();
 }
index 83fa6d4..a7fb3f3 100644 (file)
@@ -40,9 +40,7 @@ import org.slf4j.LoggerFactory;
 import javax.security.auth.x500.X500Principal;
 import java.io.IOException;
 import java.io.StringWriter;
-import java.nio.charset.StandardCharsets;
 import java.security.KeyPair;
-import java.util.Base64;
 import java.util.Optional;
 
 import static org.onap.aaf.certservice.client.certification.EncryptionAlgorithmConstants.COMMON_NAME;
@@ -56,7 +54,7 @@ import static org.onap.aaf.certservice.client.certification.EncryptionAlgorithmC
 
 public class CsrFactory {
 
-    private final Logger LOGGER = LoggerFactory.getLogger(CsrFactory.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(CsrFactory.class);
     private static final String SANS_DELIMITER = ":";
     private final CsrConfiguration configuration;
 
@@ -67,13 +65,14 @@ public class CsrFactory {
 
 
     public String createCsrInPem(KeyPair keyPair) throws CsrGenerationException {
-        PKCS10CertificationRequest request;
+        LOGGER.info("Creation of CSR has been started with following parameters: {}", configuration.toString());
         String csrParameters = getMandatoryParameters().append(getOptionalParameters()).toString();
         X500Principal subject = new X500Principal(csrParameters);
-        request = createPKCS10Csr(subject, keyPair);
-        return convertPKC10CsrToPem(request);
-    }
+        PKCS10CertificationRequest request = createPKCS10Csr(subject, keyPair);
 
+        LOGGER.info("Creation of CSR has been completed successfully");
+        return convertPKCS10CsrToPem(request);
+    }
 
     private StringBuilder getMandatoryParameters() {
         return new StringBuilder(String.format("%s=%s, %s=%s, %s=%s, %s=%s",
@@ -116,9 +115,10 @@ public class CsrFactory {
         return contentSigner;
     }
 
-    private String convertPKC10CsrToPem(PKCS10CertificationRequest request) throws CsrGenerationException {
+    private String convertPKCS10CsrToPem(PKCS10CertificationRequest request) throws CsrGenerationException {
         final StringWriter stringWriter = new StringWriter();
         try (JcaPEMWriter pemWriter = new JcaPEMWriter(stringWriter)) {
+            LOGGER.info("Conversion of CSR to PEM has been started");
             pemWriter.writeObject(request);
         } catch (IOException e) {
             LOGGER.error("Conversion to PEM failed, exception message: {}", e.getMessage());
index 6413686..988d37d 100644 (file)
@@ -39,9 +39,10 @@ public class KeyPairFactory {
 
     public KeyPair create() throws KeyPairGenerationException {
         try {
+            LOGGER.info("KeyPair generation started with algorithm: {} and key size: {}", encryptionAlgorithm, keySize);
             return createKeyPairGenerator().generateKeyPair();
         } catch (NoSuchAlgorithmException e) {
-            LOGGER.error("Generation of KeyPair failed, exception message: " + e.getMessage());
+            LOGGER.error("Generation of KeyPair failed, exception message: {}" , e.getMessage());
             throw new KeyPairGenerationException(e);
         }
     }
index 7799595..7391b11 100644 (file)
@@ -34,16 +34,16 @@ import org.slf4j.LoggerFactory;
 
 public class PrivateKeyToPemEncoder {
 
-    public static final String PEM_OBJECT_TYPE = "RSA PRIVATE KEY";
-    private final Logger LOGGER = LoggerFactory.getLogger(PrivateKeyToPemEncoder.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(PrivateKeyToPemEncoder.class);
+    private static final String PEM_OBJECT_TYPE = "RSA PRIVATE KEY";
 
     public String encodePrivateKeyToPem(PrivateKey pk) throws PkEncodingException {
-        LOGGER.info("Encoding PrivateKey to PEM");
+        LOGGER.info("Attempt to encode private key to PEM");
         StringWriter stringWriter = new StringWriter();
         try (JcaPEMWriter pemWriter = new JcaPEMWriter(stringWriter)) {
             pemWriter.writeObject(new PemObject(PEM_OBJECT_TYPE, pk.getEncoded()));
         } catch (IOException e) {
-            LOGGER.error("Exception occurred during encoding PrivateKey to PEM", e);
+            LOGGER.error("Encode of private key to PEM failed. Exception message: {}", e.getMessage());
             throw new PkEncodingException(e);
         }
         return stringWriter.toString();
index d8c41bf..9b0cfb7 100644 (file)
@@ -29,6 +29,7 @@ import org.slf4j.LoggerFactory;
 
 class PKCS12FilesCreator {
 
+    private static final Logger LOGGER = LoggerFactory.getLogger(PKCS12FilesCreator.class);
     private static final String KEYSTORE_JKS = "keystore.jks";
     private static final String KEYSTORE_PASS = "keystore.pass";
     private static final String TRUSTSTORE_JKS = "truststore.jks";
@@ -37,7 +38,6 @@ class PKCS12FilesCreator {
     private final String keystorePassPath;
     private final String truststoreJksPath;
     private final String truststorePassPath;
-    private final Logger LOGGER = LoggerFactory.getLogger(PKCS12FilesCreator.class);
 
 
     PKCS12FilesCreator(String path) {
@@ -48,7 +48,7 @@ class PKCS12FilesCreator {
     }
 
     void saveKeystoreData(byte[] keystoreData, String keystorePassword) throws PemToPKCS12ConverterException {
-        LOGGER.debug("Creating PKCS12 keystore files and saving data. Keystore path: {}", keystoreJksPath);
+        LOGGER.debug("Attempt to create PKCS12 keystore files and saving data. Keystore path: {}", keystoreJksPath);
 
         saveDataToLocation(keystoreData, keystoreJksPath);
         saveDataToLocation(keystorePassword.getBytes(), keystorePassPath);
@@ -56,7 +56,7 @@ class PKCS12FilesCreator {
 
     void saveTruststoreData(byte[] truststoreData, String truststorePassword)
         throws PemToPKCS12ConverterException {
-        LOGGER.debug("Creating PKCS12 truststore files and saving data. Truststore path: {}", truststoreJksPath);
+        LOGGER.debug("Attempt to create PKCS12 truststore files and saving data. Truststore path: {}", truststoreJksPath);
 
         saveDataToLocation(truststoreData, truststoreJksPath);
         saveDataToLocation(truststorePassword.getBytes(), truststorePassPath);
@@ -66,7 +66,7 @@ class PKCS12FilesCreator {
         try (FileOutputStream fos = new FileOutputStream(path)) {
             fos.write(data);
         } catch (IOException e) {
-            LOGGER.error("PKCS12 files creation failed", e);
+            LOGGER.error("PKCS12 files creation failed, exception message: {}", e.getMessage());
             throw new PemToPKCS12ConverterException(e);
         }
     }
index eab9bf7..ef1666d 100644 (file)
@@ -41,20 +41,20 @@ import org.slf4j.LoggerFactory;
 
 class PemToPKCS12Converter {
 
-    private final static String PKCS12 = "PKCS12";
-    private final static String PASSWORD_ERROR_MSG = "Password should be min. 16 chars long and should contain only alphanumeric characters and special characters like Underscore (_), Dollar ($) and Pound (#)";
+    private static final Logger LOGGER = LoggerFactory.getLogger(PemToPKCS12Converter.class);
+    private static final String PKCS12 = "PKCS12";
+    private static final String PASSWORD_ERROR_MSG = "Password should be min. 16 chars long and should contain only alphanumeric characters and special characters like Underscore (_), Dollar ($) and Pound (#)";
     private final LoadStoreParameter EMPTY_KEYSTORE_CONFIGURATION = null;
-    private final Logger LOGGER = LoggerFactory.getLogger(PemToPKCS12Converter.class);
 
     byte[] convertKeystore(List<String> certificateChain, Password password, String alias, PrivateKey privateKey)
         throws PemToPKCS12ConverterException {
-        LOGGER.debug("Converting PEM certificates to PKCS12 keystore.");
+        LOGGER.info("Conversion of PEM certificates to PKCS12 keystore");
         return convert(certificateChain, password, certs -> getKeyStore(alias, password, certs, privateKey));
     }
 
     byte[] convertTruststore(List<String> trustAnchors, Password password, String alias)
         throws PemToPKCS12ConverterException {
-        LOGGER.debug("Converting PEM certificates to PKCS12 truststore.");
+        LOGGER.info("Conversion of PEM certificates to PKCS12 truststore");
         return convert(trustAnchors, password, certs -> getTrustStore(alias, certs));
     }
 
@@ -79,7 +79,7 @@ class PemToPKCS12Converter {
             ks.store(bos, password.toCharArray());
             return bos.toByteArray();
         } catch (IOException | CertificateException | NoSuchAlgorithmException | KeyStoreException e) {
-            LOGGER.error("Pem to PKCS12 converter failed", e);
+            LOGGER.error("Pem to PKCS12 converter failed, exception message: {}", e.getMessage());
             throw new PemToPKCS12ConverterException(e);
         }
     }
@@ -126,7 +126,7 @@ class PemToPKCS12Converter {
                 .setProvider(new BouncyCastleProvider())
                 .getCertificate(certHolder);
         } catch (IOException | CertificateException e) {
-            LOGGER.error("Certificates conversion failed", e);
+            LOGGER.error("Certificates conversion failed, exception message: {}", e.getMessage());
             throw new PemToPKCS12ConverterException(e);
         }
     }
index c1d4afd..8c93a22 100644 (file)
 
 package org.onap.aaf.certservice.client.certification.exception;
 
-import org.onap.aaf.certservice.client.api.ExitCode;
+import org.onap.aaf.certservice.client.api.ExitStatus;
 import org.onap.aaf.certservice.client.api.ExitableException;
 
 public class CsrGenerationException extends ExitableException {
-    private static final ExitCode EXIT_CODE = ExitCode.CSR_GENERATION_EXCEPTION;
+    private static final ExitStatus EXIT_STATUS = ExitStatus.CSR_GENERATION_EXCEPTION;
 
     public CsrGenerationException(Throwable e) {
         super(e);
     }
 
-    public int applicationExitCode() {
-        return EXIT_CODE.getValue();
+    public ExitStatus applicationExitStatus() {
+        return EXIT_STATUS;
     }
 }
index 6af6988..d03c819 100644 (file)
  */
 package org.onap.aaf.certservice.client.certification.exception;
 
-import org.onap.aaf.certservice.client.api.ExitCode;
+import org.onap.aaf.certservice.client.api.ExitStatus;
 import org.onap.aaf.certservice.client.api.ExitableException;
 
 public class KeyPairGenerationException extends ExitableException {
-    private static final ExitCode EXIT_CODE = ExitCode.KEY_PAIR_GENERATION_EXCEPTION;
+    private static final ExitStatus EXIT_STATUS = ExitStatus.KEY_PAIR_GENERATION_EXCEPTION;
 
     public KeyPairGenerationException(Throwable e) {
         super(e);
     }
 
-    public int applicationExitCode() {
-        return EXIT_CODE.getValue();
+    public ExitStatus applicationExitStatus() {
+        return EXIT_STATUS;
     }
 }
index 87020d6..b98f4ac 100644 (file)
 
 package org.onap.aaf.certservice.client.certification.exception;
 
-import org.onap.aaf.certservice.client.api.ExitCode;
+import org.onap.aaf.certservice.client.api.ExitStatus;
 import org.onap.aaf.certservice.client.api.ExitableException;
 
 public class PemToPKCS12ConverterException extends ExitableException {
-    private static final ExitCode EXIT_CODE = ExitCode.PKCS12_CONVERSION_EXCEPTION;
+    private static final ExitStatus EXIT_STATUS = ExitStatus.PKCS12_CONVERSION_EXCEPTION;
 
     public PemToPKCS12ConverterException(Throwable e) {
         super(e);
@@ -33,7 +33,7 @@ public class PemToPKCS12ConverterException extends ExitableException {
     }
 
     @Override
-    public int applicationExitCode() {
-        return EXIT_CODE.getValue();
+    public ExitStatus applicationExitStatus() {
+        return EXIT_STATUS;
     }
 }
index 596a6a4..20d623a 100644 (file)
 
 package org.onap.aaf.certservice.client.certification.exception;
 
-import org.onap.aaf.certservice.client.api.ExitCode;
+import org.onap.aaf.certservice.client.api.ExitStatus;
 import org.onap.aaf.certservice.client.api.ExitableException;
 
 public class PkEncodingException extends ExitableException {
-    private static final ExitCode EXIT_CODE = ExitCode.PK_TO_PEM_ENCODING_EXCEPTION;
+    private static final ExitStatus EXIT_STATUS = ExitStatus.PK_TO_PEM_ENCODING_EXCEPTION;
 
     public PkEncodingException(Throwable e) {
         super(e);
     }
 
-    public int applicationExitCode() {
-        return EXIT_CODE.getValue();
+    public ExitStatus applicationExitStatus() {
+        return EXIT_STATUS;
     }
 }
index 5d968f4..f9360d7 100644 (file)
  */
 package org.onap.aaf.certservice.client.configuration.exception;
 
-import org.onap.aaf.certservice.client.api.ExitCode;
+import org.onap.aaf.certservice.client.api.ExitStatus;
 import org.onap.aaf.certservice.client.api.ExitableException;
 
 public class ClientConfigurationException extends ExitableException {
-    private static final ExitCode EXIT_CODE = ExitCode.CLIENT_CONFIGURATION_EXCEPTION;
+    private static final ExitStatus EXIT_STATUS = ExitStatus.CLIENT_CONFIGURATION_EXCEPTION;
 
     public ClientConfigurationException(String message) {
         super(message);
     }
 
-    public int applicationExitCode() {
-        return EXIT_CODE.getValue();
+    public ExitStatus applicationExitStatus() {
+        return EXIT_STATUS;
     }
 }
index f937311..a7cf4f7 100644 (file)
  */
 package org.onap.aaf.certservice.client.configuration.exception;
 
-import org.onap.aaf.certservice.client.api.ExitCode;
+import org.onap.aaf.certservice.client.api.ExitStatus;
 import org.onap.aaf.certservice.client.api.ExitableException;
 
 public class CsrConfigurationException extends ExitableException {
-    private static final ExitCode EXIT_CODE = ExitCode.CSR_CONFIGURATION_EXCEPTION;
+    private static final ExitStatus EXIT_STATUS = ExitStatus.CSR_CONFIGURATION_EXCEPTION;
 
     public CsrConfigurationException(String message) {
         super(message);
     }
 
-    public int applicationExitCode() {
-        return EXIT_CODE.getValue();
+    public ExitStatus applicationExitStatus() {
+        return EXIT_STATUS;
     }
 }
index 26a2b1b..a03ded6 100644 (file)
@@ -24,9 +24,12 @@ import org.onap.aaf.certservice.client.configuration.ClientConfigurationEnvs;
 import org.onap.aaf.certservice.client.configuration.EnvsForClient;
 import org.onap.aaf.certservice.client.configuration.exception.ClientConfigurationException;
 import org.onap.aaf.certservice.client.configuration.model.ClientConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class ClientConfigurationFactory extends AbstractConfigurationFactory<ClientConfiguration> {
 
+    private static final Logger LOGGER = LoggerFactory.getLogger(ClientConfigurationFactory.class);
     private final EnvsForClient envsForClient;
 
     public ClientConfigurationFactory(EnvsForClient envsForClient) {
@@ -54,6 +57,8 @@ public class ClientConfigurationFactory extends AbstractConfigurationFactory<Cli
                 .map(configuration::setCaName)
                 .orElseThrow(() -> new ClientConfigurationException(ClientConfigurationEnvs.CA_NAME + " is invalid."));
 
+        LOGGER.info("Successful validation of Client configuration. Configuration data: {}", configuration.toString());
+
         return configuration;
     }
 }
index a6e8618..a94c906 100644 (file)
@@ -24,9 +24,12 @@ import org.onap.aaf.certservice.client.configuration.CsrConfigurationEnvs;
 import org.onap.aaf.certservice.client.configuration.EnvsForCsr;
 import org.onap.aaf.certservice.client.configuration.exception.CsrConfigurationException;
 import org.onap.aaf.certservice.client.configuration.model.CsrConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class CsrConfigurationFactory extends AbstractConfigurationFactory<CsrConfiguration> {
 
+    private static final Logger LOGGER = LoggerFactory.getLogger(CsrConfigurationFactory.class);
     private final EnvsForCsr envsForCsr;
 
 
@@ -67,6 +70,8 @@ public class CsrConfigurationFactory extends AbstractConfigurationFactory<CsrCon
         envsForCsr.getSubjectAlternativesName()
                 .map(configuration::setSubjectAlternativeNames);
 
+        LOGGER.info("Successful validation of CSR configuration. Configuration data: {}", configuration.toString());
+
         return configuration;
     }
 }
index d1c1c68..ff2db83 100644 (file)
@@ -20,6 +20,8 @@
 
 package org.onap.aaf.certservice.client.configuration.model;
 
+import org.onap.aaf.certservice.client.configuration.ClientConfigurationEnvs;
+
 public class ClientConfiguration implements ConfigurationModel {
 
     private static final Integer DEFAULT_TIMEOUT_MS = 30000;
@@ -72,4 +74,13 @@ public class ClientConfiguration implements ConfigurationModel {
         this.caName = caName;
         return this;
     }
+
+    @Override
+    public String toString() {
+        return String.format("%s: %s, %s: %s, %s: %s, %s: %s",
+                ClientConfigurationEnvs.REQUEST_URL, urlToCertService,
+                ClientConfigurationEnvs.REQUEST_TIMEOUT, requestTimeout,
+                ClientConfigurationEnvs.OUTPUT_PATH, certsOutputPath,
+                ClientConfigurationEnvs.CA_NAME, caName);
+    }
 }
index aaaf10f..55f33c9 100644 (file)
@@ -21,6 +21,8 @@
 package org.onap.aaf.certservice.client.configuration.model;
 
 
+import org.onap.aaf.certservice.client.configuration.CsrConfigurationEnvs;
+
 public class CsrConfiguration implements ConfigurationModel {
 
     private String commonName;
@@ -94,4 +96,16 @@ public class CsrConfiguration implements ConfigurationModel {
         this.sans = subjectAlternativeNames;
         return this;
     }
+
+    @Override
+    public String toString() {
+        return String.format("%s: %s, %s: %s, %s: %s, %s: %s, %s: %s, %s: %s, %s: %s",
+                CsrConfigurationEnvs.COMMON_NAME, commonName,
+                CsrConfigurationEnvs.COUNTRY, country,
+                CsrConfigurationEnvs.STATE, state,
+                CsrConfigurationEnvs.ORGANIZATION, organization,
+                CsrConfigurationEnvs.ORGANIZATION_UNIT, organizationUnit,
+                CsrConfigurationEnvs.LOCATION, location,
+                CsrConfigurationEnvs.SANS, sans);
+    }
 }
index ff29a14..5ad933f 100644 (file)
@@ -34,7 +34,11 @@ public class CloseableHttpClientProvider {
 
     public CloseableHttpClient getClient() {
         RequestConfig config =
-                RequestConfig.custom().setConnectionRequestTimeout(timeout).build();
+                RequestConfig.custom()
+                        .setConnectionRequestTimeout(timeout)
+                        .setConnectTimeout(timeout)
+                        .setSocketTimeout(timeout)
+                        .build();
         return HttpClientBuilder.create().setDefaultRequestConfig(config).build();
     }
 }
index 30f881b..7512830 100644 (file)
@@ -38,12 +38,11 @@ import java.io.IOException;
 
 public class HttpClient {
 
+    private static final Logger LOGGER = LoggerFactory.getLogger(HttpClient.class);
     private static final String CSR_HEADER_NAME = "CSR";
     private static final String PK_HEADER_NAME = "PK";
     private static final String CHARSET_UTF_8 = "UTF-8";
 
-    private final Logger LOGGER = LoggerFactory.getLogger(HttpClient.class);
-
     private final Gson gson = new Gson();
     private final CloseableHttpClientProvider httpClientProvider;
     private final String certServiceAddress;
@@ -57,20 +56,24 @@ public class HttpClient {
             throws CertServiceApiResponseException, HttpClientException {
 
         try (CloseableHttpClient httpClient = httpClientProvider.getClient()) {
-            LOGGER.info("Sending request to API. Url: {}{} ", certServiceAddress, caName);
+            LOGGER.info("Attempt to send request to API, on url: {}{} ", certServiceAddress, caName);
             HttpResponse httpResponse = httpClient.execute(createHttpRequest(caName, csr, encodedPk));
             LOGGER.info("Received response from API");
             return extractCertServiceResponse(httpResponse);
 
         } catch (IOException e) {
-            LOGGER.error("Failed execute request to API for URL: {}{} . Exception message: {}",
+            LOGGER.error("Failed execute request to API for URL: {}{} , exception message: {}",
                     certServiceAddress, caName, e.getMessage());
             throw new HttpClientException(e);
         }
     }
 
-    private int getStatusCode(HttpResponse httpResponse) {
-        return httpResponse.getStatusLine().getStatusCode();
+    private HttpGet createHttpRequest(String caName, String csr, String pk) {
+        String url = certServiceAddress + caName;
+        HttpGet httpGet = new HttpGet(url);
+        httpGet.addHeader(CSR_HEADER_NAME, csr);
+        httpGet.addHeader(PK_HEADER_NAME, pk);
+        return httpGet;
     }
 
     private CertServiceResponse extractCertServiceResponse(HttpResponse httpResponse)
@@ -84,34 +87,25 @@ public class HttpClient {
         return gson.fromJson(jsonResponse, CertServiceResponse.class);
     }
 
-    private String getStringResponse(HttpEntity httpEntity) throws HttpClientException {
-        try {
-            return EntityUtils.toString(httpEntity, CHARSET_UTF_8);
-        } catch (IOException e) {
-            LOGGER.error("Cannot parse response to string", e);
-            throw new HttpClientException(e);
-        }
-    }
-
-    private HttpGet createHttpRequest(String caName, String csr, String pk) {
-        String url = certServiceAddress + caName;
-        HttpGet httpGet = new HttpGet(url);
-        httpGet.addHeader(CSR_HEADER_NAME, csr);
-        httpGet.addHeader(PK_HEADER_NAME, pk);
-        return httpGet;
-    }
-
-
     private CertServiceApiResponseException generateApiResponseException(HttpResponse httpResponse)
             throws HttpClientException {
         String stringResponse = getStringResponse(httpResponse.getEntity());
         ErrorCertServiceResponse errorCertServiceResponse =
                 gson.fromJson(stringResponse, ErrorCertServiceResponse.class);
 
-        String messageFromApi = errorCertServiceResponse.getMessage();
-        String path = errorCertServiceResponse.getPath();
-        int httpResponseCode = getStatusCode(httpResponse);
+        return new CertServiceApiResponseException(getStatusCode(httpResponse), errorCertServiceResponse.getMessage());
+    }
 
-        return new CertServiceApiResponseException(certServiceAddress + path, httpResponseCode, messageFromApi);
+    private int getStatusCode(HttpResponse httpResponse) {
+        return httpResponse.getStatusLine().getStatusCode();
+    }
+
+    private String getStringResponse(HttpEntity httpEntity) throws HttpClientException {
+        try {
+            return EntityUtils.toString(httpEntity, CHARSET_UTF_8);
+        } catch (IOException e) {
+            LOGGER.error("Cannot parse response to string, exception message: {}", e.getMessage());
+            throw new HttpClientException(e);
+        }
     }
 }
index 7286318..151c2a1 100644 (file)
 
 package org.onap.aaf.certservice.client.httpclient.exception;
 
-import org.onap.aaf.certservice.client.api.ExitCode;
+import org.onap.aaf.certservice.client.api.ExitStatus;
 import org.onap.aaf.certservice.client.api.ExitableException;
 
 public class CertServiceApiResponseException extends ExitableException {
-    private static final ExitCode EXIT_CODE = ExitCode.CERT_SERVICE_API_CONNECTION_EXCEPTION;
+    private static final ExitStatus EXIT_STATUS = ExitStatus.CERT_SERVICE_API_CONNECTION_EXCEPTION;
 
-    public CertServiceApiResponseException(String url, int responseCode, String messageFromAPI) {
+    public CertServiceApiResponseException(int responseCode, String messageFromAPI) {
 
-        super(String.format("Request failed for URL '%s'. Response code: %d . Message from API: %s",
-                url,
+        super(String.format("CertService HTTP unsuccessful response. Response code: %d . Message from Service: %s",
                 responseCode,
                 messageFromAPI));
     }
 
     @Override
-    public int applicationExitCode() {
-        return EXIT_CODE.getValue();
+    public ExitStatus applicationExitStatus() {
+        return EXIT_STATUS;
     }
 
 }
index 28f8307..697d152 100644 (file)
 
 package org.onap.aaf.certservice.client.httpclient.exception;
 
-import org.onap.aaf.certservice.client.api.ExitCode;
+import org.onap.aaf.certservice.client.api.ExitStatus;
 import org.onap.aaf.certservice.client.api.ExitableException;
 
 public class HttpClientException extends ExitableException {
-    private static final ExitCode EXIT_CODE = ExitCode.HTTP_CLIENT_EXCEPTION;
+    private static final ExitStatus EXIT_STATUS = ExitStatus.HTTP_CLIENT_EXCEPTION;
 
-    public HttpClientException(Throwable e) {
+    public HttpClientException(Throwable e){
         super(e);
     }
 
     @Override
-    public int applicationExitCode() {
-        return EXIT_CODE.getValue();
+    public ExitStatus applicationExitStatus() {
+        return EXIT_STATUS;
     }
 }
index 6fe99ce..4a9efcb 100644 (file)
@@ -22,19 +22,14 @@ package org.onap.aaf.certservice.client.httpclient.model;
 
 public class ErrorCertServiceResponse {
 
-    private final String message;
-    private final String path;
+    private final String errorMessage;
 
-    public ErrorCertServiceResponse(String message, String path) {
-        this.message = message;
-        this.path = path;
+    public ErrorCertServiceResponse(String errorMessage) {
+        this.errorMessage = errorMessage;
     }
 
     public String getMessage() {
-        return message;
+        return errorMessage;
     }
 
-    public String getPath() {
-        return path;
-    }
 }
index 9e73301..7e7bf5d 100644 (file)
@@ -25,8 +25,8 @@ import org.mockito.junit.jupiter.MockitoExtension;
 
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.verify;
-import static org.onap.aaf.certservice.client.api.ExitCode.CLIENT_CONFIGURATION_EXCEPTION;
-import static org.onap.aaf.certservice.client.api.ExitCode.SUCCESS_EXIT_CODE;
+import static org.onap.aaf.certservice.client.api.ExitStatus.CLIENT_CONFIGURATION_EXCEPTION;
+import static org.onap.aaf.certservice.client.api.ExitStatus.SUCCESS;
 
 @ExtendWith(MockitoExtension.class)
 class CertServiceClientTest {
@@ -35,13 +35,13 @@ class CertServiceClientTest {
     @Test
     public void shouldExitWithDefinedExitCode_onRunCallWhenNoEnvsPresent() {
         //  given
-        doNothing().when(appExitHandler).exit(CLIENT_CONFIGURATION_EXCEPTION.getValue());
-        doNothing().when(appExitHandler).exit(SUCCESS_EXIT_CODE.getValue());
+        doNothing().when(appExitHandler).exit(CLIENT_CONFIGURATION_EXCEPTION);
+        doNothing().when(appExitHandler).exit(SUCCESS);
         CertServiceClient certServiceClient = new CertServiceClient(appExitHandler);
         //  when
         certServiceClient.run();
         //  then
-        verify(appExitHandler).exit(CLIENT_CONFIGURATION_EXCEPTION.getValue());
-        verify(appExitHandler).exit(SUCCESS_EXIT_CODE.getValue());
+        verify(appExitHandler).exit(CLIENT_CONFIGURATION_EXCEPTION);
+        verify(appExitHandler).exit(SUCCESS);
     }
-}
\ No newline at end of file
+}
diff --git a/certServiceClient/src/test/java/org/onap/aaf/certservice/client/DummyExitableException.java b/certServiceClient/src/test/java/org/onap/aaf/certservice/client/DummyExitableException.java
deleted file mode 100644 (file)
index 80a2f72..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*============LICENSE_START=======================================================
- * aaf-certservice-client
- * ================================================================================
- * Copyright (C) 2020 Nokia. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-package org.onap.aaf.certservice.client;
-
-import org.onap.aaf.certservice.client.api.ExitableException;
-
-class DummyExitableException extends ExitableException {
-    private static final int EXIT_CODE = 888;
-
-    DummyExitableException() {
-        super("This is Test Exitable Exception");
-    }
-
-    @Override
-    public int applicationExitCode() {
-        return EXIT_CODE;
-    }
-
-}
index bb566e8..6ab1bff 100644 (file)
@@ -23,19 +23,18 @@ package org.onap.aaf.certservice.client.configuration.model;
 import org.assertj.core.api.Condition;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.onap.aaf.certservice.client.api.ExitCode;
 import org.onap.aaf.certservice.client.configuration.CsrConfigurationEnvs;
 import org.onap.aaf.certservice.client.configuration.EnvsForCsr;
 import org.onap.aaf.certservice.client.configuration.exception.CsrConfigurationException;
 import org.onap.aaf.certservice.client.configuration.factory.CsrConfigurationFactory;
 
 import java.util.Optional;
-import java.util.function.Predicate;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
+import static org.onap.aaf.certservice.client.api.ExitStatus.CSR_CONFIGURATION_EXCEPTION;
 
 public class CsrConfigurationFactoryTest {
 
@@ -55,7 +54,7 @@ public class CsrConfigurationFactoryTest {
     private Condition<CsrConfigurationException> expectedExitCodeCondition = new Condition<>("Correct exit code"){
         @Override
         public boolean matches(CsrConfigurationException e) {
-            return e.applicationExitCode() == ExitCode.CSR_CONFIGURATION_EXCEPTION.getValue();
+            return e.applicationExitStatus() == CSR_CONFIGURATION_EXCEPTION;
         }
     };
 
index 461b7a3..2a53941 100644 (file)
@@ -27,7 +27,6 @@ import org.apache.http.client.methods.HttpGet;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.onap.aaf.certservice.client.api.ExitCode;
 import org.onap.aaf.certservice.client.httpclient.exception.CertServiceApiResponseException;
 import org.onap.aaf.certservice.client.httpclient.exception.HttpClientException;
 import org.onap.aaf.certservice.client.httpclient.model.CertServiceResponse;
@@ -38,9 +37,8 @@ import java.util.List;
 
 import static java.net.HttpURLConnection.HTTP_BAD_REQUEST;
 import static java.net.HttpURLConnection.HTTP_OK;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -89,60 +87,49 @@ class HttpClientTest {
         List<String> trustedCertificate = certServiceResponse.getTrustedCertificates();
 
         // then
-        assertNotNull(certServiceResponse);
+        assertThat(certServiceResponse).isNotNull();
 
         final int expectedTwoElements = 2;
-        assertEquals(expectedTwoElements, certificateChain.size());
-        assertEquals(expectedTwoElements, trustedCertificate.size());
 
-        assertEquals(EXPECTED_FIRST_ELEMENT_OF_CERTIFICATE_CHAIN, certificateChain.get(0));
-        assertEquals(EXPECTED_FIRST_ELEMENT_OF_TRUSTED_CERTIFICATES, trustedCertificate.get(0));
+        assertThat(certificateChain).hasSize(expectedTwoElements);
+        assertThat(trustedCertificate).hasSize(expectedTwoElements);
+
+        assertThat(certificateChain.get(0)).isEqualTo(EXPECTED_FIRST_ELEMENT_OF_CERTIFICATE_CHAIN);
+        assertThat(trustedCertificate.get(0)).isEqualTo(EXPECTED_FIRST_ELEMENT_OF_TRUSTED_CERTIFICATES);
     }
 
     @Test
     void shouldThrowCertServiceApiResponseException_WhenPkHeaderIsMissing() throws Exception {
 
-        // given
+        //given
         mockServerResponse(HTTP_BAD_REQUEST, MISSING_PK_RESPONSE);
 
-        // when
-        CertServiceApiResponseException exception =
-                assertThrows(CertServiceApiResponseException.class,
-                        () -> httpClient.retrieveCertServiceData(CA_NAME, CSR, ""));
-
-        // then
-        assertEquals(ExitCode.CERT_SERVICE_API_CONNECTION_EXCEPTION.getValue(), exception.applicationExitCode());
+        //when //then
+        assertThatExceptionOfType(CertServiceApiResponseException.class)
+                .isThrownBy(()->httpClient.retrieveCertServiceData(CA_NAME, CSR, ""));
     }
 
     @Test
-    void shouldThrowHttpClientException_WhenCannotExecuteRequestToAPI() throws Exception{
+    void shouldThrowHttpClientException_WhenCannotExecuteRequestToAPI() throws Exception {
 
         //given
         when(closeableHttpClient.execute(any(HttpGet.class))).thenThrow(IOException.class);
 
-        //when
-        HttpClientException exception =
-                assertThrows(HttpClientException.class,
-                        () -> httpClient.retrieveCertServiceData(CA_NAME, CSR, ""));
-
-        //then
-        assertEquals(ExitCode.HTTP_CLIENT_EXCEPTION.getValue(), exception.applicationExitCode());
+        //when //then
+        assertThatExceptionOfType(HttpClientException.class)
+                .isThrownBy(()->httpClient.retrieveCertServiceData(CA_NAME, CSR, ""));
     }
 
     @Test
-    void shouldThrowHttpClientException_WhenCannotParseResponseToString() throws Exception{
+    void shouldThrowHttpClientException_WhenCannotParseResponseToString() throws Exception {
 
         //given
         mockServerResponse(HTTP_OK, CORRECT_RESPONSE);
         when(httpEntity.getContent()).thenThrow(IOException.class);
 
-        //when
-        HttpClientException exception =
-                assertThrows(HttpClientException.class,
-                        () -> httpClient.retrieveCertServiceData(CA_NAME, CSR, ""));
-
-        //then
-        assertEquals(ExitCode.HTTP_CLIENT_EXCEPTION.getValue(), exception.applicationExitCode());
+        //when //then
+        assertThatExceptionOfType(HttpClientException.class)
+                .isThrownBy(()->httpClient.retrieveCertServiceData(CA_NAME, CSR, ""));
     }
 
     private void mockServerResponse(int serverCodeResponse, String stringResponse)