From e36a970232174fcb4dc4aecf3d6522f7364d6425 Mon Sep 17 00:00:00 2001 From: Joanna Jeremicz Date: Fri, 29 Jan 2021 15:43:31 +0100 Subject: Add files processing config provider - Add system variables provider - Add junit tests Issue-ID: DCAEGEN2-2600 Signed-off-by: Joanna Jeremicz Change-Id: Ib045270033f8f5ccbd99fc5ae30d0efa9a911a95 --- .../pmmapper/config/EnvironmentReader.java | 35 ++++++++++ .../pmmapper/config/FilesProcessingConfig.java | 74 ++++++++++++++++++++++ .../exceptions/EnvironmentConfigException.java | 6 +- src/main/resources/Dockerfile | 1 - .../pmmapper/config/FilesProcessingConfigTest.java | 66 +++++++++++++++++++ 5 files changed, 180 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/onap/dcaegen2/services/pmmapper/config/EnvironmentReader.java create mode 100644 src/main/java/org/onap/dcaegen2/services/pmmapper/config/FilesProcessingConfig.java create mode 100644 src/test/java/org/onap/dcaegen2/services/pmmapper/config/FilesProcessingConfigTest.java 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 index 0000000..2d4cf66 --- /dev/null +++ b/src/main/java/org/onap/dcaegen2/services/pmmapper/config/EnvironmentReader.java @@ -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 index 0000000..ab549e4 --- /dev/null +++ b/src/main/java/org/onap/dcaegen2/services/pmmapper/config/FilesProcessingConfig.java @@ -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; + } +} diff --git a/src/main/java/org/onap/dcaegen2/services/pmmapper/exceptions/EnvironmentConfigException.java b/src/main/java/org/onap/dcaegen2/services/pmmapper/exceptions/EnvironmentConfigException.java index 1a0d321..2fff757 100644 --- a/src/main/java/org/onap/dcaegen2/services/pmmapper/exceptions/EnvironmentConfigException.java +++ b/src/main/java/org/onap/dcaegen2/services/pmmapper/exceptions/EnvironmentConfigException.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019 Nordix Foundation. + * 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. @@ -23,4 +24,7 @@ public class EnvironmentConfigException extends Exception { public EnvironmentConfigException(String message) { super(message); } + public EnvironmentConfigException(String message, Throwable throwable) { + super(message, throwable); + } } diff --git a/src/main/resources/Dockerfile b/src/main/resources/Dockerfile index 981c6e6..cfd8372 100644 --- a/src/main/resources/Dockerfile +++ b/src/main/resources/Dockerfile @@ -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 index 0000000..fd21a39 --- /dev/null +++ b/src/test/java/org/onap/dcaegen2/services/pmmapper/config/FilesProcessingConfigTest.java @@ -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); + } +} -- cgit 1.2.3-korg