summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemigiusz Janeczek <remigiusz.janeczek@nokia.com>2020-08-05 11:36:06 +0200
committerRemigiusz Janeczek <remigiusz.janeczek@nokia.com>2020-08-05 13:53:07 +0200
commit4e61effd4ddd8e6869487914095f81a1566d0142 (patch)
treefeca1a785f14f118c5b406349faf79c7ff33f91f
parent86ba43b6e0d298c469ee93ecfc08052d6e8ab8c9 (diff)
Add loading configuration from env to truststore merger
Issue-ID: DCAEGEN2-2253 Signed-off-by: Remigiusz Janeczek <remigiusz.janeczek@nokia.com> Change-Id: I06b3e3fcebbca96a4b9cbb4c693ae16eb29366eb
-rw-r--r--trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/TrustStoreMerger.java24
-rw-r--r--trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/api/ExitStatus.java4
-rw-r--r--trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/certification/file/EnvProvider.java29
-rw-r--r--trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/certification/file/PathValidator.java38
-rw-r--r--trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/certification/file/TruststoresPathsProvider.java69
-rw-r--r--trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/certification/file/TruststoresPathsProviderException.java30
-rw-r--r--trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/MergerConfiguration.java44
-rw-r--r--trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/MergerConfigurationException.java30
-rw-r--r--trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/MergerConfigurationFactory.java45
-rw-r--r--trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/TrustStoreMergerTest.java4
-rw-r--r--trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/certification/file/PathValidatorTest.java58
-rw-r--r--trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/certification/file/TruststoresPathsProviderTest.java88
-rw-r--r--trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/configuration/MergerConfigurationFactoryTest.java98
13 files changed, 557 insertions, 4 deletions
diff --git a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/TrustStoreMerger.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/TrustStoreMerger.java
index f280800b..ee57b3aa 100644
--- a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/TrustStoreMerger.java
+++ b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/TrustStoreMerger.java
@@ -20,6 +20,13 @@
package org.onap.oom.truststoremerger;
import org.onap.oom.truststoremerger.api.ExitStatus;
+import org.onap.oom.truststoremerger.api.ExitableException;
+import org.onap.oom.truststoremerger.certification.file.EnvProvider;
+import org.onap.oom.truststoremerger.certification.file.TruststoresPathsProvider;
+import org.onap.oom.truststoremerger.configuration.MergerConfiguration;
+import org.onap.oom.truststoremerger.configuration.MergerConfigurationException;
+import org.onap.oom.truststoremerger.configuration.MergerConfigurationFactory;
+import org.onap.oom.truststoremerger.certification.file.PathValidator;
class TrustStoreMerger {
@@ -30,6 +37,21 @@ class TrustStoreMerger {
}
void run() {
- appExitHandler.exit(ExitStatus.SUCCESS);
+ try {
+ mergeTruststores();
+ appExitHandler.exit(ExitStatus.SUCCESS);
+ } catch (ExitableException e) {
+ appExitHandler.exit(e.applicationExitStatus());
+ }
+ }
+
+ private void mergeTruststores() throws ExitableException {
+ MergerConfiguration configuration = loadConfiguration();
+ }
+
+ private MergerConfiguration loadConfiguration() throws ExitableException {
+ TruststoresPathsProvider truststoresPathsProvider = new TruststoresPathsProvider(new EnvProvider(), new PathValidator());
+ MergerConfigurationFactory factory = new MergerConfigurationFactory(truststoresPathsProvider);
+ return factory.createConfiguration();
}
}
diff --git a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/api/ExitStatus.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/api/ExitStatus.java
index 84184e89..ae145f7e 100644
--- a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/api/ExitStatus.java
+++ b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/api/ExitStatus.java
@@ -21,7 +21,9 @@ package org.onap.oom.truststoremerger.api;
public enum ExitStatus {
- SUCCESS(0, "Success");
+ SUCCESS(0, "Success"),
+ TRUSTSTORES_PATHS_PROVIDER_EXCEPTION(1, "Invalid paths in environment variables"),
+ MERGER_CONFIGURATION_EXCEPTION(2, "Invalid merger configuration");
private final int value;
private final String message;
diff --git a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/certification/file/EnvProvider.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/certification/file/EnvProvider.java
new file mode 100644
index 00000000..f64edc89
--- /dev/null
+++ b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/certification/file/EnvProvider.java
@@ -0,0 +1,29 @@
+/*============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.certification.file;
+
+import java.util.Optional;
+
+public class EnvProvider {
+
+ Optional<String> getEnv(String name) {
+ return Optional.ofNullable(System.getenv(name));
+ }
+}
diff --git a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/certification/file/PathValidator.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/certification/file/PathValidator.java
new file mode 100644
index 00000000..05b80f14
--- /dev/null
+++ b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/certification/file/PathValidator.java
@@ -0,0 +1,38 @@
+/*============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.certification.file;
+
+public class PathValidator {
+
+ private static final String TRUSTSTORE_PATH_REGEX = "^(/[a-zA-Z0-9_-]+)+\\.(pem|jks|p12)";
+ private static final String TRUSTSTORE_PASSWORD_PATH_REGEX = "^(/[a-zA-Z0-9_-]+)+\\.pass";
+
+ public boolean isTruststorePathValid(String truststorePath) {
+ return isPathValid(truststorePath, TRUSTSTORE_PATH_REGEX);
+ }
+
+ public boolean isTruststorePasswordPathValid(String truststorePasswordPath) {
+ return truststorePasswordPath.isEmpty() || isPathValid(truststorePasswordPath, TRUSTSTORE_PASSWORD_PATH_REGEX);
+ }
+
+ private boolean isPathValid(String path, String regex) {
+ return path.matches(regex);
+ }
+}
diff --git a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/certification/file/TruststoresPathsProvider.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/certification/file/TruststoresPathsProvider.java
new file mode 100644
index 00000000..b7b73e6b
--- /dev/null
+++ b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/certification/file/TruststoresPathsProvider.java
@@ -0,0 +1,69 @@
+/*============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.certification.file;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.function.Predicate;
+
+public class TruststoresPathsProvider {
+
+ static final String TRUSTSTORES_ENV = "TRUSTSTORES";
+ static final String TRUSTSTORES_PASSWORDS_ENV = "TRUSTSTORES_PASSWORDS";
+ private static final String DELIMITER = ":";
+ private static final int NEGATIVE_SPLIT_LIMIT = -1;
+
+ private EnvProvider envProvider;
+ private PathValidator pathValidator;
+
+ public TruststoresPathsProvider(EnvProvider envProvider, PathValidator pathValidator) {
+ this.envProvider = envProvider;
+ this.pathValidator = pathValidator;
+ }
+
+ public List<String> getTruststores() throws TruststoresPathsProviderException {
+ return envProvider.getEnv(TRUSTSTORES_ENV)
+ .filter(Predicate.not(String::isEmpty))
+ .map(this::splitToList)
+ .filter(this::validateTruststores)
+ .orElseThrow(() -> new TruststoresPathsProviderException("TRUSTSTORES environment variable does not contain valid truststores paths"));
+ }
+
+ public List<String> getTruststoresPasswords() throws TruststoresPathsProviderException {
+ return envProvider.getEnv(TRUSTSTORES_PASSWORDS_ENV)
+ .map(this::splitToList)
+ .filter(this::validateTruststoresPasswords)
+ .orElseThrow(() -> new TruststoresPathsProviderException("TRUSTSTORES_PASSWORDS environment variable does not contain valid passwords paths"));
+ }
+
+ private boolean validateTruststores(List<String> truststores) {
+ return truststores.stream()
+ .allMatch(pathValidator::isTruststorePathValid);
+ }
+
+ private boolean validateTruststoresPasswords(List<String> truststoresPasswords) {
+ return truststoresPasswords.stream()
+ .allMatch(pathValidator::isTruststorePasswordPathValid);
+ }
+
+ private List<String> splitToList(String stringToSplit) {
+ return Arrays.asList(stringToSplit.split(DELIMITER, NEGATIVE_SPLIT_LIMIT));
+ }
+}
diff --git a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/certification/file/TruststoresPathsProviderException.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/certification/file/TruststoresPathsProviderException.java
new file mode 100644
index 00000000..5f491c36
--- /dev/null
+++ b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/certification/file/TruststoresPathsProviderException.java
@@ -0,0 +1,30 @@
+/*============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.certification.file;
+
+import org.onap.oom.truststoremerger.api.ExitStatus;
+import org.onap.oom.truststoremerger.api.ExitableException;
+
+public class TruststoresPathsProviderException extends ExitableException {
+
+ TruststoresPathsProviderException(String message) {
+ super(message, ExitStatus.TRUSTSTORES_PATHS_PROVIDER_EXCEPTION);
+ }
+}
diff --git a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/MergerConfiguration.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/MergerConfiguration.java
new file mode 100644
index 00000000..f3b7d935
--- /dev/null
+++ b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/MergerConfiguration.java
@@ -0,0 +1,44 @@
+/*============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.configuration;
+
+import java.util.Collections;
+import java.util.List;
+
+public class MergerConfiguration {
+ private final List<String> truststoreFilePaths;
+ private final List<String> truststoreFilePasswordPaths;
+
+ public MergerConfiguration(List<String> truststoreFilePaths,
+ List<String> truststoreFilePasswordPaths) {
+ this.truststoreFilePaths = List.copyOf(truststoreFilePaths);
+ this.truststoreFilePasswordPaths = List.copyOf(truststoreFilePasswordPaths);
+ }
+
+ public List<String> getTruststoreFilePaths() {
+ return Collections.unmodifiableList(truststoreFilePaths);
+ }
+
+
+ public List<String> getTruststoreFilePasswordPaths() {
+ return Collections.unmodifiableList(truststoreFilePasswordPaths);
+ }
+
+}
diff --git a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/MergerConfigurationException.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/MergerConfigurationException.java
new file mode 100644
index 00000000..54982f5f
--- /dev/null
+++ b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/MergerConfigurationException.java
@@ -0,0 +1,30 @@
+/*============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.configuration;
+
+import org.onap.oom.truststoremerger.api.ExitStatus;
+import org.onap.oom.truststoremerger.api.ExitableException;
+
+public class MergerConfigurationException extends ExitableException {
+
+ MergerConfigurationException(String message) {
+ super(message, ExitStatus.MERGER_CONFIGURATION_EXCEPTION);
+ }
+}
diff --git a/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/MergerConfigurationFactory.java b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/MergerConfigurationFactory.java
new file mode 100644
index 00000000..eea0551d
--- /dev/null
+++ b/trustStoreMerger/src/main/java/org/onap/oom/truststoremerger/configuration/MergerConfigurationFactory.java
@@ -0,0 +1,45 @@
+/*============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.configuration;
+
+import org.onap.oom.truststoremerger.certification.file.TruststoresPathsProvider;
+import org.onap.oom.truststoremerger.certification.file.TruststoresPathsProviderException;
+
+import java.util.List;
+
+public class MergerConfigurationFactory {
+
+ private final TruststoresPathsProvider pathsProvider;
+
+ public MergerConfigurationFactory(TruststoresPathsProvider pathsProvider) {
+ this.pathsProvider = pathsProvider;
+ }
+
+ public MergerConfiguration createConfiguration() throws MergerConfigurationException, TruststoresPathsProviderException {
+ List<String> truststores = pathsProvider.getTruststores();
+ List<String> truststoresPasswords = pathsProvider.getTruststoresPasswords();
+
+ if (truststores.size() != truststoresPasswords.size()) {
+ throw new MergerConfigurationException("Size of TRUSTSTORES does not match size of TRUSTSTORES_PASSWORDS environment variables");
+ }
+
+ return new MergerConfiguration(truststores, truststoresPasswords);
+ }
+}
diff --git a/trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/TrustStoreMergerTest.java b/trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/TrustStoreMergerTest.java
index 11b18bf1..4787897a 100644
--- a/trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/TrustStoreMergerTest.java
+++ b/trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/TrustStoreMergerTest.java
@@ -34,9 +34,9 @@ class TrustStoreMergerTest {
AppExitHandler appExitHandler;
@Test
- void shouldExitWithSuccess() {
+ void shouldExitWithMergeConfigurationExceptionDueToMissingEnvs() {
new TrustStoreMerger(appExitHandler).run();
- verify(appExitHandler).exit(ExitStatus.SUCCESS);
+ verify(appExitHandler).exit(ExitStatus.MERGER_CONFIGURATION_EXCEPTION);
}
}
diff --git a/trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/certification/file/PathValidatorTest.java b/trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/certification/file/PathValidatorTest.java
new file mode 100644
index 00000000..1c455764
--- /dev/null
+++ b/trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/certification/file/PathValidatorTest.java
@@ -0,0 +1,58 @@
+/*============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.certification.file;
+
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class PathValidatorTest {
+
+ private final PathValidator validator = new PathValidator();
+
+ @ParameterizedTest()
+ @ValueSource(strings = {"/opt/app/truststore.pem", "/opt/app/truststore.jks",
+ "/opt/app/truststore.p12", "/truststore.pem"})
+ void shouldAcceptValidTruststorePaths(String path) {
+ assertThat(validator.isTruststorePathValid(path)).isTrue();
+ }
+
+ @ParameterizedTest()
+ @ValueSource(strings = {"/opt/app/truststore.pass", "/opt/app/truststore.invalid", "/",
+ "truststore", "opt/app/truststore.p12", "/?.pem", "/.pem"})
+ void shouldRejectInValidTruststorePaths(String path) {
+ assertThat(validator.isTruststorePathValid(path)).isFalse();
+ }
+
+ @ParameterizedTest()
+ @ValueSource(strings = {"", "/opt/app/truststore.pass", "/truststore.pass"})
+ void shouldAcceptValidTruststorePasswordPaths(String path) {
+ assertThat(validator.isTruststorePasswordPathValid(path)).isTrue();
+ }
+
+ @ParameterizedTest()
+ @ValueSource(strings = {"/opt/app/truststore.pem", "/opt/app/truststore.jks",
+ "/opt/app/truststore.p12", "/", "truststore", "opt/app/truststore.p12", "/?.pass", "/.pass"})
+ void shouldRejectInValidTruststorePasswordPaths(String path) {
+ assertThat(validator.isTruststorePasswordPathValid(path)).isFalse();
+ }
+
+}
diff --git a/trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/certification/file/TruststoresPathsProviderTest.java b/trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/certification/file/TruststoresPathsProviderTest.java
new file mode 100644
index 00000000..d52d1899
--- /dev/null
+++ b/trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/certification/file/TruststoresPathsProviderTest.java
@@ -0,0 +1,88 @@
+package org.onap.oom.truststoremerger.certification.file;
+
+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 java.util.Optional;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+import static org.mockito.Mockito.when;
+import static org.onap.oom.truststoremerger.certification.file.TruststoresPathsProvider.TRUSTSTORES_ENV;
+import static org.onap.oom.truststoremerger.certification.file.TruststoresPathsProvider.TRUSTSTORES_PASSWORDS_ENV;
+
+@ExtendWith(MockitoExtension.class)
+class TruststoresPathsProviderTest {
+
+ private static final String VALID_TRUSTSTORES = "/opt/app/certificates/truststore.jks:/opt/app/certificates/truststore.pem";
+ private static final String VALID_TRUSTSTORES_PASSWORDS = "/opt/app/certificates/truststore.pass:";
+ private static final String INVALID_TRUSTSTORES = "/opt/app/certificates/truststore.jks:/opt/app/certificates/truststore.invalid";
+ private static final String INVALID_TRUSTSTORES_PASSWORDS = "/opt/app/certificates/truststore.pass:/.pass";
+
+ @Mock
+ private EnvProvider envProvider;
+ private TruststoresPathsProvider truststoresPathsProvider;
+
+ @BeforeEach
+ void setUp() {
+ truststoresPathsProvider = new TruststoresPathsProvider(envProvider, new PathValidator());
+ }
+
+ @Test
+ void shouldReturnCorrectListWhenTruststoresValid() throws TruststoresPathsProviderException {
+ mockTruststoresEnv(VALID_TRUSTSTORES);
+
+ assertThat(truststoresPathsProvider.getTruststores())
+ .contains("/opt/app/certificates/truststore.jks",
+ "/opt/app/certificates/truststore.pem");
+ }
+
+ @Test
+ void shouldReturnCorrectListWhenTruststoresPasswordsValid() throws TruststoresPathsProviderException {
+ mockTruststoresPasswordsEnv(VALID_TRUSTSTORES_PASSWORDS);
+
+ assertThat(truststoresPathsProvider.getTruststoresPasswords())
+ .contains("/opt/app/certificates/truststore.pass",
+ "");
+ }
+
+ @Test
+ void shouldThrowExceptionWhenTruststoresEmpty() {
+ mockTruststoresEnv("");
+
+ assertThatExceptionOfType(TruststoresPathsProviderException.class)
+ .isThrownBy(truststoresPathsProvider::getTruststores);
+ }
+
+ @Test
+ void shouldThrowExceptionWhenOneOfTruststoresPathsInvalid() {
+ mockTruststoresEnv(INVALID_TRUSTSTORES);
+
+ assertThatExceptionOfType(TruststoresPathsProviderException.class)
+ .isThrownBy(truststoresPathsProvider::getTruststores);
+ }
+
+ @Test
+ void shouldThrowExceptionWhenOneOfTruststorePasswordPathsInvalid() {
+ mockTruststoresPasswordsEnv(INVALID_TRUSTSTORES_PASSWORDS);
+
+ assertThatExceptionOfType(TruststoresPathsProviderException.class)
+ .isThrownBy(truststoresPathsProvider::getTruststoresPasswords);
+ }
+
+ private void mockTruststoresEnv(String truststores) {
+ mockEnv(truststores, TRUSTSTORES_ENV);
+ }
+
+ private void mockTruststoresPasswordsEnv(String truststoresPasswords) {
+ mockEnv(truststoresPasswords, TRUSTSTORES_PASSWORDS_ENV);
+ }
+
+ private void mockEnv(String envValue, String envName) {
+ when(envProvider.getEnv(envName))
+ .thenReturn(Optional.of(envValue));
+ }
+}
diff --git a/trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/configuration/MergerConfigurationFactoryTest.java b/trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/configuration/MergerConfigurationFactoryTest.java
new file mode 100644
index 00000000..336ba5da
--- /dev/null
+++ b/trustStoreMerger/src/test/java/org/onap/oom/truststoremerger/configuration/MergerConfigurationFactoryTest.java
@@ -0,0 +1,98 @@
+/*============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.configuration;
+
+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.oom.truststoremerger.certification.file.TruststoresPathsProvider;
+import org.onap.oom.truststoremerger.certification.file.TruststoresPathsProviderException;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+class MergerConfigurationFactoryTest {
+
+ private static final String BASE_TRUSTSTORE_PATH = "/opt/app/truststore_";
+ private static final String TRUSTSTORE_EXTENSION = ".jks";
+ private static final String PASSWORD_EXTENSION = ".pass";
+
+ @Mock
+ private TruststoresPathsProvider pathsProvider;
+ private MergerConfigurationFactory factory;
+
+ @BeforeEach
+ void setUp() {
+ factory = new MergerConfigurationFactory(pathsProvider);
+ }
+
+ @Test
+ void shouldReturnConfigurationWithCorrectPaths() throws TruststoresPathsProviderException, MergerConfigurationException {
+ int numberOfPaths = 5;
+ List<String> truststoresPaths = createListOfPathsWithExtension(numberOfPaths, TRUSTSTORE_EXTENSION);
+ List<String> truststorePasswordPaths = createListOfPathsWithExtension(numberOfPaths, PASSWORD_EXTENSION);
+ mockPaths(truststoresPaths, truststorePasswordPaths);
+
+ MergerConfiguration configuration = factory.createConfiguration();
+
+ assertThat(configuration.getTruststoreFilePaths()).containsAll(truststoresPaths);
+ assertThat(configuration.getTruststoreFilePasswordPaths()).containsAll(truststorePasswordPaths);
+ }
+
+ @Test
+ void shouldThrowExceptionWhenTruststoresLenghtDifferentThanTruststoresPasswordsLength() throws TruststoresPathsProviderException {
+ int numberOfTruststores = 5;
+ int numberOfTruststoresPasswords = 4;
+ List<String> truststoresPaths = createListOfPathsWithExtension(numberOfTruststores, TRUSTSTORE_EXTENSION);
+ List<String> truststorePasswordPaths = createListOfPathsWithExtension(numberOfTruststoresPasswords, PASSWORD_EXTENSION);
+ mockPaths(truststoresPaths, truststorePasswordPaths);
+
+ assertThatExceptionOfType(MergerConfigurationException.class)
+ .isThrownBy(factory::createConfiguration);
+ }
+
+ private void mockPaths(List<String> truststores, List<String> truststoresPasswords) throws TruststoresPathsProviderException {
+ mockTruststores(truststores);
+ mockTruststoresPasswords(truststoresPasswords);
+ }
+
+ private void mockTruststores(List<String> truststores) throws TruststoresPathsProviderException {
+ when(pathsProvider.getTruststores()).thenReturn(truststores);
+ }
+
+ private void mockTruststoresPasswords(List<String> truststoresPasswords) throws TruststoresPathsProviderException {
+ when(pathsProvider.getTruststoresPasswords()).thenReturn(truststoresPasswords);
+ }
+
+ private List<String> createListOfPathsWithExtension(int numberOfPaths, String password_extension) {
+ List<String> paths = new ArrayList<>();
+ while (numberOfPaths-- > 0) {
+ paths.add(BASE_TRUSTSTORE_PATH + numberOfPaths + password_extension);
+ }
+ return paths;
+ }
+}