aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpbiniek <pawel.biniek@nokia.com>2019-02-27 23:31:15 +0100
committerpbiniek <pawel.biniek@nokia.com>2019-03-11 12:43:48 +0100
commite9220923d2a13fa787f2f2f7b8bedc60cc9b2324 (patch)
tree9d8b4e9a5ec6da712a2d76b6897c9f66e79e2c44
parentf938e8a87a33f8db78115a92f5130d6296171c62 (diff)
Added JSON config file format utils
Change-Id: I97fdd72324495b4c838e44c306cbcacac6b11bc1 Signed-off-by: Pawel Biniek <pawel.biniek@nokia.com> Issue-ID: DCAEGEN2-1323
-rw-r--r--pom.xml6
-rw-r--r--sources/hv-collector-core/src/main/kotlin/org/onap/dcae/collectors/veshv/model/routing.kt8
-rw-r--r--sources/hv-collector-main/pom.xml4
-rw-r--r--sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/ConfigFactory.kt46
-rw-r--r--sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/PartialConfiguration.kt59
-rw-r--r--sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/AddressAdapter.kt50
-rw-r--r--sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/OptionAdapter.kt40
-rw-r--r--sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/RouteAdapter.kt43
-rw-r--r--sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/RoutingAdapter.kt40
-rw-r--r--sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/SecurityKeysAdapter.kt51
-rw-r--r--sources/hv-collector-main/src/test/kotlin/org/onap/dcae/collectors/veshv/main/ConfigFactoryTest.kt143
-rw-r--r--sources/hv-collector-main/src/test/resources/sampleConfig.json35
12 files changed, 521 insertions, 4 deletions
diff --git a/pom.xml b/pom.xml
index c769dcce..7d11f03f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -65,6 +65,7 @@
<junit-platform.version>1.2.0-RC1</junit-platform.version>
<junit-jupiter.version>5.2.0-RC1</junit-jupiter.version>
<spek.version>1.1.5</spek.version>
+ <gson.version>2.8.5</gson.version>
<maven-surefire-plugin.version>2.22.0</maven-surefire-plugin.version>
<failIfMissingUnitTests>false</failIfMissingUnitTests>
<failIfMissingComponentTests>false</failIfMissingComponentTests>
@@ -438,6 +439,11 @@
<version>1.0.0</version>
</dependency>
<dependency>
+ <groupId>com.google.code.gson</groupId>
+ <artifactId>gson</artifactId>
+ <version>${gson.version}</version>
+ </dependency>
+ <dependency>
<groupId>io.arrow-kt</groupId>
<artifactId>arrow-core</artifactId>
<version>${arrow.version}</version>
diff --git a/sources/hv-collector-core/src/main/kotlin/org/onap/dcae/collectors/veshv/model/routing.kt b/sources/hv-collector-core/src/main/kotlin/org/onap/dcae/collectors/veshv/model/routing.kt
index ad97a3f7..dc7db5a2 100644
--- a/sources/hv-collector-core/src/main/kotlin/org/onap/dcae/collectors/veshv/model/routing.kt
+++ b/sources/hv-collector-core/src/main/kotlin/org/onap/dcae/collectors/veshv/model/routing.kt
@@ -29,7 +29,7 @@ data class Routing(val routes: List<Route>) {
Option.fromNullable(routes.find { it.applies(commonHeader) })
}
-data class Route(val domain: String, val targetTopic: String, val partitioning: (CommonEventHeader) -> Int) {
+data class Route(val domain: String, val targetTopic: String, val partitioning: (CommonEventHeader) -> Int = {0}) {
fun applies(commonHeader: CommonEventHeader) = commonHeader.domain == domain
@@ -67,15 +67,15 @@ class RouteBuilder {
private lateinit var targetTopic: String
private lateinit var partitioning: (CommonEventHeader) -> Int
- fun fromDomain(domain: String) {
+ fun fromDomain(domain: String) : RouteBuilder = apply {
this.domain = domain
}
- fun toTopic(targetTopic: String) {
+ fun toTopic(targetTopic: String) : RouteBuilder = apply {
this.targetTopic = targetTopic
}
- fun withFixedPartitioning(num: Int = 0) {
+ fun withFixedPartitioning(num: Int = 0) : RouteBuilder = apply {
partitioning = { num }
}
diff --git a/sources/hv-collector-main/pom.xml b/sources/hv-collector-main/pom.xml
index d08a21e0..bc3039bb 100644
--- a/sources/hv-collector-main/pom.xml
+++ b/sources/hv-collector-main/pom.xml
@@ -133,6 +133,10 @@
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
+ <dependency>
+ <groupId>com.google.code.gson</groupId>
+ <artifactId>gson</artifactId>
+ </dependency>
</dependencies>
diff --git a/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/ConfigFactory.kt b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/ConfigFactory.kt
new file mode 100644
index 00000000..2262b6ff
--- /dev/null
+++ b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/ConfigFactory.kt
@@ -0,0 +1,46 @@
+/*
+ * ============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.main.config
+
+import arrow.core.Option
+import com.google.gson.GsonBuilder
+import org.onap.dcae.collectors.veshv.main.config.adapters.*
+import org.onap.dcae.collectors.veshv.model.Route
+import org.onap.dcae.collectors.veshv.model.Routing
+import org.onap.dcaegen2.services.sdk.security.ssl.SecurityKeys
+import java.io.Reader
+import java.net.InetSocketAddress
+
+/**
+ * @author Pawel Biniek <pawel.biniek@nokia.com>
+ * @since February 2019
+ */
+class ConfigFactory {
+ private val gson = GsonBuilder()
+ .registerTypeAdapter(InetSocketAddress::class.java, AddressAdapter())
+ .registerTypeAdapter(Route::class.java, RouteAdapter())
+ .registerTypeAdapter(Routing::class.java, RoutingAdapter())
+ .registerTypeAdapter(Option::class.java, OptionAdapter())
+ .registerTypeAdapter(SecurityKeys::class.java, SecurityKeysAdapter())
+ .create()
+
+ fun loadConfig(input: Reader): PartialConfiguration =
+ gson.fromJson(input, PartialConfiguration::class.java)
+}
diff --git a/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/PartialConfiguration.kt b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/PartialConfiguration.kt
new file mode 100644
index 00000000..1bccc217
--- /dev/null
+++ b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/PartialConfiguration.kt
@@ -0,0 +1,59 @@
+/*
+ * ============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.main.config
+
+import arrow.core.Option
+import org.onap.dcae.collectors.veshv.model.Routing
+import org.onap.dcae.collectors.veshv.utils.logging.LogLevel
+import org.onap.dcaegen2.services.sdk.security.ssl.SecurityKeys
+import java.net.InetSocketAddress
+
+/**
+ * @author Pawel Biniek <pawel.biniek@nokia.com>
+ * @since February 2019
+ */
+data class PartialConfiguration(
+ val server : Option<PartialServerConfig>,
+ val cbs : Option<PartialCbsConfig>,
+ val security : Option<PartialSecurityConfig>,
+ val kafka : Option<PartialKafkaConfig>,
+ val logLevel : Option<LogLevel>
+)
+data class PartialSecurityConfig(
+ val sslDisable : Option<Boolean>,
+ val keys : Option<SecurityKeys>)
+
+data class PartialCbsConfig(
+ val firstRequestDelaySec : Option<Int>,
+ val requestIntervalSec : Option<Int>
+)
+
+data class PartialServerConfig(
+ val healthCheckApiPort : Option<Int>,
+ val listenPort : Option<Int>,
+ val idleTimeoutSec : Option<Int>,
+ val maximumPayloadSizeBytes : Option<Int>,
+ val dummyMode : Option<Boolean>
+)
+
+data class PartialKafkaConfig(
+ val kafkaServers : Option<Array<InetSocketAddress>>,
+ val routing : Option<Routing>
+)
diff --git a/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/AddressAdapter.kt b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/AddressAdapter.kt
new file mode 100644
index 00000000..6e616f58
--- /dev/null
+++ b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/AddressAdapter.kt
@@ -0,0 +1,50 @@
+/*
+ * ============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.main.config.adapters
+
+import com.google.gson.JsonDeserializationContext
+import com.google.gson.JsonDeserializer
+import com.google.gson.JsonElement
+import java.lang.reflect.Type
+import java.net.InetSocketAddress
+
+
+/**
+ * @author Pawel Biniek <pawel.biniek@nokia.com>
+ * @since February 2019
+ */
+class AddressAdapter : JsonDeserializer<InetSocketAddress> {
+ override fun deserialize(
+ json: JsonElement,
+ typeOfT: Type,
+ context: JsonDeserializationContext?): InetSocketAddress
+ {
+ val portStart = json.asString.lastIndexOf(":")
+ if (portStart > 0) {
+ val address = json.asString.substring(0, portStart)
+ val port = json.asString.substring(portStart + 1)
+ return InetSocketAddress(address, port.toInt())
+ } else throw InvalidAddressException("Cannot parse '" + json.asString + "' to address")
+ }
+
+ class InvalidAddressException(reason:String) : RuntimeException(reason)
+}
+
+
diff --git a/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/OptionAdapter.kt b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/OptionAdapter.kt
new file mode 100644
index 00000000..62d107ab
--- /dev/null
+++ b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/OptionAdapter.kt
@@ -0,0 +1,40 @@
+/*
+ * ============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.main.config.adapters
+
+import arrow.core.Option
+import com.google.gson.JsonDeserializationContext
+import com.google.gson.JsonDeserializer
+import com.google.gson.JsonElement
+import java.lang.reflect.ParameterizedType
+import java.lang.reflect.Type
+
+/**
+ * @author Pawel Biniek <pawel.biniek@nokia.com>
+ * @since March 2019
+ */
+class OptionAdapter : JsonDeserializer<Option<Any>> {
+ override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): Option<Any> {
+ val parametrizedType = typeOfT as ParameterizedType
+ val typeParameter = parametrizedType.actualTypeArguments.first()
+ return Option.fromNullable(context.deserialize<Any>(json, typeParameter))
+ }
+
+}
diff --git a/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/RouteAdapter.kt b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/RouteAdapter.kt
new file mode 100644
index 00000000..a617abca
--- /dev/null
+++ b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/RouteAdapter.kt
@@ -0,0 +1,43 @@
+/*
+ * ============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.main.config.adapters
+
+import com.google.gson.JsonDeserializationContext
+import com.google.gson.JsonDeserializer
+import com.google.gson.JsonElement
+import org.onap.dcae.collectors.veshv.model.Route
+import org.onap.dcae.collectors.veshv.model.RouteBuilder
+import java.lang.reflect.Type
+
+/**
+ * @author Pawel Biniek <pawel.biniek@nokia.com>
+ * @since March 2019
+ */
+class RouteAdapter : JsonDeserializer<Route> {
+ override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext?): Route {
+ val jobj = json.asJsonObject
+ return RouteBuilder()
+ .fromDomain(jobj["fromDomain"].asString)
+ .toTopic(jobj["toTopic"].asString)
+ .withFixedPartitioning()
+ .build()
+ }
+
+}
diff --git a/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/RoutingAdapter.kt b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/RoutingAdapter.kt
new file mode 100644
index 00000000..d0c5ff37
--- /dev/null
+++ b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/RoutingAdapter.kt
@@ -0,0 +1,40 @@
+/*
+ * ============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.main.config.adapters
+
+import com.google.gson.JsonDeserializationContext
+import com.google.gson.JsonDeserializer
+import com.google.gson.JsonElement
+import com.google.gson.reflect.TypeToken
+import org.onap.dcae.collectors.veshv.model.Route
+import org.onap.dcae.collectors.veshv.model.Routing
+import java.lang.reflect.Type
+
+/**
+ * @author Pawel Biniek <pawel.biniek@nokia.com>
+ * @since March 2019
+ */
+class RoutingAdapter : JsonDeserializer<Routing> {
+ override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext): Routing {
+ val parametrizedType = TypeToken.getParameterized(List::class.java, Route::class.java).type
+ return Routing(context.deserialize<List<Route>>(json, parametrizedType))
+ }
+
+}
diff --git a/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/SecurityKeysAdapter.kt b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/SecurityKeysAdapter.kt
new file mode 100644
index 00000000..7c22e0f8
--- /dev/null
+++ b/sources/hv-collector-main/src/main/kotlin/org/onap/dcae/collectors/veshv/main/config/adapters/SecurityKeysAdapter.kt
@@ -0,0 +1,51 @@
+/*
+ * ============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.main.config.adapters
+
+import com.google.gson.JsonDeserializationContext
+import com.google.gson.JsonDeserializer
+import com.google.gson.JsonElement
+import org.onap.dcaegen2.services.sdk.security.ssl.ImmutableSecurityKeys
+import org.onap.dcaegen2.services.sdk.security.ssl.ImmutableSecurityKeysStore
+import org.onap.dcaegen2.services.sdk.security.ssl.Passwords
+import org.onap.dcaegen2.services.sdk.security.ssl.SecurityKeys
+import java.io.File
+import java.lang.reflect.Type
+
+/**
+ * @author Pawel Biniek <pawel.biniek@nokia.com>
+ * @since March 2019
+ */
+class SecurityKeysAdapter : JsonDeserializer<SecurityKeys> {
+ override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext?): SecurityKeys {
+ val obj = json.asJsonObject
+ return ImmutableSecurityKeys.builder()
+ .keyStore(ImmutableSecurityKeysStore.of(
+ File(obj["keyStoreFile"].asString).toPath()))
+ .keyStorePassword(
+ Passwords.fromString(obj["keyStorePassword"].asString))
+ .trustStore(ImmutableSecurityKeysStore.of(
+ File(obj["trustStoreFile"].asString).toPath()))
+ .trustStorePassword(
+ Passwords.fromString(obj["trustStorePassword"].asString))
+ .build()
+ }
+
+}
diff --git a/sources/hv-collector-main/src/test/kotlin/org/onap/dcae/collectors/veshv/main/ConfigFactoryTest.kt b/sources/hv-collector-main/src/test/kotlin/org/onap/dcae/collectors/veshv/main/ConfigFactoryTest.kt
new file mode 100644
index 00000000..c3849238
--- /dev/null
+++ b/sources/hv-collector-main/src/test/kotlin/org/onap/dcae/collectors/veshv/main/ConfigFactoryTest.kt
@@ -0,0 +1,143 @@
+/*
+ * ============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.main
+
+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.main.config.*
+import org.onap.dcae.collectors.veshv.model.Routing
+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 ConfigFactoryTest : Spek({
+ describe("A configuration loader utility") {
+
+ describe("partial configuration loading") {
+ it("parses enumerations") {
+ val input = """{"logLevel":"ERROR"}"""
+
+ val config = ConfigFactory().loadConfig(StringReader(input))
+ assertThat(config.logLevel).isEqualTo(Some(LogLevel.ERROR))
+ }
+
+ it("parses simple structure") {
+ val input = """{
+ "server" : {
+ "healthCheckApiPort" : 12002,
+ "listenPort" : 12003
+ }
+ }
+ """.trimIndent()
+ val config = ConfigFactory().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 = ConfigFactory().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 = ConfigFactory().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 = ConfigFactory().loadConfig(
+ InputStreamReader(
+ ConfigFactoryTest.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-main/src/test/resources/sampleConfig.json b/sources/hv-collector-main/src/test/resources/sampleConfig.json
new file mode 100644
index 00000000..b64df05a
--- /dev/null
+++ b/sources/hv-collector-main/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