2 * ============LICENSE_START=======================================================
3 * dcaegen2-collectors-veshv
4 * ================================================================================
5 * Copyright (C) 2019 NOKIA
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
20 package org.onap.dcae.collectors.veshv.config.impl
22 import arrow.core.None
23 import arrow.core.Option
24 import arrow.core.Some
25 import org.assertj.core.api.Assertions.*
26 import org.jetbrains.spek.api.Spek
27 import org.jetbrains.spek.api.dsl.describe
28 import org.jetbrains.spek.api.dsl.given
29 import org.jetbrains.spek.api.dsl.it
30 import org.onap.dcae.collectors.veshv.config.api.model.ValidationException
31 import org.onap.dcae.collectors.veshv.utils.logging.LogLevel
32 import org.onap.dcaegen2.services.sdk.model.streams.dmaap.KafkaSink
34 internal object ConfigurationValidatorTest : Spek({
35 describe("ConfigurationValidator") {
36 val cut = ConfigurationValidator()
38 describe("validating partial configuration with missing fields") {
39 val config = PartialConfiguration(listenPort = Some(5))
41 it("should return ValidationException with missing required fields description") {
42 val result = cut.validate(config)
44 assertThat(it.message).doesNotContain(PartialConfiguration::listenPort.name)
46 assertThat(it.message).contains(PartialConfiguration::idleTimeoutSec.name)
47 assertThat(it.message).contains(PartialConfiguration::firstRequestDelaySec.name)
48 assertThat(it.message).contains(PartialConfiguration::requestIntervalSec.name)
49 assertThat(it.message).contains(PartialConfiguration::streamPublishers.name)
50 assertThat(it.message).contains(PartialConfiguration::keyStoreFile.name)
51 assertThat(it.message).contains(PartialConfiguration::keyStorePasswordFile.name)
52 assertThat(it.message).contains(PartialConfiguration::trustStoreFile.name)
53 assertThat(it.message).contains(PartialConfiguration::trustStorePasswordFile.name)
55 assertThat(it.message).doesNotContain(PartialConfiguration::logLevel.name)
56 assertThat(it.message).doesNotContain(PartialConfiguration::sslDisable.name)
57 }, { fail("Should be ValidationException") })
61 describe("validating complete valid configuration") {
62 val config = PartialConfiguration(
63 listenPort = Some(defaultListenPort),
64 idleTimeoutSec = Some(defaultIdleTimeoutSec),
65 firstRequestDelaySec = Some(defaultFirstReqDelaySec),
66 requestIntervalSec = Some(defaultRequestIntervalSec),
67 sslDisable = Some(false),
68 keyStoreFile = Some(KEYSTORE),
69 keyStorePasswordFile = Some(KEYSTORE_PASSWORD),
70 trustStoreFile = Some(TRUSTSTORE),
71 trustStorePasswordFile = Some(TRUSTSTORE_PASSWORD),
72 streamPublishers = Some(sampleStreamsDefinition),
73 logLevel = Some(LogLevel.TRACE)
76 it("should create validated configuration") {
77 val result = cut.validate(config)
80 fail("Configuration should have been created successfully")
83 assertThat(it.listenPort)
84 .isEqualTo(defaultListenPort)
85 assertThat(it.idleTimeoutSec)
86 .isEqualTo(defaultIdleTimeoutSec)
88 it.securityConfiguration.fold({
89 fail("Should have been validated successfully")
91 assertThat(it.keyStoreFile).isEqualTo(KEYSTORE)
92 assertThat(it.keyStorePasswordFile).isEqualTo(KEYSTORE_PASSWORD)
93 assertThat(it.trustStoreFile).isEqualTo(TRUSTSTORE)
94 assertThat(it.trustStorePasswordFile).isEqualTo(TRUSTSTORE_PASSWORD)
97 assertThat(it.cbsConfiguration.firstRequestDelaySec).isEqualTo(defaultFirstReqDelaySec)
98 assertThat(it.cbsConfiguration.requestIntervalSec).isEqualTo(defaultRequestIntervalSec)
100 assertThat(it.streamPublishers).isEqualTo(sampleStreamsDefinition)
102 assertThat(it.logLevel).isEqualTo(Some(LogLevel.TRACE))
108 describe("validating configuration with security disabled") {
109 val config = partialConfiguration(
110 sslDisable = Some(true),
111 keyStoreFile = Some(""),
112 keyStorePasswordFile = None,
113 trustStoreFile = None,
114 trustStorePasswordFile = Some("")
117 it("should return validated configuration regardless of security keys presence") {
118 val result = cut.validate(config)
121 fail("Configuration should have been created successfully but was $it")
124 assertThat(it.idleTimeoutSec).isEqualTo(defaultIdleTimeoutSec)
126 assertThat(it.securityConfiguration.isEmpty()).isTrue()
128 assertThat(it.cbsConfiguration.firstRequestDelaySec).isEqualTo(defaultFirstReqDelaySec)
129 assertThat(it.cbsConfiguration.requestIntervalSec).isEqualTo(defaultRequestIntervalSec)
131 assertThat(it.streamPublishers).isEqualTo(sampleStreamsDefinition)
137 describe("validating configuration with ssl disable missing") {
138 val config = partialConfiguration(
142 it("should return validated configuration") {
143 val result = cut.validate(config)
146 fail("Configuration should have been created successfully but was $it")
149 it.securityConfiguration.fold({
150 fail("Should have been validated successfully")
152 assertThat(it.keyStoreFile).isEqualTo(KEYSTORE)
153 assertThat(it.keyStorePasswordFile).isEqualTo(KEYSTORE_PASSWORD)
154 assertThat(it.trustStoreFile).isEqualTo(TRUSTSTORE)
155 assertThat(it.trustStorePasswordFile).isEqualTo(TRUSTSTORE_PASSWORD)
163 describe("validating configuration with ssl enabled, but not all required security fields set") {
164 val config = partialConfiguration(
165 sslDisable = Some(false),
166 keyStoreFile = Some(KEYSTORE),
167 keyStorePasswordFile = None,
168 trustStoreFile = None,
169 trustStorePasswordFile = Some(TRUSTSTORE_PASSWORD)
172 it("should return validated configuration") {
173 val result = cut.validate(config)
175 assertThat(result.isLeft())
176 .describedAs("security validation result")
181 describe("validating CBS configuration from partial") {
182 given("valid CBS configuration") {
183 val config = partialConfiguration()
185 it("should returned validated config") {
186 val result = cut.validatedCbsConfiguration(config)
188 assertThat(result.firstRequestDelaySec).isEqualTo(defaultFirstReqDelaySec)
189 assertThat(result.requestIntervalSec).isEqualTo(defaultRequestIntervalSec)
194 given("missing firstReqDelaySec") {
195 val config = partialConfiguration(
196 firstReqDelaySec = None
199 it("should throw validation exception") {
200 assertThatExceptionOfType(ValidationException::class.java).isThrownBy {
201 cut.validatedCbsConfiguration(config)
202 }.withMessageContaining(PartialConfiguration::firstRequestDelaySec.name)
206 given("missing requestIntervalSec") {
207 val config = partialConfiguration(
208 requestIntervalSec = None)
210 it("should throw validation exception") {
211 assertThatExceptionOfType(ValidationException::class.java).isThrownBy {
212 cut.validatedCbsConfiguration(config)
213 }.withMessageContaining(PartialConfiguration::requestIntervalSec.name)
220 private fun partialConfiguration(listenPort: Option<Int> = Some(defaultListenPort),
221 idleTimeoutSec: Option<Long> = Some(defaultIdleTimeoutSec),
222 firstReqDelaySec: Option<Long> = Some(defaultFirstReqDelaySec),
223 requestIntervalSec: Option<Long> = Some(defaultRequestIntervalSec),
224 sslDisable: Option<Boolean> = Some(false),
225 keyStoreFile: Option<String> = Some(KEYSTORE),
226 keyStorePasswordFile: Option<String> = Some(KEYSTORE_PASSWORD),
227 trustStoreFile: Option<String> = Some(TRUSTSTORE),
228 trustStorePasswordFile: Option<String> = Some(TRUSTSTORE_PASSWORD),
229 streamPublishers: Option<List<KafkaSink>> = Some(sampleStreamsDefinition),
230 logLevel: Option<LogLevel> = Some(LogLevel.INFO)
231 ) = PartialConfiguration(
232 listenPort = listenPort,
233 idleTimeoutSec = idleTimeoutSec,
234 firstRequestDelaySec = firstReqDelaySec,
235 requestIntervalSec = requestIntervalSec,
236 sslDisable = sslDisable,
237 keyStoreFile = keyStoreFile,
238 keyStorePasswordFile = keyStorePasswordFile,
239 trustStoreFile = trustStoreFile,
240 trustStorePasswordFile = trustStorePasswordFile,
241 streamPublishers = streamPublishers,