From c852448b1e6ca5e28e0b0dab26c2af3d5af3f390 Mon Sep 17 00:00:00 2001 From: Piotr Jaszczyk Date: Thu, 14 Mar 2019 08:38:15 +0100 Subject: Implement Kafka stream definition parsers Change-Id: I43215c1c2494b6036deb004891fb76bfd2b74474 Issue-ID: DCAEGEN2-1341 Signed-off-by: Piotr Jaszczyk --- .../impl/streams/gson/KafkaSinkParserTest.java | 115 +++++++++++++++++++++ .../impl/streams/gson/KafkaSourceParserTest.java | 60 +++++++++++ .../src/test/resources/streams/kafka_sink.json | 9 ++ .../resources/streams/kafka_sink_invalid_type.json | 7 ++ .../test/resources/streams/kafka_sink_minimal.json | 7 ++ .../streams/kafka_sink_missing_child.json | 3 + .../resources/streams/kafka_source_minimal.json | 7 ++ 7 files changed, 208 insertions(+) create mode 100644 rest-services/cbs-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/streams/gson/KafkaSinkParserTest.java create mode 100644 rest-services/cbs-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/streams/gson/KafkaSourceParserTest.java create mode 100644 rest-services/cbs-client/src/test/resources/streams/kafka_sink.json create mode 100644 rest-services/cbs-client/src/test/resources/streams/kafka_sink_invalid_type.json create mode 100644 rest-services/cbs-client/src/test/resources/streams/kafka_sink_minimal.json create mode 100644 rest-services/cbs-client/src/test/resources/streams/kafka_sink_missing_child.json create mode 100644 rest-services/cbs-client/src/test/resources/streams/kafka_source_minimal.json (limited to 'rest-services/cbs-client/src/test') diff --git a/rest-services/cbs-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/streams/gson/KafkaSinkParserTest.java b/rest-services/cbs-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/streams/gson/KafkaSinkParserTest.java new file mode 100644 index 00000000..b5481203 --- /dev/null +++ b/rest-services/cbs-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/streams/gson/KafkaSinkParserTest.java @@ -0,0 +1,115 @@ +/* + * ============LICENSE_START==================================== + * DCAEGEN2-SERVICES-SDK + * ========================================================= + * Copyright (C) 2019 Nokia. All rights reserved. + * ========================================================= + * 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.dcaegen2.services.sdk.rest.services.cbs.client.impl.streams.gson; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.in; +import static org.junit.jupiter.api.Assertions.*; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import io.vavr.Function1; +import io.vavr.control.Either; +import java.io.IOException; +import java.io.InputStreamReader; +import org.junit.jupiter.api.Test; +import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.exceptions.StreamParserError; +import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.streams.StreamFromGsonParser; +import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.streams.StreamFromGsonParsers; +import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.streams.dmaap.KafkaSink; + +/** + * @author Piotr Jaszczyk + * @since March 2019 + */ +class KafkaSinkParserTest { + + private final StreamFromGsonParser cut = StreamFromGsonParsers.kafkaSinkParser(); + + @Test + void precondition_assureInstanceOf() { + assertThat(cut).isInstanceOf(KafkaSinkParser.class); + } + + @Test + void shouldParseMinimalKafkaSinkDefinition() throws IOException { + // given + JsonObject input = GsonUtils.readObjectFromResource("/streams/kafka_sink_minimal.json"); + + // when + final KafkaSink result = cut.unsafeParse(input); + + // then + assertThat(result.aafCredentials()).isNull(); + assertThat(result.bootstrapServers()).isEqualTo("dmaap-mr-kafka-0:6060,dmaap-mr-kafka-1:6060"); + assertThat(result.topicName()).isEqualTo("HVVES_PERF3GPP"); + assertThat(result.clientId()).isNull(); + assertThat(result.clientRole()).isNull(); + } + + @Test + void shouldParseBasicKafkaSinkDefinition() throws IOException { + // given + JsonObject input = GsonUtils.readObjectFromResource("/streams/kafka_sink.json"); + + // when + final KafkaSink result = cut.unsafeParse(input); + + // then + assertThat(result.aafCredentials()).isNull(); + assertThat(result.bootstrapServers()).isEqualTo("dmaap-mr-kafka-0:6060,dmaap-mr-kafka-1:6060"); + assertThat(result.topicName()).isEqualTo("HVVES_PERF3GPP"); + assertThat(result.clientId()).isEqualTo("1500462518108"); + assertThat(result.clientRole()).isEqualTo("com.dcae.member"); + } + + @Test + void shouldReturnErrorWhenStructureIsWrong() throws IOException { + // given + JsonObject input = GsonUtils.readObjectFromResource("/streams/kafka_sink_missing_child.json"); + + // when + final Either result = cut.parse(input); + + // then + assertThat(result.isRight()).describedAs("should not be right").isFalse(); + result.peekLeft(error -> { + assertThat(error.message()).contains("kafka_info"); + }); + } + + @Test + void shouldReturnErrorWhenTypeIsWrong() throws IOException { + // given + JsonObject input = GsonUtils.readObjectFromResource("/streams/kafka_sink_invalid_type.json"); + + // when + final Either result = cut.parse(input); + + // then + assertThat(result.isRight()).describedAs("should not be right").isFalse(); + result.peekLeft(error -> { + assertThat(error.message()).containsIgnoringCase("invalid stream type"); + assertThat(error.message()).containsIgnoringCase("kafka"); + assertThat(error.message()).containsIgnoringCase("message_router"); + }); + } +} \ No newline at end of file diff --git a/rest-services/cbs-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/streams/gson/KafkaSourceParserTest.java b/rest-services/cbs-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/streams/gson/KafkaSourceParserTest.java new file mode 100644 index 00000000..87131285 --- /dev/null +++ b/rest-services/cbs-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/streams/gson/KafkaSourceParserTest.java @@ -0,0 +1,60 @@ +/* + * ============LICENSE_START==================================== + * DCAEGEN2-SERVICES-SDK + * ========================================================= + * Copyright (C) 2019 Nokia. All rights reserved. + * ========================================================= + * 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.dcaegen2.services.sdk.rest.services.cbs.client.impl.streams.gson; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.gson.JsonObject; +import java.io.IOException; +import org.junit.jupiter.api.Test; +import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.streams.StreamFromGsonParser; +import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.streams.StreamFromGsonParsers; +import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.streams.dmaap.KafkaSource; + +/** + * @author Piotr Jaszczyk + * @since March 2019 + */ +class KafkaSourceParserTest { + + private final StreamFromGsonParser cut = StreamFromGsonParsers.kafkaSourceParser(); + + @Test + void precondition_assureInstanceOf() { + assertThat(cut).isInstanceOf(KafkaSourceParser.class); + } + + @Test + void shouldParseMinimalKafkaSourceDefinition() throws IOException { + // given + JsonObject input = GsonUtils.readObjectFromResource("/streams/kafka_source_minimal.json"); + + // when + final KafkaSource result = cut.unsafeParse(input); + + // then + assertThat(result.aafCredentials()).isNull(); + assertThat(result.bootstrapServers()).isEqualTo("dmaap-mr-kafka-0:6060,dmaap-mr-kafka-1:6060"); + assertThat(result.topicName()).isEqualTo("HVVES_PERF3GPP"); + assertThat(result.clientId()).isNull(); + assertThat(result.clientRole()).isNull(); + } +} \ No newline at end of file diff --git a/rest-services/cbs-client/src/test/resources/streams/kafka_sink.json b/rest-services/cbs-client/src/test/resources/streams/kafka_sink.json new file mode 100644 index 00000000..b60388d5 --- /dev/null +++ b/rest-services/cbs-client/src/test/resources/streams/kafka_sink.json @@ -0,0 +1,9 @@ +{ + "type": "kafka", + "kafka_info": { + "client_role": "com.dcae.member", + "client_id": "1500462518108", + "bootstrap_servers": "dmaap-mr-kafka-0:6060,dmaap-mr-kafka-1:6060", + "topic_name": "HVVES_PERF3GPP" + } +} diff --git a/rest-services/cbs-client/src/test/resources/streams/kafka_sink_invalid_type.json b/rest-services/cbs-client/src/test/resources/streams/kafka_sink_invalid_type.json new file mode 100644 index 00000000..0ee88adb --- /dev/null +++ b/rest-services/cbs-client/src/test/resources/streams/kafka_sink_invalid_type.json @@ -0,0 +1,7 @@ +{ + "type": "message_router", + "kafka_info": { + "bootstrap_servers": "dmaap-mr-kafka-0:6060,dmaap-mr-kafka-1:6060", + "topic_name": "HVVES_PERF3GPP" + } +} diff --git a/rest-services/cbs-client/src/test/resources/streams/kafka_sink_minimal.json b/rest-services/cbs-client/src/test/resources/streams/kafka_sink_minimal.json new file mode 100644 index 00000000..da8dd4fe --- /dev/null +++ b/rest-services/cbs-client/src/test/resources/streams/kafka_sink_minimal.json @@ -0,0 +1,7 @@ +{ + "type": "kafka", + "kafka_info": { + "bootstrap_servers": "dmaap-mr-kafka-0:6060,dmaap-mr-kafka-1:6060", + "topic_name": "HVVES_PERF3GPP" + } +} diff --git a/rest-services/cbs-client/src/test/resources/streams/kafka_sink_missing_child.json b/rest-services/cbs-client/src/test/resources/streams/kafka_sink_missing_child.json new file mode 100644 index 00000000..d2591b3a --- /dev/null +++ b/rest-services/cbs-client/src/test/resources/streams/kafka_sink_missing_child.json @@ -0,0 +1,3 @@ +{ + "type": "kafka" +} diff --git a/rest-services/cbs-client/src/test/resources/streams/kafka_source_minimal.json b/rest-services/cbs-client/src/test/resources/streams/kafka_source_minimal.json new file mode 100644 index 00000000..da8dd4fe --- /dev/null +++ b/rest-services/cbs-client/src/test/resources/streams/kafka_source_minimal.json @@ -0,0 +1,7 @@ +{ + "type": "kafka", + "kafka_info": { + "bootstrap_servers": "dmaap-mr-kafka-0:6060,dmaap-mr-kafka-1:6060", + "topic_name": "HVVES_PERF3GPP" + } +} -- cgit