Implementation of KeyPair generation
authorkjaniak <kornel.janiak@nokia.com>
Wed, 19 Feb 2020 15:42:38 +0000 (16:42 +0100)
committerkjaniak <kornel.janiak@nokia.com>
Wed, 26 Feb 2020 08:03:21 +0000 (09:03 +0100)
Issue-ID: AAF-996
Change-Id: I97626d122033127d5bb234d134c20d0b5a6d7c03
Signed-off-by: kjaniak <kornel.janiak@nokia.com>
29 files changed:
certServiceClient/pom.xml
certServiceClient/src/main/java/org/onap/aaf/certservice/client/AppExitHandler.java [new file with mode: 0644]
certServiceClient/src/main/java/org/onap/aaf/certservice/client/CertServiceClient.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/MainApp.java [moved from certServiceClient/src/main/java/org/onap/aaf/certservice/client/CertServiceClientApp.java with 93% similarity]
certServiceClient/src/main/java/org/onap/aaf/certservice/client/api/ExitCode.java [new file with mode: 0644]
certServiceClient/src/main/java/org/onap/aaf/certservice/client/api/ExitableException.java [new file with mode: 0644]
certServiceClient/src/main/java/org/onap/aaf/certservice/client/certification/EncryptionAlgorithmConstants.java [moved from certServiceClient/src/main/java/org/onap/aaf/certservice/client/exceptions/ClientConfigurationException.java with 73% similarity]
certServiceClient/src/main/java/org/onap/aaf/certservice/client/certification/KeyPairFactory.java [new file with mode: 0644]
certServiceClient/src/main/java/org/onap/aaf/certservice/client/certification/exception/KeyPairGenerationException.java [new file with mode: 0644]
certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/ClientConfigurationEnvs.java [moved from certServiceClient/src/main/java/org/onap/aaf/certservice/client/common/ClientConfigurationEnvs.java with 92% similarity]
certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/CsrConfigurationEnvs.java [moved from certServiceClient/src/main/java/org/onap/aaf/certservice/client/common/CsrConfigurationEnvs.java with 93% similarity]
certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/EnvProvider.java [moved from certServiceClient/src/main/java/org/onap/aaf/certservice/client/common/EnvProvider.java with 86% similarity]
certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/EnvValidationUtils.java [moved from certServiceClient/src/main/java/org/onap/aaf/certservice/client/common/EnvValidationUtils.java with 96% similarity]
certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/EnvsForClient.java [moved from certServiceClient/src/main/java/org/onap/aaf/certservice/client/common/EnvsForClient.java with 83% similarity]
certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/EnvsForCsr.java [moved from certServiceClient/src/main/java/org/onap/aaf/certservice/client/common/EnvsForCsr.java with 93% similarity]
certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/exception/ClientConfigurationException.java [new file with mode: 0644]
certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/exception/CsrConfigurationException.java [moved from certServiceClient/src/main/java/org/onap/aaf/certservice/client/exceptions/CsrConfigurationException.java with 70% similarity]
certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/factory/AbstractConfigurationFactory.java [moved from certServiceClient/src/main/java/org/onap/aaf/certservice/client/model/AbstractConfigurationFactory.java with 86% similarity]
certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/factory/ClientConfigurationFactory.java [moved from certServiceClient/src/main/java/org/onap/aaf/certservice/client/model/ClientConfigurationFactory.java with 77% similarity]
certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/factory/CsrConfigurationFactory.java [moved from certServiceClient/src/main/java/org/onap/aaf/certservice/client/model/CsrConfigurationFactory.java with 82% similarity]
certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/model/ClientConfiguration.java [moved from certServiceClient/src/main/java/org/onap/aaf/certservice/client/model/ClientConfiguration.java with 93% similarity]
certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/model/ConfigurationModel.java [moved from certServiceClient/src/main/java/org/onap/aaf/certservice/client/model/ConfigurationModel.java with 91% similarity]
certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/model/CsrConfiguration.java [moved from certServiceClient/src/main/java/org/onap/aaf/certservice/client/model/CsrConfiguration.java with 96% similarity]
certServiceClient/src/test/java/org/onap/aaf/certservice/client/CertServiceClientTest.java
certServiceClient/src/test/java/org/onap/aaf/certservice/client/DummyExitableException.java [new file with mode: 0644]
certServiceClient/src/test/java/org/onap/aaf/certservice/client/certification/KeyPairFactoryTest.java [new file with mode: 0644]
certServiceClient/src/test/java/org/onap/aaf/certservice/client/configuration/model/ClientConfigurationFactoryTest.java [moved from certServiceClient/src/test/java/org/onap/aaf/certservice/client/model/ClientConfigurationFactoryTest.java with 92% similarity]
certServiceClient/src/test/java/org/onap/aaf/certservice/client/configuration/model/CsrConfigurationFactoryTest.java [moved from certServiceClient/src/test/java/org/onap/aaf/certservice/client/model/CsrConfigurationFactoryTest.java with 92% similarity]
pom.xml

