Add files processing config provider 45/117245/11
authorJoanna Jeremicz <joanna.jeremicz@nokia.com>
Fri, 29 Jan 2021 14:43:31 +0000 (15:43 +0100)
committerJoanna Jeremicz <joanna.jeremicz@nokia.com>
Tue, 9 Feb 2021 06:44:39 +0000 (07:44 +0100)
- Add system variables provider
- Add junit tests

Issue-ID: DCAEGEN2-2600
Signed-off-by: Joanna Jeremicz <joanna.jeremicz@nokia.com>
Change-Id: Ib045270033f8f5ccbd99fc5ae30d0efa9a911a95

src/main/java/org/onap/dcaegen2/services/pmmapper/config/EnvironmentReader.java [new file with mode: 0644]
src/main/java/org/onap/dcaegen2/services/pmmapper/config/FilesProcessingConfig.java [new file with mode: 0644]
src/main/java/org/onap/dcaegen2/services/pmmapper/exceptions/EnvironmentConfigException.java
src/main/resources/Dockerfile
src/test/java/org/onap/dcaegen2/services/pmmapper/config/FilesProcessingConfigTest.java [new file with mode: 0644]

diff --git a/src/main/java/org/onap/dcaegen2/services/pmmapper/config/EnvironmentReader.java b/src/main/java/org/onap/dcaegen2/services/pmmapper/config/EnvironmentReader.java
new file mode 100644 (file)
index 0000000..2d4cf66
--- /dev/null
@@ -0,0 +1,35 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nokia.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.dcaegen2.services.pmmapper.config;
+
+/**
+ * Reads system environment variables
+ */
+public class EnvironmentReader {
+    /**
+     * Reads and returns value of given environment variable
+     * @param key name of the variable
+     * @returns value of environment variable
+     */
+    public String getVariable(String key) {
+        return System.getenv(key);
+    }
+}
diff --git a/src/main/java/org/onap/dcaegen2/services/pmmapper/config/FilesProcessingConfig.java b/src/main/java/org/onap/dcaegen2/services/pmmapper/config/FilesProcessingConfig.java
new file mode 100644 (file)
index 0000000..ab549e4
--- /dev/null
@@ -0,0 +1,74 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nokia.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.dcaegen2.services.pmmapper.config;
+
+import java.util.Optional;
+import org.onap.dcaegen2.services.pmmapper.exceptions.EnvironmentConfigException;
+import org.onap.logging.ref.slf4j.ONAPLogAdapter;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Provides external configuration for files processing
+ *
+ */
+public class FilesProcessingConfig {
+
+    private static final String ENV_LIMIT_RATE = "PROCESSING_LIMIT_RATE";
+    private static final int DEFAULT_LIMIT_RATE = 1;
+    private static final ONAPLogAdapter logger = new ONAPLogAdapter(LoggerFactory.getLogger(FilesProcessingConfig.class));
+    private EnvironmentReader environmentReader;
+
+    /**
+     * Creates a FilesProcessingConfig
+     */
+    public FilesProcessingConfig(EnvironmentReader environmentReader) {
+        this.environmentReader = environmentReader;
+    }
+
+    /**
+     * Provides reactor limit rate value from environment variable.
+     * @returns value of limit rate
+     * @throws EnvironmentConfigException
+     */
+    public int getLimitRate() throws EnvironmentConfigException {
+        logger.unwrap().info("Trying to read " + ENV_LIMIT_RATE + " env.");
+        try {
+            return Optional.ofNullable(environmentReader.getVariable(ENV_LIMIT_RATE))
+                .map(this::parseIntegerValue)
+                .orElseGet(this::getDefaultLimitRate);
+        } catch (NumberFormatException exception) {
+            throw new EnvironmentConfigException(
+                ENV_LIMIT_RATE + " environment variable has incorrect value.\n"
+                    , exception);
+        }
+    }
+
+    private Integer parseIntegerValue(String val) throws NumberFormatException {
+        Integer value = Integer.valueOf(val);
+        logger.unwrap().info(ENV_LIMIT_RATE + " value is: " + value);
+        return value;
+    }
+
+    private int getDefaultLimitRate() {
+        logger.unwrap().info(ENV_LIMIT_RATE + " env not present. Setting limit rate to default value: " + DEFAULT_LIMIT_RATE);
+        return DEFAULT_LIMIT_RATE;
+    }
+}
index 1a0d321..2fff757 100644 (file)
@@ -1,6 +1,7 @@
 /*-\r
  * ============LICENSE_START=======================================================\r
- *  Copyright (C) 2019 Nordix Foundation.\r
+ * Copyright (C) 2019 Nordix Foundation.\r
+ * Copyright (C) 2021 Nokia.\r
  * ================================================================================\r
  * Licensed under the Apache License, Version 2.0 (the "License");\r
  * you may not use this file except in compliance with the License.\r
@@ -23,4 +24,7 @@ public class EnvironmentConfigException extends Exception {
     public EnvironmentConfigException(String message) {\r
         super(message);\r
     }\r
+    public EnvironmentConfigException(String message, Throwable throwable) {\r
+        super(message, throwable);\r
+    }\r
 }\r
index 981c6e6..cfd8372 100644 (file)
@@ -36,7 +36,6 @@ USER pm-mapper
 
 COPY ${project.build.directory}/${ext.dep.dir.path}/ ${ext.dep.dir.path}/
 COPY ${project.build.directory}/${JAR} .
-
 COPY ${project.build.directory}/classes/schemas ./etc/schemas/
 COPY ${project.build.directory}/classes/templates ./etc/templates/
 COPY --chown=pm-mapper ${project.build.directory}/classes/logback.xml ./etc/logback.xml
diff --git a/src/test/java/org/onap/dcaegen2/services/pmmapper/config/FilesProcessingConfigTest.java b/src/test/java/org/onap/dcaegen2/services/pmmapper/config/FilesProcessingConfigTest.java
new file mode 100644 (file)
index 0000000..fd21a39
--- /dev/null
@@ -0,0 +1,66 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nokia.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.dcaegen2.services.pmmapper.config;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.junit.Test;
+import org.onap.dcaegen2.services.pmmapper.exceptions.EnvironmentConfigException;
+
+public class FilesProcessingConfigTest {
+
+    private static final String ENV_LIMIT_RATE = "PROCESSING_LIMIT_RATE";
+
+    private EnvironmentReader mockEnvironmentReader = mock(EnvironmentReader.class);
+    private FilesProcessingConfig filesProcessingConfig;
+
+    @Test
+    public void shouldReturnCorrectValue_whenVariableIsSet() throws EnvironmentConfigException {
+        when(mockEnvironmentReader.getVariable(ENV_LIMIT_RATE)).thenReturn("128");
+        filesProcessingConfig = new FilesProcessingConfig(mockEnvironmentReader);
+        int limitRate = filesProcessingConfig.getLimitRate();
+
+        assertEquals(128, limitRate);
+    }
+
+    @Test
+    public void shouldThrowEnvironmentConfigException_whenVariableHasWrongValue() {
+        when(mockEnvironmentReader.getVariable(ENV_LIMIT_RATE)).thenReturn("not-an-int");
+        filesProcessingConfig = new FilesProcessingConfig(mockEnvironmentReader);
+        String expectedMessage = "PROCESSING_LIMIT_RATE environment variable has incorrect value.\n";
+        String causeMessage = "For input string: \"not-an-int\"";
+
+        Throwable exception = assertThrows(EnvironmentConfigException.class, () -> filesProcessingConfig.getLimitRate());
+        assertEquals(expectedMessage, exception.getMessage());
+        assertEquals(causeMessage, exception.getCause().getMessage());
+    }
+
+    @Test
+    public void shouldReturnDefaultValue_whenVariableIsNotSet() throws EnvironmentConfigException {
+        filesProcessingConfig = new FilesProcessingConfig(mockEnvironmentReader);
+        int limitRate = filesProcessingConfig.getLimitRate();
+
+        assertEquals(1, limitRate);
+    }
+}