summaryrefslogtreecommitdiffstats
path: root/ms/blueprintsprocessor/modules/commons/dmaap-lib
diff options
context:
space:
mode:
Diffstat (limited to 'ms/blueprintsprocessor/modules/commons/dmaap-lib')
-rw-r--r--ms/blueprintsprocessor/modules/commons/dmaap-lib/pom.xml77
-rw-r--r--ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/AafAuthDmaapClientService.kt63
-rw-r--r--ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/BluePrintDmaapClientService.kt102
-rw-r--r--ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/BluePrintDmaapLibConfiguration.kt46
-rw-r--r--ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/BluePrintDmaapLibPropertyService.kt187
-rw-r--r--ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/DmaapClientProperties.kt46
-rw-r--r--ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/HttpNoAuthDmaapClientService.kt62
-rw-r--r--ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/resources/event.properties26
-rw-r--r--ms/blueprintsprocessor/modules/commons/dmaap-lib/src/test/kotlin/org/ccsdk/apps/blueprintprocessor/dmaap/TestDmaapEventPublisher.kt215
-rw-r--r--ms/blueprintsprocessor/modules/commons/dmaap-lib/src/test/resources/logback-test.xml40
-rw-r--r--ms/blueprintsprocessor/modules/commons/dmaap-lib/src/test/resources/preferredRoute.txt22
11 files changed, 886 insertions, 0 deletions
diff --git a/ms/blueprintsprocessor/modules/commons/dmaap-lib/pom.xml b/ms/blueprintsprocessor/modules/commons/dmaap-lib/pom.xml
new file mode 100644
index 000000000..30f83d389
--- /dev/null
+++ b/ms/blueprintsprocessor/modules/commons/dmaap-lib/pom.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ ============LICENSE_START=======================================================
+ ~ ONAP - CDS
+ ~ ================================================================================
+ ~ Copyright (C) 2019 Huawei Technologies Co., Ltd. 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=========================================================
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.onap.ccsdk.apps.blueprintsprocessor</groupId>
+ <artifactId>commons</artifactId>
+ <version>0.4.2-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>dmaap-lib</artifactId>
+ <packaging>jar</packaging>
+ <name>Blueprints Processor Dmaap Lib</name>
+ <description>Blueprints Processor Dmaap Lib</description>
+
+
+ <dependencies>
+ <dependency>
+ <groupId>org.onap.dmaap.messagerouter.dmaapclient</groupId>
+ <artifactId>dmaapClient</artifactId>
+ <version>${dmaap.client.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-webflux</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.inject</groupId>
+ <artifactId>jersey-hk2</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.ws.rs</groupId>
+ <artifactId>javax.ws.rs-api</artifactId>
+ <version>2.1-m07</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jetbrains.kotlin</groupId>
+ <artifactId>kotlin-test-junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.ccsdk.apps.blueprintsprocessor</groupId>
+ <artifactId>processor-core</artifactId>
+ </dependency>
+ </dependencies>
+
+</project>
diff --git a/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/AafAuthDmaapClientService.kt b/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/AafAuthDmaapClientService.kt
new file mode 100644
index 000000000..dd884092d
--- /dev/null
+++ b/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/AafAuthDmaapClientService.kt
@@ -0,0 +1,63 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - CDS
+ * ================================================================================
+ * Copyright (C) 2019 Huawei Technologies Co., Ltd. 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.ccsdk.apps.blueprintsprocessor.dmaap
+
+import com.att.nsa.mr.client.MRBatchingPublisher
+import com.att.nsa.mr.client.MRClientFactory
+import com.att.nsa.mr.client.impl.MRSimplerBatchPublisher
+
+/**
+ * Representation of DMAAP client service for AAF auth type.
+ */
+class AafAuthDmaapClientService(private val clientProps:
+ AafAuthDmaapClientProperties)
+ : BluePrintDmaapClientService {
+
+ /**
+ * The constructed DMAAP client.
+ */
+ var clients: MutableList<MRBatchingPublisher> = mutableListOf()
+
+
+ /**
+ * Returns the DMAAP client after constructing it properly with the data
+ * that is required for AAF auth connection.
+ */
+ override fun getDmaapClient(): MutableList<MRBatchingPublisher> {
+ if (!clients.isEmpty()) {
+ return clients
+ }
+ val topics = mutableListOf<String>()
+ topics.addAll(clientProps.topic.split(","))
+
+ for (t in topics) {
+ val client = MRClientFactory.createBatchingPublisher(
+ clientProps.host, t, clientProps.username,
+ clientProps.password, 1, 1, false,
+ clientProps.type, "")
+ val batchPublisher = client as MRSimplerBatchPublisher
+ batchPublisher.props = clientProps.props
+ clients.add(client)
+ }
+ return clients
+ }
+
+} \ No newline at end of file
diff --git a/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/BluePrintDmaapClientService.kt b/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/BluePrintDmaapClientService.kt
new file mode 100644
index 000000000..21d7128e4
--- /dev/null
+++ b/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/BluePrintDmaapClientService.kt
@@ -0,0 +1,102 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - CDS
+ * ================================================================================
+ * Copyright (C) 2019 Huawei Technologies Co., Ltd. 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.ccsdk.apps.blueprintsprocessor.dmaap
+
+import com.att.nsa.mr.client.MRBatchingPublisher
+import com.att.nsa.mr.client.MRPublisher
+import org.slf4j.LoggerFactory
+import java.io.IOException
+import java.util.concurrent.TimeUnit
+
+
+/**
+ * Abstraction of DMAAP client services that could form DMAAP client from the
+ * properties provided. This abstraction also provides a mechanism to send
+ * messages with the given partition in a session and closing the same.
+ */
+interface BluePrintDmaapClientService {
+
+ /**
+ * Static variable for logging.
+ */
+ companion object {
+ var log = LoggerFactory.getLogger(
+ BluePrintDmaapClientService::class.java)!!
+ }
+
+ /**
+ * Returns the properly constructed DMAAP client with the type.
+ */
+ fun getDmaapClient(): MutableList<MRBatchingPublisher>
+
+ /**
+ * Sends messages to the sessions created by the information provided from
+ * application.properties and event.properties file
+ */
+ fun sendMessage(msgs: Collection<String>): Boolean {
+ var success = true
+ val clients = getDmaapClient()
+ val dmaapMsgs = mutableListOf<MRPublisher.message>()
+ for (m in msgs) {
+ dmaapMsgs.add(MRPublisher.message("1", m))
+ }
+ log.info("Sending messages to the DMAAP Server")
+ for (client in clients) {
+ try {
+ client.send(dmaapMsgs)
+ } catch (e: IOException) {
+ success = false
+ log.error(e.message, e)
+ }
+ }
+ return success
+ }
+
+ /**
+ * Sends message to the sessions created by the information provided from
+ * application.properties and event.properties file
+ */
+ fun sendMessage(msg: String): Boolean {
+ val msgs = mutableListOf<String>()
+ msgs.add(msg)
+ return sendMessage(msgs)
+ }
+
+ /**
+ * Closes the opened session that was used for sending messages.
+ */
+ fun close(timeout: Long): MutableList<MutableList<MRPublisher.message>>? {
+ log.debug("Closing the DMAAP producer clients")
+ var msgs: MutableList<MutableList<MRPublisher.message>> =
+ mutableListOf()
+ val clients = getDmaapClient()
+ for (client in clients) {
+ try {
+ var ms = client.close(timeout, TimeUnit.SECONDS)
+ msgs.add(ms)
+ } catch (e: IOException) {
+ log.warn("Unable to cleanly close the connection from the " +
+ "client $client", e)
+ }
+ }
+ return msgs
+ }
+}
diff --git a/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/BluePrintDmaapLibConfiguration.kt b/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/BluePrintDmaapLibConfiguration.kt
new file mode 100644
index 000000000..ca1a07ba3
--- /dev/null
+++ b/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/BluePrintDmaapLibConfiguration.kt
@@ -0,0 +1,46 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - CDS
+ * ================================================================================
+ * Copyright (C) 2019 Huawei Technologies Co., Ltd. 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.ccsdk.apps.blueprintsprocessor.dmaap
+
+import org.springframework.boot.context.properties.EnableConfigurationProperties
+import org.springframework.context.annotation.ComponentScan
+import org.springframework.context.annotation.Configuration
+
+/**
+ * Representation of DMAAP lib configuration to load the required property
+ * files into the application context.
+ */
+@Configuration
+@ComponentScan
+@EnableConfigurationProperties
+open class BluePrintDmaapLibConfiguration
+
+/**
+ * Util constants required for DMAAP library to use.
+ */
+class DmaapLibConstants {
+ companion object {
+ const val SERVICE_BLUEPRINT_DMAAP_LIB_PROPERTY = "blueprint" +
+ "-dmaap-lib-property-service"
+ const val TYPE_HTTP_NO_AUTH = "HTTPNOAUTH"
+ const val TYPE_HTTP_AAF_AUTH = "HTTPAAF"
+ }
+} \ No newline at end of file
diff --git a/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/BluePrintDmaapLibPropertyService.kt b/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/BluePrintDmaapLibPropertyService.kt
new file mode 100644
index 000000000..7abbefbca
--- /dev/null
+++ b/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/BluePrintDmaapLibPropertyService.kt
@@ -0,0 +1,187 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - CDS
+ * ================================================================================
+ * Copyright (C) 2019 Huawei Technologies Co., Ltd. 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.ccsdk.apps.blueprintsprocessor.dmaap
+
+import com.fasterxml.jackson.databind.JsonNode
+import org.onap.ccsdk.apps.blueprintsprocessor.core.BluePrintProperties
+import org.onap.ccsdk.apps.blueprintsprocessor.dmaap.DmaapLibConstants.Companion.SERVICE_BLUEPRINT_DMAAP_LIB_PROPERTY
+import org.onap.ccsdk.apps.blueprintsprocessor.dmaap.DmaapLibConstants.Companion.TYPE_HTTP_AAF_AUTH
+import org.onap.ccsdk.apps.blueprintsprocessor.dmaap.DmaapLibConstants.Companion.TYPE_HTTP_NO_AUTH
+import org.onap.ccsdk.apps.controllerblueprints.core.BluePrintProcessorException
+import org.onap.ccsdk.apps.controllerblueprints.core.utils.JacksonUtils
+import org.slf4j.LoggerFactory
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.context.annotation.Configuration
+import org.springframework.context.annotation.PropertySource
+import org.springframework.context.annotation.PropertySources
+import org.springframework.core.env.ConfigurableEnvironment
+import org.springframework.core.env.Environment
+import org.springframework.core.io.support.ResourcePropertySource
+import org.springframework.stereotype.Service
+import java.util.Properties
+
+/**
+ * Representation of DMAAP lib property service to load the properties
+ * according to the connection type to the DMAAP server and returning back
+ * the appropriate DMAAP client to send messages DMAAP client.
+ */
+@Service(SERVICE_BLUEPRINT_DMAAP_LIB_PROPERTY)
+@Configuration
+@PropertySources(PropertySource("classpath:event.properties"))
+open class BluePrintDmaapLibPropertyService(private var bluePrintProperties:
+ BluePrintProperties) {
+
+ /**
+ * Static variable for logging.
+ */
+ companion object {
+ var log = LoggerFactory.getLogger(
+ BluePrintDmaapLibPropertyService::class.java)!!
+ }
+
+ /**
+ * Environment entity to derive it from the system to load a specific
+ * property file.
+ */
+ @Autowired
+ lateinit var env: Environment
+
+ /**
+ * Returns the DMAAP client by providing the input properties as a JSON
+ * node.
+ */
+ fun blueprintDmaapClientService(jsonNode: JsonNode):
+ BluePrintDmaapClientService {
+ val dmaapProps = dmaapClientProperties(jsonNode)
+ return blueprintDmaapClientService(dmaapProps)
+ }
+
+ /**
+ * Returns the DMAAP client by providing the input properties as a
+ * selector string.
+ */
+ fun blueprintDmaapClientService(selector: String):
+ BluePrintDmaapClientService {
+ val prefix = "blueprintsprocessor.dmaapclient.$selector"
+ val dmaapProps = dmaapClientProperties(prefix)
+ return blueprintDmaapClientService(dmaapProps)
+ }
+
+ /**
+ * Returns the DMAAP client properties from the type of connection it
+ * requires.
+ */
+ fun dmaapClientProperties(prefix: String): DmaapClientProperties {
+ val type = bluePrintProperties.propertyBeanType(
+ "$prefix.type", String::class.java)
+ val clientProps : DmaapClientProperties
+
+ when (type) {
+ TYPE_HTTP_NO_AUTH -> {
+ clientProps = bluePrintProperties.propertyBeanType(
+ prefix, HttpNoAuthDmaapClientProperties::class.java)
+ clientProps.props = parseEventProps()
+ }
+
+ TYPE_HTTP_AAF_AUTH -> {
+ clientProps = bluePrintProperties.propertyBeanType(
+ prefix, AafAuthDmaapClientProperties::class.java)
+ clientProps.props = parseEventProps()
+ }
+
+ else -> {
+ throw BluePrintProcessorException("DMAAP adaptor($type) is " +
+ "not supported")
+ }
+ }
+ return clientProps
+ }
+
+ /**
+ * Returns the DMAAP client properties from the type of connection it
+ * requires.
+ */
+ fun dmaapClientProperties(jsonNode: JsonNode): DmaapClientProperties {
+ val type = jsonNode.get("type").textValue()
+ val clientProps : DmaapClientProperties
+
+ when (type) {
+ TYPE_HTTP_NO_AUTH -> {
+ clientProps = JacksonUtils.readValue(jsonNode,
+ HttpNoAuthDmaapClientProperties::class.java)!!
+ clientProps.props = parseEventProps()
+ }
+
+ TYPE_HTTP_AAF_AUTH -> {
+ clientProps = JacksonUtils.readValue(jsonNode,
+ AafAuthDmaapClientProperties::class.java)!!
+ clientProps.props = parseEventProps()
+ }
+
+ else -> {
+ throw BluePrintProcessorException("DMAAP adaptor($type) is " +
+ "not supported")
+ }
+ }
+ return clientProps
+ }
+
+ /**
+ * Returns DMAAP client service according to the type of client properties.
+ */
+ private fun blueprintDmaapClientService(clientProps: DmaapClientProperties):
+ BluePrintDmaapClientService {
+ when (clientProps) {
+ is HttpNoAuthDmaapClientProperties -> {
+ return HttpNoAuthDmaapClientService(clientProps)
+ }
+
+ is AafAuthDmaapClientProperties -> {
+ return AafAuthDmaapClientService(clientProps)
+ }
+
+ else -> {
+ throw BluePrintProcessorException("Unable to get the DMAAP " +
+ "client")
+ }
+ }
+ }
+
+ /**
+ * Parses the event.properties file which contains the default values for
+ * the connection required.
+ */
+ private fun parseEventProps(): Properties {
+ val prodProps = Properties()
+ val proProps = (env as ConfigurableEnvironment).propertySources.get(
+ "class path resource [event.properties]")
+
+ if (proProps != null) {
+ val entries = (proProps as ResourcePropertySource).source.entries
+ for (e in entries) {
+ prodProps.put(e.key, e.value)
+ }
+ } else {
+ log.error("Unable to load the event.properties file")
+ }
+ return prodProps
+ }
+}
diff --git a/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/DmaapClientProperties.kt b/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/DmaapClientProperties.kt
new file mode 100644
index 000000000..97df2723b
--- /dev/null
+++ b/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/DmaapClientProperties.kt
@@ -0,0 +1,46 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - CDS
+ * ================================================================================
+ * Copyright (C) 2019 Huawei Technologies Co., Ltd. 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.ccsdk.apps.blueprintsprocessor.dmaap
+
+import java.util.Properties
+
+/**
+ * Representation of data required for all DMAAP client.
+ */
+open class DmaapClientProperties {
+ lateinit var props: Properties
+ lateinit var type: String
+ lateinit var host: String
+ lateinit var topic: String
+}
+
+/**
+ * Representation of data required for HTTP no auth DMAAP client.
+ */
+open class HttpNoAuthDmaapClientProperties : DmaapClientProperties()
+
+/**
+ * Representation of data required for AAF auth DMAAP client.
+ */
+open class AafAuthDmaapClientProperties : DmaapClientProperties() {
+ lateinit var username: String
+ lateinit var password: String
+}
diff --git a/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/HttpNoAuthDmaapClientService.kt b/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/HttpNoAuthDmaapClientService.kt
new file mode 100644
index 000000000..ad023b962
--- /dev/null
+++ b/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/kotlin/org/onap/ccsdk/apps/blueprintsprocessor/dmaap/HttpNoAuthDmaapClientService.kt
@@ -0,0 +1,62 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - CDS
+ * ================================================================================
+ * Copyright (C) 2019 Huawei Technologies Co., Ltd. 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.ccsdk.apps.blueprintsprocessor.dmaap
+
+import com.att.nsa.mr.client.MRBatchingPublisher
+import com.att.nsa.mr.client.MRClientFactory.createSimplePublisher
+import com.att.nsa.mr.client.impl.MRSimplerBatchPublisher
+
+/**
+ * Representation of DMAAP client service for HTTP no auth type.
+ */
+class HttpNoAuthDmaapClientService(private val clientProps:
+ HttpNoAuthDmaapClientProperties)
+ : BluePrintDmaapClientService {
+
+ /**
+ * The constructed DMAAP client.
+ */
+ var clients: MutableList<MRBatchingPublisher> = mutableListOf()
+
+
+ /**
+ * Returns the DMAAP client after constructing it properly with the data
+ * that is required for HTTP no auth connection.
+ */
+ override fun getDmaapClient(): MutableList<MRBatchingPublisher> {
+ if (!clients.isEmpty()) {
+ return clients
+ }
+ val topics = mutableListOf<String>()
+ topics.addAll(clientProps.topic.split(","))
+
+ for (t in topics) {
+ val client = createSimplePublisher(clientProps.host, t)
+ val batchPublisher = client as MRSimplerBatchPublisher
+ batchPublisher.setProtocolFlag(clientProps.type)
+ batchPublisher.props = clientProps.props
+ clients.add(client)
+ }
+
+ return clients
+ }
+
+} \ No newline at end of file
diff --git a/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/resources/event.properties b/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/resources/event.properties
new file mode 100644
index 000000000..320b08e85
--- /dev/null
+++ b/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/main/resources/event.properties
@@ -0,0 +1,26 @@
+#
+# ============LICENSE_START=======================================================
+# ONAP - CDS
+# ================================================================================
+# Copyright (C) 2019 Huawei Technologies Co., Ltd. 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=========================================================
+#
+
+#TransportType-Specify which way user want to use. I.e. <HTTPAAF,DME2,HTTPAUTH >
+Protocol =http
+partition=1
+contenttype = application/json
+
+
diff --git a/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/test/kotlin/org/ccsdk/apps/blueprintprocessor/dmaap/TestDmaapEventPublisher.kt b/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/test/kotlin/org/ccsdk/apps/blueprintprocessor/dmaap/TestDmaapEventPublisher.kt
new file mode 100644
index 000000000..9b3aae5e6
--- /dev/null
+++ b/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/test/kotlin/org/ccsdk/apps/blueprintprocessor/dmaap/TestDmaapEventPublisher.kt
@@ -0,0 +1,215 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP - CDS
+ * ================================================================================
+ * Copyright (C) 2019 Huawei Technologies Co., Ltd. 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.ccsdk.apps.blueprintprocessor.dmaap
+
+import com.fasterxml.jackson.databind.ObjectMapper
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.onap.ccsdk.apps.blueprintsprocessor.core.BluePrintProperties
+import org.onap.ccsdk.apps.blueprintsprocessor.core.BlueprintPropertyConfiguration
+import org.onap.ccsdk.apps.blueprintsprocessor.dmaap.BluePrintDmaapLibConfiguration
+import org.onap.ccsdk.apps.blueprintsprocessor.dmaap.BluePrintDmaapLibPropertyService
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
+import org.springframework.boot.test.context.SpringBootTest
+import org.springframework.http.HttpStatus
+import org.springframework.http.ResponseEntity
+import org.springframework.test.context.ContextConfiguration
+import org.springframework.test.context.TestPropertySource
+import org.springframework.test.context.junit4.SpringRunner
+import org.springframework.web.bind.annotation.PathVariable
+import org.springframework.web.bind.annotation.PostMapping
+import org.springframework.web.bind.annotation.RequestMapping
+import org.springframework.web.bind.annotation.RestController
+import kotlin.test.assertEquals
+import kotlin.test.assertNotNull
+
+/**
+ * Unit test cases for DMaap publisher code.
+ */
+@RunWith(SpringRunner::class)
+@EnableAutoConfiguration(exclude = [DataSourceAutoConfiguration::class])
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
+@ContextConfiguration(classes = [BluePrintDmaapLibConfiguration::class, TestController::class,
+ BlueprintPropertyConfiguration::class, BluePrintProperties::class])
+@TestPropertySource(properties = ["server.port=9111",
+ "blueprintsprocessor.dmaapclient.aai.topic=cds_aai",
+ "blueprintsprocessor.dmaapclient.aai.type=HTTPNOAUTH",
+ "blueprintsprocessor.dmaapclient.aai.host=127.0.0.1:9111",
+ "blueprintsprocessor.dmaapclient.multi.topic=cds_multi1,cds_multi2",
+ "blueprintsprocessor.dmaapclient.multi.type=HTTPNOAUTH",
+ "blueprintsprocessor.dmaapclient.multi.host=127.0.0.1:9111"])
+class TestDmaapEventPublisher {
+
+ @Autowired
+ lateinit var dmaapService : BluePrintDmaapLibPropertyService
+
+ /**
+ * Tests the event properties being set properly and sent as request.
+ */
+ @Test
+ fun testEventProperties() {
+ val strList = mutableListOf<String>()
+ val dmaapClient = dmaapService.blueprintDmaapClientService("aai")
+
+ strList.add("{\n" +
+ " \"a\" : \"hello\"\n" +
+ "}")
+ dmaapClient.sendMessage(strList)
+ val msgs = dmaapClient.close(2)
+ assertEquals(msgs!!.size, 1)
+ val topic1 = msgs.get(0)
+ assertEquals(topic1!!.size, 0)
+ }
+
+ /**
+ * Tests the event properties being set properly and sent as request with
+ * single message.
+ */
+ @Test
+ fun testEventPropertiesWithSingleMsg() {
+ val dmaapClient = dmaapService.blueprintDmaapClientService("aai")
+ val str : String = "{\n" +
+ " \"a\" : \"hello\"\n" +
+ "}"
+ dmaapClient.sendMessage(str)
+ val msgs = dmaapClient.close(2)
+ assertEquals(msgs!!.size, 1)
+ val topic1 = msgs.get(0)
+ assertEquals(topic1!!.size, 0)
+ }
+
+ /**
+ * Tests the event properties with multiple topics.
+ */
+ @Test
+ fun testMultiTopicProperties() {
+ val strList = mutableListOf<String>()
+ val dmaapClient = dmaapService.blueprintDmaapClientService("multi")
+
+ strList.add("{\n" +
+ " \"a\" : \"hello\"\n" +
+ "}")
+ dmaapClient.sendMessage(strList)
+ val msgs = dmaapClient.close(2)
+ assertEquals(msgs!!.size, 2)
+ val topic1 = msgs.get(0)
+ assertEquals(topic1!!.size, 0)
+ val topic2 = msgs.get(1)
+ assertEquals(topic2!!.size, 0)
+ }
+
+
+ /**
+ * Tests the event properties with multiple topics with JSON node as input.
+ */
+ @Test
+ fun testMultiTopicPropertiesWithJsonInput() {
+ val jsonString = "{\n" +
+ " \"topic\" : \"cds_json1,cds_json2\",\n" +
+ " \"type\" : \"HTTPNOAUTH\",\n" +
+ " \"host\" : \"127.0.0.1:9111\"\n" +
+ "}"
+ val mapper = ObjectMapper()
+ val node = mapper.readTree(jsonString)
+ val strList = mutableListOf<String>()
+ val dmaapClient = dmaapService.blueprintDmaapClientService(node)
+
+ strList.add("{\n" +
+ " \"a\" : \"hello\"\n" +
+ "}")
+ dmaapClient.sendMessage(strList)
+ val msgs = dmaapClient.close(2)
+ assertEquals(msgs!!.size, 2)
+ val topic1 = msgs.get(0)
+ assertEquals(topic1!!.size, 0)
+ val topic2 = msgs.get(1)
+ assertEquals(topic2!!.size, 0)
+ }
+
+
+ /**
+ * Tests the event properties with multiple messages.
+ */
+ @Test
+ fun testMultiMsgsProperties() {
+ val strList = mutableListOf<String>()
+ val dmaapClient = dmaapService.blueprintDmaapClientService("aai")
+
+ strList.add("{\n" +
+ " \"a\" : \"hello\"\n" +
+ "}")
+ strList.add("{\n" +
+ " \"a\" : \"second\"\n" +
+ "}")
+ dmaapClient.sendMessage(strList)
+ val msgs = dmaapClient.close(2)
+ assertEquals(msgs!!.size, 1)
+ val topic1 = msgs.get(0)
+ assertEquals(topic1!!.size, 0)
+ }
+
+ /**
+ * Tests the DMAAP client properties generated with the complete prefix.
+ */
+ @Test
+ fun testDmaapClientProperties() {
+ val properties = dmaapService.dmaapClientProperties(
+ "blueprintsprocessor.dmaapclient.aai")
+ assertNotNull(properties, "failed to create property bean")
+ assertNotNull(properties.host, "failed to get url property" +
+ " in property bean")
+ }
+
+ /**
+ * Tests the blueprint DMAAP client service with only selector prefix.
+ */
+ @Test
+ fun testBlueprintDmaapClientService() {
+ val blueprintDmaapClientService =
+ dmaapService.blueprintDmaapClientService("aai")
+ assertNotNull(blueprintDmaapClientService,
+ "failed to create blueprintDmaapClientService")
+ }
+
+}
+
+/**
+ * Rest controller for testing the client request that is sent.
+ */
+@RestController
+@RequestMapping(path = ["/events"])
+open class TestController {
+
+ /**
+ * Accepts request for a topic and sends a message as response.
+ */
+ @PostMapping(path = ["/{topic}"])
+ fun postTopic(@PathVariable(value = "topic") topic : String):
+ ResponseEntity<Any> {
+ var a = "{\n" +
+ " \"message\" : \"The message is published into $topic " +
+ "topic\"\n" +
+ "}"
+ return ResponseEntity(a, HttpStatus.OK)
+ }
+}
diff --git a/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/test/resources/logback-test.xml b/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/test/resources/logback-test.xml
new file mode 100644
index 000000000..0f76057ad
--- /dev/null
+++ b/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/test/resources/logback-test.xml
@@ -0,0 +1,40 @@
+<!--
+ ~ ============LICENSE_START=======================================================
+ ~ ONAP - CDS
+ ~ ================================================================================
+ ~ Copyright (C) 2019 Huawei Technologies Co., Ltd. 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=========================================================
+ -->
+
+
+<configuration>
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+ <!-- encoders are assigned the type
+ ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
+ <encoder>
+ <pattern>%d{HH:mm:ss.SSS} %-5level %logger{100} - %msg%n</pattern>
+ </encoder>
+ </appender>
+
+ <logger name="org.springframework.test" level="warn"/>
+ <logger name="org.springframework" level="warn"/>
+ <logger name="org.hibernate" level="info"/>
+ <logger name="org.onap.ccsdk.apps.blueprintsprocessor" level="info"/>
+
+ <root level="warn">
+ <appender-ref ref="STDOUT"/>
+ </root>
+
+</configuration>
diff --git a/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/test/resources/preferredRoute.txt b/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/test/resources/preferredRoute.txt
new file mode 100644
index 000000000..7e6ed8bdf
--- /dev/null
+++ b/ms/blueprintsprocessor/modules/commons/dmaap-lib/src/test/resources/preferredRoute.txt
@@ -0,0 +1,22 @@
+# ============LICENSE_START==========================================
+# ONAP : APPC
+# ===================================================================
+# Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
+# ===================================================================
+#
+# Unless otherwise specified, all software contained herein is licensed
+# under the Apache License, Version 2.0 (the License);
+# you may not use this software 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.
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+# ============LICENSE_END============================================
+preferredRouteKey=MR1