Refactor truststore MainApp (rename to CertificatePostProcessor) 66/112366/4
authorJan Malkiewicz <jan.malkiewicz@nokia.com>
Wed, 9 Sep 2020 12:42:52 +0000 (14:42 +0200)
committerJan Malkiewicz <jan.malkiewicz@nokia.com>
Wed, 9 Sep 2020 13:45:24 +0000 (15:45 +0200)
- Move common exception handling logic to dedicated class AppExecutor

Issue-ID: DCAEGEN2-2253
Signed-off-by: Jan Malkiewicz <jan.malkiewicz@nokia.com>
Change-Id: Ic3cffa155e488258067df22e901ceaa0a2eca5f1

trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/AppExecutor.java [moved from trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/TrustStoreMergerTest.java with 54% similarity]
trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/CertificatePostProcessor.java [moved from trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/TrustStoreMerger.java with 80% similarity]
trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/MainApp.java
trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/api/ExitableException.java
trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/AppExecutorTest.java [new file with mode: 0644]

 
 package org.onap.oom.truststoremerger;
 
-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.oom.truststoremerger.api.ExitStatus;
+import org.onap.oom.truststoremerger.api.ExitableException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
-import static org.mockito.Mockito.verify;
+public class AppExecutor {
 
-@ExtendWith(MockitoExtension.class)
-class TrustStoreMergerTest {
+    private static final Logger LOGGER = LoggerFactory.getLogger(AppExecutor.class);
 
-    @Mock
-    AppExitHandler appExitHandler;
+    private AppExitHandler exitHandler;
+
+    AppExecutor() {
+        this(new AppExitHandler());
+    }
+
+    AppExecutor(AppExitHandler exitHandler) {
+        this.exitHandler = exitHandler;
+    }
 
-    @Test
-    void shouldExitWithTruststoresPathsProviderExceptionDueToMissingTrustoresPathEnvs() {
-        new TrustStoreMerger(appExitHandler).run();
 
-        verify(appExitHandler).exit(ExitStatus.TRUSTSTORES_PATHS_PROVIDER_EXCEPTION);
+    public void execute(Runnable logic) {
+        try {
+            logic.run();
+            exitHandler.exit(ExitStatus.SUCCESS);
+        } catch (ExitableException e) {
+            LOGGER.error("Application failed: ", e);
+            exitHandler.exit(e.applicationExitStatus());
+        } catch (Exception e) {
+            LOGGER.error("Application failed (unexpected error): ", e);
+            exitHandler.exit(ExitStatus.UNEXPECTED_EXCEPTION);
+        }
     }
 }
 package org.onap.oom.truststoremerger;
 
 import java.util.List;
-import org.onap.oom.truststoremerger.api.ExitStatus;
 import org.onap.oom.truststoremerger.api.ExitableException;
-import org.onap.oom.truststoremerger.merger.TruststoreFilesProvider;
-import org.onap.oom.truststoremerger.merger.model.Truststore;
-import org.onap.oom.truststoremerger.merger.model.certificate.CertificateWithAlias;
 import org.onap.oom.truststoremerger.configuration.MergerConfigurationProvider;
 import org.onap.oom.truststoremerger.configuration.model.MergerConfiguration;
 import org.onap.oom.truststoremerger.configuration.path.DelimitedPathsReader;
 import org.onap.oom.truststoremerger.configuration.path.DelimitedPathsReaderFactory;
 import org.onap.oom.truststoremerger.configuration.path.env.EnvProvider;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.onap.oom.truststoremerger.merger.TruststoreFilesProvider;
+import org.onap.oom.truststoremerger.merger.model.Truststore;
+import org.onap.oom.truststoremerger.merger.model.certificate.CertificateWithAlias;
 
-class TrustStoreMerger {
+class CertificatePostProcessor implements Runnable {
 
-    private static final Logger LOGGER = LoggerFactory.getLogger(TrustStoreMerger.class);
     private static final int FIRST_TRUSTSTORE_INDEX = 0;
     private static final int SECOND_TRUSTSTORE_INDEX = 1;
 
-    private final AppExitHandler appExitHandler;
-
-    TrustStoreMerger(AppExitHandler appExitHandler) {
-        this.appExitHandler = appExitHandler;
-    }
-
-    void run() {
-        try {
-            mergeTruststores();
-            appExitHandler.exit(ExitStatus.SUCCESS);
-        } catch (ExitableException e) {
-            LOGGER.error("Truststore Merger fails in execution: ", e);
-            appExitHandler.exit(e.applicationExitStatus());
-        } catch (Exception e) {
-            LOGGER.error("Truststore Merger fails in execution: ", e);
-            appExitHandler.exit(ExitStatus.UNEXPECTED_EXCEPTION);
-        }
+    public void run() throws ExitableException {
+        mergeTruststores();
     }
 
     private void mergeTruststores() throws ExitableException {
index a26b9de..61112e0 100644 (file)
@@ -22,7 +22,6 @@ package org.onap.oom.truststoremerger;
 public class MainApp {
 
     public static void main(String[] args) {
-        TrustStoreMerger trustStoreMerger = new TrustStoreMerger(new AppExitHandler());
-        trustStoreMerger.run();
+        new AppExecutor().execute(new CertificatePostProcessor());
     }
 }
index ec28d46..1454e6b 100644 (file)
@@ -19,7 +19,7 @@
 
 package org.onap.oom.truststoremerger.api;
 
-public class ExitableException extends Exception {
+public class ExitableException extends RuntimeException {
 
     private final ExitStatus exitStatus;
 
diff --git a/trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/AppExecutorTest.java b/trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/AppExecutorTest.java
new file mode 100644 (file)
index 0000000..bf5196e
--- /dev/null
@@ -0,0 +1,76 @@
+/*============LICENSE_START=======================================================
+ * oom-truststore-merger
+ * ================================================================================
+ * 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.oom.truststoremerger;
+
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.verify;
+import static org.onap.oom.truststoremerger.api.ExitStatus.ALIAS_CONFLICT_EXCEPTION;
+import static org.onap.oom.truststoremerger.api.ExitStatus.SUCCESS;
+import static org.onap.oom.truststoremerger.api.ExitStatus.UNEXPECTED_EXCEPTION;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.onap.oom.truststoremerger.merger.exception.AliasConflictException;
+
+@ExtendWith(MockitoExtension.class)
+public class AppExecutorTest {
+
+    @Mock
+    Runnable logic;
+    @Mock
+    AppExitHandler exitHandler;
+    @InjectMocks
+    AppExecutor executor = new AppExecutor();
+
+    @Test
+    void shouldExitWithUnexpectedException() {
+        doThrow(new NullPointerException()).when(logic).run();
+        doNothing().when(exitHandler).exit(UNEXPECTED_EXCEPTION);
+
+        executor.execute(logic);
+
+        verify(exitHandler).exit(UNEXPECTED_EXCEPTION);
+    }
+
+    @Test
+    void shouldExitWithKnownException() {
+        doThrow(new AliasConflictException("")).when(logic).run();
+        doNothing().when(exitHandler).exit(ALIAS_CONFLICT_EXCEPTION);
+
+        executor.execute(logic);
+
+        verify(exitHandler).exit(ALIAS_CONFLICT_EXCEPTION);
+    }
+
+    @Test
+    void shouldExitWithSuccess() {
+        doNothing().when(logic).run();
+        doNothing().when(exitHandler).exit(SUCCESS);
+
+        executor.execute(logic);
+
+        verify(exitHandler).exit(SUCCESS);
+    }
+}