From 41712e142c8d2b2bff9bc9e094f45306a60d7cb9 Mon Sep 17 00:00:00 2001 From: Brinda Santh Date: Thu, 26 Dec 2019 16:26:25 -0500 Subject: Relationship Type and Templates models Enrichment Support for Relationship Types and Templates. Relationship DSL support for ConnectTo connections ( RestClient, SshClient, MessageProducer, MessageConsume, Nats) Moved datatype map from collection to complex type Issue-ID: CCSDK-1054 Signed-off-by: Brinda Santh Change-Id: I0f18db2cb52e1e93dfab04498b8298587cba2540 --- .../db/DatabasePropertiesDSL.kt | 17 ++ .../blueprintsprocessor/grpc/GrpcPropertiesDSL.kt | 17 ++ .../message/BluePrintMessageLibData.kt | 8 +- .../message/MessagePropertiesDSL.kt | 255 +++++++++++++++++++++ .../message/MessagePropertiesDSLTest.kt | 101 ++++++++ .../blueprintsprocessor/nats/NatsPropertiesDSL.kt | 112 +++++++++ .../nats/NatsPropertiesDSLTest.kt | 63 +++++ .../rest/BluePrintRestLibConfiguration.kt | 1 + .../rest/RestClientPropertiesDSL.kt | 108 ++++++--- .../rest/service/RestClientPropertiesDSLTest.kt | 75 +++--- .../blueprintsprocessor/ssh/SshPropertiesDSL.kt | 101 ++++++++ .../ssh/SshPropertiesDSLTest.kt | 56 +++++ 12 files changed, 852 insertions(+), 62 deletions(-) create mode 100644 ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/db/DatabasePropertiesDSL.kt create mode 100644 ms/blueprintsprocessor/modules/commons/grpc-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/grpc/GrpcPropertiesDSL.kt create mode 100644 ms/blueprintsprocessor/modules/commons/message-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/MessagePropertiesDSL.kt create mode 100644 ms/blueprintsprocessor/modules/commons/message-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/MessagePropertiesDSLTest.kt create mode 100644 ms/blueprintsprocessor/modules/commons/nats-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/nats/NatsPropertiesDSL.kt create mode 100644 ms/blueprintsprocessor/modules/commons/nats-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/nats/NatsPropertiesDSLTest.kt create mode 100644 ms/blueprintsprocessor/modules/commons/ssh-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/ssh/SshPropertiesDSL.kt create mode 100644 ms/blueprintsprocessor/modules/commons/ssh-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/ssh/SshPropertiesDSLTest.kt (limited to 'ms/blueprintsprocessor/modules/commons') diff --git a/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/db/DatabasePropertiesDSL.kt b/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/db/DatabasePropertiesDSL.kt new file mode 100644 index 000000000..036beb369 --- /dev/null +++ b/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/db/DatabasePropertiesDSL.kt @@ -0,0 +1,17 @@ +/* + * Copyright © 2018-2019 AT&T Intellectual Property. + * + * 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. + */ + +package org.onap.ccsdk.cds.blueprintsprocessor.db diff --git a/ms/blueprintsprocessor/modules/commons/grpc-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/grpc/GrpcPropertiesDSL.kt b/ms/blueprintsprocessor/modules/commons/grpc-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/grpc/GrpcPropertiesDSL.kt new file mode 100644 index 000000000..3a0e9c633 --- /dev/null +++ b/ms/blueprintsprocessor/modules/commons/grpc-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/grpc/GrpcPropertiesDSL.kt @@ -0,0 +1,17 @@ +/* + * Copyright © 2018-2019 AT&T Intellectual Property. + * + * 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. + */ + +package org.onap.ccsdk.cds.blueprintsprocessor.grpc diff --git a/ms/blueprintsprocessor/modules/commons/message-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/BluePrintMessageLibData.kt b/ms/blueprintsprocessor/modules/commons/message-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/BluePrintMessageLibData.kt index 59e3606ea..005223d9b 100644 --- a/ms/blueprintsprocessor/modules/commons/message-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/BluePrintMessageLibData.kt +++ b/ms/blueprintsprocessor/modules/commons/message-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/BluePrintMessageLibData.kt @@ -20,7 +20,9 @@ package org.onap.ccsdk.cds.blueprintsprocessor.message import org.apache.kafka.streams.StreamsConfig /** Producer Properties **/ -open class MessageProducerProperties +open class MessageProducerProperties { + lateinit var type: String +} open class KafkaBasicAuthMessageProducerProperties : MessageProducerProperties() { lateinit var bootstrapServers: String @@ -35,7 +37,9 @@ open class KafkaBasicAuthMessageProducerProperties : MessageProducerProperties() /** Consumer Properties **/ -open class MessageConsumerProperties +open class MessageConsumerProperties { + lateinit var type: String +} open class KafkaStreamsConsumerProperties : MessageConsumerProperties() { lateinit var bootstrapServers: String diff --git a/ms/blueprintsprocessor/modules/commons/message-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/MessagePropertiesDSL.kt b/ms/blueprintsprocessor/modules/commons/message-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/MessagePropertiesDSL.kt new file mode 100644 index 000000000..c6e923948 --- /dev/null +++ b/ms/blueprintsprocessor/modules/commons/message-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/MessagePropertiesDSL.kt @@ -0,0 +1,255 @@ +/* + * Copyright © 2018-2019 AT&T Intellectual Property. + * + * 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. + */ + +package org.onap.ccsdk.cds.blueprintsprocessor.message + +import com.fasterxml.jackson.databind.JsonNode +import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintConstants +import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintTypes +import org.onap.ccsdk.cds.controllerblueprints.core.asJsonPrimitive +import org.onap.ccsdk.cds.controllerblueprints.core.asJsonType +import org.onap.ccsdk.cds.controllerblueprints.core.data.RelationshipType +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.PropertiesAssignmentBuilder +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.RelationshipTemplateBuilder +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.TopologyTemplateBuilder +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.relationshipType + +/** Relationships Types DSL for Message Producer */ +fun BluePrintTypes.relationshipTypeConnectsToMessageProducer(): RelationshipType { + return relationshipType( + id = BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO_MESSAGE_PRODUCER, + version = BluePrintConstants.DEFAULT_VERSION_NUMBER, + derivedFrom = BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO, + description = "Relationship connects to through message producer." + ) { + property( + BluePrintConstants.PROPERTY_CONNECTION_CONFIG, + BluePrintConstants.DATA_TYPE_MAP, + true, + "Connection Config details." + ) + validTargetTypes(arrayListOf(BluePrintConstants.MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT)) + } +} + +fun BluePrintTypes.relationshipTypeConnectsToMessageConsumer(): RelationshipType { + return relationshipType( + id = BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO_MESSAGE_CONSUMER, + version = BluePrintConstants.DEFAULT_VERSION_NUMBER, + derivedFrom = BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO, + description = "Relationship type connects to message consumer." + ) { + property( + BluePrintConstants.PROPERTY_CONNECTION_CONFIG, + BluePrintConstants.DATA_TYPE_MAP, + true, + "Connection Config details." + ) + validTargetTypes(arrayListOf(BluePrintConstants.MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT)) + } +} + +/** Relationships Templates DSL for Message Producer */ +fun TopologyTemplateBuilder.relationshipTemplateMessageProducer( + name: String, + description: String, + block: MessageProducerRelationshipTemplateBuilder.() -> Unit +) { + if (relationshipTemplates == null) relationshipTemplates = hashMapOf() + val relationshipTemplate = + MessageProducerRelationshipTemplateBuilder(name, description).apply(block).build() + relationshipTemplates!![relationshipTemplate.id!!] = relationshipTemplate +} + +class MessageProducerRelationshipTemplateBuilder(name: String, description: String) : + RelationshipTemplateBuilder( + name, + BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO_MESSAGE_PRODUCER, description + ) { + + fun kafkaBasicAuth(block: KafkaBasicAuthMessageProducerPropertiesAssignmentBuilder.() -> Unit) { + property( + BluePrintConstants.PROPERTY_CONNECTION_CONFIG, + BluePrintTypes.kafkaBasicAuthMessageProducerProperties(block) + ) + } +} + +fun BluePrintTypes.kafkaBasicAuthMessageProducerProperties(block: KafkaBasicAuthMessageProducerPropertiesAssignmentBuilder.() -> Unit): JsonNode { + val assignments = KafkaBasicAuthMessageProducerPropertiesAssignmentBuilder().apply(block).build() + assignments[KafkaBasicAuthMessageProducerProperties::type.name] = + MessageLibConstants.TYPE_KAFKA_BASIC_AUTH.asJsonPrimitive() + return assignments.asJsonType() +} + +open class MessageProducerPropertiesAssignmentBuilder : PropertiesAssignmentBuilder() + +class KafkaBasicAuthMessageProducerPropertiesAssignmentBuilder : MessageProducerPropertiesAssignmentBuilder() { + + fun bootstrapServers(bootstrapServers: String) = bootstrapServers(bootstrapServers.asJsonPrimitive()) + + fun bootstrapServers(bootstrapServers: JsonNode) = + property(KafkaBasicAuthMessageProducerProperties::bootstrapServers, bootstrapServers) + + fun topic(topic: String) = topic(topic.asJsonPrimitive()) + + fun topic(topic: JsonNode) = + property(KafkaBasicAuthMessageProducerProperties::topic, topic) + + fun clientId(clientId: String) = bootstrapServers(clientId.asJsonPrimitive()) + + fun clientId(clientId: JsonNode) = + property(KafkaBasicAuthMessageProducerProperties::clientId, clientId) + + fun acks(acks: String) = acks(acks.asJsonPrimitive()) + + fun acks(acks: JsonNode) = property(KafkaBasicAuthMessageProducerProperties::acks, acks) + + fun retries(retries: Int) = retries(retries.asJsonPrimitive()) + + fun retries(retries: JsonNode) = property(KafkaBasicAuthMessageProducerProperties::retries, retries) + + fun enableIdempotence(enableIdempotence: Boolean) = enableIdempotence(enableIdempotence.asJsonPrimitive()) + + fun enableIdempotence(enableIdempotence: JsonNode) = + property(KafkaBasicAuthMessageProducerProperties::enableIdempotence, enableIdempotence) +} + +/** Relationships Templates DSL for Message Consumer */ +fun TopologyTemplateBuilder.relationshipTemplateMessageConsumer( + name: String, + description: String, + block: MessageConsumerRelationshipTemplateBuilder.() -> Unit +) { + if (relationshipTemplates == null) relationshipTemplates = hashMapOf() + val relationshipTemplate = + MessageConsumerRelationshipTemplateBuilder(name, description).apply(block).build() + relationshipTemplates!![relationshipTemplate.id!!] = relationshipTemplate +} + +class MessageConsumerRelationshipTemplateBuilder(name: String, description: String) : + RelationshipTemplateBuilder( + name, + BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO_MESSAGE_CONSUMER, description + ) { + + fun kafkaBasicAuth(block: KafkaBasicAuthMessageConsumerPropertiesAssignmentBuilder.() -> Unit) { + property( + BluePrintConstants.PROPERTY_CONNECTION_CONFIG, + BluePrintTypes.kafkaBasicAuthMessageConsumerProperties(block) + ) + } + + fun kafkaStreamsBasicAuth(block: KafkaStreamsBasicAuthConsumerPropertiesAssignmentBuilder.() -> Unit) { + property( + BluePrintConstants.PROPERTY_CONNECTION_CONFIG, + BluePrintTypes.kafkaStreamsBasicAuthConsumerProperties(block) + ) + } +} + +fun BluePrintTypes.kafkaBasicAuthMessageConsumerProperties(block: KafkaBasicAuthMessageConsumerPropertiesAssignmentBuilder.() -> Unit): JsonNode { + val assignments = KafkaBasicAuthMessageConsumerPropertiesAssignmentBuilder().apply(block).build() + assignments[KafkaBasicAuthMessageConsumerProperties::type.name] = + MessageLibConstants.TYPE_KAFKA_BASIC_AUTH.asJsonPrimitive() + return assignments.asJsonType() +} + +fun BluePrintTypes.kafkaStreamsBasicAuthConsumerProperties(block: KafkaStreamsBasicAuthConsumerPropertiesAssignmentBuilder.() -> Unit): JsonNode { + val assignments = KafkaStreamsBasicAuthConsumerPropertiesAssignmentBuilder().apply(block).build() + assignments[KafkaStreamsBasicAuthConsumerProperties::type.name] = + MessageLibConstants.TYPE_KAFKA_STREAMS_BASIC_AUTH.asJsonPrimitive() + return assignments.asJsonType() +} + +open class MessageConsumerPropertiesAssignmentBuilder : PropertiesAssignmentBuilder() + +open class KafkaMessageConsumerPropertiesAssignmentBuilder : MessageConsumerPropertiesAssignmentBuilder() { + + fun bootstrapServers(bootstrapServers: String) = bootstrapServers(bootstrapServers.asJsonPrimitive()) + + fun bootstrapServers(bootstrapServers: JsonNode) = + property(KafkaMessageConsumerProperties::bootstrapServers, bootstrapServers) + + fun groupId(groupId: String) = groupId(groupId.asJsonPrimitive()) + + fun groupId(groupId: JsonNode) = + property(KafkaMessageConsumerProperties::groupId, groupId) + + fun clientId(clientId: String) = clientId(clientId.asJsonPrimitive()) + + fun clientId(clientId: JsonNode) = + property(KafkaMessageConsumerProperties::clientId, clientId) + + fun topic(topic: String) = topic(topic.asJsonPrimitive()) + + fun topic(topic: JsonNode) = + property(KafkaMessageConsumerProperties::topic, topic) + + fun autoCommit(autoCommit: Boolean) = autoCommit(autoCommit.asJsonPrimitive()) + + fun autoCommit(autoCommit: JsonNode) = + property(KafkaMessageConsumerProperties::autoCommit, autoCommit) + + fun autoOffsetReset(autoOffsetReset: String) = autoOffsetReset(autoOffsetReset.asJsonPrimitive()) + + fun autoOffsetReset(autoOffsetReset: JsonNode) = + property(KafkaMessageConsumerProperties::autoOffsetReset, autoOffsetReset) + + fun pollMillSec(pollMillSec: Int) = pollMillSec(pollMillSec.asJsonPrimitive()) + + fun pollMillSec(pollMillSec: JsonNode) = + property(KafkaMessageConsumerProperties::pollMillSec, pollMillSec) + + fun pollRecords(pollRecords: Int) = pollRecords(pollRecords.asJsonPrimitive()) + + fun pollRecords(pollRecords: JsonNode) = + property(KafkaMessageConsumerProperties::pollRecords, pollRecords) +} + +/** KafkaBasicAuthMessageConsumerProperties assignment builder */ +class KafkaBasicAuthMessageConsumerPropertiesAssignmentBuilder : KafkaMessageConsumerPropertiesAssignmentBuilder() + +/** KafkaStreamsConsumerProperties assignment builder */ +open class KafkaStreamsConsumerPropertiesAssignmentBuilder : MessageConsumerPropertiesAssignmentBuilder() { + + fun bootstrapServers(bootstrapServers: String) = bootstrapServers(bootstrapServers.asJsonPrimitive()) + + fun bootstrapServers(bootstrapServers: JsonNode) = + property(KafkaStreamsConsumerProperties::bootstrapServers, bootstrapServers) + + fun applicationId(applicationId: String) = bootstrapServers(applicationId.asJsonPrimitive()) + + fun applicationId(applicationId: JsonNode) = + property(KafkaStreamsConsumerProperties::applicationId, applicationId) + + fun topic(topic: String) = topic(topic.asJsonPrimitive()) + + fun topic(topic: JsonNode) = + property(KafkaStreamsConsumerProperties::topic, topic) + + fun autoOffsetReset(autoOffsetReset: String) = autoOffsetReset(autoOffsetReset.asJsonPrimitive()) + + fun autoOffsetReset(autoOffsetReset: JsonNode) = + property(KafkaStreamsConsumerProperties::autoOffsetReset, autoOffsetReset) + + fun processingGuarantee(processingGuarantee: String) = processingGuarantee(processingGuarantee.asJsonPrimitive()) + + fun processingGuarantee(processingGuarantee: JsonNode) = + property(KafkaStreamsConsumerProperties::processingGuarantee, processingGuarantee) +} + +class KafkaStreamsBasicAuthConsumerPropertiesAssignmentBuilder : KafkaStreamsConsumerPropertiesAssignmentBuilder() diff --git a/ms/blueprintsprocessor/modules/commons/message-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/MessagePropertiesDSLTest.kt b/ms/blueprintsprocessor/modules/commons/message-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/MessagePropertiesDSLTest.kt new file mode 100644 index 000000000..9ece90ffc --- /dev/null +++ b/ms/blueprintsprocessor/modules/commons/message-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/message/MessagePropertiesDSLTest.kt @@ -0,0 +1,101 @@ +/* + * Copyright © 2018-2019 AT&T Intellectual Property. + * + * 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. + */ + +package org.onap.ccsdk.cds.blueprintsprocessor.message + +import org.apache.kafka.streams.StreamsConfig +import org.junit.Test +import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintTypes +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.relationshipTypeConnectsTo +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.serviceTemplate +import kotlin.test.assertEquals +import kotlin.test.assertNotNull + +class MessagePropertiesDSLTest { + + @Test + fun testMessageProducerDSL() { + val serviceTemplate = serviceTemplate("message-properties-test", "1.0.0", "xxx.@xx.com", "message") { + topologyTemplate { + relationshipTemplateMessageProducer("sample-basic-auth", "Message Producer") { + kafkaBasicAuth { + bootstrapServers("sample-bootstrapServers") + clientId("sample-client-id") + acks("all") + retries(3) + enableIdempotence(true) + topic("sample-topic") + } + } + } + relationshipTypes( + arrayListOf( + BluePrintTypes.relationshipTypeConnectsToMessageProducer(), + BluePrintTypes.relationshipTypeConnectsTo() + ) + ) + } + assertNotNull(serviceTemplate, "failed to create service template") + val relationshipTemplates = serviceTemplate.topologyTemplate?.relationshipTemplates + assertNotNull(relationshipTemplates, "failed to get relationship templates") + assertEquals(1, relationshipTemplates.size, "relationshipTemplates doesn't match") + assertNotNull(relationshipTemplates["sample-basic-auth"], "failed to get sample-basic-auth") + // println(serviceTemplate.asJsonString(true)) + } + + @Test + fun testMessageConsumerDSL() { + val serviceTemplate = serviceTemplate("message-properties-test", "1.0.0", "xxx.@xx.com", "message") { + topologyTemplate { + relationshipTemplateMessageConsumer("sample-basic-auth", "Message Consumer") { + kafkaBasicAuth { + bootstrapServers("sample-bootstrapServers") + clientId("sample-client-id") + groupId("sample-group-id") + topic("sample-topic") + autoCommit(false) + autoOffsetReset("latest") + pollMillSec(5000) + pollRecords(20) + } + } + relationshipTemplateMessageConsumer("sample-stream-basic-auth", "Message Consumer") { + kafkaStreamsBasicAuth { + bootstrapServers("sample-bootstrapServers") + applicationId("sample-application-id") + autoOffsetReset("latest") + processingGuarantee(StreamsConfig.EXACTLY_ONCE) + topic("sample-streaming-topic") + } + } + } + relationshipTypes( + arrayListOf( + BluePrintTypes.relationshipTypeConnectsToMessageConsumer(), + BluePrintTypes.relationshipTypeConnectsTo() + ) + ) + } + + assertNotNull(serviceTemplate, "failed to create service template") + val relationshipTemplates = serviceTemplate.topologyTemplate?.relationshipTemplates + assertNotNull(relationshipTemplates, "failed to get relationship templates") + assertEquals(2, relationshipTemplates.size, "relationshipTemplates doesn't match") + assertNotNull(relationshipTemplates["sample-basic-auth"], "failed to get sample-basic-auth") + assertNotNull(relationshipTemplates["sample-stream-basic-auth"], "failed to get sample-stream-basic-auth") + // println(serviceTemplate.asJsonString(true)) + } +} diff --git a/ms/blueprintsprocessor/modules/commons/nats-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/nats/NatsPropertiesDSL.kt b/ms/blueprintsprocessor/modules/commons/nats-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/nats/NatsPropertiesDSL.kt new file mode 100644 index 000000000..5c4301b38 --- /dev/null +++ b/ms/blueprintsprocessor/modules/commons/nats-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/nats/NatsPropertiesDSL.kt @@ -0,0 +1,112 @@ +/* + * Copyright © 2018-2019 AT&T Intellectual Property. + * + * 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. + */ + +package org.onap.ccsdk.cds.blueprintsprocessor.nats + +import com.fasterxml.jackson.databind.JsonNode +import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintConstants +import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintTypes +import org.onap.ccsdk.cds.controllerblueprints.core.asJsonNode +import org.onap.ccsdk.cds.controllerblueprints.core.asJsonPrimitive +import org.onap.ccsdk.cds.controllerblueprints.core.data.RelationshipType +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.PropertiesAssignmentBuilder +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.RelationshipTemplateBuilder +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.TopologyTemplateBuilder +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.relationshipType + +/** Relationships Types DSL for NATS Producer */ +fun BluePrintTypes.relationshipTypeConnectsToNats(): RelationshipType { + return relationshipType( + id = BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO_NATS, + version = BluePrintConstants.DEFAULT_VERSION_NUMBER, + derivedFrom = BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO, + description = "Relationship connects to through NATS Client." + ) { + property( + BluePrintConstants.PROPERTY_CONNECTION_CONFIG, + BluePrintConstants.DATA_TYPE_MAP, + true, + "Connection Config details." + ) + validTargetTypes(arrayListOf(BluePrintConstants.MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT)) + } +} + +/** Relationships Templates for Nats */ +fun TopologyTemplateBuilder.relationshipTemplateNats( + name: String, + description: String, + block: NatsRelationshipTemplateBuilder.() -> Unit +) { + if (relationshipTemplates == null) relationshipTemplates = hashMapOf() + val relationshipTemplate = NatsRelationshipTemplateBuilder(name, description).apply(block).build() + relationshipTemplates!![relationshipTemplate.id!!] = relationshipTemplate +} + +class NatsRelationshipTemplateBuilder(name: String, description: String) : + RelationshipTemplateBuilder( + name, + BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO_NATS, description + ) { + + fun tokenAuth(block: NatsTokenAuthPropertiesAssignmentBuilder.() -> Unit) { + property(BluePrintConstants.PROPERTY_CONNECTION_CONFIG, BluePrintTypes.tokenAuthNatsProperties(block)) + } + + fun tlsAuth(block: NatsTLSAuthPropertiesAssignmentBuilder.() -> Unit) { + property(BluePrintConstants.PROPERTY_CONNECTION_CONFIG, BluePrintTypes.tlsAuthNatsProperties(block)) + } +} + +fun BluePrintTypes.tokenAuthNatsProperties(block: NatsTokenAuthPropertiesAssignmentBuilder.() -> Unit): JsonNode { + val assignments = NatsTokenAuthPropertiesAssignmentBuilder().apply(block).build() + assignments[NatsConnectionProperties::type.name] = NatsLibConstants.TYPE_TOKEN_AUTH.asJsonPrimitive() + return assignments.asJsonNode() +} + +fun BluePrintTypes.tlsAuthNatsProperties(block: NatsTLSAuthPropertiesAssignmentBuilder.() -> Unit): JsonNode { + val assignments = NatsTLSAuthPropertiesAssignmentBuilder().apply(block).build() + assignments[NatsConnectionProperties::type.name] = NatsLibConstants.TYPE_TLS_AUTH.asJsonPrimitive() + return assignments.asJsonNode() +} + +open class NatsConnectionPropertiesAssignmentBuilder : PropertiesAssignmentBuilder() { + + fun clusterId(clusterId: String) = clusterId(clusterId.asJsonPrimitive()) + + fun clusterId(clusterId: JsonNode) = property(NatsConnectionProperties::clusterId, clusterId) + + fun clientId(clientId: String) = clientId(clientId.asJsonPrimitive()) + + fun clientId(clientId: JsonNode) = property(NatsConnectionProperties::clientId, clientId) + + fun host(host: String) = host(host.asJsonPrimitive()) + + fun host(host: JsonNode) = property(NatsConnectionProperties::host, host) + + fun monitoringSelector(monitoringSelector: String) = monitoringSelector(monitoringSelector.asJsonPrimitive()) + + fun monitoringSelector(monitoringSelector: JsonNode) = + property(NatsConnectionProperties::monitoringSelector, monitoringSelector) +} + +class NatsTokenAuthPropertiesAssignmentBuilder : NatsConnectionPropertiesAssignmentBuilder() { + fun token(selector: String) = token(selector.asJsonPrimitive()) + + fun token(selector: JsonNode) = property(TokenAuthNatsConnectionProperties::token, selector) +} + +class NatsTLSAuthPropertiesAssignmentBuilder : NatsConnectionPropertiesAssignmentBuilder() diff --git a/ms/blueprintsprocessor/modules/commons/nats-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/nats/NatsPropertiesDSLTest.kt b/ms/blueprintsprocessor/modules/commons/nats-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/nats/NatsPropertiesDSLTest.kt new file mode 100644 index 000000000..4cf474b93 --- /dev/null +++ b/ms/blueprintsprocessor/modules/commons/nats-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/nats/NatsPropertiesDSLTest.kt @@ -0,0 +1,63 @@ +/* + * Copyright © 2018-2019 AT&T Intellectual Property. + * + * 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. + */ + +package org.onap.ccsdk.cds.blueprintsprocessor.nats + +import org.junit.Test +import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintTypes +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.getInput +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.relationshipTypeConnectsTo +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.serviceTemplate +import kotlin.test.assertEquals +import kotlin.test.assertNotNull + +class NatsPropertiesDSLTest { + + @Test + fun testNatsPropertiesDSL() { + val serviceTemplate = serviceTemplate("nats-dsl", "1.0.0", "xx@xx.com", "nats") { + topologyTemplate { + relationshipTemplateNats("sample-token-auth", "Nats TokenAuth endpoint") { + tokenAuth { + host("nats://localhost:4222") + token("tokenAuth") + monitoringSelector(getInput("monitoringUrl")) + } + } + relationshipTemplateNats("sample-tls-auth", "Nats TLS endpoint.") { + tlsAuth { + host("nats://localhost:4222") + } + } + } + + relationshipTypes( + arrayListOf( + BluePrintTypes.relationshipTypeConnectsToNats(), + BluePrintTypes.relationshipTypeConnectsTo() + ) + ) + } + + assertNotNull(serviceTemplate, "failed to create service template") + val relationshipTemplates = serviceTemplate.topologyTemplate?.relationshipTemplates + assertNotNull(relationshipTemplates, "failed to get relationship templates") + assertEquals(2, relationshipTemplates.size, "relationshipTemplates doesn't match") + assertNotNull(relationshipTemplates["sample-token-auth"], "failed to get sample-token-auth") + assertNotNull(relationshipTemplates["sample-tls-auth"], "failed to get sample-tls-auth") + // println(serviceTemplate.asJsonString(true)) + } +} diff --git a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/BluePrintRestLibConfiguration.kt b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/BluePrintRestLibConfiguration.kt index 9e1be36a7..23125430a 100644 --- a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/BluePrintRestLibConfiguration.kt +++ b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/BluePrintRestLibConfiguration.kt @@ -48,6 +48,7 @@ fun BluePrintDependencyService.restClientService(jsonNode: JsonNode): BlueprintW class RestLibConstants { companion object { const val SERVICE_BLUEPRINT_REST_LIB_PROPERTY = "blueprint-rest-lib-property-service" + const val PROPERTY_REST_CLIENT_PREFIX = "blueprintsprocessor.restclient." const val PROPERTY_TYPE = "type" const val TYPE_TOKEN_AUTH = "token-auth" const val TYPE_BASIC_AUTH = "basic-auth" diff --git a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/RestClientPropertiesDSL.kt b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/RestClientPropertiesDSL.kt index 429931377..4c25cb5bf 100644 --- a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/RestClientPropertiesDSL.kt +++ b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/RestClientPropertiesDSL.kt @@ -17,54 +17,100 @@ package org.onap.ccsdk.cds.blueprintsprocessor.rest import com.fasterxml.jackson.databind.JsonNode +import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintConstants import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintTypes import org.onap.ccsdk.cds.controllerblueprints.core.asJsonPrimitive import org.onap.ccsdk.cds.controllerblueprints.core.asJsonType +import org.onap.ccsdk.cds.controllerblueprints.core.data.RelationshipType import org.onap.ccsdk.cds.controllerblueprints.core.dsl.PropertiesAssignmentBuilder +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.RelationshipTemplateBuilder +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.TopologyTemplateBuilder +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.relationshipType + +/** Relationships Type DSL for Rest */ +fun BluePrintTypes.relationshipTypeConnectsToRestClient(): RelationshipType { + return relationshipType( + id = BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO_REST_CLIENT, + version = BluePrintConstants.DEFAULT_VERSION_NUMBER, + derivedFrom = BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO, + description = "Relationship connects to through" + ) { + property( + BluePrintConstants.PROPERTY_CONNECTION_CONFIG, + BluePrintConstants.DATA_TYPE_MAP, + true, + "Connection Config details." + ) + validTargetTypes(arrayListOf(BluePrintConstants.MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT)) + } +} -fun BluePrintTypes.dslBasicAuthRestClientProperties(block: BasicAuthRestClientPropertiesBuilder.() -> Unit): JsonNode { - val assignments = BasicAuthRestClientPropertiesBuilder().apply(block).build() - assignments[RestLibConstants.PROPERTY_TYPE] = RestLibConstants.TYPE_BASIC_AUTH.asJsonPrimitive() - return assignments.asJsonType() +/** Relationships Templates DSL for Rest */ +fun TopologyTemplateBuilder.relationshipTemplateRestClient( + name: String, + description: String, + block: RestClientRelationshipTemplateBuilder.() -> Unit +) { + if (relationshipTemplates == null) relationshipTemplates = hashMapOf() + val relationshipTemplate = RestClientRelationshipTemplateBuilder(name, description).apply(block).build() + relationshipTemplates!![relationshipTemplate.id!!] = relationshipTemplate } -fun BluePrintTypes.dslTokenAuthRestClientProperties(block: TokenAuthRestClientPropertiesBuilder.() -> Unit): JsonNode { - val assignments = TokenAuthRestClientPropertiesBuilder().apply(block).build() - assignments[RestLibConstants.PROPERTY_TYPE] = RestLibConstants.TYPE_TOKEN_AUTH.asJsonPrimitive() +open class RestClientRelationshipTemplateBuilder(name: String, description: String) : + RelationshipTemplateBuilder( + name, + BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO_REST_CLIENT, description + ) { + + fun basicAuth(block: BasicAuthRestClientPropertiesAssignmentBuilder.() -> Unit) { + property(BluePrintConstants.PROPERTY_CONNECTION_CONFIG, BluePrintTypes.basicAuthRestClientProperties(block)) + } + + fun tokenAuth(block: TokenAuthRestClientPropertiesAssignmentBuilder.() -> Unit) { + property(BluePrintConstants.PROPERTY_CONNECTION_CONFIG, BluePrintTypes.tokenAuthRestClientProperties(block)) + } + + fun sslAuth(block: SslAuthRestClientPropertiesAssignmentBuilder.() -> Unit) { + property(BluePrintConstants.PROPERTY_CONNECTION_CONFIG, BluePrintTypes.sslRestClientProperties(block)) + } +} + +fun BluePrintTypes.basicAuthRestClientProperties(block: BasicAuthRestClientPropertiesAssignmentBuilder.() -> Unit): JsonNode { + val assignments = BasicAuthRestClientPropertiesAssignmentBuilder().apply(block).build() + assignments[RestClientProperties::type.name] = RestLibConstants.TYPE_BASIC_AUTH.asJsonPrimitive() return assignments.asJsonType() } -fun BluePrintTypes.dslSSLRestClientProperties(block: SSLRestClientPropertiesBuilder.() -> Unit): JsonNode { - val assignments = SSLRestClientPropertiesBuilder().apply(block).build() - assignments[RestLibConstants.PROPERTY_TYPE] = RestLibConstants.TYPE_SSL_NO_AUTH.asJsonPrimitive() +fun BluePrintTypes.tokenAuthRestClientProperties(block: TokenAuthRestClientPropertiesAssignmentBuilder.() -> Unit): JsonNode { + val assignments = TokenAuthRestClientPropertiesAssignmentBuilder().apply(block).build() + assignments[RestClientProperties::type.name] = RestLibConstants.TYPE_TOKEN_AUTH.asJsonPrimitive() return assignments.asJsonType() } -open class RestClientPropertiesBuilder : PropertiesAssignmentBuilder() { - fun type(type: String) { - type(type.asJsonPrimitive()) - } +fun BluePrintTypes.sslRestClientProperties(block: SslAuthRestClientPropertiesAssignmentBuilder.() -> Unit): JsonNode { + val assignments = SslAuthRestClientPropertiesAssignmentBuilder().apply(block).build() + assignments[RestClientProperties::type.name] = RestLibConstants.TYPE_SSL_NO_AUTH.asJsonPrimitive() + return assignments.asJsonType() +} - fun type(type: JsonNode) { - property(RestLibConstants.PROPERTY_TYPE, type) - } +open class RestClientPropertiesAssignmentBuilder : PropertiesAssignmentBuilder() { open fun url(url: String) { url(url.asJsonPrimitive()) } open fun url(url: JsonNode) { - property("url", url) + property(RestClientProperties::url, url) } } -open class BasicAuthRestClientPropertiesBuilder : RestClientPropertiesBuilder() { +open class BasicAuthRestClientPropertiesAssignmentBuilder : RestClientPropertiesAssignmentBuilder() { open fun password(password: String) { password(password.asJsonPrimitive()) } open fun password(password: JsonNode) { - property("password", password) + property(BasicAuthRestClientProperties::password, password) } open fun username(username: String) { @@ -72,27 +118,27 @@ open class BasicAuthRestClientPropertiesBuilder : RestClientPropertiesBuilder() } open fun username(username: JsonNode) { - property("username", username) + property(BasicAuthRestClientProperties::username, username) } } -open class TokenAuthRestClientPropertiesBuilder : RestClientPropertiesBuilder() { +open class TokenAuthRestClientPropertiesAssignmentBuilder : RestClientPropertiesAssignmentBuilder() { open fun token(token: String) { token(token.asJsonPrimitive()) } open fun token(token: JsonNode) { - property("token", token) + property(TokenAuthRestClientProperties::token, token) } } -open class SSLRestClientPropertiesBuilder : RestClientPropertiesBuilder() { +open class SslAuthRestClientPropertiesAssignmentBuilder : RestClientPropertiesAssignmentBuilder() { open fun keyStoreInstance(keyStoreInstance: String) { keyStoreInstance(keyStoreInstance.asJsonPrimitive()) } open fun keyStoreInstance(keyStoreInstance: JsonNode) { - property("keyStoreInstance", keyStoreInstance) + property(SSLRestClientProperties::keyStoreInstance, keyStoreInstance) } open fun sslTrust(sslTrust: String) { @@ -100,7 +146,7 @@ open class SSLRestClientPropertiesBuilder : RestClientPropertiesBuilder() { } open fun sslTrust(sslTrust: JsonNode) { - property("sslTrust", sslTrust) + property(SSLRestClientProperties::sslTrust, sslTrust) } open fun sslTrustPassword(sslTrustPassword: String) { @@ -108,7 +154,7 @@ open class SSLRestClientPropertiesBuilder : RestClientPropertiesBuilder() { } open fun sslTrustPassword(sslTrustPassword: JsonNode) { - property("sslTrustPassword", sslTrustPassword) + property(SSLRestClientProperties::sslTrustPassword, sslTrustPassword) } open fun sslKey(sslKey: String) { @@ -116,7 +162,7 @@ open class SSLRestClientPropertiesBuilder : RestClientPropertiesBuilder() { } open fun sslKey(sslKey: JsonNode) { - property("sslKey", sslKey) + property(SSLRestClientProperties::sslKey, sslKey) } open fun sslKeyPassword(sslKeyPassword: String) { @@ -124,14 +170,14 @@ open class SSLRestClientPropertiesBuilder : RestClientPropertiesBuilder() { } open fun sslKeyPassword(sslKeyPassword: JsonNode) { - property("sslKeyPassword", sslKeyPassword) + property(SSLRestClientProperties::sslKeyPassword, sslKeyPassword) } } -open class SSLBasicAuthRestClientPropertiesBuilder : SSLRestClientPropertiesBuilder() { +open class SSLBasicAuthRestClientPropertiesBuilder : SslAuthRestClientPropertiesAssignmentBuilder() { // TODO() } -open class SSLTokenAuthRestClientPropertiesBuilder : SSLRestClientPropertiesBuilder() { +open class SSLTokenAuthRestClientPropertiesBuilder : SslAuthRestClientPropertiesAssignmentBuilder() { // TODO() } diff --git a/ms/blueprintsprocessor/modules/commons/rest-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/RestClientPropertiesDSLTest.kt b/ms/blueprintsprocessor/modules/commons/rest-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/RestClientPropertiesDSLTest.kt index f82fc6124..28784e4ae 100644 --- a/ms/blueprintsprocessor/modules/commons/rest-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/RestClientPropertiesDSLTest.kt +++ b/ms/blueprintsprocessor/modules/commons/rest-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/RestClientPropertiesDSLTest.kt @@ -17,43 +17,60 @@ package org.onap.ccsdk.cds.blueprintsprocessor.rest.service import org.junit.Test -import org.onap.ccsdk.cds.blueprintsprocessor.rest.dslBasicAuthRestClientProperties -import org.onap.ccsdk.cds.blueprintsprocessor.rest.dslSSLRestClientProperties -import org.onap.ccsdk.cds.blueprintsprocessor.rest.dslTokenAuthRestClientProperties +import org.onap.ccsdk.cds.blueprintsprocessor.rest.relationshipTemplateRestClient +import org.onap.ccsdk.cds.blueprintsprocessor.rest.relationshipTypeConnectsToRestClient import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintTypes +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.relationshipTypeConnectsTo +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.serviceTemplate +import kotlin.test.assertEquals import kotlin.test.assertNotNull class RestClientPropertiesDSLTest { @Test - fun testBasicAuthRestClientProperties() { - val properties = BluePrintTypes.dslBasicAuthRestClientProperties { - url("http://localhost:8080") - username("xxxxx") - password("******") - } - assertNotNull(properties, "failed to get dslBasicAuthRestClientProperties") - } + fun testRestClientProperties() { - @Test - fun testBasicTokenAuthRestClientProperties() { - val properties = BluePrintTypes.dslTokenAuthRestClientProperties { - url("http://localhost:8080") - token("sdfgfsadgsgf") + val serviceTemplate = serviceTemplate("rest-properties-test", "1.0.0", "xxx.@xx.com", "rest") { + topologyTemplate { + relationshipTemplateRestClient("sample-basic-auth", "") { + basicAuth { + url("http://localhost:8080") + username("xxxxx") + password("******") + } + } + relationshipTemplateRestClient("sample-token-auth", "") { + tokenAuth { + url("http://localhost:8080") + token("sdfgfsadgsgf") + } + } + relationshipTemplateRestClient("sample-ssl-auth", "") { + sslAuth { + url("http://localhost:8080") + keyStoreInstance("instance") + sslTrust("sample-trust") + sslTrustPassword("sample-trust-password") + sslKey("sample-sslkey") + sslKeyPassword("sample-key-password") + } + } + } + relationshipTypes( + arrayListOf( + BluePrintTypes.relationshipTypeConnectsToRestClient(), + BluePrintTypes.relationshipTypeConnectsTo() + ) + ) } - assertNotNull(properties, "failed to get dslTokenAuthRestClientProperties") - } - @Test - fun testDslSSLRestClientProperties() { - val properties = BluePrintTypes.dslSSLRestClientProperties { - url("http://localhost:8080") - keyStoreInstance("instance") - sslTrust("sample-trust") - sslTrustPassword("sample-trust-password") - sslKey("sample-sslkey") - sslKeyPassword("sample-key-password") - } - assertNotNull(properties, "failed to get dslSSLRestClientProperties") + // println(serviceTemplate.asJsonString(true)) + assertNotNull(serviceTemplate, "failed to create service template") + val relationshipTemplates = serviceTemplate.topologyTemplate?.relationshipTemplates + assertNotNull(relationshipTemplates, "failed to get relationship templates") + assertEquals(3, relationshipTemplates.size, "relationshipTemplates doesn't match") + assertNotNull(relationshipTemplates["sample-basic-auth"], "failed to get sample-basic-auth") + assertNotNull(relationshipTemplates["sample-token-auth"], "failed to get sample-token-auth") + assertNotNull(relationshipTemplates["sample-ssl-auth"], "failed to get sample-ssl-auth") } } diff --git a/ms/blueprintsprocessor/modules/commons/ssh-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/ssh/SshPropertiesDSL.kt b/ms/blueprintsprocessor/modules/commons/ssh-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/ssh/SshPropertiesDSL.kt new file mode 100644 index 000000000..e63f2eb49 --- /dev/null +++ b/ms/blueprintsprocessor/modules/commons/ssh-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/ssh/SshPropertiesDSL.kt @@ -0,0 +1,101 @@ +/* + * Copyright © 2018-2019 AT&T Intellectual Property. + * + * 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. + */ + +package org.onap.ccsdk.cds.blueprintsprocessor.ssh + +import com.fasterxml.jackson.databind.JsonNode +import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintConstants +import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintTypes +import org.onap.ccsdk.cds.controllerblueprints.core.asJsonPrimitive +import org.onap.ccsdk.cds.controllerblueprints.core.asJsonType +import org.onap.ccsdk.cds.controllerblueprints.core.data.RelationshipType +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.PropertiesAssignmentBuilder +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.RelationshipTemplateBuilder +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.TopologyTemplateBuilder +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.relationshipType + +/** Relationships Types DSL for Message Producer */ +fun BluePrintTypes.relationshipTypeConnectsToSshClient(): RelationshipType { + return relationshipType( + id = BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO_SSH_CLIENT, + version = BluePrintConstants.DEFAULT_VERSION_NUMBER, + derivedFrom = BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO, + description = "Relationship connects to through SSH Client." + ) { + property( + BluePrintConstants.PROPERTY_CONNECTION_CONFIG, + BluePrintConstants.DATA_TYPE_MAP, + true, + "Connection Config details." + ) + validTargetTypes(arrayListOf(BluePrintConstants.MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT)) + } +} + +/** Relationships Templates for Ssh */ +fun TopologyTemplateBuilder.relationshipTemplateSshClient( + name: String, + description: String, + block: SshRelationshipTemplateBuilder.() -> Unit +) { + if (relationshipTemplates == null) relationshipTemplates = hashMapOf() + val relationshipTemplate = SshRelationshipTemplateBuilder(name, description).apply(block).build() + relationshipTemplates!![relationshipTemplate.id!!] = relationshipTemplate +} + +open class SshRelationshipTemplateBuilder(name: String, description: String) : + RelationshipTemplateBuilder( + name, + BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_CONNECTS_TO_SSH_CLIENT, description + ) { + + fun basicAuth(block: BasicAuthSshClientPropertiesAssignmentBuilder.() -> Unit) { + property(BluePrintConstants.PROPERTY_CONNECTION_CONFIG, BluePrintTypes.basicAuthSshProperties(block)) + } +} + +fun BluePrintTypes.basicAuthSshProperties(block: BasicAuthSshClientPropertiesAssignmentBuilder.() -> Unit): JsonNode { + val sshProperties = BasicAuthSshClientPropertiesAssignmentBuilder().apply(block).build() + sshProperties[SshClientProperties::type.name] = SshLibConstants.TYPE_BASIC_AUTH.asJsonPrimitive() + return sshProperties.asJsonType() +} + +open class SshClientPropertiesAssignmentBuilder : PropertiesAssignmentBuilder() { + + fun connectionTimeOut(connectionTimeOut: Int) = connectionTimeOut(connectionTimeOut.asJsonPrimitive()) + + fun connectionTimeOut(connectionTimeOut: JsonNode) = + property(SshClientProperties::connectionTimeOut.name, connectionTimeOut) + + fun port(port: Int) = port(port.asJsonPrimitive()) + + fun port(port: JsonNode) = property(SshClientProperties::port.name, port) + + fun host(host: String) = host(host.asJsonPrimitive()) + + fun host(host: JsonNode) = property(SshClientProperties::host.name, host) +} + +class BasicAuthSshClientPropertiesAssignmentBuilder : SshClientPropertiesAssignmentBuilder() { + + fun username(username: String) = username(username.asJsonPrimitive()) + + fun username(username: JsonNode) = property(BasicAuthSshClientProperties::username.name, username) + + fun password(password: String) = password(password.asJsonPrimitive()) + + fun password(password: JsonNode) = property(BasicAuthSshClientProperties::password.name, password) +} diff --git a/ms/blueprintsprocessor/modules/commons/ssh-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/ssh/SshPropertiesDSLTest.kt b/ms/blueprintsprocessor/modules/commons/ssh-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/ssh/SshPropertiesDSLTest.kt new file mode 100644 index 000000000..bc4355357 --- /dev/null +++ b/ms/blueprintsprocessor/modules/commons/ssh-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/ssh/SshPropertiesDSLTest.kt @@ -0,0 +1,56 @@ +/* + * Copyright © 2018-2019 AT&T Intellectual Property. + * + * 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. + */ + +package org.onap.ccsdk.cds.blueprintsprocessor.ssh + +import org.junit.Test +import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintTypes +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.relationshipTypeConnectsTo +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.serviceTemplate +import kotlin.test.assertEquals +import kotlin.test.assertNotNull + +class SshPropertiesDSLTest { + + @Test + fun testSshPropertiesDSL() { + val serviceTemplate = serviceTemplate("ssh-properties-test", "1.0.0", "xxx.@xx.com", "ssh") { + topologyTemplate { + relationshipTemplateSshClient("sample-basic-auth", "SSH Connection") { + basicAuth { + username("sample-user") + password("sample-password") + host("sample-host") + connectionTimeOut(30) + } + } + } + relationshipTypes( + arrayListOf( + BluePrintTypes.relationshipTypeConnectsToSshClient(), + BluePrintTypes.relationshipTypeConnectsTo() + ) + ) + } + + assertNotNull(serviceTemplate, "failed to create service template") + val relationshipTemplates = serviceTemplate.topologyTemplate?.relationshipTemplates + assertNotNull(relationshipTemplates, "failed to get relationship templates") + assertEquals(1, relationshipTemplates.size, "relationshipTemplates doesn't match") + assertNotNull(relationshipTemplates["sample-basic-auth"], "failed to get sample-basic-auth") + // println(serviceTemplate.asJsonString(true)) + } +} -- cgit 1.2.3-korg