aboutsummaryrefslogtreecommitdiffstats
path: root/sources/hv-collector-configuration/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'sources/hv-collector-configuration/src/test')
-rw-r--r--sources/hv-collector-configuration/src/test/kotlin/org/onap/dcae/collectors/veshv/config/api/ArgVesHvConfigurationTest.kt192
-rw-r--r--sources/hv-collector-configuration/src/test/kotlin/org/onap/dcae/collectors/veshv/config/api/FileConfigurationReaderTest.kt147
-rw-r--r--sources/hv-collector-configuration/src/test/resources/sampleConfig.json35
3 files changed, 374 insertions, 0 deletions
diff --git a/sources/hv-collector-configuration/src/test/kotlin/org/onap/dcae/collectors/veshv/config/api/ArgVesHvConfigurationTest.kt b/sources/hv-collector-configuration/src/test/kotlin/org/onap/dcae/collectors/veshv/config/api/ArgVesHvConfigurationTest.kt
new file mode 100644
index 00000000..0f8d8d0e
--- /dev/null
+++ b/sources/hv-collector-configuration/src/test/kotlin/org/onap/dcae/collectors/veshv/config/api/ArgVesHvConfigurationTest.kt
@@ -0,0 +1,192 @@
+/*
+ * ============LICENSE_START=======================================================
+ * dcaegen2-collectors-veshv
+ * ================================================================================
+ * Copyright (C) 2018-2019 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.dcae.collectors.veshv.config.api
+
+import org.assertj.core.api.Assertions.assertThat
+import org.jetbrains.spek.api.Spek
+import org.jetbrains.spek.api.dsl.describe
+import org.jetbrains.spek.api.dsl.given
+import org.jetbrains.spek.api.dsl.it
+import org.jetbrains.spek.api.dsl.on
+import org.onap.dcae.collectors.veshv.commandline.WrongArgumentError
+import org.onap.dcae.collectors.veshv.config.api.model.ServerConfiguration
+import org.onap.dcae.collectors.veshv.config.impl.ArgVesHvConfiguration
+import org.onap.dcae.collectors.veshv.tests.utils.parseExpectingFailure
+import org.onap.dcae.collectors.veshv.tests.utils.parseExpectingSuccess
+import org.onap.dcae.collectors.veshv.utils.logging.LogLevel
+import org.onap.dcaegen2.services.sdk.security.ssl.SecurityKeys
+import java.time.Duration
+import kotlin.test.assertNotNull
+
+/**
+ * @author Piotr Jaszczyk <piotr.jaszczyk@nokia.com>
+ * @since May 2018
+ */
+object ArgVesHvConfigurationTest : Spek({
+ lateinit var cut: ArgVesHvConfiguration
+ val kafkaBootstrapServers = "dmaap-mr-wro:6666,dmaap-mr-gda:6666"
+ val healthCheckApiPort = "6070"
+ val firstRequestDelay = "10"
+ val requestInterval = "5"
+ val listenPort = "6969"
+ val keyStorePassword = "kspass"
+ val trustStorePassword = "tspass"
+ val logLevel = LogLevel.DEBUG.name
+
+ beforeEachTest {
+ cut = ArgVesHvConfiguration()
+ }
+
+ describe("parsing arguments") {
+ given("all parameters are present in the long form") {
+ lateinit var result: ServerConfiguration
+
+ beforeEachTest {
+ result = cut.parseExpectingSuccess(
+ "--kafka-bootstrap-servers", kafkaBootstrapServers,
+ "--health-check-api-port", healthCheckApiPort,
+ "--listen-port", listenPort,
+ "--first-request-delay", firstRequestDelay,
+ "--request-interval", requestInterval,
+ "--key-store", "/tmp/keys.p12",
+ "--trust-store", "/tmp/trust.p12",
+ "--key-store-password", keyStorePassword,
+ "--trust-store-password", trustStorePassword,
+ "--log-level", logLevel
+ )
+ }
+
+ it("should set proper kafka bootstrap servers") {
+ assertThat(result.kafkaConfiguration.bootstrapServers).isEqualTo(kafkaBootstrapServers)
+ }
+
+ it("should set proper listen port") {
+ assertThat(result.serverListenAddress.port).isEqualTo(listenPort.toInt())
+ }
+
+
+ it("should set default listen address") {
+ assertThat(result.serverListenAddress.address.hostAddress).isEqualTo("0.0.0.0")
+ }
+
+ it("should set proper health check api port") {
+ assertThat(result.healthCheckApiListenAddress.port).isEqualTo(healthCheckApiPort.toInt())
+ }
+
+ it("should set default health check api address") {
+ assertThat(result.healthCheckApiListenAddress.address.hostAddress).isEqualTo("0.0.0.0")
+ }
+
+ it("should set proper first request delay") {
+ assertThat(result.configurationProviderParams.firstRequestDelay)
+ .isEqualTo(Duration.ofSeconds(firstRequestDelay.toLong()))
+ }
+
+ it("should set proper request interval") {
+ assertThat(result.configurationProviderParams.requestInterval)
+ .isEqualTo(Duration.ofSeconds(requestInterval.toLong()))
+ }
+
+ it("should set proper security configuration") {
+ assertThat(result.securityConfiguration.keys.isEmpty()).isFalse()
+
+ val keys = result.securityConfiguration.keys.orNull() as SecurityKeys
+ assertNotNull(keys.keyStore())
+ assertNotNull(keys.trustStore())
+ keys.keyStorePassword().useChecked {
+ assertThat(it).isEqualTo(keyStorePassword.toCharArray())
+
+ }
+ keys.trustStorePassword().useChecked {
+ assertThat(it).isEqualTo(trustStorePassword.toCharArray())
+ }
+ }
+
+ it("should set proper log level") {
+ assertThat(result.logLevel).isEqualTo(LogLevel.DEBUG)
+ }
+ }
+
+ describe("required parameter is absent") {
+ on("missing listen port") {
+ it("should throw exception") {
+ assertThat(
+ cut.parseExpectingFailure(
+ "--ssl-disable",
+ "--first-request-delay", firstRequestDelay,
+ "--request-interval", requestInterval
+ )
+ ).isInstanceOf(WrongArgumentError::class.java)
+ }
+ }
+ on("missing configuration url") {
+ it("should throw exception") {
+ assertThat(
+ cut.parseExpectingFailure(
+ "--listen-port", listenPort,
+ "--ssl-disable",
+ "--first-request-delay", firstRequestDelay,
+ "--request-interval", requestInterval
+ )
+ ).isInstanceOf(WrongArgumentError::class.java)
+ }
+ }
+ }
+
+ describe("correct log level not provided") {
+ on("missing log level") {
+ it("should set default INFO value") {
+ val config = cut.parseExpectingSuccess(
+ "--kafka-bootstrap-servers", kafkaBootstrapServers,
+ "--health-check-api-port", healthCheckApiPort,
+ "--listen-port", listenPort,
+ "--first-request-delay", firstRequestDelay,
+ "--request-interval", requestInterval,
+ "--key-store", "/tmp/keys.p12",
+ "--trust-store", "/tmp/trust.p12",
+ "--key-store-password", keyStorePassword,
+ "--trust-store-password", trustStorePassword
+ )
+
+ assertThat(config.logLevel).isEqualTo(LogLevel.INFO)
+ }
+ }
+
+ on("incorrect log level") {
+ it("should set default INFO value") {
+ val config = cut.parseExpectingSuccess(
+ "--kafka-bootstrap-servers", kafkaBootstrapServers,
+ "--health-check-api-port", healthCheckApiPort,
+ "--listen-port", listenPort,
+ "--first-request-delay", firstRequestDelay,
+ "--request-interval", requestInterval,
+ "--key-store", "/tmp/keys.p12",
+ "--trust-store", "/tmp/trust.p12",
+ "--key-store-password", keyStorePassword,
+ "--trust-store-password", trustStorePassword,
+ "--log-level", "1"
+ )
+
+ assertThat(config.logLevel).isEqualTo(LogLevel.INFO)
+ }
+ }
+ }
+ }
+})
diff --git a/sources/hv-collector-configuration/src/test/kotlin/org/onap/dcae/collectors/veshv/config/api/FileConfigurationReaderTest.kt b/sources/hv-collector-configuration/src/test/kotlin/org/onap/dcae/collectors/veshv/config/api/FileConfigurationReaderTest.kt
new file mode 100644
index 00000000..55da7d02
--- /dev/null
+++ b/sources/hv-collector-configuration/src/test/kotlin/org/onap/dcae/collectors/veshv/config/api/FileConfigurationReaderTest.kt
@@ -0,0 +1,147 @@
+/*
+ * ============LICENSE_START=======================================================
+ * dcaegen2-collectors-veshv
+ * ================================================================================
+ * Copyright (C) 2019 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.dcae.collectors.veshv.config.api
+
+import arrow.core.Some
+import org.jetbrains.spek.api.Spek
+import org.assertj.core.api.Assertions.assertThat
+import org.jetbrains.spek.api.dsl.describe
+import org.jetbrains.spek.api.dsl.it
+import org.onap.dcae.collectors.veshv.config.api.model.Routing
+import org.onap.dcae.collectors.veshv.config.impl.FileConfigurationReader
+import org.onap.dcae.collectors.veshv.config.impl.PartialCbsConfig
+import org.onap.dcae.collectors.veshv.config.impl.PartialKafkaConfig
+import org.onap.dcae.collectors.veshv.config.impl.PartialSecurityConfig
+import org.onap.dcae.collectors.veshv.config.impl.PartialServerConfig
+import org.onap.dcae.collectors.veshv.utils.logging.LogLevel
+import java.io.InputStreamReader
+import java.io.StringReader
+import java.net.InetSocketAddress
+
+/**
+ * @author Pawel Biniek <pawel.biniek@nokia.com>
+ * @since February 2019
+ */
+internal object FileConfigurationReaderTest : Spek({
+ describe("A configuration loader utility") {
+
+ describe("partial configuration loading") {
+ it("parses enumerations") {
+ val input = """{"logLevel":"ERROR"}"""
+
+ val config = FileConfigurationReader().loadConfig(StringReader(input))
+ assertThat(config.logLevel).isEqualTo(Some(LogLevel.ERROR))
+ }
+
+ it("parses simple structure") {
+ val input = """{
+ "server" : {
+ "healthCheckApiPort" : 12002,
+ "listenPort" : 12003
+ }
+ }
+ """.trimIndent()
+ val config = FileConfigurationReader().loadConfig(StringReader(input))
+ assertThat(config.server.nonEmpty()).isTrue()
+ assertThat(config.server.orNull()?.healthCheckApiPort).isEqualTo(Some(12002))
+ assertThat(config.server.orNull()?.listenPort).isEqualTo(Some(12003))
+ }
+
+ it("parses ip address") {
+ val input = """{ "kafka" : {
+ "kafkaServers": [
+ "192.168.255.1:5005",
+ "192.168.255.26:5006"
+ ]
+ }
+ }"""
+
+ val config = FileConfigurationReader().loadConfig(StringReader(input))
+ assertThat(config.kafka.nonEmpty()).isTrue()
+ val kafka = config.kafka.orNull() as PartialKafkaConfig
+ assertThat(kafka.kafkaServers.nonEmpty()).isTrue()
+ val addresses = kafka.kafkaServers.orNull() as Array<InetSocketAddress>
+ assertThat(addresses)
+ .isEqualTo(arrayOf(
+ InetSocketAddress("192.168.255.1", 5005),
+ InetSocketAddress("192.168.255.26", 5006)
+ ))
+ }
+
+ it("parses routing array with RoutingAdapter") {
+ val input = """{
+ "kafka" : {
+ "routing" : [
+ {
+ "fromDomain": "perf3gpp",
+ "toTopic": "HV_VES_PERF3GPP"
+ }
+ ]
+ }
+ }""".trimIndent()
+ val config = FileConfigurationReader().loadConfig(StringReader(input))
+ assertThat(config.kafka.nonEmpty()).isTrue()
+ val kafka = config.kafka.orNull() as PartialKafkaConfig
+ assertThat(kafka.routing.nonEmpty()).isTrue()
+ val routing = kafka.routing.orNull() as Routing
+ routing.run {
+ assertThat(routes.size).isEqualTo(1)
+ assertThat(routes[0].domain).isEqualTo("perf3gpp")
+ assertThat(routes[0].targetTopic).isEqualTo("HV_VES_PERF3GPP")
+ }
+ }
+ }
+
+ describe("complete file loading") {
+ it("loads actual file") {
+ val config = FileConfigurationReader().loadConfig(
+ InputStreamReader(
+ FileConfigurationReaderTest.javaClass.getResourceAsStream("/sampleConfig.json")))
+ assertThat(config).isNotNull
+ assertThat(config.logLevel).isEqualTo(Some(LogLevel.ERROR))
+
+ assertThat(config.security.nonEmpty()).isTrue()
+ val security = config.security.orNull() as PartialSecurityConfig
+ assertThat(security.sslDisable.orNull()).isFalse()
+ assertThat(security.keys.nonEmpty()).isTrue()
+
+ assertThat(config.cbs.nonEmpty()).isTrue()
+ val cbs = config.cbs.orNull() as PartialCbsConfig
+ assertThat(cbs.firstRequestDelaySec).isEqualTo(Some(7))
+ assertThat(cbs.requestIntervalSec).isEqualTo(Some(900))
+
+ assertThat(config.kafka.nonEmpty()).isTrue()
+ val kafka = config.kafka.orNull() as PartialKafkaConfig
+ assertThat(kafka.kafkaServers.nonEmpty()).isTrue()
+ assertThat(kafka.routing.nonEmpty()).isTrue()
+
+ assertThat(config.server.nonEmpty()).isTrue()
+ val server = config.server.orNull() as PartialServerConfig
+ server.run {
+ assertThat(dummyMode).isEqualTo(Some(false))
+ assertThat(healthCheckApiPort).isEqualTo(Some(5000))
+ assertThat(idleTimeoutSec).isEqualTo(Some(1200))
+ assertThat(listenPort).isEqualTo(Some(6000))
+ assertThat(maximumPayloadSizeBytes).isEqualTo(Some(512000))
+ }
+ }
+ }
+ }
+}) \ No newline at end of file
diff --git a/sources/hv-collector-configuration/src/test/resources/sampleConfig.json b/sources/hv-collector-configuration/src/test/resources/sampleConfig.json
new file mode 100644
index 00000000..b64df05a
--- /dev/null
+++ b/sources/hv-collector-configuration/src/test/resources/sampleConfig.json
@@ -0,0 +1,35 @@
+{
+ "server" : {
+ "healthCheckApiPort" : 5000,
+ "listenPort" : 6000,
+ "idleTimeoutSec" : 1200,
+ "maximumPayloadSizeBytes" : 512000,
+ "dummyMode" : false
+ },
+ "cbs" : {
+ "firstRequestDelaySec": 7,
+ "requestIntervalSec": 900
+ },
+ "security" : {
+ "sslDisable": false,
+ "keys": {
+ "keyStoreFile": "test.ks.pkcs12",
+ "keyStorePassword": "changeMe",
+ "trustStoreFile": "trust.ks.pkcs12",
+ "trustStorePassword": "changeMeToo"
+ }
+ },
+ "kafka" : {
+ "kafkaServers": [
+ "192.168.255.1:5005",
+ "192.168.255.1:5006"
+ ],
+ "routing": [
+ {
+ "fromDomain": "perf3gpp",
+ "toTopic": "HV_VES_PERF3GPP"
+ }
+ ]
+ },
+ "logLevel" : "ERROR"
+} \ No newline at end of file