From: Jan Malkiewicz Date: Wed, 9 Sep 2020 12:42:52 +0000 (+0200) Subject: Refactor truststore MainApp (rename to CertificatePostProcessor) X-Git-Tag: 2.1.0~30 X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=c22f36d5847b75e436a0acbe370a9e1c96008b1d;p=oom%2Fplatform%2Fcert-service.git Refactor truststore MainApp (rename to CertificatePostProcessor) - Move common exception handling logic to dedicated class AppExecutor Issue-ID: DCAEGEN2-2253 Signed-off-by: Jan Malkiewicz Change-Id: Ic3cffa155e488258067df22e901ceaa0a2eca5f1 --- diff --git a/trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/TrustStoreMergerTest.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/AppExecutor.java similarity index 54% rename from trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/TrustStoreMergerTest.java rename to trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/AppExecutor.java index a7c62361..309f86fc 100644 --- a/trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/TrustStoreMergerTest.java +++ b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/AppExecutor.java @@ -19,24 +19,36 @@ 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); + } } } diff --git a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/TrustStoreMerger.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/CertificatePostProcessor.java similarity index 80% rename from trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/TrustStoreMerger.java rename to trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/CertificatePostProcessor.java index 7f53331f..7eab6401 100644 --- a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/TrustStoreMerger.java +++ b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/CertificatePostProcessor.java @@ -20,42 +20,23 @@ 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 { diff --git a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/MainApp.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/MainApp.java index a26b9def..61112e0a 100644 --- a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/MainApp.java +++ b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/MainApp.java @@ -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()); } } diff --git a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/api/ExitableException.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/api/ExitableException.java index ec28d466..1454e6bd 100644 --- a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/api/ExitableException.java +++ b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/api/ExitableException.java @@ -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 index 00000000..bf5196e9 --- /dev/null +++ b/trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/AppExecutorTest.java @@ -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); + } +}