diff options
Diffstat (limited to 'ms/blueprintsprocessor/application/src/test')
15 files changed, 239 insertions, 901 deletions
diff --git a/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/ErrorCatalogTestConfiguration.kt b/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/ErrorCatalogTestConfiguration.kt new file mode 100644 index 000000000..c9d55c18a --- /dev/null +++ b/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/ErrorCatalogTestConfiguration.kt @@ -0,0 +1,28 @@ +/* + * Copyright © 2020 IBM, Bell Canada. + * + * 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.uat + +import org.springframework.boot.autoconfigure.EnableAutoConfiguration +import org.springframework.context.annotation.ComponentScan +import org.springframework.context.annotation.Configuration + +@Configuration +@ComponentScan( + basePackages = ["org.onap.ccsdk.cds.error.catalog"] +) +@EnableAutoConfiguration +open class ErrorCatalogTestConfiguration diff --git a/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/UatServicesTest.kt b/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/UatServicesTest.kt index aebda8c07..4e7d4ce40 100644 --- a/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/UatServicesTest.kt +++ b/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/UatServicesTest.kt @@ -30,6 +30,8 @@ import com.github.tomakehurst.wiremock.client.WireMock.equalToJson import com.github.tomakehurst.wiremock.client.WireMock.request import com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo import com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig +import com.github.tomakehurst.wiremock.http.HttpHeader +import com.github.tomakehurst.wiremock.http.HttpHeaders import org.apache.http.HttpStatus import org.apache.http.client.methods.HttpPost import org.apache.http.entity.ContentType @@ -55,8 +57,6 @@ import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.web.server.LocalServerPort import org.springframework.core.env.ConfigurableEnvironment import org.springframework.core.env.MapPropertySource -import org.springframework.http.HttpHeaders -import org.springframework.http.MediaType import org.springframework.test.context.ActiveProfiles import org.springframework.test.context.support.TestPropertySourceUtils.INLINED_PROPERTIES_PROPERTY_SOURCE_NAME import org.yaml.snakeyaml.Yaml @@ -211,7 +211,6 @@ class UatServicesTest : BaseUatTest() { service.expectations.forEach { expectation -> val request = expectation.request - val response = expectation.response // WebTestClient always use absolute path, prefixing with "/" if necessary val urlPattern = urlEqualTo(request.path.prefixIfNot("/")) val mappingBuilder: MappingBuilder = request(request.method, urlPattern) @@ -222,15 +221,19 @@ class UatServicesTest : BaseUatTest() { mappingBuilder.withRequestBody(equalToJson(mapper.writeValueAsString(request.body), true, true)) } - val responseDefinitionBuilder: ResponseDefinitionBuilder = aResponse() - .withStatus(response.status) - if (response.body != null) { - responseDefinitionBuilder.withBody(mapper.writeValueAsBytes(response.body)) - .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) + for (response in expectation.responses) { + val responseDefinitionBuilder: ResponseDefinitionBuilder = aResponse() + .withStatus(response.status) + if (response.body != null) { + responseDefinitionBuilder.withBody(mapper.writeValueAsBytes(response.body)) + .withHeaders(HttpHeaders( + response.headers.entries.map { e -> HttpHeader(e.key, e.value) })) + } + + // TODO: MockServer verification for multiple responses should be done using Wiremock scenarios + mappingBuilder.willReturn(responseDefinitionBuilder) } - mappingBuilder.willReturn(responseDefinitionBuilder) - mockServer.stubFor(mappingBuilder) } return mockServer diff --git a/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/error/ErrorCatalogServiceTest.kt b/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/error/ErrorCatalogServiceTest.kt new file mode 100644 index 000000000..4f7ef0ec2 --- /dev/null +++ b/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/error/ErrorCatalogServiceTest.kt @@ -0,0 +1,97 @@ +/* + * Copyright © 2020 IBM, Bell Canada. + * + * 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.uat.error + +import org.junit.runner.RunWith +import org.onap.ccsdk.cds.blueprintsprocessor.uat.ErrorCatalogTestConfiguration +import org.onap.ccsdk.cds.controllerblueprints.core.grpcProcessorException +import org.onap.ccsdk.cds.controllerblueprints.core.httpProcessorException +import org.onap.ccsdk.cds.error.catalog.core.ErrorCatalog +import org.onap.ccsdk.cds.error.catalog.core.ErrorCatalogCodes +import org.onap.ccsdk.cds.error.catalog.core.ErrorMessage +import org.onap.ccsdk.cds.error.catalog.core.ErrorPayload +import org.onap.ccsdk.cds.error.catalog.services.ErrorCatalogService +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.test.context.ContextConfiguration +import org.springframework.test.context.TestPropertySource +import org.springframework.test.context.junit4.SpringRunner +import kotlin.test.BeforeTest +import kotlin.test.Test +import kotlin.test.assertTrue + +@RunWith(SpringRunner::class) +@ContextConfiguration( + classes = [ErrorCatalogTestConfiguration::class] +) +@TestPropertySource(locations = ["classpath:application-test.properties"]) +class ErrorCatalogServiceTest { + @Autowired + lateinit var errorCatalogService: ErrorCatalogService + + private val domain = "org.onap.ccsdk.cds.blueprintsprocessor" + private lateinit var errorType: String + private lateinit var errorCatalogHttp: ErrorCatalog + private lateinit var errorCatalogGrpc: ErrorCatalog + private lateinit var errorPayloadHttp: ErrorPayload + private lateinit var errorPayloadGrpc: ErrorPayload + + @BeforeTest + fun setup() { + errorType = ErrorCatalogCodes.GENERIC_FAILURE + errorCatalogHttp = ErrorCatalog(errorType, domain, 500, + "Contact CDS administrator team.", "Internal error in Blueprint Processor run time.") + errorCatalogGrpc = ErrorCatalog(errorType, domain, 2, + "Contact CDS administrator team.", "Internal error in Blueprint Processor run time.") + + errorPayloadHttp = ErrorPayload(500, ErrorCatalogCodes.GENERIC_FAILURE, + "Cause: Internal error in Blueprint Processor run time. \n Action : Contact CDS administrator team.", + errorMessage = ErrorMessage("org.onap.ccsdk.cds.blueprintsprocessor", + "Internal error in Blueprint Processor run time.", "")) + errorPayloadGrpc = ErrorPayload(2, ErrorCatalogCodes.GENERIC_FAILURE, + "Cause: Internal error in Blueprint Processor run time. \n Action : Contact CDS administrator team.", + errorMessage = ErrorMessage("org.onap.ccsdk.cds.blueprintsprocessor", + "Internal error in Blueprint Processor run time.", "")) + } + + @Test + fun errorPayloadHttp() { + val errorPayload = errorCatalogService.errorPayload(httpProcessorException(errorType, domain, + "Internal error in Blueprint Processor run time.")) + assertTrue { errorPayload.isEqualTo(errorPayloadHttp) } + } + + @Test + fun errorPayloadGrpc() { + val errorPayload = errorCatalogService.errorPayload(grpcProcessorException(errorType, domain, + "Internal error in Blueprint Processor run time.")) + assertTrue { errorPayload.isEqualTo(errorPayloadGrpc) } + } + + @Test + fun getErrorCatalogHttp() { + val errorCatalog = errorCatalogService.getErrorCatalog(httpProcessorException(errorType, domain, + "Internal error in Blueprint Processor run time.")) + assertTrue { errorCatalog == errorCatalogHttp } + } + + @Test + fun getErrorCatalogGrpc() { + val errorCatalog = errorCatalogService.getErrorCatalog(grpcProcessorException(errorType, domain, + "Internal error in Blueprint Processor run time.")) + assertTrue { errorCatalog == errorCatalogGrpc } + } +} diff --git a/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/logging/ColorMarker.kt b/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/logging/ColorMarker.kt deleted file mode 100644 index 9ae3ff805..000000000 --- a/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/logging/ColorMarker.kt +++ /dev/null @@ -1,24 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. - * ================================================================================ - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ -package org.onap.ccsdk.cds.blueprintsprocessor.uat.logging - -import org.slf4j.Marker - -class ColorMarker internal constructor(private val dlg: Marker) : Marker by dlg diff --git a/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/logging/LogColor.kt b/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/logging/LogColor.kt deleted file mode 100644 index f0cba2670..000000000 --- a/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/logging/LogColor.kt +++ /dev/null @@ -1,45 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. - * ================================================================================ - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ -package org.onap.ccsdk.cds.blueprintsprocessor.uat.logging - -import org.slf4j.MDC -import org.slf4j.MarkerFactory - -object LogColor { - - const val COLOR_SERVICES = "green" - const val COLOR_TEST_CLIENT = "yellow" - const val COLOR_MOCKITO = "cyan" - const val COLOR_WIREMOCK = "blue" - - // The Slf4j MDC key that will hold the global color - const val MDC_COLOR_KEY = "color" - - fun setContextColor(color: String) { - MDC.put(MDC_COLOR_KEY, color) - } - - fun resetContextColor() { - MDC.remove(MDC_COLOR_KEY) - } - - fun markerOf(color: String): ColorMarker = - ColorMarker(MarkerFactory.getMarker(color)) -} diff --git a/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/logging/MockInvocationLogger.kt b/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/logging/MockInvocationLogger.kt deleted file mode 100644 index f8e6bd486..000000000 --- a/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/logging/MockInvocationLogger.kt +++ /dev/null @@ -1,65 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. - * ================================================================================ - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ -package org.onap.ccsdk.cds.blueprintsprocessor.uat.logging - -import org.mockito.listeners.InvocationListener -import org.mockito.listeners.MethodInvocationReport -import org.slf4j.LoggerFactory -import org.slf4j.Marker -import java.util.concurrent.atomic.AtomicInteger - -/** - * Logs all Mockito's mock/spy invocations. - * - * Used for debugging interactions with a mock. - */ -class MockInvocationLogger(private val marker: Marker) : InvocationListener { - - private val mockInvocationsCounter = AtomicInteger() - - override fun reportInvocation(report: MethodInvocationReport) { - val sb = StringBuilder() - sb.appendln("Method invocation #${mockInvocationsCounter.incrementAndGet()} on mock/spy") - report.locationOfStubbing?.let { location -> - sb.append(INDENT).append("stubbed ").appendln(location) - } - sb.appendln(report.invocation) - sb.append(INDENT).append("invoked ").appendln(report.invocation.location) - if (report.threwException()) { - sb.append(INDENT).append("has thrown -> ").append(report.throwable.javaClass.name) - report.throwable.message?.let { message -> - sb.append(" with message ").append(message) - } - sb.appendln() - } else { - sb.append(INDENT).append("has returned -> \"").append(report.returnedValue).append('"') - report.returnedValue?.let { value -> - sb.append(" (").append(value.javaClass.name).append(')') - } - sb.appendln() - } - log.info(marker, sb.toString()) - } - - companion object { - private const val INDENT = " " - private val log = LoggerFactory.getLogger(MockInvocationLogger::class.java) - } -} diff --git a/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/JsonNormalizer.kt b/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/JsonNormalizer.kt deleted file mode 100644 index 39caa0178..000000000 --- a/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/JsonNormalizer.kt +++ /dev/null @@ -1,84 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. - * ================================================================================ - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ -package org.onap.ccsdk.cds.blueprintsprocessor.uat.utils - -import com.fasterxml.jackson.databind.JsonNode -import com.fasterxml.jackson.databind.ObjectMapper -import com.fasterxml.jackson.databind.node.ContainerNode -import com.fasterxml.jackson.databind.node.ObjectNode -import com.schibsted.spt.data.jslt.Parser - -internal class JsonNormalizer { - - companion object { - - fun getNormalizer(mapper: ObjectMapper, jsltSpec: JsonNode?): (String) -> String { - if (jsltSpec == null) { - return { it } - } - return { s: String -> - val input = mapper.readTree(s) - val expandedJstlSpec = - expandJstlSpec(jsltSpec) - val jslt = Parser.compileString(expandedJstlSpec) - val output = jslt.apply(input) - output.toString() - } - } - - /** - * Creates an extended JSTL spec by appending the "*: ." wildcard pattern to every inner JSON object, and - * removing the extra quotes added by the standard YAML/JSON converters on fields prefixed by "?". - * - * @param jstlSpec the JSTL spec as a structured JSON object. - * @return the string representation of the extended JSTL spec. - */ - private fun expandJstlSpec(jstlSpec: JsonNode): String { - val extendedJstlSpec = - updateObjectNodes(jstlSpec, "*", ".") - return extendedJstlSpec.toString() - // Handle the "?" as a prefix to literal/non-quoted values - .replace("\"\\?([^\"]+)\"".toRegex(), "$1") - // Also, remove the quotes added by Jackson for key and value of the wildcard matcher - .replace("\"([.*])\"".toRegex(), "$1") - } - - /** - * Expands a structured JSON object, by adding the given key and value to every nested ObjectNode. - * - * @param jsonNode the root node. - * @param fieldName the fixed field name. - * @param fieldValue the fixed field value. - */ - private fun updateObjectNodes(jsonNode: JsonNode, fieldName: String, fieldValue: String): JsonNode { - if (jsonNode is ContainerNode<*>) { - (jsonNode as? ObjectNode)?.put(fieldName, fieldValue) - jsonNode.forEach { child -> - updateObjectNodes( - child, - fieldName, - fieldValue - ) - } - } - return jsonNode - } - } -} diff --git a/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/PathDeserializer.kt b/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/PathDeserializer.kt deleted file mode 100644 index 6c5759155..000000000 --- a/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/PathDeserializer.kt +++ /dev/null @@ -1,52 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. - * ================================================================================ - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ -package org.onap.ccsdk.cds.blueprintsprocessor.uat.utils - -import com.fasterxml.jackson.core.JsonParser -import com.fasterxml.jackson.databind.DeserializationContext -import com.fasterxml.jackson.databind.deser.std.StdDeserializer - -internal class PathDeserializer : StdDeserializer<String>(String::class.java) { - override fun deserialize(jp: JsonParser, ctxt: DeserializationContext?): String { - val path = jp.codec.readValue(jp, Any::class.java) - return flatJoin(path) - } - - /** - * Join a multilevel lists of strings. - * Example: flatJoin(listOf("a", listOf("b", "c"), "d")) will result in "a/b/c/d". - */ - private fun flatJoin(path: Any): String { - fun flatJoinTo(sb: StringBuilder, path: Any): StringBuilder { - when (path) { - is List<*> -> path.filterNotNull().forEach { flatJoinTo(sb, it) } - is String -> { - if (sb.isNotEmpty()) { - sb.append('/') - } - sb.append(path) - } - else -> throw IllegalArgumentException("Unsupported type: ${path.javaClass}") - } - return sb - } - return flatJoinTo(StringBuilder(), path).toString() - } -} diff --git a/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/RequiredMapEntriesMatcher.kt b/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/RequiredMapEntriesMatcher.kt deleted file mode 100644 index 0f98d7213..000000000 --- a/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/RequiredMapEntriesMatcher.kt +++ /dev/null @@ -1,34 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. - * ================================================================================ - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ -package org.onap.ccsdk.cds.blueprintsprocessor.uat.utils - -import com.google.common.collect.Maps -import org.mockito.ArgumentMatcher - -class RequiredMapEntriesMatcher<K, V>(private val requiredEntries: Map<K, V>) : ArgumentMatcher<Map<K, V>> { - override fun matches(argument: Map<K, V>?): Boolean { - val missingEntries = Maps.difference(requiredEntries, argument).entriesOnlyOnLeft() - return missingEntries.isEmpty() - } - - override fun toString(): String { - return requiredEntries.toString() - } -} diff --git a/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/UatDefinition.kt b/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/UatDefinition.kt deleted file mode 100644 index c45ac45c6..000000000 --- a/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/UatDefinition.kt +++ /dev/null @@ -1,102 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. - * ================================================================================ - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ -package org.onap.ccsdk.cds.blueprintsprocessor.uat.utils - -import com.fasterxml.jackson.annotation.JsonAlias -import com.fasterxml.jackson.annotation.JsonInclude -import com.fasterxml.jackson.databind.JsonNode -import com.fasterxml.jackson.databind.ObjectMapper -import com.fasterxml.jackson.databind.annotation.JsonDeserialize -import com.fasterxml.jackson.module.kotlin.convertValue -import org.yaml.snakeyaml.DumperOptions -import org.yaml.snakeyaml.Yaml -import org.yaml.snakeyaml.nodes.Tag - -@JsonInclude(JsonInclude.Include.NON_EMPTY) -data class ProcessDefinition( - val name: String, - val request: JsonNode, - val expectedResponse: JsonNode? = null, - val responseNormalizerSpec: JsonNode? = null -) - -@JsonInclude(JsonInclude.Include.NON_EMPTY) -data class RequestDefinition( - val method: String, - @JsonDeserialize(using = PathDeserializer::class) - val path: String, - val headers: Map<String, String> = emptyMap(), - val body: JsonNode? = null -) - -@JsonInclude(JsonInclude.Include.NON_EMPTY) -data class ResponseDefinition(val status: Int = 200, val body: JsonNode? = null) { - - companion object { - val DEFAULT_RESPONSE = ResponseDefinition() - } -} - -@JsonInclude(JsonInclude.Include.NON_EMPTY) -data class ExpectationDefinition( - val request: RequestDefinition, - val response: ResponseDefinition = ResponseDefinition.DEFAULT_RESPONSE -) - -@JsonInclude(JsonInclude.Include.NON_EMPTY) -data class ServiceDefinition(val selector: String, val expectations: List<ExpectationDefinition>) - -@JsonInclude(JsonInclude.Include.NON_EMPTY) -data class UatDefinition( - val processes: List<ProcessDefinition>, - @JsonAlias("external-services") - val externalServices: List<ServiceDefinition> = emptyList() -) { - - fun dump(mapper: ObjectMapper, excludedProperties: List<String> = emptyList()): String { - val uatAsMap: Map<String, Any> = mapper.convertValue(this) - if (excludedProperties.isNotEmpty()) { - pruneTree(uatAsMap, excludedProperties) - } - return Yaml().dumpAs(uatAsMap, Tag.MAP, DumperOptions.FlowStyle.BLOCK) - } - - fun toBare(): UatDefinition { - val newProcesses = processes.map { p -> - ProcessDefinition(p.name, p.request, null, p.responseNormalizerSpec) - } - return UatDefinition(newProcesses) - } - - private fun pruneTree(node: Any?, excludedProperties: List<String>) { - when (node) { - is MutableMap<*, *> -> { - excludedProperties.forEach { key -> node.remove(key) } - node.forEach { (_, value) -> pruneTree(value, excludedProperties) } - } - is List<*> -> node.forEach { value -> pruneTree(value, excludedProperties) } - } - } - - companion object { - fun load(mapper: ObjectMapper, spec: String): UatDefinition = - mapper.convertValue(Yaml().load(spec), UatDefinition::class.java) - } -} diff --git a/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/UatExecutor.kt b/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/UatExecutor.kt deleted file mode 100644 index a904fa9b6..000000000 --- a/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/UatExecutor.kt +++ /dev/null @@ -1,359 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. - * ================================================================================ - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ -package org.onap.ccsdk.cds.blueprintsprocessor.uat.utils - -import com.fasterxml.jackson.databind.JsonNode -import com.fasterxml.jackson.databind.ObjectMapper -import com.nhaarman.mockitokotlin2.any -import com.nhaarman.mockitokotlin2.argThat -import com.nhaarman.mockitokotlin2.atLeast -import com.nhaarman.mockitokotlin2.atLeastOnce -import com.nhaarman.mockitokotlin2.eq -import com.nhaarman.mockitokotlin2.mock -import com.nhaarman.mockitokotlin2.verify -import com.nhaarman.mockitokotlin2.verifyNoMoreInteractions -import com.nhaarman.mockitokotlin2.whenever -import org.apache.http.HttpHeaders -import org.apache.http.HttpStatus -import org.apache.http.client.HttpClient -import org.apache.http.client.methods.HttpPost -import org.apache.http.entity.ContentType -import org.apache.http.entity.StringEntity -import org.apache.http.entity.mime.HttpMultipartMode -import org.apache.http.entity.mime.MultipartEntityBuilder -import org.apache.http.impl.client.HttpClientBuilder -import org.apache.http.message.BasicHeader -import org.hamcrest.CoreMatchers.equalTo -import org.hamcrest.CoreMatchers.notNullValue -import org.hamcrest.MatcherAssert.assertThat -import org.mockito.Answers -import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BluePrintRestLibPropertyService -import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BlueprintWebClientService -import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BlueprintWebClientService.WebClientResponse -import org.onap.ccsdk.cds.blueprintsprocessor.uat.logging.LogColor.COLOR_MOCKITO -import org.onap.ccsdk.cds.blueprintsprocessor.uat.logging.LogColor.markerOf -import org.onap.ccsdk.cds.blueprintsprocessor.uat.logging.MockInvocationLogger -import org.skyscreamer.jsonassert.JSONAssert -import org.skyscreamer.jsonassert.JSONCompareMode -import org.slf4j.Logger -import org.slf4j.LoggerFactory -import org.springframework.core.env.ConfigurableEnvironment -import org.springframework.http.MediaType -import org.springframework.stereotype.Component -import org.springframework.util.Base64Utils -import java.util.concurrent.ConcurrentHashMap - -/** - * Assumptions: - * - * - Application HTTP service is bound to loopback interface; - * - Password is either defined in plain (with "{noop}" prefix), or it's the same of username. - * - * @author Eliezio Oliveira - */ -@Component -class UatExecutor( - private val environment: ConfigurableEnvironment, - private val restClientFactory: BluePrintRestLibPropertyService, - private val mapper: ObjectMapper -) { - - companion object { - private const val NOOP_PASSWORD_PREFIX = "{noop}" - - private val log: Logger = LoggerFactory.getLogger(UatExecutor::class.java) - private val mockLoggingListener = MockInvocationLogger(markerOf(COLOR_MOCKITO)) - } - - // use lazy evaluation to postpone until localServerPort is injected by Spring - private val baseUrl: String by lazy { - "http://127.0.0.1:${localServerPort()}" - } - - @Throws(AssertionError::class) - fun execute(uatSpec: String, cbaBytes: ByteArray) { - val uat = UatDefinition.load(mapper, uatSpec) - execute(uat, cbaBytes) - } - - /** - * - * The UAT can range from minimum to completely defined. - * - * @return an updated UAT with all NB and SB messages. - */ - @Throws(AssertionError::class) - fun execute(uat: UatDefinition, cbaBytes: ByteArray): UatDefinition { - val defaultHeaders = listOf(BasicHeader(HttpHeaders.AUTHORIZATION, clientAuthToken())) - val httpClient = HttpClientBuilder.create() - .setDefaultHeaders(defaultHeaders) - .build() - // Only if externalServices are defined - val mockInterceptor = MockPreInterceptor() - // Always defined and used, whatever the case - val spyInterceptor = SpyPostInterceptor(mapper) - restClientFactory.setInterceptors(mockInterceptor, spyInterceptor) - try { - // Configure mocked external services and save their expected requests for further validation - val requestsPerClient = uat.externalServices.associateBy( - { service -> - createRestClientMock(service.expectations).also { restClient -> - // side-effect: register restClient to override real instance - mockInterceptor.registerMock(service.selector, restClient) - } - }, - { service -> service.expectations.map { it.request } } - ) - - val newProcesses = httpClient.use { client -> - uploadBlueprint(client, cbaBytes) - - // Run processes - uat.processes.map { process -> - log.info("Executing process '${process.name}'") - val responseNormalizer = JsonNormalizer.getNormalizer(mapper, process.responseNormalizerSpec) - val actualResponse = processBlueprint( - client, process.request, - process.expectedResponse, responseNormalizer - ) - ProcessDefinition( - process.name, - process.request, - actualResponse, - process.responseNormalizerSpec - ) - } - } - - // Validate requests to external services - for ((mockClient, requests) in requestsPerClient) { - requests.forEach { request -> - verify(mockClient, atLeastOnce()).exchangeResource( - eq(request.method), - eq(request.path), - argThat { assertJsonEquals(request.body, this) }, - argThat(RequiredMapEntriesMatcher(request.headers)) - ) - } - // Don't mind the invocations to the overloaded exchangeResource(String, String, String) - verify(mockClient, atLeast(0)).exchangeResource(any(), any(), any()) - verifyNoMoreInteractions(mockClient) - } - - val newExternalServices = spyInterceptor.getSpies() - .map(SpyService::asServiceDefinition) - - return UatDefinition(newProcesses, newExternalServices) - } finally { - restClientFactory.clearInterceptors() - } - } - - private fun createRestClientMock(restExpectations: List<ExpectationDefinition>): - BlueprintWebClientService { - val restClient = mock<BlueprintWebClientService>( - defaultAnswer = Answers.RETURNS_SMART_NULLS, - // our custom verboseLogging handler - invocationListeners = arrayOf(mockLoggingListener) - ) - - // Delegates to overloaded exchangeResource(String, String, String, Map<String, String>) - whenever(restClient.exchangeResource(any(), any(), any())) - .thenAnswer { invocation -> - val method = invocation.arguments[0] as String - val path = invocation.arguments[1] as String - val request = invocation.arguments[2] as String - restClient.exchangeResource(method, path, request, emptyMap()) - } - for (expectation in restExpectations) { - whenever( - restClient.exchangeResource( - eq(expectation.request.method), - eq(expectation.request.path), - any(), - any() - ) - ) - .thenReturn(WebClientResponse(expectation.response.status, expectation.response.body.toString())) - } - return restClient - } - - @Throws(AssertionError::class) - private fun uploadBlueprint(client: HttpClient, cbaBytes: ByteArray) { - val multipartEntity = MultipartEntityBuilder.create() - .setMode(HttpMultipartMode.BROWSER_COMPATIBLE) - .addBinaryBody("file", cbaBytes, ContentType.DEFAULT_BINARY, "cba.zip") - .build() - val request = HttpPost("$baseUrl/api/v1/blueprint-model/publish").apply { - entity = multipartEntity - } - client.execute(request) { response -> - val statusLine = response.statusLine - assertThat(statusLine.statusCode, equalTo(HttpStatus.SC_OK)) - } - } - - @Throws(AssertionError::class) - private fun processBlueprint( - client: HttpClient, - requestBody: JsonNode, - expectedResponse: JsonNode?, - responseNormalizer: (String) -> String - ): JsonNode { - val stringEntity = StringEntity(mapper.writeValueAsString(requestBody), ContentType.APPLICATION_JSON) - val request = HttpPost("$baseUrl/api/v1/execution-service/process").apply { - entity = stringEntity - } - val response = client.execute(request) { response -> - val statusLine = response.statusLine - assertThat(statusLine.statusCode, equalTo(HttpStatus.SC_OK)) - val entity = response.entity - assertThat("Response contains no content", entity, notNullValue()) - entity.content.bufferedReader().use { it.readText() } - } - val actualResponse = responseNormalizer(response) - if (expectedResponse != null) { - assertJsonEquals(expectedResponse, actualResponse) - } - return mapper.readTree(actualResponse)!! - } - - @Throws(AssertionError::class) - private fun assertJsonEquals(expected: JsonNode?, actual: String): Boolean { - // special case - if ((expected == null) && actual.isBlank()) { - return true - } - // general case - JSONAssert.assertEquals(expected?.toString(), actual, JSONCompareMode.LENIENT) - // assertEquals throws an exception whenever match fails - return true - } - - private fun localServerPort(): Int = - (environment.getProperty("local.server.port") - ?: environment.getRequiredProperty("blueprint.httpPort")).toInt() - - private fun clientAuthToken(): String { - val username = environment.getRequiredProperty("security.user.name") - val password = environment.getRequiredProperty("security.user.password") - val plainPassword = when { - password.startsWith(NOOP_PASSWORD_PREFIX) -> password.substring( - NOOP_PASSWORD_PREFIX.length) - else -> username - } - return "Basic " + Base64Utils.encodeToString("$username:$plainPassword".toByteArray()) - } - - private class MockPreInterceptor : BluePrintRestLibPropertyService.PreInterceptor { - private val mocks = ConcurrentHashMap<String, BlueprintWebClientService>() - - override fun getInstance(jsonNode: JsonNode): BlueprintWebClientService? { - TODO("jsonNode-keyed services not yet supported") - } - - override fun getInstance(selector: String): BlueprintWebClientService? = - mocks[selector] - - fun registerMock(selector: String, client: BlueprintWebClientService) { - mocks[selector] = client - } - } - - private class SpyPostInterceptor(private val mapper: ObjectMapper) : BluePrintRestLibPropertyService.PostInterceptor { - - private val spies = ConcurrentHashMap<String, SpyService>() - - override fun getInstance(jsonNode: JsonNode, service: BlueprintWebClientService): BlueprintWebClientService { - TODO("jsonNode-keyed services not yet supported") - } - - override fun getInstance(selector: String, service: BlueprintWebClientService): BlueprintWebClientService { - val spiedService = SpyService(mapper, selector, service) - spies[selector] = spiedService - return spiedService - } - - fun getSpies(): List<SpyService> = - spies.values.toList() - } - - private class SpyService( - private val mapper: ObjectMapper, - val selector: String, - private val realService: BlueprintWebClientService - ) : - BlueprintWebClientService by realService { - - private val expectations: MutableList<ExpectationDefinition> = mutableListOf() - - override fun exchangeResource(methodType: String, path: String, request: String): WebClientResponse<String> = - exchangeResource(methodType, path, request, - DEFAULT_HEADERS - ) - - override fun exchangeResource( - methodType: String, - path: String, - request: String, - headers: Map<String, String> - ): WebClientResponse<String> { - val requestDefinition = - RequestDefinition(methodType, path, headers, toJson(request)) - val realAnswer = realService.exchangeResource(methodType, path, request, headers) - val responseBody = when { - // TODO: confirm if we need to normalize the response here - realAnswer.status == HttpStatus.SC_OK -> toJson(realAnswer.body) - else -> null - } - val responseDefinition = - ResponseDefinition(realAnswer.status, responseBody) - expectations.add( - ExpectationDefinition( - requestDefinition, - responseDefinition - ) - ) - return realAnswer - } - - override suspend fun <T> retry(times: Int, initialDelay: Long, delay: Long, block: suspend (Int) -> T): T { - return super.retry(times, initialDelay, delay, block) - } - - fun asServiceDefinition() = - ServiceDefinition(selector, expectations) - - private fun toJson(str: String): JsonNode? { - return when { - str.isNotBlank() -> mapper.readTree(str) - else -> null - } - } - - companion object { - private val DEFAULT_HEADERS = mapOf( - HttpHeaders.CONTENT_TYPE to MediaType.APPLICATION_JSON_VALUE, - HttpHeaders.ACCEPT to MediaType.APPLICATION_JSON_VALUE - ) - } - } -} diff --git a/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/UatServices.kt b/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/UatServices.kt deleted file mode 100644 index f40b903de..000000000 --- a/ms/blueprintsprocessor/application/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/uat/utils/UatServices.kt +++ /dev/null @@ -1,125 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. - * ================================================================================ - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ -package org.onap.ccsdk.cds.blueprintsprocessor.uat.utils - -import com.fasterxml.jackson.databind.ObjectMapper -import kotlinx.coroutines.runBlocking -import org.onap.ccsdk.cds.blueprintsprocessor.uat.logging.LogColor.COLOR_SERVICES -import org.onap.ccsdk.cds.blueprintsprocessor.uat.logging.LogColor.resetContextColor -import org.onap.ccsdk.cds.blueprintsprocessor.uat.logging.LogColor.setContextColor -import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintConstants.UAT_SPECIFICATION_FILE -import org.springframework.context.annotation.Profile -import org.springframework.http.HttpStatus -import org.springframework.http.MediaType -import org.springframework.http.codec.multipart.FilePart -import org.springframework.security.access.prepost.PreAuthorize -import org.springframework.web.bind.annotation.PostMapping -import org.springframework.web.bind.annotation.RequestMapping -import org.springframework.web.bind.annotation.RequestPart -import org.springframework.web.bind.annotation.RestController -import org.springframework.web.server.ResponseStatusException -import java.io.File -import java.util.zip.ZipFile - -/** - * Supporting services to help creating UAT specifications. - * - * @author Eliezio Oliveira - */ -@RestController -@RequestMapping("/api/v1/uat") -@Profile("uat") -open class UatServices(private val uatExecutor: UatExecutor, private val mapper: ObjectMapper) { - - @PostMapping("/verify", consumes = [MediaType.MULTIPART_FORM_DATA_VALUE]) - @PreAuthorize("hasRole('USER')") - @Suppress("BlockingMethodInNonBlockingContext") - open fun verify(@RequestPart("cba") cbaFile: FilePart) = runBlocking { - setContextColor(COLOR_SERVICES) - val tempFile = createTempFile() - try { - cbaFile.transferTo(tempFile) - val uatSpec = readZipEntryAsText(tempFile, UAT_SPECIFICATION_FILE) - val cbaBytes = tempFile.readBytes() - uatExecutor.execute(uatSpec, cbaBytes) - } catch (e: AssertionError) { - throw ResponseStatusException(HttpStatus.BAD_REQUEST, e.message) - } catch (t: Throwable) { - throw ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, t.message, t) - } finally { - tempFile.delete() - resetContextColor() - } - } - - @PostMapping("/spy", consumes = [MediaType.MULTIPART_FORM_DATA_VALUE], produces = ["text/vnd.yaml"]) - @PreAuthorize("hasRole('USER')") - @Suppress("BlockingMethodInNonBlockingContext") - open fun spy( - @RequestPart("cba") cbaFile: FilePart, - @RequestPart("uat", required = false) uatFile: FilePart? - ): String = runBlocking { - val tempFile = createTempFile() - setContextColor(COLOR_SERVICES) - try { - cbaFile.transferTo(tempFile) - val uatSpec = when { - uatFile != null -> uatFile.readText() - else -> readZipEntryAsText(tempFile, UAT_SPECIFICATION_FILE) - } - val uat = UatDefinition.load(mapper, uatSpec) - val cbaBytes = tempFile.readBytes() - val updatedUat = uatExecutor.execute(uat, cbaBytes) - return@runBlocking updatedUat.dump(mapper, - FIELDS_TO_EXCLUDE - ) - } catch (t: Throwable) { - throw ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, t.message, t) - } finally { - tempFile.delete() - resetContextColor() - } - } - - private fun FilePart.readText(): String { - val tempFile = createTempFile() - try { - transferTo(tempFile).block() - return tempFile.readText() - } finally { - tempFile.delete() - } - } - - @Suppress("SameParameterValue") - private fun readZipEntryAsText(file: File, entryName: String): String { - return ZipFile(file).use { zipFile -> zipFile.readEntryAsText(entryName) } - } - - private fun ZipFile.readEntryAsText(entryName: String): String { - val zipEntry = getEntry(entryName) - return getInputStream(zipEntry).readBytes().toString(Charsets.UTF_8) - } - - companion object { - // Fields that can be safely ignored from BPP response, and can be omitted on the UAT specification. - private val FIELDS_TO_EXCLUDE = listOf("timestamp") - } -} diff --git a/ms/blueprintsprocessor/application/src/test/resources/application-test.properties b/ms/blueprintsprocessor/application/src/test/resources/application-test.properties index 1d2565be3..d2170c7c1 100644 --- a/ms/blueprintsprocessor/application/src/test/resources/application-test.properties +++ b/ms/blueprintsprocessor/application/src/test/resources/application-test.properties @@ -16,6 +16,11 @@ spring.http.log-request-details=true +# Error Managements +error.catalog.applicationId=cds +error.catalog.type=properties +error.catalog.errorDefinitionDir=./src/test/resources/ + blueprintsprocessor.httpPort=0 blueprintsprocessor.grpcEnable=true blueprintsprocessor.grpcPort=0 @@ -61,4 +66,3 @@ blueprintprocessor.healthcheck.mapping-service-name-with-service-link=[Execution #BaseUrls for health check Cds Listener services cdslistener.healthcheck.baseUrl=http://cds-sdc-listener:8080/ cdslistener.healthcheck.mapping-service-name-with-service-link=[SDC Listener service,/api/v1/sdclistener/healthcheck] - diff --git a/ms/blueprintsprocessor/application/src/test/resources/application.properties b/ms/blueprintsprocessor/application/src/test/resources/application.properties index ea14c493a..cb3419397 100644 --- a/ms/blueprintsprocessor/application/src/test/resources/application.properties +++ b/ms/blueprintsprocessor/application/src/test/resources/application.properties @@ -61,6 +61,11 @@ blueprints.processor.functions.python.executor.modulePaths=/opt/app/onap/scripts security.user.password:{bcrypt}$2a$10$duaUzVUVW0YPQCSIbGEkQOXwafZGwQ/b32/Ys4R1iwSSawFgz7QNu security.user.name:ccsdkapps +# Error Managements +error.catalog.applicationId=cds +error.catalog.type=properties +error.catalog.errorDefinitionDir=./src/test/resources/ + # Executor Options blueprintsprocessor.resourceResolution.enabled=true blueprintsprocessor.netconfExecutor.enabled=true diff --git a/ms/blueprintsprocessor/application/src/test/resources/error-messages_en.properties b/ms/blueprintsprocessor/application/src/test/resources/error-messages_en.properties new file mode 100644 index 000000000..71196ce16 --- /dev/null +++ b/ms/blueprintsprocessor/application/src/test/resources/error-messages_en.properties @@ -0,0 +1,91 @@ +# +# Copyright © 2020 IBM, Bell Canada +# +# 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. +# +org.onap.ccsdk.cds.blueprintsprocessor.generic_failure=cause=Internal error in Blueprint Processor run time.,action=Contact CDS administrator team. +org.onap.ccsdk.cds.blueprintsprocessor.resource_path_missing=cause=Resource path missing or wrong.,action=Please reload your artifact in run time. +org.onap.ccsdk.cds.blueprintsprocessor.resource_writing_fail=cause=Fail to write resources files.,action=Please reload your files and make sure it is in the right format. +org.onap.ccsdk.cds.blueprintsprocessor.io_file_interrupt=cause=IO file system interruption.,action=Please reload your file and make sure it is in the right format. +org.onap.ccsdk.cds.blueprintsprocessor.invalid_request_format=cause=bad request provided.,action=Verify the request payload. +org.onap.ccsdk.cds.blueprintsprocessor.unauthorized_request=cause=The request requires user authentication.,action=Please provide the right credentials. +org.onap.ccsdk.cds.blueprintsprocessor.request_not_found=cause=Request mapping doesn't exist.,action=Please verify your request. +org.onap.ccsdk.cds.blueprintsprocessor.conflict_adding_resource=cause=Duplicated entry while saving resource.,action=Please make the saving model doesn't exist. +org.onap.ccsdk.cds.blueprintsprocessor.duplicate_data=cause=Duplicated data - was expecting one result, got more than one.,action=Please provide single resource at a time. +org.onap.ccsdk.cds.blueprintsprocessor.resource_not_found=cause=No response was found for this request in the server.,action=Provide the ID to find the resource. +org.onap.ccsdk.cds.blueprintsprocessor.unsupported_media_type=cause=An invalid media was provided.,action=Please make sure your media or artifact is in the proper structure or format. + +# Self Service API +org.onap.ccsdk.cds.blueprintsprocessor.selfservice.api.generic_failure=cause=Internal error in Self Service API.,action=Verify the request and try again. +org.onap.ccsdk.cds.blueprintsprocessor.selfservice.api.generic_process_failure=cause=Internal error while processing REST call to the Self Service API.,action=Verify the request and try again. +org.onap.ccsdk.cds.blueprintsprocessor.selfservice.api.invalid_file_extension=cause=Failed trying to upload a non ZIP file format.,action=Please reload your file and make sure it is in ZIP format. +org.onap.ccsdk.cds.blueprintsprocessor.selfservice.api.resource_path_missing=cause=Resource path missing or wrong.,action=Please reload your artifact in run time. +org.onap.ccsdk.cds.blueprintsprocessor.selfservice.api.resource_writing_fail=cause=Fail to write resources files.,action=Please reload your files and make sure it is in the right format. +org.onap.ccsdk.cds.blueprintsprocessor.selfservice.api.io_file_interrupt=cause=IO file system interruption.,action=Please reload your file and make sure it is in the right format. +org.onap.ccsdk.cds.blueprintsprocessor.selfservice.api.invalid_request_format=cause=bad request provided.,action=Verify the request payload. +org.onap.ccsdk.cds.blueprintsprocessor.selfservice.api.unauthorized_request=cause=The request requires user authentication.,action=Please provide the right credentials. +org.onap.ccsdk.cds.blueprintsprocessor.selfservice.api.request_not_found=cause=Request mapping doesn't exist.,action=Please verify your request. +org.onap.ccsdk.cds.blueprintsprocessor.selfservice.api.conflict_adding_resource=cause=Duplicated entry while saving resource.,action=Please make the saving model doesn't exist. +org.onap.ccsdk.cds.blueprintsprocessor.selfservice.api.duplicate_data=cause=Duplicated data - was expecting one result, got more than one.,action=Please provide single resource at a time. +org.onap.ccsdk.cds.blueprintsprocessor.selfservice.api.resource_not_found=cause=No response was found for this request in the server.,action=Provide the ID to find the resource. +org.onap.ccsdk.cds.blueprintsprocessor.selfservice.api.unsupported_media_type=cause=An invalid media was provided.,action=Please make sure your media or artifact is in the proper structure or format. + +# Designer API +org.onap.ccsdk.cds.blueprintsprocessor.designer.api.generic_failure=cause=Internal error while processing REST call to the Designer API.,action=Verify the request and try again. +org.onap.ccsdk.cds.blueprintsprocessor.designer.api.invalid_file_extension=cause=Failed trying to upload a non ZIP file format.,action=Please reload your file and make sure it is in ZIP format. +org.onap.ccsdk.cds.blueprintsprocessor.designer.api.resource_path_missing=cause=Resource path missing or wrong.,action=Please reload your artifact in run time. +org.onap.ccsdk.cds.blueprintsprocessor.designer.api.resource_writing_fail=cause=Fail to write resources files.,action=Please reload your files and make sure it is in the right format. +org.onap.ccsdk.cds.blueprintsprocessor.designer.api.io_file_interrupt=cause=IO file system interruption.,action=Please reload your file and make sure it is in the right format. +org.onap.ccsdk.cds.blueprintsprocessor.designer.api.invalid_request_format=cause=bad request provided.,action=Verify the request payload. +org.onap.ccsdk.cds.blueprintsprocessor.designer.api.unauthorized_request=cause=The request requires user authentication.,action=Please provide the right credentials. +org.onap.ccsdk.cds.blueprintsprocessor.designer.api.request_not_found=cause=Request mapping doesn't exist.,action=Please verify your request. +org.onap.ccsdk.cds.blueprintsprocessor.designer.api.conflict_adding_resource=cause=Duplicated entry while saving resource.,action=Please make the saving model doesn't exist. +org.onap.ccsdk.cds.blueprintsprocessor.designer.api.duplicate_data=cause=Duplicated data - was expecting one result, got more than one.,action=Please provide single resource at a time. +org.onap.ccsdk.cds.blueprintsprocessor.designer.api.resource_not_found=cause=No response was found for this request in the server.,action=Provide the ID to find the resource. +org.onap.ccsdk.cds.blueprintsprocessor.designer.api.unsupported_media_type=cause=An invalid media was provided.,action=Please make sure your media or artifact is in the proper structure or format. + +# Resource API +org.onap.ccsdk.cds.blueprintsprocessor.resource.api.generic_failure=cause=Internal error while processing REST call to the Resource API.,action=Verify the request and try again. +org.onap.ccsdk.cds.blueprintsprocessor.resource.api.invalid_file_extension=cause=Failed trying to upload a non ZIP file format.,action=Please reload your file and make sure it is in ZIP format. +org.onap.ccsdk.cds.blueprintsprocessor.resource.api.resource_path_missing=cause=Resource path missing or wrong.,action=Please reload your artifact in run time. +org.onap.ccsdk.cds.blueprintsprocessor.resource.api.resource_writing_fail=cause=Fail to write resources files.,action=Please reload your files and make sure it is in the right format. +org.onap.ccsdk.cds.blueprintsprocessor.resource.api.io_file_interrupt=cause=IO file system interruption.,action=Please reload your file and make sure it is in the right format. +org.onap.ccsdk.cds.blueprintsprocessor.resource.api.invalid_request_format=cause=bad request provided.,action=Verify the request payload. +org.onap.ccsdk.cds.blueprintsprocessor.resource.api.unauthorized_request=cause=The request requires user authentication.,action=Please provide the right credentials. +org.onap.ccsdk.cds.blueprintsprocessor.resource.api.request_not_found=cause=Request mapping doesn't exist.,action=Please verify your request. +org.onap.ccsdk.cds.blueprintsprocessor.resource.api.conflict_adding_resource=cause=Duplicated entry while saving resource.,action=Please make the saving model doesn't exist. +org.onap.ccsdk.cds.blueprintsprocessor.resource.api.duplicate_data=cause=Duplicated data - was expecting one result, got more than one.,action=Please provide single resource at a time. +org.onap.ccsdk.cds.blueprintsprocessor.resource.api.resource_not_found=cause=No response was found for this request in the server.,action=Provide the ID to find the resource. +org.onap.ccsdk.cds.blueprintsprocessor.resource.api.unsupported_media_type=cause=An invalid media was provided.,action=Please make sure your media or artifact is in the proper structure or format. + + +# Configs API +org.onap.ccsdk.cds.blueprintsprocessor.configs.api.generic_failure=cause=Internal error while processing REST call to the Configs API.,action=Verify the request and try again. +org.onap.ccsdk.cds.blueprintsprocessor.configs.api.resource_path_missing=cause=Resource path missing or wrong.,action=Please reload your artifact in run time. +org.onap.ccsdk.cds.blueprintsprocessor.configs.api.io_file_interrupt=cause=IO file system interruption.,action=Please reload your file and make sure it is in the right format. +org.onap.ccsdk.cds.blueprintsprocessor.configs.api.invalid_request_format=cause=bad request provided.,action=Verify the request payload. +org.onap.ccsdk.cds.blueprintsprocessor.configs.api.unauthorized_request=cause=The request requires user authentication.,action=Please provide the right credentials. +org.onap.ccsdk.cds.blueprintsprocessor.configs.api.request_not_found=cause=Request mapping doesn't exist.,action=Please verify your request. +org.onap.ccsdk.cds.blueprintsprocessor.configs.api.conflict_adding_resource=cause=Duplicated entry while saving resource.,action=Please make the saving model doesn't exist. +org.onap.ccsdk.cds.blueprintsprocessor.configs.api.duplicate_data=cause=Duplicated data - was expecting one result, got more than one.,action=Please provide single resource at a time. +org.onap.ccsdk.cds.blueprintsprocessor.configs.api.resource_not_found=cause=No response was found for this request in the server.,action=Provide the ID to find the resource. + +# Python Executor +org.onap.ccsdk.cds.blueprintsprocessor.functions.python.executor.generic_failure=cause=Internal error in Blueprint Processor run time.,action=Contact CDS administrator team. + +# Resource resolution +org.onap.ccsdk.cds.blueprintsprocessor.resource.resolution.invalid_request_format=cause=bad request provided.,action=Verify the request payload. +org.onap.ccsdk.cds.blueprintsprocessor.resource.resolution.resource_not_found=cause=No response was found for this resolution in CDS.,action=Verify definition of the resource in CBA. +org.onap.ccsdk.cds.blueprintsprocessor.resource.resolution.internal_error=cause=Internal error while processing Resource Resolution.,action=Verify the payload. + +org.onap.ccsdk.cds.sdclistener.generic_failure=cause=Internal error in SDC Listener.,action=Contact CDS administrator team. |