From: sebdet Date: Tue, 8 Oct 2019 15:53:08 +0000 (+0200) Subject: DCAE inventory calls in camel X-Git-Tag: 4.1.3~8 X-Git-Url: https://gerrit.onap.org/r/gitweb?p=clamp.git;a=commitdiff_plain;h=74303b71e884cbaf6099031973d6c37e31c55bf3 DCAE inventory calls in camel Move the HTTP/HTTPS calls to camel so that there is no issue with the previous code that does not support the config required for HTTP4 Camel Issue-ID: CLAMP-532 Change-Id: I83db0da5bbe6906890d0d6aa9b529c264e5f9b20 Signed-off-by: sebdet --- diff --git a/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java b/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java index 0ebaab55..b24bc99b 100644 --- a/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java +++ b/src/main/java/org/onap/clamp/clds/client/DcaeInventoryServices.java @@ -30,6 +30,9 @@ import com.att.eelf.configuration.EELFManager; import java.io.IOException; import java.util.Date; +import org.apache.camel.CamelContext; +import org.apache.camel.Exchange; +import org.apache.camel.builder.ExchangeBuilder; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; @@ -38,7 +41,6 @@ import org.onap.clamp.clds.config.ClampProperties; import org.onap.clamp.clds.model.dcae.DcaeInventoryResponse; import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.clds.util.LoggingUtils; -import org.onap.clamp.util.HttpConnectionManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -48,6 +50,9 @@ import org.springframework.stereotype.Component; @Component public class DcaeInventoryServices { + @Autowired + CamelContext camelContext; + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(DcaeInventoryServices.class); protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); @@ -55,15 +60,13 @@ public class DcaeInventoryServices { public static final String DCAE_INVENTORY_RETRY_INTERVAL = "dcae.intentory.retry.interval"; public static final String DCAE_INVENTORY_RETRY_LIMIT = "dcae.intentory.retry.limit"; private final ClampProperties refProp; - private final HttpConnectionManager httpConnectionManager; /** * Constructor. */ @Autowired - public DcaeInventoryServices(ClampProperties refProp, HttpConnectionManager httpConnectionManager) { + public DcaeInventoryServices(ClampProperties refProp) { this.refProp = refProp; - this.httpConnectionManager = httpConnectionManager; } private int getTotalCountFromDcaeInventoryResponse(String responseStr) throws ParseException { @@ -96,19 +99,7 @@ public class DcaeInventoryServices { public DcaeInventoryResponse getDcaeInformation(String artifactName, String serviceUuid, String resourceUuid) throws IOException, ParseException, InterruptedException { LoggingUtils.setTargetContext("DCAE", "getDcaeInformation"); - String queryString = "?asdcResourceId=" + resourceUuid + "&asdcServiceId=" + serviceUuid + "&typeName=" - + artifactName; - String fullUrl = refProp.getStringValue(DCAE_INVENTORY_URL) + "/dcae-service-types" + queryString; - logger.info("Dcae Inventory Service full url - " + fullUrl); - DcaeInventoryResponse response = queryDcaeInventory(fullUrl); - LoggingUtils.setResponseContext("0", "Get Dcae Information success", this.getClass().getName()); - Date startTime = new Date(); - LoggingUtils.setTimeContext(startTime, new Date()); - return response; - } - private DcaeInventoryResponse queryDcaeInventory(String fullUrl) - throws IOException, InterruptedException, ParseException { int retryInterval = 0; int retryLimit = 1; if (refProp.getStringValue(DCAE_INVENTORY_RETRY_LIMIT) != null) { @@ -118,18 +109,31 @@ public class DcaeInventoryServices { retryInterval = Integer.valueOf(refProp.getStringValue(DCAE_INVENTORY_RETRY_INTERVAL)); } for (int i = 0; i < retryLimit; i++) { + Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext) + .withProperty("blueprintResourceId", resourceUuid).withProperty("blueprintServiceId", serviceUuid) + .withProperty("blueprintName", artifactName).build(); metricsLogger.info("Attempt n°" + i + " to contact DCAE inventory"); - String response = httpConnectionManager.doHttpRequest(fullUrl, "GET", null, null, "DCAE", null, null); - int totalCount = getTotalCountFromDcaeInventoryResponse(response); - metricsLogger.info("getDcaeInformation complete: totalCount returned=" + totalCount); - if (totalCount > 0) { - logger.info("getDcaeInformation, answer from DCAE inventory:" + response); - return getItemsFromDcaeInventoryResponse(response); + + Exchange exchangeResponse = camelContext.createProducerTemplate() + .send("direct:get-dcae-blueprint-inventory", myCamelExchange); + + if (Integer.valueOf(200).equals(exchangeResponse.getIn().getHeader("CamelHttpResponseCode"))) { + String dcaeResponse = (String) exchangeResponse.getIn().getBody(); + int totalCount = getTotalCountFromDcaeInventoryResponse(dcaeResponse); + metricsLogger.info("getDcaeInformation complete: totalCount returned=" + totalCount); + if (totalCount > 0) { + logger.info("getDcaeInformation, answer from DCAE inventory:" + dcaeResponse); + LoggingUtils.setResponseContext("0", "Get Dcae Information success", this.getClass().getName()); + Date startTime = new Date(); + LoggingUtils.setTimeContext(startTime, new Date()); + return getItemsFromDcaeInventoryResponse(dcaeResponse); + } else { + logger.info("Dcae inventory totalCount returned is 0, so waiting " + retryInterval + + "ms before retrying ..."); + // wait for a while and try to connect to DCAE again + Thread.sleep(retryInterval); + } } - logger.info( - "Dcae inventory totalCount returned is 0, so waiting " + retryInterval + "ms before retrying ..."); - // wait for a while and try to connect to DCAE again - Thread.sleep(retryInterval); } logger.warn("Dcae inventory totalCount returned is still 0, after " + retryLimit + " attempts, returning NULL"); return null; diff --git a/src/main/java/org/onap/clamp/util/HttpConnectionManager.java b/src/main/java/org/onap/clamp/util/HttpConnectionManager.java deleted file mode 100644 index 6459fa97..00000000 --- a/src/main/java/org/onap/clamp/util/HttpConnectionManager.java +++ /dev/null @@ -1,157 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * Modifications copyright (c) 2018 Nokia - * =================================================================== - * - */ - -package org.onap.clamp.util; - -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; - -import java.io.BufferedReader; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.HttpURLConnection; -import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.util.Base64; - -import javax.net.ssl.HttpsURLConnection; -import javax.ws.rs.BadRequestException; - -import org.apache.commons.io.IOUtils; -import org.onap.clamp.clds.util.LoggingUtils; -import org.springframework.stereotype.Component; - -/** - * This class manages the HTTP and HTTPS connections. - */ -@Component -public class HttpConnectionManager { - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(HttpConnectionManager.class); - protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); - private static final String REQUEST_FAILED_LOG = "Request Failed - response payload="; - - private String doHttpsQuery(URL url, String requestMethod, String payload, String contentType, String target, - String userName, String password) throws IOException { - LoggingUtils utils = new LoggingUtils(logger); - logger.info("Using HTTPS URL:" + url.toString()); - HttpsURLConnection secureConnection = (HttpsURLConnection) url.openConnection(); - secureConnection = utils.invokeHttps(secureConnection, target, requestMethod); - secureConnection.setRequestMethod(requestMethod); - if (userName != null && password != null) { - secureConnection.setRequestProperty("Authorization", "Basic " - + Base64.getEncoder().encodeToString((userName + ":" + password).getBytes(StandardCharsets.UTF_8))); - } - if (payload != null && contentType != null) { - secureConnection.setRequestProperty("Content-Type", contentType); - secureConnection.setDoOutput(true); - try (DataOutputStream wr = new DataOutputStream(secureConnection.getOutputStream())) { - wr.writeBytes(payload); - wr.flush(); - } - } - int responseCode = secureConnection.getResponseCode(); - logger.info("Response Code: " + responseCode); - if (responseCode < 400) { - try (BufferedReader reader = new BufferedReader(new InputStreamReader(secureConnection.getInputStream()))) { - String responseStr = IOUtils.toString(reader); - logger.info("Response Content: " + responseStr); - return responseStr; - } - } else { - // In case of connection failure just check whether there is a - // content or not - try (BufferedReader reader = new BufferedReader(new InputStreamReader(secureConnection.getErrorStream()))) { - String responseStr = IOUtils.toString(reader); - logger.error(REQUEST_FAILED_LOG + responseStr); - throw new BadRequestException(responseStr); - } - } - } - - private String doHttpQuery(URL url, String requestMethod, String payload, String contentType, String target, - String userName, String password) throws IOException { - LoggingUtils utils = new LoggingUtils(logger); - logger.info("Using HTTP URL:" + url); - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection = utils.invoke(connection, target, requestMethod); - connection.setRequestMethod(requestMethod); - if (userName != null && password != null) { - connection.setRequestProperty("Authorization", "Basic " - + Base64.getEncoder().encodeToString((userName + ":" + password).getBytes(StandardCharsets.UTF_8))); - } - if (payload != null && contentType != null) { - connection.setRequestProperty("Content-Type", contentType); - connection.setDoOutput(true); - try (DataOutputStream wr = new DataOutputStream(connection.getOutputStream())) { - wr.writeBytes(payload); - wr.flush(); - } - } - int responseCode = connection.getResponseCode(); - logger.info("Response Code: " + responseCode); - if (responseCode < 400) { - try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) { - String responseStr = IOUtils.toString(reader); - logger.info("Response Content: " + responseStr); - utils.invokeReturn(); - return responseStr; - } - } else { - // In case of connection failure just check whether there is a - // content or not - try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getErrorStream()))) { - String responseStr = IOUtils.toString(reader); - logger.error(REQUEST_FAILED_LOG + responseStr); - utils.invokeReturn(); - throw new BadRequestException(responseStr); - } - } - } - - /** - * This method does a HTTP/HTTPS query with parameters specified. - * - * @param url - * The string HTTP or HTTPS that mustr be used to connect - * @param requestMethod - * The Request Method (PUT, POST, GET, DELETE, etc ...) - * @param payload - * The payload if any, in that case an ouputstream is opened - * @param contentType - * The "application/json or application/xml, or whatever" - * @return The payload of the answer - * @throws IOException - * In case of issue with the streams - */ - public String doHttpRequest(String url, String requestMethod, String payload, String contentType, String target, - String userName, String password) throws IOException { - URL urlObj = new URL(url); - if (url.contains("https://")) { // Support for HTTPS - return doHttpsQuery(urlObj, requestMethod, payload, contentType, target, userName, password); - } else { // Support for HTTP - return doHttpQuery(urlObj, requestMethod, payload, contentType, target, userName, password); - } - } -} diff --git a/src/main/resources/application-noaaf.properties b/src/main/resources/application-noaaf.properties index 580ec3f4..79466c89 100644 --- a/src/main/resources/application-noaaf.properties +++ b/src/main/resources/application-noaaf.properties @@ -208,15 +208,10 @@ clamp.config.action.insert.test.event=false clamp.config.clds.service.cache.invalidate.after.seconds=120 #DCAE Inventory Url Properties -clamp.config.dcae.inventory.url=http://localhost:8085 +clamp.config.dcae.inventory.url=http4://localhost:8085 clamp.config.dcae.intentory.retry.interval=10000 clamp.config.dcae.intentory.retry.limit=5 -#DCAE Dispatcher Url Properties -clamp.config.dcae.dispatcher.url=http://localhost:8085 -clamp.config.dcae.dispatcher.retry.interval=20000 -clamp.config.dcae.dispatcher.retry.limit=30 - #DCAE Deployment Url Properties clamp.config.dcae.deployment.url=http4://localhost:8085 clamp.config.dcae.deployment.userName=test diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index dcad32ed..64121c94 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -219,15 +219,10 @@ clamp.config.action.insert.test.event=false clamp.config.clds.service.cache.invalidate.after.seconds=120 #DCAE Inventory Url Properties -clamp.config.dcae.inventory.url=http://dcae.api.simpledemo.onap.org:8080 +clamp.config.dcae.inventory.url=http4://dcae.api.simpledemo.onap.org:8080 clamp.config.dcae.intentory.retry.interval=10000 clamp.config.dcae.intentory.retry.limit=5 -#DCAE Dispatcher Url Properties -clamp.config.dcae.dispatcher.url=http://dcae.api.simpledemo.onap.org:8188 -clamp.config.dcae.dispatcher.retry.interval=20000 -clamp.config.dcae.dispatcher.retry.limit=30 - #DCAE Deployment Url Properties clamp.config.dcae.deployment.url=http4://dcae.api.simpledemo.onap.org:8188 clamp.config.dcae.deployment.userName=test @@ -249,7 +244,7 @@ clamp.config.cadi.keyFile=classpath:/clds/aaf/org.onap.clamp.keyfile clamp.config.cadi.cadiLoglevel=DEBUG clamp.config.cadi.cadiLatitude=10 clamp.config.cadi.cadiLongitude=10 -clamp.config.cadi.aafLocateUrl=https://aaf.api.simpledemo.onap.org:8095 +clamp.config.cadi.aafLocateUrl=https://10.0.0.106:31111 clamp.config.cadi.cadiKeystorePassword=enc:V_kq_EwDNb4itWp_lYfDGXIWJzemHGkhkZOxAQI9IHs clamp.config.cadi.cadiTruststorePassword=enc:Mj0YQqNCUKbKq2lPp1kTFQWeqLxaBXKNwd5F1yB1ukf #clamp.config.cadi.oauthTokenUrl=https://AAF_LOCATE_URL/AAF_NS.token:2.0/token diff --git a/src/main/resources/clds/camel/routes/dcae-flows.xml b/src/main/resources/clds/camel/routes/dcae-flows.xml index 46935819..fb3bc90e 100644 --- a/src/main/resources/clds/camel/routes/dcae-flows.xml +++ b/src/main/resources/clds/camel/routes/dcae-flows.xml @@ -177,6 +177,40 @@ + + + + + + + + GET + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/clds/camel/routes/flexible-flow.xml b/src/main/resources/clds/camel/routes/flexible-flow.xml deleted file mode 100644 index bc79fc21..00000000 --- a/src/main/resources/clds/camel/routes/flexible-flow.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - ${exchangeProperty.actionCd} == 'SUBMIT' || - ${exchangeProperty.actionCd} == 'RESUBMIT' - - - - - - 30000 - - - - - - - ${exchangeProperty.actionCd} == 'DELETE' - - - - - 30000 - - - - - - - - ${exchangeProperty.actionCd} == 'UPDATE' - - - - - 30000 - - - - - - - ${exchangeProperty.actionCd} == 'STOP' - - - - - - - ${exchangeProperty.actionCd} == 'RESTART' - - - - - - - - \ No newline at end of file diff --git a/src/test/java/org/onap/clamp/clds/client/DcaeInventoryServicesTest.java b/src/test/java/org/onap/clamp/clds/client/DcaeInventoryServicesTest.java deleted file mode 100644 index a66694cd..00000000 --- a/src/test/java/org/onap/clamp/clds/client/DcaeInventoryServicesTest.java +++ /dev/null @@ -1,125 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019 Huawei Technologies Co., Ltd. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - * ================================================================================ - * - */ - -package org.onap.clamp.clds.client; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.core.Is.is; -import static org.hamcrest.core.IsNull.nullValue; -import static org.onap.clamp.clds.client.DcaeInventoryServices.DCAE_INVENTORY_RETRY_INTERVAL; -import static org.onap.clamp.clds.client.DcaeInventoryServices.DCAE_INVENTORY_RETRY_LIMIT; -import static org.onap.clamp.clds.client.DcaeInventoryServices.DCAE_INVENTORY_URL; -import static org.powermock.api.mockito.PowerMockito.when; - -import java.io.IOException; - -import org.json.simple.parser.ParseException; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; -import org.onap.clamp.clds.config.ClampProperties; -import org.onap.clamp.clds.model.dcae.DcaeInventoryResponse; -import org.onap.clamp.clds.model.dcae.DcaeLinks; -import org.onap.clamp.clds.model.dcae.DcaeOperationStatusResponse; -import org.onap.clamp.util.HttpConnectionManager; - - -@RunWith(MockitoJUnitRunner.class) -public class DcaeInventoryServicesTest { - - @Mock - private HttpConnectionManager httpConnectionManager; - - @Mock - private ClampProperties properties; - - private static final String resourceUuid = "023a3f0d-1161-45ff-b4cf-8918a8ccf3ad"; - private static final String serviceUuid = "4cc5b45a-1f63-4194-8100-cd8e14248c92"; - private static final String artifactName = "tca_2.yaml"; - private static final String queryString = "?asdcResourceId=" + resourceUuid + "&asdcServiceId=" + serviceUuid - + "&typeName=" + artifactName; - private static final String url = "http://localhost:8085" + "/dcae-service-types" + queryString; - - @Test - public void testDcaeInventoryResponse() throws ParseException, InterruptedException, IOException { - when(properties.getStringValue(DCAE_INVENTORY_URL)).thenReturn("http://localhost:8085"); - when(properties.getStringValue(DCAE_INVENTORY_RETRY_LIMIT)).thenReturn("1"); - when(properties.getStringValue(DCAE_INVENTORY_RETRY_INTERVAL)).thenReturn("100"); - String responseStr = "{\"totalCount\":1, " - + "\"items\":[{\"typeId\":\"typeId-32147723-d323-48f9-a325-bcea8d728025\"," - + " \"typeName\":\"typeName-32147723-d323-48f9-a325-bcea8d728025\"}]}"; - when(httpConnectionManager.doHttpRequest(url, "GET", null, null, - "DCAE", null, null)) - .thenReturn(responseStr); - - DcaeInventoryServices services = new DcaeInventoryServices(properties, - httpConnectionManager); - DcaeInventoryResponse response = services.getDcaeInformation(artifactName, serviceUuid, resourceUuid); - assertThat(response.getTypeId(),is("typeId-32147723-d323-48f9-a325-bcea8d728025")); - assertThat(response.getTypeName(),is("typeName-32147723-d323-48f9-a325-bcea8d728025")); - } - - @Test - public void testDcaeInventoryResponseWithZeroCount() throws ParseException, InterruptedException, IOException { - when(properties.getStringValue(DCAE_INVENTORY_URL)).thenReturn("http://localhost:8085"); - when(properties.getStringValue(DCAE_INVENTORY_RETRY_LIMIT)).thenReturn("1"); - when(properties.getStringValue(DCAE_INVENTORY_RETRY_INTERVAL)).thenReturn("100"); - when(httpConnectionManager.doHttpRequest(url, "GET", null, null, - "DCAE", null, null)) - .thenReturn("{\"totalCount\":0}\"}]}"); - DcaeInventoryServices services = new DcaeInventoryServices(properties, - httpConnectionManager); - DcaeInventoryResponse response = services.getDcaeInformation(artifactName, serviceUuid, resourceUuid); - assertThat(response, nullValue()); - } - - @Test - public void testDcaeInventoryResponsePojo() { - DcaeInventoryResponse response = new DcaeInventoryResponse(); - response.setTypeId("typeId-32147723-d323-48f9-a325-bcea8d728025"); - response.setTypeName("typeName-32147723-d323-48f9-a325-bcea8d728025"); - assertThat(response.getTypeId(),is("typeId-32147723-d323-48f9-a325-bcea8d728025")); - assertThat(response.getTypeName(),is("typeName-32147723-d323-48f9-a325-bcea8d728025")); - } - - @Test - public void testDcaeOperationStatusResponsePojo() { - DcaeLinks links = new DcaeLinks(); - links.setSelf("selfUrl"); - links.setStatus("state"); - links.setUninstall("uninstallUrl"); - DcaeOperationStatusResponse response = new DcaeOperationStatusResponse(); - response.setRequestId("testId"); - response.setError("errorMessage"); - response.setLinks(links); - response.setOperationType("install"); - response.setStatus("state"); - assertThat(response.getRequestId(),is("testId")); - assertThat(response.getError(),is("errorMessage")); - assertThat(response.getOperationType(),is("install")); - assertThat(response.getStatus(),is("state")); - assertThat(response.getLinks().getSelf(),is("selfUrl")); - assertThat(response.getLinks().getStatus(),is("state")); - assertThat(response.getLinks().getUninstall(),is("uninstallUrl")); - } -} \ No newline at end of file diff --git a/src/test/java/org/onap/clamp/clds/it/HttpConnectionManagerItCase.java b/src/test/java/org/onap/clamp/clds/it/HttpConnectionManagerItCase.java deleted file mode 100644 index beb07504..00000000 --- a/src/test/java/org/onap/clamp/clds/it/HttpConnectionManagerItCase.java +++ /dev/null @@ -1,146 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * Modifications copyright (c) 2018 Nokia - * =================================================================== - * - */ - -package org.onap.clamp.clds.it; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import java.io.IOException; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; - -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLSession; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; -import javax.ws.rs.BadRequestException; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.onap.clamp.util.HttpConnectionManager; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; - -/** - * Test HTTP and HTTPS settings + redirection of HTTP to HTTPS. - */ -@RunWith(SpringRunner.class) -@SpringBootTest(webEnvironment = WebEnvironment.DEFINED_PORT) -@TestPropertySource(locations = "classpath:https/https-test.properties") -public class HttpConnectionManagerItCase { - - @Value("${server.port}") - private String httpsPort; - @Value("${server.http-to-https-redirection.port}") - private String httpPort; - - @Autowired - HttpConnectionManager httpConnectionManager; - - private static TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { - - @Override - public java.security.cert.X509Certificate[] getAcceptedIssuers() { - return null; - } - - @Override - public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { - } - - @Override - public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { - } - } }; - - private void enableSslNoCheck() throws NoSuchAlgorithmException, KeyManagementException { - SSLContext sc = SSLContext.getInstance("SSL"); - sc.init(null, trustAllCerts, new java.security.SecureRandom()); - HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); - HostnameVerifier allHostsValid = new HostnameVerifier() { - - @Override - public boolean verify(String hostname, SSLSession session) { - return true; - } - }; - // set the allTrusting verifier - HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); - } - - @Before - public void setupEnvBeforeTest() throws KeyManagementException, NoSuchAlgorithmException { - enableSslNoCheck(); - } - - @Test - public void testHttpGet() throws Exception { - String response = httpConnectionManager.doHttpRequest("http://localhost:" + this.httpPort + "/swagger.html", - "GET", null, null, "DCAE", null, null); - assertNotNull(response); - // Should be a redirection so 302, so empty - assertTrue(response.isEmpty()); - } - - @Test - public void testHttpsGet() throws Exception { - String response = httpConnectionManager.doHttpRequest("https://localhost:" + this.httpsPort + "/swagger.html", - "GET", null, null, "DCAE", null, null); - assertNotNull(response); - // Should contain something - assertTrue(!response.isEmpty()); - } - - @Test(expected = BadRequestException.class) - public void testHttpsGet404() throws IOException { - httpConnectionManager.doHttpRequest("https://localhost:" + this.httpsPort + "/swaggerx.html", "GET", null, null, - "DCAE", null, null); - fail("Should have raised an BadRequestException"); - } - - @Test(expected = BadRequestException.class) - public void testHttpsPost404() throws IOException { - httpConnectionManager.doHttpRequest("https://localhost:" + this.httpsPort + "/swaggerx.html", "POST", "", - "application/json", "DCAE", null, null); - fail("Should have raised an BadRequestException"); - } - - @Test(expected = BadRequestException.class) - public void testHttpException() throws IOException { - httpConnectionManager.doHttpRequest("http://localhost:" + this.httpsPort + "/swagger.html", "GET", null, null, - "DCAE", null, null); - fail("Should have raised an BadRequestException"); - } -} diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties index b23f77ac..bbade742 100644 --- a/src/test/resources/application.properties +++ b/src/test/resources/application.properties @@ -208,15 +208,10 @@ clamp.config.action.insert.test.event=false clamp.config.clds.service.cache.invalidate.after.seconds=120 #DCAE Inventory Url Properties -clamp.config.dcae.inventory.url=http://localhost:${docker.http-cache.port.host} +clamp.config.dcae.inventory.url=http4://localhost:${docker.http-cache.port.host} clamp.config.dcae.intentory.retry.interval=100 clamp.config.dcae.intentory.retry.limit=1 -#DCAE Dispatcher Url Properties -clamp.config.dcae.dispatcher.url=http://localhost:${docker.http-cache.port.host} -clamp.config.dcae.dispatcher.retry.interval=100 -clamp.config.dcae.dispatcher.retry.limit=1 - #DCAE Deployment Url Properties clamp.config.dcae.deployment.url=http4://localhost:${docker.http-cache.port.host} clamp.config.dcae.deployment.userName=test diff --git a/src/test/resources/clds/camel/rest/clamp-api-v2.xml b/src/test/resources/clds/camel/rest/clamp-api-v2.xml new file mode 100644 index 00000000..cf99625e --- /dev/null +++ b/src/test/resources/clds/camel/rest/clamp-api-v2.xml @@ -0,0 +1,617 @@ + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + ${body} + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + ${body} + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + ${body} + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + + + + false + + + + + ${exchangeProperty[loopObject].getMicroServicePolicies()} + + + ${body} + + + + false + + + + + + + ${exchangeProperty[loopObject].getOperationalPolicies()} + + + ${body} + + + + false + + + + + + + + ${exchangeProperty[operationalPolicy].createGuardPolicyPayloads().entrySet()} + + + ${body} + + + + + false + + + + + + + + 3000 + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + + + + + + ${exchangeProperty[loopObject].getMicroServicePolicies()} + + + ${body} + + + + + + + + ${exchangeProperty[loopObject].getOperationalPolicies()} + + + ${body} + + + + + + ${exchangeProperty[operationalPolicy].createGuardPolicyPayloads().entrySet()} + + + ${body} + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + java.lang.Exception + + false + + + + + + + + ${exchangeProperty[loopObject]} + + + + + + + diff --git a/src/test/resources/clds/camel/rest/clds-services.xml b/src/test/resources/clds/camel/rest/clds-services.xml new file mode 100644 index 00000000..dd3a4bfd --- /dev/null +++ b/src/test/resources/clds/camel/rest/clds-services.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + ${body} == 'NOT-OK' + + 404 + + + + + + + + + + + diff --git a/src/test/resources/clds/camel/routes/dcae-flows.xml b/src/test/resources/clds/camel/routes/dcae-flows.xml new file mode 100644 index 00000000..fb3bc90e --- /dev/null +++ b/src/test/resources/clds/camel/routes/dcae-flows.xml @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + PUT + + + application/json + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + + + + + + + + DEPLOY loop status + (Dep-id:${exchangeProperty[dcaeDeploymentId]}, + StatusUrl:${exchangeProperty[dcaeStatusUrl]}) + + + + DCAE + + + + + + + + + + + + + ${exchangeProperty[loopObject].getDcaeDeploymentId()} + != null + + + + + + + DELETE + + + application/json + + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + + + + + + + + UNDEPLOY loop status + + + DCAE + + + + + + + + + + + + + + + + + + + GET + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + DCAE deployment status + + + DCAE + + + + + + + + + + + + GET + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/clds/camel/routes/flexible-flow.xml b/src/test/resources/clds/camel/routes/flexible-flow.xml deleted file mode 100644 index 2103b4ac..00000000 --- a/src/test/resources/clds/camel/routes/flexible-flow.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - ${exchangeProperty.actionCd} == 'SUBMIT' || ${exchangeProperty.actionCd} == 'RESUBMIT' - - - - - 30000 - - - - - - - ${exchangeProperty.actionCd} == 'DELETE' - - - - - 30000 - - - - - - - - ${exchangeProperty.actionCd} == 'UPDATE' - - - - - 30000 - - - - - - - ${exchangeProperty.actionCd} == 'STOP' - - - - - - - ${exchangeProperty.actionCd} == 'RESTART' - - - - - - - - - \ No newline at end of file diff --git a/src/test/resources/clds/camel/routes/loop-flows.xml b/src/test/resources/clds/camel/routes/loop-flows.xml new file mode 100644 index 00000000..036e8efc --- /dev/null +++ b/src/test/resources/clds/camel/routes/loop-flows.xml @@ -0,0 +1,222 @@ + + + + + ${header.loopName} + + + + + + + ${exchangeProperty[loopObject]} == null + + 404 + + + + + + + + + + ${exchangeProperty[loopObject].getComponent('POLICY')} + + + + true + + + true + + + + ${exchangeProperty[loopObject].getMicroServicePolicies()} + + + ${body.getName()} + + + ${body.getModelType()} + + + 1.0.0 + + + null + + + + + + + ${exchangeProperty[loopObject].getOperationalPolicies()} + + + ${body.getName()} + + + onap.policies.controlloop.Operational + + + 1 + + + ${body} + + + null + + + + + + ${exchangeProperty[operationalPolicy].createGuardPolicyPayloads().entrySet()} + + + ${body.getKey()} + + + onap.policies.controlloop.Guard + + + 1 + + + null + + + + + + + ${exchangeProperty[policyComponent].getState()} + + + + + + + + + + ${exchangeProperty[loopObject].getComponent('DCAE')} + + + ${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()} + != null + + + false + + + + ${header.CamelHttpResponseCode} == 200 + + + + + + + + + ${exchangeProperty[dcaeComponent].computeState(*)} + + + + + + + + + + + + ${exchangeProperty['dcaeState'].getStateName()} == + 'BLUEPRINT_DEPLOYED' and ${exchangeProperty['policyState'].getStateName()} + == 'NOT_SENT' + + + + + ${exchangeProperty['dcaeState'].getStateName()} == 'IN_ERROR' or + ${exchangeProperty['dcaeState'].getStateName()} == + 'MICROSERVICE_INSTALLATION_FAILED' + + + + + ${exchangeProperty['dcaeState'].getStateName()} == + 'MICROSERVICE_UNINSTALLATION_FAILED' or + ${exchangeProperty['policyState'].getStateName()} == 'IN_ERROR' + + + + + ${exchangeProperty['dcaeState'].getStateName()} == + 'MICROSERVICE_INSTALLED_SUCCESSFULLY' and + ${exchangeProperty['policyState'].getStateName()} == 'SENT_AND_DEPLOYED' + + + + + ${exchangeProperty['dcaeState'].getStateName()} == + 'MICROSERVICE_INSTALLED_SUCCESSFULLY' and + ${exchangeProperty['policyState'].getStateName()} == 'SENT' + + + + + ${exchangeProperty['dcaeState'].getStateName()} == + 'BLUEPRINT_DEPLOYED' or ${exchangeProperty['dcaeState'].getStateName()} == + 'MICROSERVICE_UNINSTALLED_SUCCESSFULLY' and + ${exchangeProperty['policyState'].getStateName()} == 'SENT_AND_DEPLOYED' + + + + + ${exchangeProperty['dcaeState'].getStateName()} == + 'PROCESSING_MICROSERVICE_INSTALLATION' or + ${exchangeProperty['dcaeState'].getStateName()} == + 'PROCESSING_MICROSERVICE_UNINSTALLATION' and + ${exchangeProperty['policyState'].getStateName()} == 'SENT_AND_DEPLOYED' + + + + + ${exchangeProperty['dcaeState'].getStateName()} == + 'MICROSERVICE_INSTALLED_SUCCESSFULLY' and + ${exchangeProperty['policyState'].getStateName()} != 'NOT_SENT' + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/clds/camel/routes/policy-flows.xml b/src/test/resources/clds/camel/routes/policy-flows.xml new file mode 100644 index 00000000..75ac66c6 --- /dev/null +++ b/src/test/resources/clds/camel/routes/policy-flows.xml @@ -0,0 +1,520 @@ + + + + + + false + + + + ${header.CamelHttpResponseCode} != 200 + + false + + + + + false + + + + ${header.CamelHttpResponseCode} != 200 + + false + + + + + ${exchangeProperty[policyComponent].computeState(*)} + + + + + + + + + + GET + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[policyName]} GET + Policy status + + + + POLICY + + + + + + + + + + + + + GET + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[policyName]} GET Policy deployment + status + + + + POLICY + + + + + + + + + + + + ${exchangeProperty[microServicePolicy].createPolicyPayload()} + + + + POST + + + application/json + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[microServicePolicy].getName()} creation + status + + + + POLICY + + + + + + + + + + + + + null + + + DELETE + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + ${exchangeProperty[microServicePolicy].getName()} removal + status + + + + POLICY + + + + + + + + + + + + + ${exchangeProperty[operationalPolicy].createPolicyPayload()} + + + + POST + + + application/json + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[operationalPolicy].getName()} creation + status + + + + POLICY + + + + + + + + + + + + + null + + + DELETE + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[operationalPolicy].getName()} removal + status + + + + POLICY + + + + + + + + + + + + + ${exchangeProperty[guardPolicy].getValue()} + + + + POST + + + application/json + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + ${exchangeProperty[guardPolicy].getKey()} creation status + + + + POLICY + + + + + + + + + + + + + null + + + DELETE + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + ${exchangeProperty[guardPolicy].getKey()} removal status + + + + POLICY + + + + + + + + + + + + + ${exchangeProperty[loopObject].getComponent("POLICY").createPoliciesPayloadPdpGroup(exchangeProperty[loopObject])} + + + + POST + + + application/json + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + + + + + PDP Group push ALL status + + + POLICY + + + + + + + + + + + + + ${exchangeProperty[loopObject].getComponent("POLICY").listPolicyNamesPdpGroup(exchangeProperty[loopObject])} + + + ${body} + + + null + + + DELETE + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + + + ${exchangeProperty[policyName]} PDP Group removal status + + + + POLICY + + + + + java.lang.Exception + + false + + + PDP Group removal, Error reported: ${exception} + + + POLICY + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/clds/camel/routes/utils-flows.xml b/src/test/resources/clds/camel/routes/utils-flows.xml new file mode 100644 index 00000000..bbbc46a2 --- /dev/null +++ b/src/test/resources/clds/camel/routes/utils-flows.xml @@ -0,0 +1,28 @@ + + + + + true + + + + + + + + + ${exchangeProperty[logComponent]} == null + + + + + + null + + + + + \ No newline at end of file