summaryrefslogtreecommitdiffstats
path: root/certService/src
diff options
context:
space:
mode:
authorBogumil Zebek <bogumil.zebek@nokia.com>2020-02-20 12:19:39 +0000
committerGerrit Code Review <gerrit@onap.org>2020-02-20 12:19:39 +0000
commit639c40968f329fc6526a35c9fca2817e9cf0faa7 (patch)
treea3b55c652303bc5d6e548d7e7f17adbef52edace /certService/src
parentff8b47138f19faf4ca62f1f3d0773565c8df6188 (diff)
parentd54223e7cd3026e260e06df39dd52c4368e7053d (diff)
Merge "Load CMP Servers config from volume"
Diffstat (limited to 'certService/src')
-rw-r--r--certService/src/main/java/org/onap/aaf/certservice/certification/configuration/CmpServersConfig.java21
-rw-r--r--certService/src/main/java/org/onap/aaf/certservice/certification/configuration/CmpServersConfigLoader.java26
-rw-r--r--certService/src/main/resources/application.properties9
-rw-r--r--certService/src/main/resources/cmpServers.json24
-rw-r--r--certService/src/test/java/org/onap/aaf/certservice/certification/configuration/CmpServersConfigLoaderTest.java85
-rw-r--r--certService/src/test/java/org/onap/aaf/certservice/certification/configuration/CmpServersConfigTest.java40
6 files changed, 150 insertions, 55 deletions
diff --git a/certService/src/main/java/org/onap/aaf/certservice/certification/configuration/CmpServersConfig.java b/certService/src/main/java/org/onap/aaf/certservice/certification/configuration/CmpServersConfig.java
index 105b10e7..414f38bb 100644
--- a/certService/src/main/java/org/onap/aaf/certservice/certification/configuration/CmpServersConfig.java
+++ b/certService/src/main/java/org/onap/aaf/certservice/certification/configuration/CmpServersConfig.java
@@ -20,21 +20,30 @@
package org.onap.aaf.certservice.certification.configuration;
-import java.util.Collections;
-import java.util.List;
-import javax.annotation.PostConstruct;
import org.onap.aaf.certservice.certification.configuration.model.Cmpv2Server;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
+import javax.annotation.PostConstruct;
+import java.io.File;
+import java.util.Collections;
+import java.util.List;
+
@Configuration
public class CmpServersConfig {
-
private static final String CMP_SERVERS_CONFIG_FILENAME = "cmpServers.json";
+
+ @Autowired
+ private CmpServersConfigLoader cmpServersConfigLoader;
+ @Value("${app.config.path}")
+ private String configPath;
private List<Cmpv2Server> cmpServers;
@PostConstruct
- private void loadConfiguration() {
- cmpServers = Collections.unmodifiableList(new CmpServersConfigLoader().load(CMP_SERVERS_CONFIG_FILENAME));
+ void loadConfiguration() {
+ String configFilePath = configPath + File.separator + CMP_SERVERS_CONFIG_FILENAME;
+ this.cmpServers = Collections.unmodifiableList(cmpServersConfigLoader.load(configFilePath));
}
public List<Cmpv2Server> getCmpServers() {
diff --git a/certService/src/main/java/org/onap/aaf/certservice/certification/configuration/CmpServersConfigLoader.java b/certService/src/main/java/org/onap/aaf/certservice/certification/configuration/CmpServersConfigLoader.java
index b31fbcad..c8415ac0 100644
--- a/certService/src/main/java/org/onap/aaf/certservice/certification/configuration/CmpServersConfigLoader.java
+++ b/certService/src/main/java/org/onap/aaf/certservice/certification/configuration/CmpServersConfigLoader.java
@@ -21,27 +21,26 @@
package org.onap.aaf.certservice.certification.configuration;
import com.fasterxml.jackson.databind.ObjectMapper;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-import org.onap.aaf.certservice.certification.CertificationModelFactory;
import org.onap.aaf.certservice.certification.configuration.model.CmpServers;
import org.onap.aaf.certservice.certification.configuration.model.Cmpv2Server;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+@Component
class CmpServersConfigLoader {
- private static final Logger LOGGER = LoggerFactory.getLogger(CertificationModelFactory.class);
+ private static final Logger LOGGER = LoggerFactory.getLogger(CmpServersConfigLoader.class);
List<Cmpv2Server> load(String path) {
List<Cmpv2Server> result = new ArrayList<>();
try {
result = loadConfigFromFile(path).getCmpv2Servers();
- } catch (FileNotFoundException e) {
- LOGGER.error("CMP Servers configuration file not found: ", e);
+ LOGGER.info(String.format("CMP Servers configuration successfully loaded from file '%s'", path));
} catch (IOException e) {
LOGGER.error("Exception occurred during CMP Servers configuration loading: ", e);
}
@@ -50,11 +49,6 @@ class CmpServersConfigLoader {
private CmpServers loadConfigFromFile(String path) throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
- URL resource = getClass().getClassLoader().getResource(path);
- if (resource == null) {
- throw new FileNotFoundException();
- }
- String configFilePath = resource.getFile();
- return objectMapper.readValue(new File(configFilePath), CmpServers.class);
+ return objectMapper.readValue(new File(path), CmpServers.class);
}
}
diff --git a/certService/src/main/resources/application.properties b/certService/src/main/resources/application.properties
index b9ce108a..eab43c08 100644
--- a/certService/src/main/resources/application.properties
+++ b/certService/src/main/resources/application.properties
@@ -1,5 +1,10 @@
-#Actuator properties
+# Actuator configuration
management.endpoints.enabled-by-default=false
management.endpoint.health.enabled=true
-springdoc.swagger-ui.path=/docs
springdoc.show-actuator=true
+
+# Swagger configuration
+springdoc.swagger-ui.path=/docs
+
+# AAF CertService app specific configuration
+app.config.path=/etc/onap/aaf/certservice \ No newline at end of file
diff --git a/certService/src/main/resources/cmpServers.json b/certService/src/main/resources/cmpServers.json
deleted file mode 100644
index ee9e72b9..00000000
--- a/certService/src/main/resources/cmpServers.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "cmpv2Servers": [
- {
- "caName": "TEST",
- "url": "http://127.0.0.1/ejbca/publicweb/cmp/cmp",
- "issuerDN": "CN=ManagementCA",
- "caMode": "CLIENT",
- "authentication": {
- "iak": "xxx",
- "rv": "yyy"
- }
- },
- {
- "caName": "TEST2",
- "url": "http://127.0.0.1/ejbca/publicweb/cmp/cmpRA",
- "issuerDN": "CN=ManagementCA2",
- "caMode": "RA",
- "authentication": {
- "iak": "xxx",
- "rv": "yyy"
- }
- }
- ]
-} \ No newline at end of file
diff --git a/certService/src/test/java/org/onap/aaf/certservice/certification/configuration/CmpServersConfigLoaderTest.java b/certService/src/test/java/org/onap/aaf/certservice/certification/configuration/CmpServersConfigLoaderTest.java
new file mode 100644
index 00000000..f4421ffe
--- /dev/null
+++ b/certService/src/test/java/org/onap/aaf/certservice/certification/configuration/CmpServersConfigLoaderTest.java
@@ -0,0 +1,85 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PROJECT
+ * ================================================================================
+ * Copyright (C) 2020 Nokia. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.aaf.certservice.certification.configuration;
+
+import org.junit.jupiter.api.Test;
+import org.onap.aaf.certservice.certification.configuration.model.Cmpv2Server;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class CmpServersConfigLoaderTest {
+ private static final String EXISTING_CONFIG_FILENAME = "cmpServers.json";
+ private static final String NONEXISTING_CONFIG_FILENAME = "nonexisting_cmpServers.json";
+ private static final Map<String, String> EXPECTED_FIRST_CMP_SERVER = Map.of(
+ "CA_NAME", "TEST",
+ "URL", "http://127.0.0.1/ejbca/publicweb/cmp/cmp",
+ "ISSUER_DN", "CN=ManagementCA",
+ "CA_MODE", "CLIENT",
+ "IAK", "xxx",
+ "RV", "yyy"
+ );
+ private static final Map<String, String> EXPECTED_SECOND_CMP_SERVER = Map.of(
+ "CA_NAME", "TEST2",
+ "URL", "http://127.0.0.1/ejbca/publicweb/cmp/cmpRA",
+ "ISSUER_DN", "CN=ManagementCA2",
+ "CA_MODE", "RA",
+ "IAK", "xxx",
+ "RV", "yyy"
+ );
+
+ @Test
+ public void shouldLoadCmpServersConfigWhenFileAvailable() throws IOException {
+ // Given
+ String path = getClass().getClassLoader().getResource(EXISTING_CONFIG_FILENAME).getFile();
+
+ // When
+ List<Cmpv2Server> cmpServers = new CmpServersConfigLoader().load(path);
+
+ // Then
+ assertThat(cmpServers).isNotNull();
+ assertThat(cmpServers).hasSize(2);
+ verifyThatCmpServerEquals(cmpServers.get(0), EXPECTED_FIRST_CMP_SERVER);
+ verifyThatCmpServerEquals(cmpServers.get(1), EXPECTED_SECOND_CMP_SERVER);
+ }
+
+ @Test()
+ public void shouldReturnEmptyListWhenFileMissing() {
+ // When
+ List<Cmpv2Server> cmpServers = new CmpServersConfigLoader().load(NONEXISTING_CONFIG_FILENAME);
+
+ // Then
+ assertThat(cmpServers).isNotNull();
+ assertThat(cmpServers).isEmpty();
+ }
+
+ private void verifyThatCmpServerEquals(Cmpv2Server cmpv2Server, Map<String, String> expected) {
+ assertThat(cmpv2Server.getCaName()).isEqualTo(expected.get("CA_NAME"));
+ assertThat(cmpv2Server.getUrl()).isEqualTo(expected.get("URL"));
+ assertThat(cmpv2Server.getIssuerDN()).isEqualTo(expected.get("ISSUER_DN"));
+ assertThat(cmpv2Server.getCaMode().name()).isEqualTo(expected.get("CA_MODE"));
+ assertThat(cmpv2Server.getAuthentication().getIak()).isEqualTo(expected.get("IAK"));
+ assertThat(cmpv2Server.getAuthentication().getRv()).isEqualTo(expected.get("RV"));
+ }
+} \ No newline at end of file
diff --git a/certService/src/test/java/org/onap/aaf/certservice/certification/configuration/CmpServersConfigTest.java b/certService/src/test/java/org/onap/aaf/certservice/certification/configuration/CmpServersConfigTest.java
index 4c9c5f66..43094f09 100644
--- a/certService/src/test/java/org/onap/aaf/certservice/certification/configuration/CmpServersConfigTest.java
+++ b/certService/src/test/java/org/onap/aaf/certservice/certification/configuration/CmpServersConfigTest.java
@@ -20,28 +20,54 @@
package org.onap.aaf.certservice.certification.configuration;
-import static org.assertj.core.api.Assertions.assertThat;
-
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mockito;
import org.onap.aaf.certservice.CertServiceApplication;
+import org.onap.aaf.certservice.certification.configuration.model.Cmpv2Server;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit.jupiter.SpringExtension;
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.startsWith;
+
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = CertServiceApplication.class)
+@TestPropertySource(properties = {"app.config.path=/fake/path/to/config"})
class CmpServersConfigTest {
+ private static final List<Cmpv2Server> SAMPLE_CMP_SERVERS = List.of(
+ new Cmpv2Server(),
+ new Cmpv2Server()
+ );
+
+ @MockBean
+ private CmpServersConfigLoader cmpServersConfigLoader;
+
@Autowired
private CmpServersConfig cmpServersConfig;
@Test
- public void shouldLoadCmpServersConfig() {
+ public void shouldCallLoaderWithPathFromPropertiesWhenCreated() {
+ Mockito.verify(cmpServersConfigLoader).load(startsWith("/fake/path/to/config"));
+ }
+
+ @Test
+ public void shouldReturnLoadedServersWhenGetCalled() {
+ // Given
+ Mockito.when(cmpServersConfigLoader.load(any())).thenReturn(SAMPLE_CMP_SERVERS);
+ this.cmpServersConfig.loadConfiguration(); // Manual PostConstruct call
+
+ // When
+ List<Cmpv2Server> receivedCmpServers = this.cmpServersConfig.getCmpServers();
+
// Then
- assertThat(cmpServersConfig.getCmpServers()).isNotNull();
- assertThat(cmpServersConfig.getCmpServers().size()).isEqualTo(2);
- assertThat(cmpServersConfig.getCmpServers().get(0).getCaName()).isEqualTo("TEST");
- assertThat(cmpServersConfig.getCmpServers().get(1).getCaName()).isEqualTo("TEST2");
+ assertThat(receivedCmpServers).hasSize(SAMPLE_CMP_SERVERS.size());
}
} \ No newline at end of file