index c6a1775..f092990 100644 (file)
@@ -58,7 +58,7 @@
                                 <configuration>
                                     <transformers>
                                         <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
-                                            <mainClass>org.onap.aaf.certservice.client.CertServiceClientApp</mainClass>
+                                            <mainClass>org.onap.aaf.certservice.client.MainApp</mainClass>
                                         </transformer>
                                     </transformers>
                                 </configuration>
 
     <dependencies>
         <dependency>
-            <groupId>org.assertj</groupId>
-            <artifactId>assertj-core</artifactId>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcpkix-jdk15on</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
         </dependency>
         <dependency>
             <groupId>org.junit.jupiter</groupId>
             <groupId>org.mockito</groupId>
             <artifactId>mockito-junit-jupiter</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-log4j2</artifactId>
diff --git a/certServiceClient/src/main/java/org/onap/aaf/certservice/client/AppExitHandler.java b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/AppExitHandler.java
new file mode 100644 (file)
index 0000000..3e33a48
--- /dev/null
@@ -0,0 +1,31 @@
+/*============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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class AppExitHandler {
+    public 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);
+    }
+}
\ No newline at end of file
index 6e83a40..ac1062a 100644 (file)
 
 package org.onap.aaf.certservice.client;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.onap.aaf.certservice.client.api.ExitableException;
+import org.onap.aaf.certservice.client.certification.KeyPairFactory;
+import org.onap.aaf.certservice.client.configuration.EnvsForClient;
+import org.onap.aaf.certservice.client.configuration.EnvsForCsr;
+import org.onap.aaf.certservice.client.configuration.factory.ClientConfigurationFactory;
+import org.onap.aaf.certservice.client.configuration.factory.CsrConfigurationFactory;
+import org.onap.aaf.certservice.client.configuration.model.ClientConfiguration;
+import org.onap.aaf.certservice.client.configuration.model.CsrConfiguration;
+
+import java.security.KeyPair;
+import java.util.Optional;
+
+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) {
+        this.appExitHandler = appExitHandler;
+    }
+
+    public void run() {
+        ClientConfiguration clientConfiguration;
+        CsrConfiguration csrConfiguration;
+        clientConfiguration = new ClientConfigurationFactory(new EnvsForClient()).create();
+        csrConfiguration = new CsrConfigurationFactory(new EnvsForCsr()).create();
+
+        KeyPairFactory keyPairFactory = new KeyPairFactory(RSA_ENCRYPTION_ALGORITHM, KEY_SIZE);
+        Optional<KeyPair> keyPair = generateKeyPair(keyPairFactory);
 
-    public void run(String[] args) {
-        exit(0);
+        appExitHandler.exit(0);
     }
 
-    protected void exit(int statusCode){
-        LOGGER.debug("Application exits with following exit code: " + statusCode);
-        System.exit(statusCode);
+    public Optional<KeyPair> generateKeyPair(KeyPairFactory keyPairFactory) {
+        try {
+            return Optional.of(keyPairFactory.create());
+        } catch (ExitableException e) {
+            appExitHandler.exit(e.applicationExitCode());
+        }
+        return Optional.empty();
     }
 }
@@ -20,9 +20,9 @@
 
 package org.onap.aaf.certservice.client;
 
-public class CertServiceClientApp {
+public class MainApp {
     public static void main(String[] args) {
-        CertServiceClient certServiceClient = new CertServiceClient();
-        certServiceClient.run(args);
+        CertServiceClient certServiceClient = new CertServiceClient(new AppExitHandler());
+        certServiceClient.run();
     }
 }
\ No newline at end of file
diff --git a/certServiceClient/src/main/java/org/onap/aaf/certservice/client/api/ExitCode.java b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/api/ExitCode.java
new file mode 100644 (file)
index 0000000..aed9f3f
--- /dev/null
@@ -0,0 +1,35 @@
+/*============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.api;
+
+public enum ExitCode {
+    CLIENT_CONFIGURATION_EXCEPTION(1),
+    CSR_CONFIGURATION_EXCEPTION(2),
+    KEY_PAIR_GENERATION_EXCEPTION(3);
+
+    private final int value;
+
+    ExitCode(int value) {
+        this.value = value;
+    }
+
+    public int getValue() {
+        return value;
+    }
+}
diff --git a/certServiceClient/src/main/java/org/onap/aaf/certservice/client/api/ExitableException.java b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/api/ExitableException.java
new file mode 100644 (file)
index 0000000..e884d11
--- /dev/null
@@ -0,0 +1,31 @@
+/*============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.api;
+
+public abstract class ExitableException extends RuntimeException {
+    public ExitableException(Throwable e) {
+        super(e);
+    }
+
+    public ExitableException(String message) {
+        super(message);
+    }
+
+    public abstract int applicationExitCode();
+}
@@ -1,6 +1,5 @@
-/*
- * ============LICENSE_START=======================================================
- * PROJECT
+/*============LICENSE_START=======================================================
+ * aaf-certservice-client
  * ================================================================================
  * Copyright (C) 2020 Nokia. All rights reserved.
  * ================================================================================
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
+package org.onap.aaf.certservice.client.certification;
 
-package org.onap.aaf.certservice.client.exceptions;
-
-
-public class ClientConfigurationException extends RuntimeException {
-    public ClientConfigurationException(String message) {
-        super(message);
-    }
+public class EncryptionAlgorithmConstants {
+    public static final String RSA_ENCRYPTION_ALGORITHM = "RSA";
+    public static final int KEY_SIZE = 2048;
 }
diff --git a/certServiceClient/src/main/java/org/onap/aaf/certservice/client/certification/KeyPairFactory.java b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/certification/KeyPairFactory.java
new file mode 100644 (file)
index 0000000..6ad6528
--- /dev/null
@@ -0,0 +1,54 @@
+/*============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.certification;
+
+import org.onap.aaf.certservice.client.certification.exception.KeyPairGenerationException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.NoSuchAlgorithmException;
+
+public class KeyPairFactory {
+
+    private final Logger LOGGER = LoggerFactory.getLogger(KeyPairFactory.class);
+    private final String encryptionAlgorithm;
+    private final int keySize;
+
+    public KeyPairFactory(String encryptionAlgorithm, int keySize) {
+        this.encryptionAlgorithm = encryptionAlgorithm;
+        this.keySize = keySize;
+    }
+
+    public KeyPair create() {
+        try {
+            return createKeyPairGenerator().generateKeyPair();
+        } catch (NoSuchAlgorithmException e) {
+            LOGGER.error("Generation of KeyPair failed, exception message: " + e.getMessage());
+            throw new KeyPairGenerationException(e);
+        }
+    }
+
+    private KeyPairGenerator createKeyPairGenerator() throws NoSuchAlgorithmException {
+        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(encryptionAlgorithm);
+        keyPairGenerator.initialize(keySize);
+        return keyPairGenerator;
+    }
+}
diff --git a/certServiceClient/src/main/java/org/onap/aaf/certservice/client/certification/exception/KeyPairGenerationException.java b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/certification/exception/KeyPairGenerationException.java
new file mode 100644 (file)
index 0000000..6af6988
--- /dev/null
@@ -0,0 +1,34 @@
+/*============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.certification.exception;
+
+import org.onap.aaf.certservice.client.api.ExitCode;
+import org.onap.aaf.certservice.client.api.ExitableException;
+
+public class KeyPairGenerationException extends ExitableException {
+    private static final ExitCode EXIT_CODE = ExitCode.KEY_PAIR_GENERATION_EXCEPTION;
+
+    public KeyPairGenerationException(Throwable e) {
+        super(e);
+    }
+
+    public int applicationExitCode() {
+        return EXIT_CODE.getValue();
+    }
+}
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * PROJECT
+ * aaf-certservice-client
  * ================================================================================
  * Copyright (C) 2020 Nokia. All rights reserved.
  * ================================================================================
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.aaf.certservice.client.common;
+package org.onap.aaf.certservice.client.configuration;
 
 public enum ClientConfigurationEnvs {
     REQUEST_URL,
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * PROJECT
+ * aaf-certservice-client
  * ================================================================================
  * Copyright (C) 2020 Nokia. All rights reserved.
  * ================================================================================
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.aaf.certservice.client.common;
+package org.onap.aaf.certservice.client.configuration;
 
 public enum CsrConfigurationEnvs {
     COMMON_NAME,
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * PROJECT
+ * aaf-certservice-client
  * ================================================================================
  * Copyright (C) 2020 Nokia. All rights reserved.
  * ================================================================================
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.aaf.certservice.client.common;
+package org.onap.aaf.certservice.client.configuration;
 
-import org.onap.aaf.certservice.client.exceptions.ClientConfigurationException;
+
+import org.onap.aaf.certservice.client.configuration.exception.ClientConfigurationException;
 
 public class EnvProvider {
     public String readEnvVariable(String envVariable) throws ClientConfigurationException {
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * PROJECT
+ * aaf-certservice-client
  * ================================================================================
  * Copyright (C) 2020 Nokia. All rights reserved.
  * ================================================================================
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.aaf.certservice.client.common;
+package org.onap.aaf.certservice.client.configuration;
 
 import java.util.regex.Pattern;
 
@@ -61,7 +61,6 @@ public final class EnvValidationUtils {
         return Pattern.compile("[h][t][t][p][:][/][/]|[h][t][t][p][s][:][/][/]").matcher(stringToCheck).find();
     }
 
-
     public static Boolean isSpecialCharsPresent(String stringToCheck) {
         return Pattern.compile("[~#@*$+%!()?/{}<>\\|_^]").matcher(stringToCheck).find();
     }
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * PROJECT
+ * aaf-certservice-client
  * ================================================================================
  * Copyright (C) 2020 Nokia. All rights reserved.
  * ================================================================================
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
-
-package org.onap.aaf.certservice.client.common;
+package org.onap.aaf.certservice.client.configuration;
 
 public class EnvsForClient {
+    private static final EnvProvider envProvider = new EnvProvider();
+    private final String urlToCertService;
+    private final String requestTimeOut;
+    private final String outputPath;
+    private final String caName;
 
-    private String urlToCertService;
-    private String requestTimeOut;
-    private String outputPath;
-    private String caName;
-
-    EnvsForClient() {
-        EnvProvider envProvider = new EnvProvider();
+    public EnvsForClient() {
         this.urlToCertService = envProvider.readEnvVariable(ClientConfigurationEnvs.REQUEST_URL.toString());
         this.requestTimeOut = envProvider.readEnvVariable(ClientConfigurationEnvs.REQUEST_TIMEOUT.toString());
         this.outputPath = envProvider.readEnvVariable(ClientConfigurationEnvs.OUTPUT_PATH.toString());
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * PROJECT
+ * aaf-certservice-client
  * ================================================================================
  * Copyright (C) 2020 Nokia. All rights reserved.
  * ================================================================================
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
+package org.onap.aaf.certservice.client.configuration;
 
-package org.onap.aaf.certservice.client.common;
 
 public class EnvsForCsr {
+    private final EnvProvider envProvider = new EnvProvider();
     private String commonName;
     private String organization;
     private String organizationUnit;
@@ -29,8 +30,7 @@ public class EnvsForCsr {
     private String country;
     private String subjectAlternativesName;
 
-    EnvsForCsr() {
-        EnvProvider envProvider = new EnvProvider();
+    public EnvsForCsr() {
         this.commonName = envProvider.readEnvVariable(CsrConfigurationEnvs.COMMON_NAME.toString());
         this.organization = envProvider.readEnvVariable(CsrConfigurationEnvs.ORGANIZATION.toString());
         this.organizationUnit = envProvider.readEnvVariable(CsrConfigurationEnvs.ORGANIZATION_UNIT.toString());
@@ -64,7 +64,6 @@ public class EnvsForCsr {
         return country;
     }
 
-
     public String getSubjectAlternativesName() {
         return subjectAlternativesName;
     }
diff --git a/certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/exception/ClientConfigurationException.java b/certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/exception/ClientConfigurationException.java
new file mode 100644 (file)
index 0000000..5d968f4
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * ============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.configuration.exception;
+
+import org.onap.aaf.certservice.client.api.ExitCode;
+import org.onap.aaf.certservice.client.api.ExitableException;
+
+public class ClientConfigurationException extends ExitableException {
+    private static final ExitCode EXIT_CODE = ExitCode.CLIENT_CONFIGURATION_EXCEPTION;
+
+    public ClientConfigurationException(String message) {
+        super(message);
+    }
+
+    public int applicationExitCode() {
+        return EXIT_CODE.getValue();
+    }
+}
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * PROJECT
+ * aaf-certservice-client
  * ================================================================================
  * Copyright (C) 2020 Nokia. All rights reserved.
  * ================================================================================
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
+package org.onap.aaf.certservice.client.configuration.exception;
 
-package org.onap.aaf.certservice.client.exceptions;
+import org.onap.aaf.certservice.client.api.ExitCode;
+import org.onap.aaf.certservice.client.api.ExitableException;
 
+public class CsrConfigurationException extends ExitableException {
+    private static final ExitCode EXIT_CODE = ExitCode.CSR_CONFIGURATION_EXCEPTION;
 
-public class CsrConfigurationException extends RuntimeException {
     public CsrConfigurationException(String message) {
         super(message);
     }
+
+    public int applicationExitCode() {
+        return EXIT_CODE.getValue();
+    }
 }
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * PROJECT
+ * aaf-certservice-client
  * ================================================================================
  * Copyright (C) 2020 Nokia. All rights reserved.
  * ================================================================================
@@ -18,7 +18,9 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.aaf.certservice.client.model;
+package org.onap.aaf.certservice.client.configuration.factory;
+
+import org.onap.aaf.certservice.client.configuration.model.ConfigurationModel;
 
 public interface AbstractConfigurationFactory<T extends ConfigurationModel> {
     T create();
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * PROJECT
+ * aaf-certservice-client
  * ================================================================================
  * Copyright (C) 2020 Nokia. All rights reserved.
  * ================================================================================
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.aaf.certservice.client.model;
+package org.onap.aaf.certservice.client.configuration.factory;
 
-import org.onap.aaf.certservice.client.common.ClientConfigurationEnvs;
-import org.onap.aaf.certservice.client.common.EnvValidationUtils;
-import org.onap.aaf.certservice.client.common.EnvsForClient;
-import org.onap.aaf.certservice.client.exceptions.ClientConfigurationException;
+import org.onap.aaf.certservice.client.configuration.ClientConfigurationEnvs;
+import org.onap.aaf.certservice.client.configuration.EnvValidationUtils;
+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 java.util.Optional;
 
-class ClientConfigurationFactory implements AbstractConfigurationFactory<ClientConfiguration> {
+public class ClientConfigurationFactory implements AbstractConfigurationFactory<ClientConfiguration> {
 
     private final EnvsForClient envsForClient;
 
 
-    ClientConfigurationFactory(EnvsForClient envsForClient) {
+    public ClientConfigurationFactory(EnvsForClient envsForClient) {
         this.envsForClient = envsForClient;
     }
 
-
     @Override
     public ClientConfiguration create() throws ClientConfigurationException {
 
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * PROJECT
+ * aaf-certservice-client
  * ================================================================================
  * Copyright (C) 2020 Nokia. All rights reserved.
  * ================================================================================
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.aaf.certservice.client.model;
+package org.onap.aaf.certservice.client.configuration.factory;
 
-import org.onap.aaf.certservice.client.common.CsrConfigurationEnvs;
-import org.onap.aaf.certservice.client.common.EnvValidationUtils;
-import org.onap.aaf.certservice.client.common.EnvsForCsr;
-import org.onap.aaf.certservice.client.exceptions.CsrConfigurationException;
+import org.onap.aaf.certservice.client.configuration.CsrConfigurationEnvs;
+import org.onap.aaf.certservice.client.configuration.EnvValidationUtils;
+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 java.util.Optional;
 
-class CsrConfigurationFactory implements AbstractConfigurationFactory<CsrConfiguration> {
+public class CsrConfigurationFactory implements AbstractConfigurationFactory<CsrConfiguration> {
 
     private final EnvsForCsr envsForCsr;
 
 
-    CsrConfigurationFactory(EnvsForCsr envsForCsr) {
+    public CsrConfigurationFactory(EnvsForCsr envsForCsr) {
         this.envsForCsr = envsForCsr;
     }
 
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * PROJECT
+ * aaf-certservice-client
  * ================================================================================
  * Copyright (C) 2020 Nokia. All rights reserved.
  * ================================================================================
@@ -18,9 +18,9 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.aaf.certservice.client.model;
+package org.onap.aaf.certservice.client.configuration.model;
 
-public class ClientConfiguration implements ConfigurationModel{
+public class ClientConfiguration implements ConfigurationModel {
 
     Integer DEFAULT_TIMEOUT_MS = 30000;
     String DEFAULT_REQUEST_URL = "http://cert-service:8080/v1/certificate/";
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * PROJECT
+ * aaf-certservice-client
  * ================================================================================
  * Copyright (C) 2020 Nokia. All rights reserved.
  * ================================================================================
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.aaf.certservice.client.model;
+package org.onap.aaf.certservice.client.configuration.model;
 
 public interface ConfigurationModel {
 }
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * PROJECT
+ * aaf-certservice-client
  * ================================================================================
  * Copyright (C) 2020 Nokia. All rights reserved.
  * ================================================================================
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.aaf.certservice.client.model;
+package org.onap.aaf.certservice.client.configuration.model;
 
 
 public class CsrConfiguration implements ConfigurationModel {
index 12c2db0..22baab5 100644 (file)
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
-
 package org.onap.aaf.certservice.client;
 
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Spy;
 import org.mockito.junit.jupiter.MockitoExtension;
+import org.onap.aaf.certservice.client.certification.KeyPairFactory;
+
+import java.security.KeyPair;
+import java.util.Optional;
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.onap.aaf.certservice.client.certification.EncryptionAlgorithmConstants.KEY_SIZE;
+import static org.onap.aaf.certservice.client.certification.EncryptionAlgorithmConstants.RSA_ENCRYPTION_ALGORITHM;
 
 @ExtendWith(MockitoExtension.class)
 class CertServiceClientTest {
+    private static final int DUMMY_EXIT_CODE = 888;
     @Spy
-    CertServiceClient certServiceClient = new CertServiceClient();
+    AppExitHandler appExitHandler = new AppExitHandler();
+
+    @Test
+    public void shouldExitWithDefinedExitCode_onGenerateKeyPairCallWhereExitableExceptionIsThrown() {
+        //  given
+        KeyPairFactory keyPairFactory = mock(KeyPairFactory.class);
+        when(keyPairFactory.create()).thenThrow(new DummyExitableException());
+        doNothing().when(appExitHandler).exit(DUMMY_EXIT_CODE);
+        CertServiceClient certServiceClient = new CertServiceClient(appExitHandler);
+        //  when
+        Optional<KeyPair> keyPair = certServiceClient.generateKeyPair(keyPairFactory);
+        //  then
+        verify(appExitHandler).exit(DUMMY_EXIT_CODE);
+        assertThat(keyPair).isEmpty();
+    }
 
-    //  Sonar check for this test disabled due to lack of assertion in test.
-    //  Intention of this test is to check if app runs without exiting Java.
     @Test
-    public void shouldExitWithZero_onApplicationSuccessfulFinish() {   //NOSONAR
+    public void shouldReturnKeyPair_onGenerateKeyPairCall() {
         //  given
-        String[] params = {""};
-        doNothing().when(certServiceClient).exit(0);
+        KeyPairFactory keyPairFactory = new KeyPairFactory(RSA_ENCRYPTION_ALGORITHM, KEY_SIZE);
+        CertServiceClient certServiceClient = new CertServiceClient(appExitHandler);
         //  when
-        certServiceClient.run(params);
+        Optional<KeyPair> keyPair = certServiceClient.generateKeyPair(keyPairFactory);
         //  then
-        verify(certServiceClient).exit(0);
+        assertThat(keyPair).hasValueSatisfying(value -> assertThat(value).isInstanceOf(KeyPair.class));
     }
 
 }
\ 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
new file mode 100644 (file)
index 0000000..80a2f72
--- /dev/null
@@ -0,0 +1,35 @@
+/*============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;
+    }
+
+}
diff --git a/certServiceClient/src/test/java/org/onap/aaf/certservice/client/certification/KeyPairFactoryTest.java b/certServiceClient/src/test/java/org/onap/aaf/certservice/client/certification/KeyPairFactoryTest.java
new file mode 100644 (file)
index 0000000..b92660f
--- /dev/null
@@ -0,0 +1,52 @@
+/*============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.certification;
+
+import org.junit.jupiter.api.Test;
+import org.onap.aaf.certservice.client.certification.exception.KeyPairGenerationException;
+
+import java.security.KeyPair;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+class KeyPairFactoryTest {
+    private static final String NOT_EXISTING_ENCRYPTION_ALGORITHM = "FAKE_ALGORITHM";
+
+    @Test
+    public void shouldProvideKeyPair_whenCreateKeyPairCalledWithCorrectArguments() {
+        //  given
+        KeyPairFactory keyPairFactory = new KeyPairFactory(EncryptionAlgorithmConstants.RSA_ENCRYPTION_ALGORITHM,
+                EncryptionAlgorithmConstants.KEY_SIZE);
+        //  when
+        KeyPair keyPair = keyPairFactory.create();
+        // then
+        assertThat(keyPair).isInstanceOf(KeyPair.class);
+    }
+
+    @Test
+    public void shouldThrowKeyPairGenerationException_whenCreateTryCalledOnNotExistingAlgorithm() {
+        //  given
+        KeyPairFactory keyPairFactory = new KeyPairFactory(NOT_EXISTING_ENCRYPTION_ALGORITHM,
+                EncryptionAlgorithmConstants.KEY_SIZE);
+        //  when, then
+        assertThatThrownBy(() -> keyPairFactory.create()).isInstanceOf(KeyPairGenerationException.class);
+    }
+
+}
\ No newline at end of file
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * PROJECT
+ * aaf-certservice-client
  * ================================================================================
  * Copyright (C) 2020 Nokia. All rights reserved.
  * ================================================================================
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.aaf.certservice.client.model;
+package org.onap.aaf.certservice.client.configuration.model;
 
 import org.junit.jupiter.api.Test;
-import org.onap.aaf.certservice.client.common.ClientConfigurationEnvs;
-import org.onap.aaf.certservice.client.common.EnvsForClient;
-import org.onap.aaf.certservice.client.exceptions.ClientConfigurationException;
+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.factory.ClientConfigurationFactory;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
@@ -41,7 +42,6 @@ public class ClientConfigurationFactoryTest {
 
     private EnvsForClient envsForClient = mock(EnvsForClient.class);
 
-
     @Test
     void create_shouldReturnSuccessWhenAllVariablesAreSetAndValid() {
         // given
@@ -1,6 +1,6 @@
 /*
  * ============LICENSE_START=======================================================
- * PROJECT
+ * aaf-certservice-client
  * ================================================================================
  * Copyright (C) 2020 Nokia. All rights reserved.
  * ================================================================================
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.aaf.certservice.client.model;
+package org.onap.aaf.certservice.client.configuration.model;
 
 import org.junit.jupiter.api.Test;
-import org.onap.aaf.certservice.client.common.CsrConfigurationEnvs;
-import org.onap.aaf.certservice.client.common.EnvsForCsr;
-import org.onap.aaf.certservice.client.exceptions.CsrConfigurationException;
+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 static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
diff --git a/pom.xml b/pom.xml
index 3eb6881..2d1632d 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -13,7 +13,7 @@
        ============LICENSE_END=========================================================
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
         <docker-maven-plugin.version>0.33.0</docker-maven-plugin.version>
         <junit.version>5.5.2</junit.version>
         <mockito-junit-jupiter.version>2.17.0</mockito-junit-jupiter.version>
-        <maven-shade-plugin.version>3.2.2</maven-shade-plugin.version>
 
         <!-- Docker -->
         <skipDockerPush>true</skipDockerPush>
         <maven.build.timestamp.format>yyyyMMdd'T'HHmmss</maven.build.timestamp.format>
+        <maven-shade-plugin.version>3.2.2</maven-shade-plugin.version>
         <docker-image.registry>${onap.nexus.dockerregistry.daily}</docker-image.registry>
         <docker-image.namespace>onap</docker-image.namespace>
         <docker-image.name>${project.groupId}.${project.artifactId}</docker-image.name>
         <docker-image.latest>${project.version}</docker-image.latest>
         <version>${project.version}</version>
         <docker.http_proxy/>
-        <immutables.version>2.7.5</immutables.version>
-
 
     </properties>
 
     <build>
         <pluginManagement>
             <plugins>
-                <plugin>
-                    <groupId>org.springdoc</groupId>
-                    <artifactId>springdoc-openapi-maven-plugin</artifactId>
-                    <version>${springdoc-openapi-maven-plugin.version}</version>
-                    <executions>
-                        <execution>
-                            <phase>integration-test</phase>
-                            <goals>
-                                <goal>generate</goal>
-                            </goals>
-                        </execution>
-                    </executions>
-                    <configuration>
-                        <apiDocsUrl>${springdoc-openapi-maven-plugin.apiDocsUrl}</apiDocsUrl>
-                        <outputFileName>api-docs.json</outputFileName>
-                        <outputDir>${project.build.directory}</outputDir>
-                    </configuration>
-                </plugin>
                 <plugin>
                     <groupId>org.springdoc</groupId>
                     <artifactId>springdoc-openapi-maven-plugin</artifactId>
                 <version>${mockito-core.version}</version>
                 <scope>test</scope>
             </dependency>
-
             <dependency>
                 <groupId>org.mockito</groupId>
                 <artifactId>mockito-junit-jupiter</artifactId>