From faf64da8b0307b6c0afa6637617f61c7c48bb8e2 Mon Sep 17 00:00:00 2001 From: efiacor Date: Mon, 19 Dec 2022 23:27:29 +0000 Subject: [PATCH] [DMAAP-DR-PROV] Remove aaf & cadi Signed-off-by: efiacor Change-Id: I610251e4b148620a6d44004efbe933e7acede26d Issue-ID: DMAAP-1573 --- .../docker-compose/provserver.properties | 1 - datarouter-prov/pom.xml | 23 -- .../authz/impl/AuthRespSupplementImpl.java | 71 ----- .../datarouter/authz/impl/ProvAuthorizer.java | 1 - .../dmaap/datarouter/provisioning/BaseServlet.java | 112 -------- .../datarouter/provisioning/DRFeedsServlet.java | 59 +--- .../dmaap/datarouter/provisioning/FeedServlet.java | 65 ----- .../datarouter/provisioning/InternalServlet.java | 2 +- .../dmaap/datarouter/provisioning/ProvRunner.java | 23 +- .../dmaap/datarouter/provisioning/ProvServer.java | 37 +-- .../datarouter/provisioning/ProxyServlet.java | 33 +-- .../datarouter/provisioning/SubscribeServlet.java | 60 ---- .../provisioning/SubscriptionServlet.java | 63 ----- .../dmaap/datarouter/provisioning/beans/Feed.java | 20 +- .../provisioning/beans/Subscription.java | 24 +- .../provisioning/utils/AafPropsUtils.java | 83 ------ .../datarouter/provisioning/utils/DRRouteCLI.java | 15 +- .../provisioning/utils/ProvTlsManager.java | 162 +++++++++++ .../provisioning/utils/SynchronizerTask.java | 29 +- .../provisioning/utils/URLUtilities.java | 3 +- .../resources/aaf/org.onap.dmaap-dr.cred.props | 17 -- .../main/resources/aaf/org.onap.dmaap-dr.keyfile | 27 -- .../resources/aaf/org.onap.dmaap-dr.location.props | 8 - .../src/main/resources/aaf/org.onap.dmaap-dr.p12 | Bin 4217 -> 0 bytes .../src/main/resources/aaf/org.onap.dmaap-dr.props | 24 -- .../main/resources/aaf/org.onap.dmaap-dr.trust.jks | Bin 1413 -> 0 bytes .../src/main/resources/misc/sql_init_01.sql | 9 +- .../src/main/resources/provserver.properties | 13 +- .../java/datarouter/provisioning/DbTestData.java | 109 -------- .../datarouter/provisioning/IntegrationSuite.java | 50 ---- .../provisioning/IntegrationTestBase.java | 178 ------------ .../provisioning/IntegrationTestCleanup.java | 85 ------ .../provisioning/IntegrationTestDrFeedsDelete.java | 58 ---- .../provisioning/IntegrationTestDrFeedsGet.java | 207 -------------- .../provisioning/IntegrationTestDrFeedsPost.java | 308 --------------------- .../provisioning/IntegrationTestDrFeedsPut.java | 58 ---- .../provisioning/IntegrationTestFeedDelete.java | 100 ------- .../provisioning/IntegrationTestFeedPut.java | 214 -------------- .../provisioning/IntegrationTestInternalGet.java | 106 ------- .../provisioning/IntegrationTestInternalMisc.java | 155 ----------- .../provisioning/IntegrationTestLogGet.java | 205 -------------- .../provisioning/IntegrationTestPublish.java | 126 --------- .../provisioning/IntegrationTestRleBitSet.java | 289 ------------------- .../provisioning/IntegrationTestRouteApi.java | 28 -- .../provisioning/IntegrationTestSubscribePost.java | 192 ------------- .../test/java/datarouter/provisioning/package.html | 29 -- .../datarouter/provisioning/BaseServletTest.java | 20 -- .../provisioning/DRFeedsServletTest.java | 117 +------- .../datarouter/provisioning/FeedServletTest.java | 77 +----- .../datarouter/provisioning/ProvServerTest.java | 24 +- .../provisioning/SubscribeServletTest.java | 114 +------- .../provisioning/SubscriptionServletTest.java | 77 +----- .../datarouter/provisioning/beans/FeedTest.java | 14 +- .../provisioning/utils/AafPropsUtilsTest.java | 63 ----- .../provisioning/utils/ProvTlsManagerTest.java | 63 +++++ .../provisioning/utils/UrlUtilsTest.java | 62 +++++ .../resources/aaf/org.onap.dmaap-dr.cred.props | 17 -- .../test/resources/aaf/org.onap.dmaap-dr.keyfile | 27 -- .../resources/aaf/org.onap.dmaap-dr.location.props | 8 - .../src/test/resources/aaf/org.onap.dmaap-dr.p12 | Bin 4217 -> 0 bytes .../src/test/resources/aaf/org.onap.dmaap-dr.props | 24 -- .../test/resources/aaf/org.onap.dmaap-dr.trust.jks | Bin 1413 -> 0 bytes .../resources/certs/org.onap.dmaap-dr-prov.p12 | Bin 0 -> 4596 bytes .../src/test/resources/certs/truststore.jks | Bin 0 -> 3234 bytes datarouter-prov/src/test/resources/create.sql | 31 +-- .../src/test/resources/h2Database.properties | 8 +- .../resources/h2DatabaseTlsDisabled.properties | 36 --- .../src/test/resources/integration_test.properties | 5 - datarouter-prov/src/test/resources/prov_data.json | 2 - datarouter-prov/src/test/resources/sql_init_01.sql | 7 +- 70 files changed, 396 insertions(+), 3881 deletions(-) delete mode 100644 datarouter-prov/src/main/java/org/onap/dmaap/datarouter/authz/impl/AuthRespSupplementImpl.java delete mode 100644 datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/AafPropsUtils.java create mode 100644 datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/ProvTlsManager.java delete mode 100644 datarouter-prov/src/main/resources/aaf/org.onap.dmaap-dr.cred.props delete mode 100644 datarouter-prov/src/main/resources/aaf/org.onap.dmaap-dr.keyfile delete mode 100644 datarouter-prov/src/main/resources/aaf/org.onap.dmaap-dr.location.props delete mode 100644 datarouter-prov/src/main/resources/aaf/org.onap.dmaap-dr.p12 delete mode 100644 datarouter-prov/src/main/resources/aaf/org.onap.dmaap-dr.props delete mode 100644 datarouter-prov/src/main/resources/aaf/org.onap.dmaap-dr.trust.jks delete mode 100644 datarouter-prov/src/test/java/datarouter/provisioning/DbTestData.java delete mode 100644 datarouter-prov/src/test/java/datarouter/provisioning/IntegrationSuite.java delete mode 100755 datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestBase.java delete mode 100644 datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestCleanup.java delete mode 100644 datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestDrFeedsDelete.java delete mode 100644 datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestDrFeedsGet.java delete mode 100644 datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestDrFeedsPost.java delete mode 100644 datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestDrFeedsPut.java delete mode 100644 datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestFeedDelete.java delete mode 100644 datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestFeedPut.java delete mode 100644 datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestInternalGet.java delete mode 100644 datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestInternalMisc.java delete mode 100644 datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestLogGet.java delete mode 100644 datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestPublish.java delete mode 100644 datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestRleBitSet.java delete mode 100644 datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestRouteApi.java delete mode 100644 datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestSubscribePost.java delete mode 100644 datarouter-prov/src/test/java/datarouter/provisioning/package.html delete mode 100644 datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/utils/AafPropsUtilsTest.java create mode 100644 datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/utils/ProvTlsManagerTest.java create mode 100644 datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/utils/UrlUtilsTest.java delete mode 100644 datarouter-prov/src/test/resources/aaf/org.onap.dmaap-dr.cred.props delete mode 100644 datarouter-prov/src/test/resources/aaf/org.onap.dmaap-dr.keyfile delete mode 100644 datarouter-prov/src/test/resources/aaf/org.onap.dmaap-dr.location.props delete mode 100644 datarouter-prov/src/test/resources/aaf/org.onap.dmaap-dr.p12 delete mode 100644 datarouter-prov/src/test/resources/aaf/org.onap.dmaap-dr.props delete mode 100644 datarouter-prov/src/test/resources/aaf/org.onap.dmaap-dr.trust.jks create mode 100755 datarouter-prov/src/test/resources/certs/org.onap.dmaap-dr-prov.p12 create mode 100644 datarouter-prov/src/test/resources/certs/truststore.jks delete mode 100644 datarouter-prov/src/test/resources/h2DatabaseTlsDisabled.properties delete mode 100644 datarouter-prov/src/test/resources/integration_test.properties diff --git a/csit/scripts/dmaap-datarouter/docker-compose/provserver.properties b/csit/scripts/dmaap-datarouter/docker-compose/provserver.properties index caf8240c..4260287b 100755 --- a/csit/scripts/dmaap-datarouter/docker-compose/provserver.properties +++ b/csit/scripts/dmaap-datarouter/docker-compose/provserver.properties @@ -27,7 +27,6 @@ org.onap.dmaap.datarouter.provserver.dbscripts = /opt/app/datartr/etc/ org.onap.dmaap.datarouter.provserver.logretention = 30 org.onap.dmaap.datarouter.provserver.isaddressauthenabled = false -org.onap.dmaap.datarouter.provserver.cadi.enabled = false org.onap.dmaap.datarouter.provserver.tlsenabled = false org.onap.dmaap.datarouter.nodeserver.https.port = 8443 org.onap.dmaap.datarouter.nodeserver.http.port = 8080 diff --git a/datarouter-prov/pom.xml b/datarouter-prov/pom.xml index 04170735..d43ae688 100755 --- a/datarouter-prov/pom.xml +++ b/datarouter-prov/pom.xml @@ -100,10 +100,6 @@ - - org.onap.aaf.authz - aaf-cadi-core - org.eclipse.jetty jetty-server @@ -402,31 +398,12 @@ **/** - aaf/** docker/** - - copy-aaf-props - validate - - copy-resources - - - ${basedir}/target/docker-stage/opt/app/osaaf/local - - - ${basedir}/src/main/resources/aaf - - **/** - - - - - diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/authz/impl/AuthRespSupplementImpl.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/authz/impl/AuthRespSupplementImpl.java deleted file mode 100644 index b61c00e5..00000000 --- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/authz/impl/AuthRespSupplementImpl.java +++ /dev/null @@ -1,71 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START================================================== - * * org.onap.dmaap - * * =========================================================================== - * * Copyright © 2017 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==================================================== - * * - * * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * * - ******************************************************************************/ - - -package org.onap.dmaap.datarouter.authz.impl; - -import java.util.HashMap; -import java.util.Map; - -import org.onap.dmaap.datarouter.authz.AuthorizationResponseSupplement; - -/** Carries supplementary information--an advice or an obligation--from the authorization response returned - * by a XACML Policy Decision Point. Not used in Data Router R1. - * @author J. F. Lucas - * - */ -public class AuthRespSupplementImpl implements AuthorizationResponseSupplement { - - private String id; - private Map attributes; - - /** Constructor, available within the package. - * - * @param id The identifier for the advice or obligation element - * @param attributes The attributes (name-value pairs) for the advice or obligation element. - */ - AuthRespSupplementImpl(String id, Map attributes) { - this.id = id; - this.attributes = new HashMap<>(attributes); - } - - /** Return the identifier for the supplementary information element. - * - * @return a String containing the identifier. - */ - @Override - public String getId() { - return id; - } - - /** Return the attributes for the supplementary information element, as a Map in which - * keys represent attribute identifiers and values represent attribute values. - * - * @return attributes for the supplementary information element. - */ - @Override - public Map getAttributes() { - return attributes; - } - -} diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/authz/impl/ProvAuthorizer.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/authz/impl/ProvAuthorizer.java index 48e31bfe..97cdc120 100644 --- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/authz/impl/ProvAuthorizer.java +++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/authz/impl/ProvAuthorizer.java @@ -106,7 +106,6 @@ public class ProvAuthorizer implements Authorizer { decision = allowSubAccess(resource, method, subject, subjectgroup); break; default: - decision = false; break; } } diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/BaseServlet.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/BaseServlet.java index 1942b148..c37c0a7d 100755 --- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/BaseServlet.java +++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/BaseServlet.java @@ -85,23 +85,6 @@ public class BaseServlet extends HttpServlet implements ProvDataProvider { public static final String BEHALF_HEADER = "X-DMAAP-DR-ON-BEHALF-OF"; - public static final String EXCLUDE_AAF_HEADER = "X-EXCLUDE-AAF"; - - private static final String AAF_CADI_FEED_TYPE = "org.onap.dmaap.datarouter.provserver.aaf.feed.type"; - private static final String AAF_CADI_SUB_TYPE = "org.onap.dmaap.datarouter.provserver.aaf.sub.type"; - private static final String AAF_INSTANCE = "org.onap.dmaap.datarouter.provserver.aaf.instance"; - private static final String AAF_CADI_FEED = "org.onap.dmaap-dr.feed"; - private static final String AAF_CADI_SUB = "org.onap.dmaap-dr.sub"; - - static final String CREATE_PERMISSION = "create"; - static final String EDIT_PERMISSION = "edit"; - static final String DELETE_PERMISSION = "delete"; - private static final String PUBLISH_PERMISSION = "publish"; - private static final String SUSPEND_PERMISSION = "suspend"; - private static final String RESTORE_PERMISSION = "restore"; - private static final String SUBSCRIBE_PERMISSION = "subscribe"; - static final String APPROVE_SUB_PERMISSION = "approveSub"; - static final String FEED_BASECONTENT_TYPE = "application/vnd.dmaap-dr.feed"; public static final String FEED_CONTENT_TYPE = "application/vnd.dmaap-dr.feed; version=2.0"; public static final String FEEDFULL_CONTENT_TYPE = "application/vnd.dmaap-dr.feed-full; version=2.0"; @@ -261,9 +244,6 @@ public class BaseServlet extends HttpServlet implements ProvDataProvider { private static String isAddressAuthEnabled = ProvRunner.getProvProperties() .getProperty("org.onap.dmaap.datarouter.provserver.isaddressauthenabled", "false"); - static String isCadiEnabled = ProvRunner.getProvProperties() - .getProperty("org.onap.dmaap.datarouter.provserver.cadi.enabled", "false"); - /** * Initialize data common to all the provisioning server servlets. */ @@ -959,96 +939,4 @@ public class BaseServlet extends HttpServlet implements ProvDataProvider { } } - - /* - * AAF changes: TDP EPIC US# 307413 - * @Method - getFeedPermission - Forming permission string for feed part to check AAF access in CADI Framework - * @Params - aafInstance Passing aafInstance as it's used in permission string - * @Params - userAction Passing CONST values to set different actions in permission string - */ - String getFeedPermission(String aafInstance, String userAction) { - try { - Properties props = ProvRunner.getProvProperties(); - String type = props.getProperty(AAF_CADI_FEED_TYPE, AAF_CADI_FEED); - String action; - switch (userAction) { - case CREATE_PERMISSION: - action = CREATE_PERMISSION; - break; - case EDIT_PERMISSION: - action = EDIT_PERMISSION; - break; - case DELETE_PERMISSION: - action = DELETE_PERMISSION; - break; - case PUBLISH_PERMISSION: - action = PUBLISH_PERMISSION; - break; - case SUSPEND_PERMISSION: - action = SUSPEND_PERMISSION; - break; - case RESTORE_PERMISSION: - action = RESTORE_PERMISSION; - break; - default: - action = "*"; - } - if (aafInstance == null || "".equals(aafInstance)) { - aafInstance = props.getProperty(AAF_INSTANCE, "org.onap.dmaap-dr.NoInstanceDefined"); - } - return type + "|" + aafInstance + "|" + action; - } catch (Exception e) { - intlogger.error("PROV7005 BaseServlet.getFeedPermission: " + e.getMessage(), e); - } - return null; - } - - /* - * AAF changes: TDP EPIC US# 307413 - * @Method - getSubscriberPermission - Forming permission string for subscription part to check - * AAF access in CADI Framework - * @Params - aafInstance Passing aafInstance as it's used in permission string - * @Params - userAction Passing CONST values to set different actions in permission string - */ - String getSubscriberPermission(String aafInstance, String userAction) { - try { - Properties props = ProvRunner.getProvProperties(); - String type = props.getProperty(AAF_CADI_SUB_TYPE, AAF_CADI_SUB); - String action; - switch (userAction) { - case SUBSCRIBE_PERMISSION: - action = SUBSCRIBE_PERMISSION; - type = props.getProperty(AAF_CADI_FEED_TYPE, AAF_CADI_FEED); - break; - case EDIT_PERMISSION: - action = EDIT_PERMISSION; - break; - case DELETE_PERMISSION: - action = DELETE_PERMISSION; - break; - case RESTORE_PERMISSION: - action = RESTORE_PERMISSION; - break; - case SUSPEND_PERMISSION: - action = SUSPEND_PERMISSION; - break; - case PUBLISH_PERMISSION: - action = PUBLISH_PERMISSION; - break; - case APPROVE_SUB_PERMISSION: - action = APPROVE_SUB_PERMISSION; - type = props.getProperty(AAF_CADI_FEED_TYPE, AAF_CADI_FEED); - break; - default: - action = "*"; - } - if (aafInstance == null || "".equals(aafInstance)) { - aafInstance = props.getProperty(AAF_INSTANCE, "org.onap.dmaap-dr.NoInstanceDefined"); - } - return type + "|" + aafInstance + "|" + action; - } catch (Exception e) { - intlogger.error("PROV7005 BaseServlet.getSubscriberPermission: " + e.getMessage(), e); - } - return null; - } } diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/DRFeedsServlet.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/DRFeedsServlet.java index a0df71ce..7266ee69 100644 --- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/DRFeedsServlet.java +++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/DRFeedsServlet.java @@ -28,11 +28,11 @@ import static org.onap.dmaap.datarouter.provisioning.utils.HttpServletUtils.send import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InvalidObjectException; import java.util.List; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import org.json.JSONObject; import org.onap.dmaap.datarouter.authz.AuthorizationResponse; import org.onap.dmaap.datarouter.provisioning.beans.EventLogRecord; @@ -289,61 +289,6 @@ public class DRFeedsServlet extends ProxyServlet { return; } - /* - * START - AAF changes - * TDP EPIC US# 307413 - * CADI code - No legacy user check as all new users will be AAF users - */ - String aafInstance = feed.getAafInstance(); - if (Boolean.parseBoolean(isCadiEnabled)) { - if ((aafInstance == null || "".equals(aafInstance) || ("legacy".equalsIgnoreCase(aafInstance)) - && "true".equalsIgnoreCase(req.getHeader(EXCLUDE_AAF_HEADER)))) { - // Check with the Authorizer - AuthorizationResponse aresp = authz.decide(req); - if (!aresp.isAuthorized()) { - message = POLICY_ENGINE; - elr.setMessage(message); - elr.setResult(HttpServletResponse.SC_FORBIDDEN); - eventlogger.error(elr.toString()); - sendResponseError(resp, HttpServletResponse.SC_FORBIDDEN, message, eventlogger); - return; - } - } else { - if ("true".equalsIgnoreCase(req.getHeader(EXCLUDE_AAF_HEADER))) { - message = "DRFeedsServlet.doPost() -Invalid request exclude_AAF should not be true if passing " - + "AAF_Instance value= " + aafInstance; - elr.setMessage(message); - elr.setResult(HttpServletResponse.SC_FORBIDDEN); - eventlogger.error(elr.toString()); - sendResponseError(resp, HttpServletResponse.SC_FORBIDDEN, message, eventlogger); - return; - } - String permission = getFeedPermission(aafInstance, BaseServlet.CREATE_PERMISSION); - eventlogger.info("DRFeedsServlet.doPost().. Permission String - " + permission); - if (!req.isUserInRole(permission)) { - message = "AAF disallows access to permission - " + permission; - elr.setMessage(message); - elr.setResult(HttpServletResponse.SC_FORBIDDEN); - eventlogger.error(elr.toString()); - sendResponseError(resp, HttpServletResponse.SC_FORBIDDEN, message, eventlogger); - return; - } - } - } else { - AuthorizationResponse aresp = authz.decide(req); - if (!aresp.isAuthorized()) { - message = POLICY_ENGINE; - elr.setMessage(message); - elr.setResult(HttpServletResponse.SC_FORBIDDEN); - eventlogger.error(elr.toString()); - sendResponseError(resp, HttpServletResponse.SC_FORBIDDEN, message, eventlogger); - return; - } - } - /* - * END - AAF changes - */ - feed.setPublisher(bhdr); // set from X-DMAAP-DR-ON-BEHALF-OF header // Check if this feed already exists diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/FeedServlet.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/FeedServlet.java index 5182cc23..475054d1 100644 --- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/FeedServlet.java +++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/FeedServlet.java @@ -28,7 +28,6 @@ import static org.onap.dmaap.datarouter.provisioning.utils.HttpServletUtils.send import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; -import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; @@ -108,37 +107,6 @@ public class FeedServlet extends ProxyServlet { sendResponseError(resp, HttpServletResponse.SC_NOT_FOUND, message, eventlogger); return; } - /* - * START - AAF changes - * TDP EPIC US# 307413 - * CADI code - check on permissions based on Legacy/AAF users to allow to delete/remove feed - */ - String aafInstance = feed.getAafInstance(); - if (aafInstance == null || "".equals(aafInstance) || "legacy".equalsIgnoreCase(aafInstance)) { - AuthorizationResponse aresp = authz.decide(req); - if (! aresp.isAuthorized()) { - message = POLICY_ENGINE; - elr.setMessage(message); - elr.setResult(HttpServletResponse.SC_FORBIDDEN); - eventlogger.error(elr.toString()); - sendResponseError(resp, HttpServletResponse.SC_FORBIDDEN, message, eventlogger); - return; - } - } else { - String permission = getFeedPermission(aafInstance, BaseServlet.DELETE_PERMISSION); - eventlogger.info("FeedServlet.doDelete().. Permission String - " + permission); - if (!req.isUserInRole(permission)) { - message = "AAF disallows access to permission - " + permission; - elr.setMessage(message); - elr.setResult(HttpServletResponse.SC_FORBIDDEN); - eventlogger.error(elr.toString()); - sendResponseError(resp, HttpServletResponse.SC_FORBIDDEN, message, eventlogger); - return; - } - } - /* - * END - AAF changes - */ // Delete FEED table entry (set DELETED flag) feed.setDeleted(true); if (doUpdate(feed)) { @@ -352,39 +320,6 @@ public class FeedServlet extends ProxyServlet { return; } - /* - * START - AAF changes - * TDP EPIC US# 307413 - * CADI code - check on permissions based on Legacy/AAF users to allow feed edit/update/modify - */ - String aafInstance = feed.getAafInstance(); - if (aafInstance == null || "".equals(aafInstance) || "legacy".equalsIgnoreCase(aafInstance)) { - // Check with the Authorizer - AuthorizationResponse aresp = authz.decide(req); - if (!aresp.isAuthorized()) { - message = POLICY_ENGINE; - elr.setMessage(message); - elr.setResult(HttpServletResponse.SC_FORBIDDEN); - eventlogger.error(elr.toString()); - sendResponseError(resp, HttpServletResponse.SC_FORBIDDEN, message, eventlogger); - return; - } - } else { - String permission = getFeedPermission(aafInstance, BaseServlet.EDIT_PERMISSION); - eventlogger.info("FeedServlet.doPut().. Permission String - " + permission); - if (!req.isUserInRole(permission)) { - message = "AAF disallows access to permission - " + permission; - elr.setMessage(message); - elr.setResult(HttpServletResponse.SC_FORBIDDEN); - eventlogger.error(elr.toString()); - sendResponseError(resp, HttpServletResponse.SC_FORBIDDEN, message, eventlogger); - return; - } - } - /* - * END - AAF changes - */ - // Update FEEDS table entries if (doUpdate(feed)) { // send response diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/InternalServlet.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/InternalServlet.java index 06959eef..0fb879e9 100644 --- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/InternalServlet.java +++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/InternalServlet.java @@ -162,7 +162,7 @@ public class InternalServlet extends ProxyServlet { private static final Object lock = new Object(); private static Integer logseq = 0; // another piece of info to make log spool file names unique //Adding EELF Logger Rally:US664892 - private static EELFLogger eelfLogger = EELFManager.getInstance() + private static final EELFLogger eelfLogger = EELFManager.getInstance() .getLogger(InternalServlet.class); /** diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/ProvRunner.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/ProvRunner.java index 747530ab..4777be8c 100644 --- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/ProvRunner.java +++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/ProvRunner.java @@ -29,16 +29,15 @@ import static java.lang.System.getProperty; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; -import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Properties; import java.util.Timer; import org.eclipse.jetty.server.Server; -import org.onap.dmaap.datarouter.provisioning.utils.AafPropsUtils; import org.onap.dmaap.datarouter.provisioning.utils.LogfileLoader; import org.onap.dmaap.datarouter.provisioning.utils.Poker; import org.onap.dmaap.datarouter.provisioning.utils.ProvDbUtils; +import org.onap.dmaap.datarouter.provisioning.utils.ProvTlsManager; import org.onap.dmaap.datarouter.provisioning.utils.PurgeLogDirTask; import org.onap.dmaap.datarouter.provisioning.utils.SynchronizerTask; @@ -76,7 +75,7 @@ public class ProvRunner { public static final EELFLogger intlogger = EELFManager.getInstance().getLogger("org.onap.dmaap.datarouter.provisioning.internal"); private static Server provServer; - private static AafPropsUtils aafPropsUtils; + private static ProvTlsManager provTlsManager; private static Properties provProperties; private static Boolean tlsEnabled; @@ -92,13 +91,11 @@ public class ProvRunner { exit(1); } if (Boolean.TRUE.equals(getTlsEnabled())) { - // Set up AAF properties + // Set up TLS Manager try { - aafPropsUtils = new AafPropsUtils(new File(getProvProperties().getProperty( - "org.onap.dmaap.datarouter.provserver.aafprops.path", - "/opt/app/osaaf/local/org.onap.dmaap-dr.props"))); - } catch (IOException e) { - intlogger.error("NODE0314 Failed to load AAF props. Exiting", e); + provTlsManager = new ProvTlsManager(ProvRunner.getProvProperties(), true); + } catch (Exception e) { + intlogger.error("NODE0314 Failed to load TLS config. Exiting", e); exit(1); } } @@ -153,10 +150,6 @@ public class ProvRunner { return provProperties; } - public static AafPropsUtils getAafPropsUtils() { - return aafPropsUtils; - } - public static Boolean getTlsEnabled() { if (tlsEnabled == null) { tlsEnabled = Boolean.parseBoolean(getProvProperties() @@ -164,4 +157,8 @@ public class ProvRunner { } return tlsEnabled; } + + public static ProvTlsManager getProvTlsManager() { + return provTlsManager; + } } diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/ProvServer.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/ProvServer.java index 9eb91178..102d4a24 100644 --- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/ProvServer.java +++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/ProvServer.java @@ -42,7 +42,6 @@ import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.util.ssl.SslContextFactory; import org.eclipse.jetty.util.thread.QueuedThreadPool; import org.jetbrains.annotations.NotNull; -import org.onap.dmaap.datarouter.provisioning.utils.AafPropsUtils; public class ProvServer { @@ -106,14 +105,16 @@ public class ProvServer { httpsConfiguration.setRequestHeaderSize(8192); // HTTPS connector try (ServerConnector httpsServerConnector = new ServerConnector(server, - new SslConnectionFactory(getSslContextFactory(provProps), HttpVersion.HTTP_1_1.asString()), + new SslConnectionFactory(getSslContextFactory(), HttpVersion.HTTP_1_1.asString()), new HttpConnectionFactory(httpsConfiguration))) { httpsServerConnector.setPort(httpsPort); httpsServerConnector.setIdleTimeout(30000); httpsServerConnector.setAcceptQueueSize(2); + intlogger.info("ProvServer: TLS enabled. Setting up both HTTP/S connectors."); server.setConnectors(new Connector[]{httpServerConnector, httpsServerConnector}); } } else { + intlogger.info("ProvServer: TLS disabled. Setting up HTTP connector only."); server.setConnectors(new Connector[]{httpServerConnector}); } server.setHandler(handlerCollection); @@ -132,18 +133,9 @@ public class ProvServer { } @NotNull - private static SslContextFactory.Server getSslContextFactory(Properties provProps) { - SslContextFactory sslContextFactory = new SslContextFactory.Server(); - sslContextFactory.setKeyStoreType(AafPropsUtils.KEYSTORE_TYPE_PROPERTY); - sslContextFactory.setKeyStorePath(ProvRunner.getAafPropsUtils().getKeystorePathProperty()); - sslContextFactory.setKeyStorePassword(ProvRunner.getAafPropsUtils().getKeystorePassProperty()); - sslContextFactory.setKeyManagerPassword(ProvRunner.getAafPropsUtils().getKeystorePassProperty()); - - sslContextFactory.setTrustStoreType(AafPropsUtils.TRUESTSTORE_TYPE_PROPERTY); - sslContextFactory.setTrustStorePath(ProvRunner.getAafPropsUtils().getTruststorePathProperty()); - sslContextFactory.setTrustStorePassword(ProvRunner.getAafPropsUtils().getTruststorePassProperty()); - - sslContextFactory.setExcludeCipherSuites( + private static SslContextFactory.Server getSslContextFactory() { + SslContextFactory.Server sslContextFactoryServer = ProvRunner.getProvTlsManager().getSslContextFactoryServer(); + sslContextFactoryServer.setExcludeCipherSuites( "SSL_RSA_WITH_DES_CBC_SHA", "SSL_DHE_RSA_WITH_DES_CBC_SHA", "SSL_DHE_DSS_WITH_DES_CBC_SHA", @@ -152,17 +144,12 @@ public class ProvServer { "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA" ); - sslContextFactory.addExcludeProtocols("SSLv3"); - sslContextFactory.setIncludeProtocols(provProps.getProperty( - "org.onap.dmaap.datarouter.provserver.https.include.protocols", - "TLSv1.1|TLSv1.2").trim().split("\\|")); - - intlogger.info("Unsupported protocols: " + String.join(",", sslContextFactory.getExcludeProtocols())); - intlogger.info("Supported protocols: " + String.join(",", sslContextFactory.getIncludeProtocols())); - intlogger.info("Unsupported ciphers: " + String.join(",", sslContextFactory.getExcludeCipherSuites())); - intlogger.info("Supported ciphers: " + String.join(",", sslContextFactory.getIncludeCipherSuites())); - - return (SslContextFactory.Server) sslContextFactory; + sslContextFactoryServer.addExcludeProtocols("SSLv3"); + intlogger.info("Unsupported protocols: " + String.join(",", sslContextFactoryServer.getExcludeProtocols())); + intlogger.info("Supported protocols: " + String.join(",", sslContextFactoryServer.getIncludeProtocols())); + intlogger.info("Unsupported ciphers: " + String.join(",", sslContextFactoryServer.getExcludeCipherSuites())); + intlogger.info("Supported ciphers: " + String.join(",", sslContextFactoryServer.getIncludeCipherSuites())); + return sslContextFactoryServer; } @NotNull diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/ProxyServlet.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/ProxyServlet.java index 49be5aa0..86b583a5 100755 --- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/ProxyServlet.java +++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/ProxyServlet.java @@ -30,14 +30,9 @@ import jakarta.servlet.ServletConfig; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.URI; -import java.security.KeyStore; -import java.security.KeyStoreException; import java.util.Collections; import java.util.List; import org.apache.commons.io.IOUtils; @@ -53,7 +48,6 @@ import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.entity.BasicHttpEntity; import org.apache.http.impl.client.AbstractHttpClient; import org.apache.http.impl.client.DefaultHttpClient; -import org.onap.dmaap.datarouter.provisioning.utils.AafPropsUtils; import org.onap.dmaap.datarouter.provisioning.utils.SynchronizerTask; import org.onap.dmaap.datarouter.provisioning.utils.URLUtilities; @@ -81,20 +75,7 @@ public class ProxyServlet extends BaseServlet { super.init(config); try { if (Boolean.TRUE.equals(ProvRunner.getTlsEnabled())) { - // Set up keystore - String type = AafPropsUtils.KEYSTORE_TYPE_PROPERTY; - String store = ProvRunner.getAafPropsUtils().getKeystorePathProperty(); - String pass = ProvRunner.getAafPropsUtils().getKeystorePassProperty(); - KeyStore keyStore = readStore(store, pass, type); - // Set up truststore - store = ProvRunner.getAafPropsUtils().getTruststorePathProperty(); - pass = ProvRunner.getAafPropsUtils().getTruststorePassProperty(); - KeyStore trustStore = readStore(store, pass, AafPropsUtils.TRUESTSTORE_TYPE_PROPERTY); - - // We are connecting with the node name, but the certificate will have the CNAME - // So we need to accept a non-matching certificate name - SSLSocketFactory socketFactory = new SSLSocketFactory(keyStore, - ProvRunner.getAafPropsUtils().getKeystorePassProperty(), trustStore); + SSLSocketFactory socketFactory = ProvRunner.getProvTlsManager().getSslSocketFactory(); socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); sch = new Scheme("https", 443, socketFactory); } else { @@ -108,18 +89,6 @@ public class ProxyServlet extends BaseServlet { intlogger.info("ProxyServlet: inited = " + inited); } - private KeyStore readStore(String store, String pass, String type) throws KeyStoreException { - KeyStore ks = KeyStore.getInstance(type); - try (FileInputStream instream = new FileInputStream(new File(store))) { - ks.load(instream, pass.toCharArray()); - } catch (FileNotFoundException fileNotFoundException) { - intlogger.error("ProxyServlet.readStore: " + fileNotFoundException.getMessage(), fileNotFoundException); - } catch (Exception x) { - intlogger.error("READING TRUSTSTORE: " + x); - } - return ks; - } - /** * Return true if the requester has NOT set the noproxy CGI variable. If they have, this indicates * they want to forcibly turn the proxy off. diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/SubscribeServlet.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/SubscribeServlet.java index 2ee58d6e..6faecff5 100644 --- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/SubscribeServlet.java +++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/SubscribeServlet.java @@ -263,66 +263,6 @@ public class SubscribeServlet extends ProxyServlet { } sub.setFeedid(feedid); sub.setSubscriber(bhdr); // set from X-DMAAP-DR-ON-BEHALF-OF header - /* - * START - AAF changes - * TDP EPIC US# 307413 - * CADI code - check on permissions based on Legacy/AAF users to allow to create/add subscription - */ - String feedAafInstance = feed.getAafInstance(); - String subAafInstance = sub.getAafInstance(); - boolean subAafLegacyEmptyOrNull = (subAafInstance == null - || "".equals(subAafInstance) || "legacy".equalsIgnoreCase(subAafInstance)); - - // This extra check added to verify AAF feed with AAF subscriber having empty aaf instance check - if (feedAafInstance == null || "".equals(feedAafInstance) || "legacy".equalsIgnoreCase(feedAafInstance)) { - if (subAafLegacyEmptyOrNull) { - AuthorizationResponse aresp = authz.decide(req); - if (!aresp.isAuthorized()) { - message = POLICY_ENGINE; - elr.setMessage(message); - elr.setResult(HttpServletResponse.SC_FORBIDDEN); - eventlogger.error(elr.toString()); - sendResponseError(resp, HttpServletResponse.SC_FORBIDDEN, message, eventlogger); - return; - } - } else { - //If Legacy Feed and AAF instance provided in Subscriber JSON - message = "AAF Subscriber can not be added to legacy Feed- " + feedid; - elr.setMessage(message); - elr.setResult(HttpServletResponse.SC_FORBIDDEN); - eventlogger.error(elr.toString()); - sendResponseError(resp, HttpServletResponse.SC_FORBIDDEN, message, eventlogger); - return; - } - } else { - //New AAF Requirement to add legacy subscriber to AAF Feed - if (subAafLegacyEmptyOrNull) { - AuthorizationResponse aresp = authz.decide(req); - if (!aresp.isAuthorized()) { - message = POLICY_ENGINE; - elr.setMessage(message); - elr.setResult(HttpServletResponse.SC_FORBIDDEN); - eventlogger.error(elr.toString()); - sendResponseError(resp, HttpServletResponse.SC_FORBIDDEN, message, eventlogger); - return; - } - } else { - //New AAF Requirement to add subscriber by publisher on publisher approval only - String permission = getSubscriberPermission(subAafInstance, BaseServlet.APPROVE_SUB_PERMISSION); - eventlogger.info("SubscribeServlet.doPost().. Permission String - " + permission); - if (!req.isUserInRole(permission)) { - message = "AAF disallows access to permission - " + permission; - elr.setMessage(message); - elr.setResult(HttpServletResponse.SC_FORBIDDEN); - eventlogger.error(elr.toString()); - sendResponseError(resp, HttpServletResponse.SC_FORBIDDEN, message, eventlogger); - return; - } - } - } - /* - * END - AAF changes - */ // Check if this subscription already exists; not an error (yet), just warn Subscription sub2 = Subscription.getSubscriptionMatching(sub); if (sub2 != null) { diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServlet.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServlet.java index 1851d03a..f4f3c9b0 100644 --- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServlet.java +++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServlet.java @@ -111,37 +111,6 @@ public class SubscriptionServlet extends ProxyServlet { sendResponseError(resp, HttpServletResponse.SC_NOT_FOUND, message, eventlogger); return; } - /* - * START - AAF changes - * TDP EPIC US# 307413 - * CADI code - check on permissions based on Legacy/AAF users to allow to delete/remove subscription - */ - String aafInstance = sub.getAafInstance(); - if (aafInstance == null || "".equals(aafInstance) || "legacy".equalsIgnoreCase(aafInstance)) { - AuthorizationResponse aresp = authz.decide(req); - if (!aresp.isAuthorized()) { - message = POLICY_ENGINE; - elr.setMessage(message); - elr.setResult(HttpServletResponse.SC_FORBIDDEN); - eventlogger.error(elr.toString()); - sendResponseError(resp, HttpServletResponse.SC_FORBIDDEN, message, eventlogger); - return; - } - } else { - String permission = getSubscriberPermission(aafInstance, BaseServlet.DELETE_PERMISSION); - eventlogger.info("SubscriptionServlet.doDelete().. Permission String - " + permission); - if (!req.isUserInRole(permission)) { - message = "AAF disallows access to permission - " + permission; - elr.setMessage(message); - elr.setResult(HttpServletResponse.SC_FORBIDDEN); - eventlogger.error(elr.toString()); - sendResponseError(resp, HttpServletResponse.SC_FORBIDDEN, message, eventlogger); - return; - } - } - /* - * END - AAF changes - */ // Delete Subscription if (doDelete(sub)) { activeSubs--; @@ -321,38 +290,6 @@ public class SubscriptionServlet extends ProxyServlet { sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, message, eventlogger); return; } - - /* - * START - AAF changes - * TDP EPIC US# 307413 - * CADI code - check on permissions based on Legacy/AAF users to allow to delete/remove subscription - */ - String aafInstance = sub.getAafInstance(); - if (aafInstance == null || "".equals(aafInstance) || "legacy".equalsIgnoreCase(aafInstance)) { - AuthorizationResponse aresp = authz.decide(req); - if (!aresp.isAuthorized()) { - message = POLICY_ENGINE; - elr.setMessage(message); - elr.setResult(HttpServletResponse.SC_FORBIDDEN); - eventlogger.error(elr.toString()); - sendResponseError(resp, HttpServletResponse.SC_FORBIDDEN, message, eventlogger); - return; - } - } else { - String permission = getSubscriberPermission(aafInstance, BaseServlet.EDIT_PERMISSION); - eventlogger.info("SubscriptionServlet.doDelete().. Permission String - " + permission); - if (!req.isUserInRole(permission)) { - message = "AAF disallows access to permission - " + permission; - elr.setMessage(message); - elr.setResult(HttpServletResponse.SC_FORBIDDEN); - eventlogger.error(elr.toString()); - sendResponseError(resp, HttpServletResponse.SC_FORBIDDEN, message, eventlogger); - return; - } - } - /* - * END - AAF changes - */ sub.setSubid(oldsub.getSubid()); sub.setFeedid(oldsub.getFeedid()); sub.setSubscriber(bhdr); // set from X-DMAAP-DR-ON-BEHALF-OF header diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/Feed.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/Feed.java index c6344301..af6b3575 100644 --- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/Feed.java +++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/Feed.java @@ -77,7 +77,6 @@ public class Feed extends Syncable { private boolean suspended; private Date lastMod; private Date createdDate; - private String aafInstance; public Feed() { this("", "", "", ""); @@ -104,7 +103,6 @@ public class Feed extends Syncable { this.suspended = false; this.lastMod = new Date(); this.createdDate = new Date(); - this.aafInstance = ""; } /** @@ -133,7 +131,6 @@ public class Feed extends Syncable { this.suspended = rs.getBoolean("SUSPENDED"); this.lastMod = rs.getDate("LAST_MOD"); this.createdDate = rs.getTimestamp("CREATED_DATE"); - this.aafInstance = rs.getString("AAF_INSTANCE"); } /** @@ -148,10 +145,6 @@ public class Feed extends Syncable { this.feedid = jo.optInt(FEED_ID, -1); this.groupid = jo.optInt("groupid"); this.name = jo.getString("name"); - this.aafInstance = jo.optString("aaf_instance", "legacy"); - if (!("legacy".equalsIgnoreCase(aafInstance)) && aafInstance.length() > 255) { - throw new InvalidObjectException("aaf_instance field is too long"); - } if (name.length() > 255) { throw new InvalidObjectException("name field is too long"); } @@ -440,10 +433,6 @@ public class Feed extends Syncable { fl.setLog(URLUtilities.generateFeedLogURL(feedid)); } - public String getAafInstance() { - return aafInstance; - } - //new getter setters for groups- Rally:US708115 - 1610 public int getGroupid() { return groupid; @@ -553,7 +542,6 @@ public class Feed extends Syncable { jo.put("suspend", suspended); jo.put(LAST_MOD, lastMod.getTime()); jo.put(CREATED_DATE, createdDate.getTime()); - jo.put("aaf_instance", aafInstance); return jo; } @@ -634,8 +622,8 @@ public class Feed extends Syncable { try (PreparedStatement ps = conn.prepareStatement( "insert into FEEDS (FEEDID, NAME, VERSION, DESCRIPTION, AUTH_CLASS, PUBLISHER, SELF_LINK, " + "PUBLISH_LINK, SUBSCRIBE_LINK, LOG_LINK, DELETED, SUSPENDED," - + "BUSINESS_DESCRIPTION, GROUPID, AAF_INSTANCE) " - + "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")) { + + "BUSINESS_DESCRIPTION, GROUPID) " + + "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")) { ps.setInt(1, feedid); ps.setString(2, getName()); ps.setString(3, getVersion()); @@ -650,7 +638,6 @@ public class Feed extends Syncable { ps.setBoolean(12, isSuspended()); ps.setString(13, getBusinessDescription()); ps.setInt(14, groupid); - ps.setString(15, getAafInstance()); ps.executeUpdate(); } } catch (SQLException e) { @@ -799,9 +786,6 @@ public class Feed extends Syncable { if (suspended != of.suspended) { return false; } - if (!aafInstance.equals(of.aafInstance)) { - return false; - } return true; } diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/Subscription.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/Subscription.java index 5741881c..6928addf 100644 --- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/Subscription.java +++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/beans/Subscription.java @@ -72,7 +72,6 @@ public class Subscription extends Syncable { private Date lastMod; private Date createdDate; private boolean privilegedSubscriber; - private String aafInstance; private boolean decompress; public Subscription() { @@ -98,7 +97,6 @@ public class Subscription extends Syncable { this.lastMod = new Date(); this.createdDate = new Date(); this.privilegedSubscriber = false; - this.aafInstance = ""; this.decompress = false; } @@ -121,7 +119,6 @@ public class Subscription extends Syncable { this.lastMod = rs.getDate("LAST_MOD"); this.createdDate = rs.getDate("CREATED_DATE"); this.privilegedSubscriber = rs.getBoolean("PRIVILEGED_SUBSCRIBER"); - this.aafInstance = rs.getString("AAF_INSTANCE"); this.decompress = rs.getBoolean("DECOMPRESS"); } @@ -137,10 +134,6 @@ public class Subscription extends Syncable { this.subid = jo.optInt(SUBID_KEY, -1); this.feedid = jo.optInt(FEEDID_KEY, -1); this.groupid = jo.optInt(GROUPID_KEY, -1); //New field is added - Groups feature Rally:US708115 - 1610 - this.aafInstance = jo.optString("aaf_instance", "legacy"); - if (!(aafInstance.equalsIgnoreCase("legacy")) && aafInstance.length() > 255) { - throw new InvalidObjectException("aaf_instance field is too long"); - } JSONObject jdeli = jo.getJSONObject("delivery"); String url = jdeli.getString("url"); String user = jdeli.getString("user"); @@ -334,14 +327,6 @@ public class Subscription extends Syncable { sl.setFeed(URLUtilities.generateFeedURL(feedid)); } - public String getAafInstance() { - return aafInstance; - } - - public void setAafInstance(String aafInstance) { - this.aafInstance = aafInstance; - } - //New getter setters for Groups feature Rally:US708115 - 1610 public int getGroupid() { return groupid; @@ -439,7 +424,6 @@ public class Subscription extends Syncable { jo.put(LAST_MOD_KEY, lastMod.getTime()); jo.put(CREATED_DATE, createdDate.getTime()); jo.put("privilegedSubscriber", privilegedSubscriber); - jo.put("aaf_instance", aafInstance); jo.put("decompress", decompress); return jo; } @@ -490,8 +474,8 @@ public class Subscription extends Syncable { // Create the SUBSCRIPTIONS row String sql = "insert into SUBSCRIPTIONS (SUBID, FEEDID, DELIVERY_URL, DELIVERY_USER, DELIVERY_PASSWORD, " + "DELIVERY_USE100, METADATA_ONLY, SUBSCRIBER, SUSPENDED, GROUPID, " - + "PRIVILEGED_SUBSCRIBER, FOLLOW_REDIRECTS, DECOMPRESS, AAF_INSTANCE) " - + "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + + "PRIVILEGED_SUBSCRIBER, FOLLOW_REDIRECTS, DECOMPRESS) " + + "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; ps = conn.prepareStatement(sql, new String[]{SUBID_COL}); ps.setInt(1, subid); ps.setInt(2, feedid); @@ -506,7 +490,6 @@ public class Subscription extends Syncable { ps.setBoolean(11, isPrivilegedSubscriber()); ps.setInt(12, isFollowRedirect() ? 1 : 0); ps.setBoolean(13, isDecompress()); - ps.setString(14, getAafInstance()); ps.execute(); ps.close(); // Update the row to set the URLs @@ -630,9 +613,6 @@ public class Subscription extends Syncable { if (suspended != os.suspended) { return false; } - if (!aafInstance.equals(os.aafInstance)) { - return false; - } return true; } diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/AafPropsUtils.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/AafPropsUtils.java deleted file mode 100644 index 57bc84bd..00000000 --- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/AafPropsUtils.java +++ /dev/null @@ -1,83 +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.dmaap.datarouter.provisioning.utils; - -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import org.onap.aaf.cadi.PropAccess; - -public class AafPropsUtils { - - private static final EELFLogger eelfLogger = EELFManager.getInstance().getLogger(AafPropsUtils.class); - - public static final String KEYSTORE_TYPE_PROPERTY = "PKCS12"; - public static final String TRUESTSTORE_TYPE_PROPERTY = "jks"; - private static final String KEYSTORE_PATH_PROPERTY = "cadi_keystore"; - private static final String KEYSTORE_PASS_PROPERTY = "cadi_keystore_password_p12"; - private static final String TRUSTSTORE_PATH_PROPERTY = "cadi_truststore"; - private static final String TRUSTSTORE_PASS_PROPERTY = "cadi_truststore_password"; - - private final PropAccess propAccess; - - public AafPropsUtils(File propsFile) throws IOException { - propAccess = new PropAccess(); - try { - propAccess.load(new FileInputStream(propsFile)); - } catch (IOException e) { - eelfLogger.error("Failed to load props file: " + propsFile + "\n" + e.getMessage(), e); - throw e; - } - } - - private String decryptedPass(String password) { - String decryptedPass = null; - try { - decryptedPass = propAccess.decrypt(password, false); - } catch (IOException e) { - eelfLogger.error("Failed to decrypt " + password + " : " + e.getMessage(), e); - } - return decryptedPass; - } - - public PropAccess getPropAccess() { - return propAccess; - } - - public String getKeystorePathProperty() { - return propAccess.getProperty(KEYSTORE_PATH_PROPERTY); - } - - public String getKeystorePassProperty() { - return decryptedPass(propAccess.getProperty(KEYSTORE_PASS_PROPERTY)); - } - - public String getTruststorePathProperty() { - return propAccess.getProperty(TRUSTSTORE_PATH_PROPERTY); - } - - public String getTruststorePassProperty() { - return decryptedPass(propAccess.getProperty(TRUSTSTORE_PASS_PROPERTY)); - } - -} diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/DRRouteCLI.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/DRRouteCLI.java index c614c0ba..a0ece41a 100644 --- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/DRRouteCLI.java +++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/DRRouteCLI.java @@ -108,6 +108,7 @@ public class DRRouteCLI { private int width = 120; // screen width (for list) private AbstractHttpClient httpclient; + @SuppressWarnings("deprecation") /** * Create a DRRouteCLI object connecting to the specified server. * @@ -117,20 +118,18 @@ public class DRRouteCLI { public DRRouteCLI(String server) throws Exception { this.server = server; this.httpclient = new DefaultHttpClient(); - AafPropsUtils aafPropsUtils = null; + ProvTlsManager provTlsManager = null; Properties provProperties = ProvRunner.getProvProperties(); try { - aafPropsUtils = new AafPropsUtils(new File(provProperties.getProperty( - "org.onap.dmaap.datarouter.provserver.aafprops.path", - "/opt/app/osaaf/local/org.onap.dmaap-dr.props"))); - } catch (IOException e) { - intlogger.error("NODE0314 Failed to load AAF props. Exiting", e); + provTlsManager = new ProvTlsManager(provProperties, false); + } catch (Exception e) { + intlogger.error("NODE0314 Failed to load TLS config. Exiting", e); exit(1); } - String truststoreFile = aafPropsUtils.getTruststorePathProperty(); - String truststorePw = aafPropsUtils.getTruststorePassProperty(); + String truststoreFile = provTlsManager.getTrustStoreFile(); + String truststorePw = provTlsManager.getTrustStorePassword(); KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); if (truststoreFile == null || truststoreFile.equals("")) { diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/ProvTlsManager.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/ProvTlsManager.java new file mode 100644 index 00000000..4cf59066 --- /dev/null +++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/ProvTlsManager.java @@ -0,0 +1,162 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2022 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.dmaap.datarouter.provisioning.utils; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import java.io.FileInputStream; +import java.io.IOException; +import java.security.KeyManagementException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.UnrecoverableKeyException; +import java.security.cert.CertificateException; +import java.util.Properties; +import org.apache.http.conn.ssl.SSLSocketFactory; +import org.eclipse.jetty.util.ssl.SslContextFactory; + +public class ProvTlsManager { + + private static final EELFLogger eelfLogger = EELFManager.getInstance().getLogger(ProvTlsManager.class); + + private final String keyStoreType; + private final String keyStorefile; + private final String keyStorePassword; + private final String keyManagerPassword; + private KeyStore keyStore; + + private final String trustStoreType; + private final String trustStoreFile; + private final String trustStorePassword; + private KeyStore trustStore; + + private final String[] enabledProtocols; + + /** + * Utility class to handle Provisioning server SSL configuration + * + * @param properties DR provisioning server properties + * @throws Exception for any unrecoverable problem + */ + public ProvTlsManager(Properties properties, boolean preLoadCerts) throws Exception { + + keyStoreType = properties.getProperty("org.onap.dmaap.datarouter.provserver.keystoretype", "PKCS12"); + keyStorefile = properties.getProperty("org.onap.dmaap.datarouter.provserver.keystorepath"); + keyStorePassword = properties.getProperty("org.onap.dmaap.datarouter.provserver.keystorepassword"); + keyManagerPassword = properties.getProperty("org.onap.dmaap.datarouter.provserver.keymanagerpassword"); + + trustStoreType = properties.getProperty("org.onap.dmaap.datarouter.provserver.truststoretype", "jks"); + trustStoreFile = properties.getProperty("org.onap.dmaap.datarouter.provserver.truststorepath"); + trustStorePassword = properties.getProperty("org.onap.dmaap.datarouter.provserver.truststorepassword"); + + if (preLoadCerts) { + eelfLogger.debug("ProvTlsManager: Attempting to pre load certificate data from config."); + setUpKeyStore(); + setUpTrustStore(); + } + + enabledProtocols = properties.getProperty( + "org.onap.dmaap.datarouter.provserver.https.include.protocols", + "TLSv1.1|TLSv1.2").trim().split("\\|"); + } + + /** + * Gets an SSLSocketFactory instance constructed using the relevant SSL properties + * + * @return SSLSocketFactory + * @throws KeyStoreException if SSL config is invalid + */ + public SSLSocketFactory getSslSocketFactory() + throws KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException, KeyManagementException { + eelfLogger.debug("ProvTlsManager.getSslSocketFactory: Setting up SSLSocketFactory"); + if (this.trustStoreFile == null) { + eelfLogger.warn("Warning: No trust store available."); + return new SSLSocketFactory(this.keyStore, this.keyStorePassword); + } + return new SSLSocketFactory(this.keyStore, this.keyStorePassword, this.trustStore); + } + + /** + * Gets an SslContextFactory.Server instance constructed using the relevant SSL properties + * + * @return SslContextFactory.Server + */ + public SslContextFactory.Server getSslContextFactoryServer() { + eelfLogger.debug("ProvTlsManager.getSslContextFactoryServer: Setting up getSslContextFactoryServer"); + SslContextFactory.Server sslContextFactoryServer = new SslContextFactory.Server(); + sslContextFactoryServer.setKeyStoreType(this.keyStoreType); + sslContextFactoryServer.setKeyStorePath(this.keyStorefile); + sslContextFactoryServer.setKeyStorePassword(this.keyStorePassword); + sslContextFactoryServer.setKeyManagerPassword(this.keyManagerPassword); + if (this.trustStoreFile != null) { + sslContextFactoryServer.setTrustStoreType(this.trustStoreType); + sslContextFactoryServer.setTrustStorePath(this.trustStoreFile); + sslContextFactoryServer.setTrustStorePassword(this.trustStorePassword); + } + sslContextFactoryServer.setIncludeProtocols(this.enabledProtocols); + return sslContextFactoryServer; + } + + /** + * Get the trust store file path from dr config + * + * @return String + */ + public String getTrustStoreFile() { + return trustStoreFile; + } + + /** + * Get the trust store password from dr config + * + * @return String + */ + public String getTrustStorePassword() { + return trustStorePassword; + } + + private void setUpKeyStore() + throws CertificateException, KeyStoreException, IOException, NoSuchAlgorithmException { + eelfLogger.debug("ProvTlsManager.setUpKeyStore: Attempting to load keyStore {}", keyStorefile); + keyStore = readKeyStore(keyStorefile, keyStorePassword, keyStoreType); + } + + private void setUpTrustStore() + throws CertificateException, KeyStoreException, IOException, NoSuchAlgorithmException { + if (trustStoreFile != null && trustStorePassword != null) { + eelfLogger.debug("ProvTlsManager.setUpTrustStore: Attempting to load trustStore {}", trustStoreFile); + trustStore = readKeyStore(trustStoreFile, trustStorePassword, trustStoreType); + } else { + eelfLogger.warn("No truststore provided from properties. Skipping."); + } + } + + private KeyStore readKeyStore(String keyStore, String pass, String type) + throws KeyStoreException, CertificateException, IOException, NoSuchAlgorithmException { + eelfLogger.debug("ProvTlsManager.readKeyStore: Verifying load of keystore {}", keyStore); + KeyStore ks = KeyStore.getInstance(type); + try (FileInputStream stream = new FileInputStream(keyStore)) { + ks.load(stream, pass.toCharArray()); + } + return ks; + } +} \ No newline at end of file diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/SynchronizerTask.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/SynchronizerTask.java index ef282618..86c178a3 100644 --- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/SynchronizerTask.java +++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/SynchronizerTask.java @@ -140,33 +140,7 @@ public class SynchronizerTask extends TimerTask { try (AbstractHttpClient hc = new DefaultHttpClient()) { Scheme sch; if (Boolean.TRUE.equals(ProvRunner.getTlsEnabled())) { - // Set up keystore - String type = AafPropsUtils.KEYSTORE_TYPE_PROPERTY; - String store = ProvRunner.getAafPropsUtils().getKeystorePathProperty(); - String pass = ProvRunner.getAafPropsUtils().getKeystorePassProperty(); - KeyStore keyStore = KeyStore.getInstance(type); - try (FileInputStream instream = new FileInputStream(store)) { - keyStore.load(instream, pass.toCharArray()); - - } - // Set up truststore - store = ProvRunner.getAafPropsUtils().getTruststorePathProperty(); - pass = ProvRunner.getAafPropsUtils().getTruststorePassProperty(); - KeyStore trustStore = null; - if (store != null && store.length() > 0) { - trustStore = KeyStore.getInstance(AafPropsUtils.TRUESTSTORE_TYPE_PROPERTY); - try (FileInputStream instream = new FileInputStream(store)) { - trustStore.load(instream, pass.toCharArray()); - - } - } - // We are connecting with the node name, but the certificate will have the CNAME - // So we need to accept a non-matching certificate name - String keystorepass = ProvRunner.getAafPropsUtils().getKeystorePassProperty(); - SSLSocketFactory socketFactory = - (trustStore == null) - ? new SSLSocketFactory(keyStore, keystorepass) - : new SSLSocketFactory(keyStore, keystorepass, trustStore); + SSLSocketFactory socketFactory = ProvRunner.getProvTlsManager().getSslSocketFactory(); socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); sch = new Scheme("https", 443, socketFactory); } else { @@ -180,6 +154,7 @@ public class SynchronizerTask extends TimerTask { } catch (Exception e) { logger.warn("PROV5005: Problem starting the synchronizer: " + e); } + logger.info("PROV5000: SynchronizerTask started"); } private void setSynchTimer(String strInterval) { diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/URLUtilities.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/URLUtilities.java index 89403488..a5eb4590 100644 --- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/URLUtilities.java +++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/utils/URLUtilities.java @@ -161,7 +161,8 @@ public class URLUtilities { private static String getAppropriateUrlPort() { if (Boolean.TRUE.equals(ProvRunner.getTlsEnabled())) { - return ""; + return ":" + ProvRunner.getProvProperties() + .getProperty("org.onap.dmaap.datarouter.provserver.https.port", "8443"); } return ":" + ProvRunner.getProvProperties() .getProperty("org.onap.dmaap.datarouter.provserver.http.port", "8080"); diff --git a/datarouter-prov/src/main/resources/aaf/org.onap.dmaap-dr.cred.props b/datarouter-prov/src/main/resources/aaf/org.onap.dmaap-dr.cred.props deleted file mode 100644 index bb86e9d0..00000000 --- a/datarouter-prov/src/main/resources/aaf/org.onap.dmaap-dr.cred.props +++ /dev/null @@ -1,17 +0,0 @@ -############################################################ -# Properties Generated by AT&T Certificate Manager -# by root -# on 2022-03-22T12:34:23.012+0000 -# @copyright 2019, AT&T -############################################################ -Challenge=enc:v6yuDc_Lu1OgeFEthckOsa7R0XW6h0iZqUQXnw4CpstwzjmN0x9VOsf27um5fC5z -cadi_alias=dmaap-dr-prov@dmaap-dr.onap.org -cadi_key_password=enc:CBXkw5IMQ8IeOhERa_oK4XcS1BsKy3T9BiZgAOIBqI46Nvy0USwgXCyOkTgVlJn7 -cadi_keyfile=/opt/app/osaaf/local/org.onap.dmaap-dr.keyfile -cadi_keystore=/opt/app/osaaf/local/org.onap.dmaap-dr.p12 -cadi_keystore_password=enc:Qd78mq7KSyK4G-gmnA0YVrB4jpMLgMX_4jDmwkdkKpD-MmonHNXlDA0TzRd3oxWe -cadi_keystore_password_jks=enc:GuyybAMtPX21LbCx_AXGnO7nz3NlPenZESuLVgrw-_cK55re75K4YOLYVzQswUYU -cadi_keystore_password_p12=enc:Qd78mq7KSyK4G-gmnA0YVrB4jpMLgMX_4jDmwkdkKpD-MmonHNXlDA0TzRd3oxWe -cadi_truststore=/opt/app/osaaf/local/org.onap.dmaap-dr.trust.jks -cadi_truststore_password=enc:y10bIyzTHei-rxWnWgHUUFUD_9TfOBdxmIn6vEf0zsyZtWmeP8ZjFE1LoPn7Ri4g -cadi_x509_issuers=CN=intermediateCA_1, OU=OSAAF, O=ONAP, C=US:CN=intermediateCA_7, OU=OSAAF, O=ONAP, C=US:CN=intermediateCA_9, OU=OSAAF, O=ONAP, C=US diff --git a/datarouter-prov/src/main/resources/aaf/org.onap.dmaap-dr.keyfile b/datarouter-prov/src/main/resources/aaf/org.onap.dmaap-dr.keyfile deleted file mode 100644 index 86092892..00000000 --- a/datarouter-prov/src/main/resources/aaf/org.onap.dmaap-dr.keyfile +++ /dev/null @@ -1,27 +0,0 @@ -gf-I4kLSg98uxwCXpklt-W2Qfa0mFgvXDoQk_qsLs4uuLI9FmWkrdlgdqzEgISL1sf6SAhoXFXO4 -BSm8fSPPrjaFEQ-uZcho1bY63lG710ZLh7vf0Bc7WPieRXesloH07CRXXjUdTkXXU8qTP6Ufru16 -mbGODzcZ-Ygm2GLVbkLk7953CJYIvuYT0M3ggrDr51eOalpgwXA1uO2DCTmY_fyqFNpZbLEtcYAx -EEBkbaT0KhKwSfXfPINjpfCVMNBr3eK2m75RFJzTmA4Nq_WFgQQBUJkYu6EaWR8xwKEnX3brIFN- -uY8Xk-Wxh8hhqNQWSxaSa_w6BfbP5CwUpIk9Ex1v_gCa63NIy4WzoRxOHKuCQAS26vLJFxTTNOlP -d_DVC0gmvL-q8VnedNVSsRw1zuDOtOzKg3iUbTjopba3YryelxwL2xUJzkxv8RiOVvTCdZ34lPP0 -vQCaGJYg52OKOCMaIs4e6bqfCFMT4nlbad--mPeZGS3X5pJ0xSAMRa8L2_ksHbTOvcjOlCvmWNDK -puP22sdegP-mV6Ygm30Gyn7TnUodDA3bzIiA70zrkrlt8pBMhKmCbmWvGfjItoRnfGwtlsm1OU73 -Jst8pQ_mvCK486UoH4Lui1kNBTqAJIrzYT_m-MrL6w9lx7Lu-ZG0HqdDVO4zB06WTyCXT-I2r-XS -F9ddoQ3GOUMA4kIckEeEVYfZiVaoPeizNwynSLHZDA3Xztc-kz7HEqdUCypM5pM32qGN-z4Gzbh0 -K4GO7_cGyctMGNY5za3iANK3BBBx9d3G3XKuCH2EDF9aj_kFarMaJjTHwn9-OAeD2GXtdYQqarod -4Yw11CD8JjyF6PdYstTh9t5_iK3pZjFaLMBPlLFN_tDu_5zsVagJjM7nMjfn8iWH5o3rj7WAIqBC -NoxZhIRUVpEmDKkhsnq9i9gdjoiKjrNwEsswX2vGsXEAf1vTXH2YsgraTjEhlW0cIb4PBLd4YoSE -AW3MXhwu5rYFgGooHyB99OKZOX6-5Y44fA0TE0ypn8HZ5oVrERCHVHNXsiXg1pRjTHjoIYUFoSQQ -lT8eVUo5MUxQ0SVKUi03wA7EduWrwvuD_KyLeNnvECj6IDuK7qiqH86UV7AyQhwjSZPj4N3KIlvD -VJNLmt6s8b6SLZpO23P-ZceFEIIYG7E1IGmo2s5VkWTNTkvqD7blxoOsfBIxb-SjttnMtbKCcXPj -aKMC1oqr5xLsvtg9XDKKXt4kELElRBiKtrud8t7qqYMfC-q6lIddmG8x_196qsYiErKd9mLyDT2H -DG9wmz3dDds_bUnXA7_-LsriDI4t_fAqAKnvR8tLi9DjhU1g9yjlGuKn4yd3y8aK-UFFfBi1AKxA -WoxSt2Omw_sl9Jc6bzoZ2_NHPZz7IaDhSu1imAAcAms4SIr3g-MnBffVpxarrXYsoaxurMRMoqLx -r0DyV1Y9IZSwo-xsWk42CxrvEF31AmFWewI0ykA8bZ-zpWux3z7BfbKDqxglg3Lp5uIfVFHamds3 -ya-KMBCtaSgiJ9fB7Q183Lt0tMxrOLe3hln55I4SRgHT5blh1LEznIigIfhFEOo514JEdctkVrDS -bDSbCO-yZE_0BcznTsjoyImwObeVRbDDu0feM9uGs4fL7zwVCbzEurGU2js-0o0rcyDiv30tsL5S -LaxA-xz7x5HO4JAd7BeaeF4-v0-IeLKPH4HzYk0g1PKskZaZHMWBWSPaJWin68ahh9Eh44xSjsCW -TUcoddf4-5HZS_RWlrLvbnfbEBAm7Ikbno1zLJz7_H3tmLKv2axkGEu-YWIAffb7xMzG0T9m6S3B -Iz1jWxtJ41gTE5kGFmaezDeUGPrioaqOq0bCq6DStQMc_5kcKAIg6GffOX75ZvagC2E6E_B58AGU -iVDzz_yi4Xcssf2jN-MIiHes0HsMQILrLAu1PLZh9qOIGOnVgLdwr0o5CGsg0h7Bxxl6jFQubwAZ -rc2foRg7arAcRHYasoC34f9pH0hfBzHfTGg5S7bWU6mDaldpWS8Na0EoCoFoZATkdzG77w6c \ No newline at end of file diff --git a/datarouter-prov/src/main/resources/aaf/org.onap.dmaap-dr.location.props b/datarouter-prov/src/main/resources/aaf/org.onap.dmaap-dr.location.props deleted file mode 100644 index eef8aac6..00000000 --- a/datarouter-prov/src/main/resources/aaf/org.onap.dmaap-dr.location.props +++ /dev/null @@ -1,8 +0,0 @@ -############################################################ -# Properties Generated by AT&T Certificate Manager -# by root -# on 2022-03-22T12:34:21.359+0000 -# @copyright 2019, AT&T -############################################################ -cadi_latitude=38.0 -cadi_longitude=-72.0 diff --git a/datarouter-prov/src/main/resources/aaf/org.onap.dmaap-dr.p12 b/datarouter-prov/src/main/resources/aaf/org.onap.dmaap-dr.p12 deleted file mode 100644 index 69948c2562e06b8e679fe1ec0be5cb189215204a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4217 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 SW%p+#fk}F=wcuM diff --git a/datarouter-prov/src/main/resources/misc/sql_init_01.sql b/datarouter-prov/src/main/resources/misc/sql_init_01.sql index a1980d29..17884f66 100755 --- a/datarouter-prov/src/main/resources/misc/sql_init_01.sql +++ b/datarouter-prov/src/main/resources/misc/sql_init_01.sql @@ -14,8 +14,7 @@ CREATE TABLE FEEDS ( DELETED BOOLEAN DEFAULT FALSE, LAST_MOD TIMESTAMP DEFAULT CURRENT_TIMESTAMP, SUSPENDED BOOLEAN DEFAULT FALSE, - CREATED_DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - AAF_INSTANCE VARCHAR(256) + CREATED_DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE FEED_ENDPOINT_IDS ( @@ -46,9 +45,7 @@ CREATE TABLE SUBSCRIPTIONS ( SUSPENDED BOOLEAN DEFAULT FALSE, PRIVILEGED_SUBSCRIBER BOOLEAN DEFAULT FALSE, CREATED_DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - DECOMPRESS BOOLEAN DEFAULT FALSE, - AAF_INSTANCE VARCHAR(256) - + DECOMPRESS BOOLEAN DEFAULT FALSE ); CREATE TABLE PARAMETERS ( @@ -145,6 +142,6 @@ INSERT INTO PARAMETERS VALUES ('PROV_MAXFEED_COUNT', '10000'), ('PROV_MAXSUB_COUNT', '100000'), ('PROV_REQUIRE_CERT', 'false'), - ('PROV_REQUIRE_SECURE', 'true'), + ('PROV_REQUIRE_SECURE', 'false'), ('_INT_VALUES', 'LOGROLL_INTERVAL|PROV_MAXFEED_COUNT|PROV_MAXSUB_COUNT|DELIVERY_INIT_RETRY_INTERVAL|DELIVERY_MAX_RETRY_INTERVAL|DELIVERY_RETRY_RATIO|DELIVERY_MAX_AGE|DELIVERY_FILE_PROCESS_INTERVAL') ; \ No newline at end of file diff --git a/datarouter-prov/src/main/resources/provserver.properties b/datarouter-prov/src/main/resources/provserver.properties index 66d4e6c4..25824988 100755 --- a/datarouter-prov/src/main/resources/provserver.properties +++ b/datarouter-prov/src/main/resources/provserver.properties @@ -31,12 +31,17 @@ org.onap.dmaap.datarouter.provserver.spooldir = /opt/app/datartr/spoo org.onap.dmaap.datarouter.provserver.dbscripts = /opt/app/datartr/etc/misc org.onap.dmaap.datarouter.provserver.logretention = 30 -org.onap.dmaap.datarouter.provserver.aafprops.path = /opt/app/osaaf/local/org.onap.dmaap-dr.props org.onap.dmaap.datarouter.provserver.isaddressauthenabled = false - -org.onap.dmaap.datarouter.provserver.cadi.enabled = false - org.onap.dmaap.datarouter.provserver.tlsenabled = false +# If tlsenabled is true, the following keystore info must be set +org.onap.dmaap.datarouter.provserver.keystoretype = PKCS12 +org.onap.dmaap.datarouter.provserver.keystorepath = /opt/app/datartr/certs/org.onap.dmaap-dr-prov.p12 +org.onap.dmaap.datarouter.provserver.keystorepassword = secret +org.onap.dmaap.datarouter.provserver.keymanagerpassword = secret +org.onap.dmaap.datarouter.provserver.truststoretype = jks +org.onap.dmaap.datarouter.provserver.truststorepath = /opt/app/datartr/certs/truststore.jks +org.onap.dmaap.datarouter.provserver.truststorepassword = secret + org.onap.dmaap.datarouter.nodeserver.https.port = 8443 org.onap.dmaap.datarouter.nodeserver.http.port = 8080 diff --git a/datarouter-prov/src/test/java/datarouter/provisioning/DbTestData.java b/datarouter-prov/src/test/java/datarouter/provisioning/DbTestData.java deleted file mode 100644 index 36a2eb01..00000000 --- a/datarouter-prov/src/test/java/datarouter/provisioning/DbTestData.java +++ /dev/null @@ -1,109 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START================================================== - * * org.onap.dmaap - * * =========================================================================== - * * Copyright © 2017 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==================================================== - * * - * * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * * - ******************************************************************************/ - -package datarouter.provisioning; - -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.ByteArrayEntity; -import org.apache.http.entity.ContentType; -import org.apache.http.impl.client.AbstractHttpClient; -import org.apache.http.util.EntityUtils; -import org.json.JSONArray; -import org.json.JSONObject; -import org.onap.dmaap.datarouter.provisioning.FeedServlet; - -import java.io.IOException; -import java.util.Properties; - -/** - * The DbTestData class - * - * @version 1.0.1 - */ -public class DbTestData { - - private static boolean dbReady = false; - - public static void populateDb(AbstractHttpClient httpclient, Properties props) { - if (!dbReady) { - JSONObject jo = buildFeedRequest(); - for (int i = 0; i < 10; i++) { - jo.put("version", "" + System.currentTimeMillis()); - int statusCode = -1; - String url = props.getProperty("test.host"); - HttpPost httpPost = new HttpPost(url); - try { - httpPost.addHeader(FeedServlet.BEHALF_HEADER, "JUnit"); - String feedRequestString = jo.toString(); - HttpEntity body = new ByteArrayEntity(feedRequestString.getBytes(), - ContentType.create(FeedServlet.FEED_CONTENT_TYPE)); - httpPost.setEntity(body); - HttpResponse response = httpclient.execute(httpPost); - statusCode = response.getStatusLine().getStatusCode(); - HttpEntity entity = response.getEntity(); - EntityUtils.consume(entity); - } catch (IOException e) { - System.err.println(e); - } finally { - httpPost.releaseConnection(); - } - System.out.println(i + " " + statusCode); - } - dbReady = true; - } - } - - private static JSONObject buildFeedRequest() { - JSONObject jo = new JSONObject(); - jo.put("name", "feed"); - jo.put("version", "" + System.currentTimeMillis()); - jo.put("description", "Sample feed used by JUnit to test"); - - JSONObject jo2 = new JSONObject(); - jo2.put("classification", "unrestricted"); - - JSONObject jo3 = new JSONObject(); - jo3.put("id", "id001"); - jo3.put("password", "re1kwelj"); - - JSONObject jo4 = new JSONObject(); - jo4.put("id", "id002"); - jo4.put("password", "o9eqlmbd"); - - JSONArray ja = new JSONArray(); - ja.put(jo3); - ja.put(jo4); - jo2.put("endpoint_ids", ja); - - ja = new JSONArray(); - ja.put("10.0.0.1"); - ja.put("192.168.0.1"); - ja.put("135.207.136.128/25"); - jo2.put("endpoint_addrs", ja); - - jo.put("authorization", jo2); - return jo; - } -} diff --git a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationSuite.java b/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationSuite.java deleted file mode 100644 index 4d23857b..00000000 --- a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationSuite.java +++ /dev/null @@ -1,50 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START================================================== - * * org.onap.dmaap - * * =========================================================================== - * * Copyright © 2017 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==================================================== - * * - * * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * * - ******************************************************************************/ - -package datarouter.provisioning; - - -import org.junit.runner.RunWith; -import org.junit.runners.Suite; -import org.junit.runners.Suite.SuiteClasses; - -@RunWith(Suite.class) -@SuiteClasses({ - IntegrationTestDrFeedsPost.class, - IntegrationTestDrFeedsPut.class, - IntegrationTestDrFeedsDelete.class, - IntegrationTestFeedPut.class, - IntegrationTestDrFeedsGet.class, - IntegrationTestInternalGet.class, - IntegrationTestInternalMisc.class, - IntegrationTestPublish.class, - IntegrationTestSubscribePost.class, - IntegrationTestLogGet.class, - IntegrationTestFeedDelete.class, - IntegrationTestCleanup.class, - IntegrationTestRleBitSet.class -}) - -public class IntegrationSuite { - -} diff --git a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestBase.java b/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestBase.java deleted file mode 100755 index 3e5e1d04..00000000 --- a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestBase.java +++ /dev/null @@ -1,178 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START================================================== - * * org.onap.dmaap - * * =========================================================================== - * * Copyright © 2017 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==================================================== - * * - * * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * * - ******************************************************************************/ - -package datarouter.provisioning; - -import static org.junit.Assert.fail; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.security.KeyStore; -import java.util.Properties; - -import org.apache.commons.io.FileUtils; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.StatusLine; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.conn.scheme.Scheme; -import org.apache.http.conn.ssl.SSLSocketFactory; -import org.apache.http.impl.client.AbstractHttpClient; -import org.apache.http.impl.client.DefaultHttpClient; -import org.apache.http.util.EntityUtils; -import org.json.JSONObject; -import org.json.JSONTokener; -import org.junit.After; -import org.junit.Before; -import org.onap.dmaap.datarouter.provisioning.FeedServlet; - -public class IntegrationTestBase { - - /** - * The properties file to read the DB properties from. - */ - private static final String CONFIG_FILE = "integration_test.properties"; - - public Properties props; - protected AbstractHttpClient httpclient; - String s33; - String s257; - static JSONObject db_state; - - /** - * This is the setUp method. - */ - @Before - public void setUp() throws Exception { - if (props == null) { - props = new Properties(); - try (InputStream inStream = getClass().getClassLoader().getResourceAsStream(CONFIG_FILE)) { - props.load(inStream); - } catch (Exception e) { - e.printStackTrace(); - } - } - - httpclient = new DefaultHttpClient(); - String str = "0123456789ABCDEF"; - s33 = str + str + "!"; - str = str + str + str + str; - s257 = str + str + str + str + "!"; - - // keystore - String store = props.getProperty("test.keystore"); - String pass = props.getProperty("test.kspassword"); - KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); - FileInputStream instream = new FileInputStream(new File(store)); - try { - keyStore.load(instream, pass.toCharArray()); - } catch (Exception x) { - System.err.println("READING KEYSTORE: " + x); - } finally { - try { - instream.close(); - } catch (Exception ignore) { - // Ignore exception - } - } - - store = props.getProperty("test.truststore"); - pass = props.getProperty("test.tspassword"); - KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); - instream = new FileInputStream(new File(store)); - try { - trustStore.load(instream, pass.toCharArray()); - } catch (Exception x) { - System.err.println("READING TRUSTSTORE: " + x); - } finally { - try { - instream.close(); - } catch (Exception ignore) { - // Ignore exception - } - } - - SSLSocketFactory socketFactory = new SSLSocketFactory(keyStore, props.getProperty("test.kspassword"), trustStore); - Scheme sch = new Scheme("https", 443, socketFactory); - httpclient.getConnectionManager().getSchemeRegistry().register(sch); - - //DbTestData.populateDb(httpclient, props); - } - - /** - * This is the getDBstate method. - */ - void getDBstate() { - // set db_state! - if (db_state == null) { - String url = props.getProperty("test.host") + "/internal/prov"; - HttpGet httpGet = new HttpGet(url); - try { - httpGet.addHeader(FeedServlet.BEHALF_HEADER, "JUnit"); - HttpResponse response = httpclient.execute(httpGet); - HttpEntity entity = response.getEntity(); - String ctype = entity.getContentType().getValue().trim(); - // save the response body as db_state - boolean ok = ctype.equals(FeedServlet.PROVFULL_CONTENT_TYPE1); - ok |= ctype.equals(FeedServlet.PROVFULL_CONTENT_TYPE2); - if (ok) { - db_state = null; - try { - db_state = new JSONObject(new JSONTokener(entity.getContent())); - } catch (Exception e) { - fail("Bad JSON: " + e.getMessage()); - } - } else { - EntityUtils.consume(entity); - } - } catch (IOException e) { - fail(e.getMessage()); - } finally { - httpGet.releaseConnection(); - } - } - } - - /** - * This is the tearDown method. - */ - @After - public void tearDown() throws Exception { - // When HttpClient instance is no longer needed, - // shut down the connection manager to ensure - // immediate deallocation of all system resources - httpclient.getConnectionManager().shutdown(); - FileUtils.deleteDirectory(new File("." + File.pathSeparator+ "unit-test-logs")); - } - - protected void ckResponse(HttpResponse response, int expect) { - System.out.println(response.getStatusLine()); - StatusLine sl = response.getStatusLine(); - int code = sl.getStatusCode(); - if (code != expect) { - fail("Unexpected response, expect " + expect + " got " + code + " " + sl.getReasonPhrase()); - } - } -} diff --git a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestCleanup.java b/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestCleanup.java deleted file mode 100644 index fba77548..00000000 --- a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestCleanup.java +++ /dev/null @@ -1,85 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START================================================== - * * org.onap.dmaap - * * =========================================================================== - * * Copyright © 2017 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==================================================== - * * - * * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * * - ******************************************************************************/ - -package datarouter.provisioning; - -import static org.junit.Assert.fail; - -import java.io.IOException; - -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpDelete; -import org.apache.http.util.EntityUtils; -import org.json.JSONArray; -import org.json.JSONObject; -import org.junit.Before; -import org.junit.Test; -import org.onap.dmaap.datarouter.provisioning.FeedServlet; - -public class IntegrationTestCleanup extends IntegrationTestBase { - @Before - public void setUp() throws Exception { - super.setUp(); - getDBstate(); - } - - @Test - public void testNormal() { - // Delete all feeds w/JUnit as publisher - JSONArray ja = db_state.getJSONArray("feeds"); - for (int i = 0; i < ja.length(); i++) { - JSONObject feed = ja.getJSONObject(i); - if (feed != null && !feed.getBoolean("deleted")) { - if (feed.getString("publisher").equals("JUnit")) { - int feedid = feed.getInt("feedid"); - delete("/feed/" + feedid); - } - } - } - // Delete all subscriptions w/JUnit as subscriber - ja = db_state.getJSONArray("subscriptions"); - for (int i = 0; i < ja.length(); i++) { - JSONObject sub = ja.getJSONObject(i); - if (sub != null && sub.getString("subscriber").equals("JUnit")) { - int subid = sub.getInt("subid"); - delete("/subs/" + subid); - } - } - } - - private void delete(String uri) { - String url = props.getProperty("test.host") + uri;; - HttpDelete del = new HttpDelete(url); - try { - del.addHeader(FeedServlet.BEHALF_HEADER, "JUnit"); - HttpResponse response = httpclient.execute(del); - HttpEntity entity = response.getEntity(); - EntityUtils.consume(entity); - } catch (IOException e) { - fail(e.getMessage()); - } finally { - del.releaseConnection(); - } - } -} diff --git a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestDrFeedsDelete.java b/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestDrFeedsDelete.java deleted file mode 100644 index 7ebdf223..00000000 --- a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestDrFeedsDelete.java +++ /dev/null @@ -1,58 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START================================================== - * * org.onap.dmaap - * * =========================================================================== - * * Copyright © 2017 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==================================================== - * * - * * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * * - ******************************************************************************/ - -package datarouter.provisioning; - -import static org.junit.Assert.fail; - -import java.io.IOException; - -import jakarta.servlet.http.HttpServletResponse; - -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpDelete; -import org.apache.http.util.EntityUtils; -import org.junit.Test; -import org.onap.dmaap.datarouter.provisioning.FeedServlet; - -public class IntegrationTestDrFeedsDelete extends IntegrationTestBase { - @Test - public void testNotAllowed() { - String url = props.getProperty("test.host") + "/"; - HttpDelete del = new HttpDelete(url); - try { - del.addHeader(FeedServlet.BEHALF_HEADER, "JUnit"); - - HttpResponse response = httpclient.execute(del); - ckResponse(response, HttpServletResponse.SC_METHOD_NOT_ALLOWED); - - HttpEntity entity = response.getEntity(); - EntityUtils.consume(entity); - } catch (IOException e) { - fail(e.getMessage()); - } finally { - del.releaseConnection(); - } - } -} diff --git a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestDrFeedsGet.java b/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestDrFeedsGet.java deleted file mode 100644 index 2cc5feba..00000000 --- a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestDrFeedsGet.java +++ /dev/null @@ -1,207 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START================================================== - * * org.onap.dmaap - * * =========================================================================== - * * Copyright © 2017 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==================================================== - * * - * * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * * - ******************************************************************************/ - -package datarouter.provisioning; - -import static org.junit.Assert.fail; - -import java.io.IOException; - -import jakarta.servlet.http.HttpServletResponse; - -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.util.EntityUtils; -import org.json.JSONArray; -import org.json.JSONObject; -import org.json.JSONTokener; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.onap.dmaap.datarouter.provisioning.FeedServlet; - -public class IntegrationTestDrFeedsGet extends IntegrationTestBase { - private JSONArray returnedlist; - - @BeforeClass - public static void setUpBeforeClass() throws Exception { - } - - @AfterClass - public static void tearDownAfterClass() throws Exception { - } - - @Before - public void setUp() throws Exception { - super.setUp(); - getDBstate(); - } - - @Test - public void testNormal() { - testCommon(HttpServletResponse.SC_OK); - int expect = 0; - JSONArray ja = db_state.getJSONArray("feeds"); - for (int i = 0; i < ja.length(); i++) { - JSONObject jo = ja.getJSONObject(i); - if (!jo.getBoolean("deleted")) { - expect++; - } - } - if (returnedlist.length() != expect) { - fail("bad length, got " + returnedlist.length() + " expect " + expect); - } - } - - @Test - public void testNormalGoodName() { - JSONArray ja = db_state.getJSONArray("feeds"); - JSONObject feed0 = ja.getJSONObject(0); - String name = feed0.getString("name"); - String query = "?name=" + name; - int expect = 0; - for (int n = 0; n < ja.length(); n++) { - JSONObject jo = ja.getJSONObject(n); - if (!jo.getBoolean("deleted") && jo.getString("name").equals(name)) { - expect++; - } - } - testCommon(HttpServletResponse.SC_OK, query, FeedServlet.FEEDLIST_CONTENT_TYPE, "JUnit"); - if (returnedlist.length() != expect) { - fail("bad length, got " + returnedlist.length() + " expect " + expect); - } - } - - @Test - public void testNormalBadName() { - String query = "?name=ZZTOP123456"; - testCommon(HttpServletResponse.SC_OK, query, FeedServlet.FEEDLIST_CONTENT_TYPE, "JUnit"); - if (returnedlist.length() != 0) { - fail("bad length, got " + returnedlist.length() + " expect 0"); - } - } - - @Test - public void testNormalBadPath() { - String query = "flarg/?publisher=JUnit"; - testCommon(HttpServletResponse.SC_NOT_FOUND, query, "text/html;charset=ISO-8859-1", "JUnit"); - } - - @Test - public void testNormalGoodPublisher() { - JSONArray ja = db_state.getJSONArray("feeds"); - JSONObject feed0 = ja.getJSONObject(0); - String query = "?publisher=" + feed0.getString("publisher"); - testCommon(HttpServletResponse.SC_OK, query, FeedServlet.FEEDLIST_CONTENT_TYPE, "JUnit"); - int expect = 0; - for (int i = 0; i < ja.length(); i++) { - JSONObject jo = ja.getJSONObject(i); - if (jo.getString("publisher").equals(feed0.getString("publisher")) && !jo.getBoolean("deleted")) { - expect++; - } - } - if (returnedlist.length() != expect) { - fail("bad length, got " + returnedlist.length() + " expected " + expect); - } - } - - @Test - public void testNormalBadPublisher() { - String query = "?publisher=ZZTOP123456"; - testCommon(HttpServletResponse.SC_OK, query, FeedServlet.FEEDLIST_CONTENT_TYPE, "JUnit"); - if (returnedlist.length() != 0) { - fail("bad length"); - } - } - - @Test - public void testNormalGoodSubscriber() { - JSONArray ja = db_state.getJSONArray("subscriptions"); - if (ja.length() > 0) { - JSONObject sub0 = ja.getJSONObject(0); - String query = "?subscriber=" + sub0.getString("subscriber"); - testCommon(HttpServletResponse.SC_OK, query, FeedServlet.FEEDLIST_CONTENT_TYPE, "JUnit"); -// aarg! - this is complicated! -// int expect = 0; -// for (int i = 0; i < ja.length(); i++) { -// JSONObject jo = ja.getJSONObject(i); -// if (jo.getString("subscriber").equals(sub0.getString("subscriber"))) -// expect++; -// } -// if (returnedlist.length() != 1) -// fail("bad length " + returnedlist.toString()); - } else { - // There are no subscriptions yet, so use a made up name - testCommon(HttpServletResponse.SC_OK, "?subscriber=foo", FeedServlet.FEEDLIST_CONTENT_TYPE, "JUnit"); - } - } - - @Test - public void testNormalBadSubscriber() { - String query = "?subscriber=ZZTOP123456"; - testCommon(HttpServletResponse.SC_OK, query, FeedServlet.FEEDLIST_CONTENT_TYPE, "JUnit"); - if (returnedlist.length() != 0) { - fail("bad length"); - } - } - - private void testCommon(int expect) { - testCommon(expect, "", FeedServlet.FEEDLIST_CONTENT_TYPE, "JUnit"); - } - - private void testCommon(int expect, String query, String ectype, String bhdr) { - String url = props.getProperty("test.host") + "/" + query; - HttpGet httpGet = new HttpGet(url); - try { - if (bhdr != null) { - httpGet.addHeader(FeedServlet.BEHALF_HEADER, bhdr); - } - - HttpResponse response = httpclient.execute(httpGet); - ckResponse(response, expect); - - HttpEntity entity = response.getEntity(); - String ctype = entity.getContentType().getValue().trim(); - if (!ctype.equals(ectype)) { - fail("Got wrong content type: " + ctype); - } - - // do something useful with the response body and ensure it is fully consumed - if (ctype.equals(FeedServlet.FEEDLIST_CONTENT_TYPE)) { - try { - returnedlist = new JSONArray(new JSONTokener(entity.getContent())); - } catch (Exception e) { - fail("Bad JSON: " + e.getMessage()); - } - } else { - EntityUtils.consume(entity); - } - } catch (IOException e) { - fail(e.getMessage()); - } finally { - httpGet.releaseConnection(); - } - } -} diff --git a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestDrFeedsPost.java b/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestDrFeedsPost.java deleted file mode 100644 index 9f604fe9..00000000 --- a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestDrFeedsPost.java +++ /dev/null @@ -1,308 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START================================================== - * * org.onap.dmaap - * * =========================================================================== - * * Copyright © 2017 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==================================================== - * * - * * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * * - ******************************************************************************/ - -package datarouter.provisioning; - -import static org.junit.Assert.fail; - -import java.io.IOException; - -import jakarta.servlet.http.HttpServletResponse; - -import org.apache.http.Header; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.ByteArrayEntity; -import org.apache.http.entity.ContentType; -import org.apache.http.util.EntityUtils; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; -import org.json.JSONTokener; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; -import org.onap.dmaap.datarouter.provisioning.FeedServlet; - -public class IntegrationTestDrFeedsPost extends IntegrationTestBase { - @BeforeClass - public static void setUpBeforeClass() throws Exception { - } - - @AfterClass - public static void tearDownAfterClass() throws Exception { - } - - @Test - public void testNormal() { - JSONObject jo = buildFeedRequest(); - testCommon(jo, HttpServletResponse.SC_CREATED); - } - - @Test - public void testNormalNoCtVersion() { - JSONObject jo = buildFeedRequest(); - testCommon(jo, HttpServletResponse.SC_CREATED, "application/vnd.dmaap-dr.feed", "JUnit"); - } - - @Test - public void testBadContentType() { - JSONObject jo = buildFeedRequest(); - testCommon(jo, HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE, "bad/bad", "Junit"); - } - - @Test - public void testNoBehalfHeader() { - JSONObject jo = buildFeedRequest(); - testCommon(jo, HttpServletResponse.SC_BAD_REQUEST, FeedServlet.FEED_CONTENT_TYPE, null); - } - - @Test - public void testMissingName() { - JSONObject jo = buildFeedRequest(); - jo.remove("name"); - testCommon(jo, 400); - } - - @Test - public void testTooLongName() { - JSONObject jo = buildFeedRequest(); - jo.put("name", "123456789012345678901234567890"); - testCommon(jo, 400); - } - - @Test - public void testMissingVersion() { - JSONObject jo = buildFeedRequest(); - jo.remove("version"); - testCommon(jo, 400); - } - - @Test - public void testTooLongVersion() { - JSONObject jo = buildFeedRequest(); - jo.put("version", "123456789012345678901234567890"); - testCommon(jo, 400); - } - - @Test - public void testTooLongDescription() { - // normal request - JSONObject jo = buildFeedRequest(); - jo.put("description", s257); - testCommon(jo, 400); - } - - @Test - public void testMissingAuthorization() { - JSONObject jo = buildFeedRequest(); - jo.remove("authorization"); - testCommon(jo, 400); - } - - @Test - public void testMissingClassification() { - JSONObject jo = buildFeedRequest(); - JSONObject j2 = jo.getJSONObject("authorization"); - j2.remove("classification"); - testCommon(jo, 400); - } - - @Test - public void testTooLongClassification() { - JSONObject jo = buildFeedRequest(); - JSONObject j2 = jo.getJSONObject("authorization"); - j2.put("classification", s33); - testCommon(jo, 400); - } - - @Test - public void testNoEndpointIds() { - JSONObject jo = buildFeedRequest(); - JSONObject j2 = jo.getJSONObject("authorization"); - j2.put("endpoint_ids", new JSONArray()); - testCommon(jo, 400); - } - - @Test - public void testBadIpAddress1() { - JSONObject jo = buildFeedRequest(); - JSONObject j2 = jo.getJSONObject("authorization"); - JSONArray ja = j2.getJSONArray("endpoint_addrs"); - ja.put("ZZZ^&#$%@#&^%$@#&^"); - testCommon(jo, 400); - } - - @Test - public void testBadIpAddress2() { - JSONObject jo = buildFeedRequest(); - JSONObject j2 = jo.getJSONObject("authorization"); - JSONArray ja = j2.getJSONArray("endpoint_addrs"); - ja.put("135.207.136.678"); // bad IPv4 addr - testCommon(jo, 400); - } - - @Test - public void testBadIpAddress3() { - JSONObject jo = buildFeedRequest(); - JSONObject j2 = jo.getJSONObject("authorization"); - JSONArray ja = j2.getJSONArray("endpoint_addrs"); - ja.put("2001:1890:1110:d000:1a29::17567"); // bad IPv6 addr - testCommon(jo, 400); - } - - @Test - public void testBadNetMask() { - JSONObject jo = buildFeedRequest(); - JSONObject j2 = jo.getJSONObject("authorization"); - JSONArray ja = j2.getJSONArray("endpoint_addrs"); - ja.put("10.10.10.10/64"); - testCommon(jo, 400); - } - - @Test - public void testGoodIpAddress1() { - JSONObject jo = buildFeedRequest(); - JSONObject j2 = jo.getJSONObject("authorization"); - JSONArray ja = j2.getJSONArray("endpoint_addrs"); - ja.put("135.207.136.175"); // good IPv4 addr - testCommon(jo, 201); - } - - @Test - public void testGoodIpAddress2() { - JSONObject jo = buildFeedRequest(); - JSONObject j2 = jo.getJSONObject("authorization"); - JSONArray ja = j2.getJSONArray("endpoint_addrs"); - ja.put("2001:1890:1110:d000:1a29::175"); // good IPv6 addr - testCommon(jo, 201); - } - - @Test - public void testGoodNetMask() { - JSONObject jo = buildFeedRequest(); - JSONObject j2 = jo.getJSONObject("authorization"); - JSONArray ja = j2.getJSONArray("endpoint_addrs"); - ja.put("2001:1890:1110:d000:1a29::175/120"); - testCommon(jo, 201); - } - - private void testCommon(JSONObject jo, int expect) { - testCommon(jo, expect, FeedServlet.FEED_CONTENT_TYPE, "JUnit"); - } - - private void testCommon(JSONObject jo, int expect, String ctype, String bhdr) { - String url = props.getProperty("test.host") + "/"; - HttpPost httpPost = new HttpPost(url); - try { - if (bhdr != null) { - httpPost.addHeader(FeedServlet.BEHALF_HEADER, bhdr); - } - String strJo = jo.toString(); - HttpEntity body = new ByteArrayEntity(strJo.getBytes(), ContentType.create(ctype)); - httpPost.setEntity(body); - - HttpResponse response = httpclient.execute(httpPost); - ckResponse(response, expect); - - HttpEntity entity = response.getEntity(); - ctype = entity.getContentType().getValue().trim(); - int code = response.getStatusLine().getStatusCode(); - if (code == HttpServletResponse.SC_CREATED && !ctype.equals(FeedServlet.FEEDFULL_CONTENT_TYPE)) { - fail("Got wrong content type: " + ctype); - } - - if (code == HttpServletResponse.SC_CREATED) { - Header[] loc = response.getHeaders("Location"); - if (loc == null) { - fail("Missing Location header."); - } - } - - // do something useful with the response body and ensure it is fully consumed - if (ctype.equals(FeedServlet.FEEDFULL_CONTENT_TYPE)) { - // ck Location header! - JSONObject jo2 = null; - try { - jo2 = new JSONObject(new JSONTokener(entity.getContent())); - System.err.println(jo2.toString()); - } catch (Exception e) { - fail("Bad JSON: " + e.getMessage()); - } - try { - jo2.getString("publisher"); - JSONObject jo3 = jo2.getJSONObject("links"); - jo3.getString("self"); - jo3.getString("publish"); - jo3.getString("subscribe"); - jo3.getString("log"); - } catch (JSONException e) { - fail("required field missing from result: " + e.getMessage()); - } - } else { - EntityUtils.consume(entity); - } - } catch (IOException e) { - fail(e.getMessage()); - } finally { - httpPost.releaseConnection(); - } - } - - private JSONObject buildFeedRequest() { - JSONObject jo = new JSONObject(); - jo.put("name", "JunitFeed"); - jo.put("version", "" + System.currentTimeMillis()); // make version unique - jo.put("description", "Sample feed used by JUnit to test"); - - JSONObject jo2 = new JSONObject(); - jo2.put("classification", "unrestricted"); - - JSONObject jo3 = new JSONObject(); - jo3.put("id", "id001"); - jo3.put("password", "re1kwelj"); - JSONObject jo4 = new JSONObject(); - jo4.put("id", "id002"); - jo4.put("password", "o9eqlmbd"); - - JSONArray ja = new JSONArray(); - ja.put(jo3); - ja.put(jo4); - jo2.put("endpoint_ids", ja); - - ja = new JSONArray(); - ja.put("10.0.0.1"); - ja.put("192.168.0.1"); - ja.put("135.207.136.128/25"); - jo2.put("endpoint_addrs", ja); - - jo.put("authorization", jo2); - return jo; - } -} -/* -curl -v -X POST -H 'X-DMAAP-DR-ON-BEHALF-OF: tester' -H 'Content-type: application/vnd.dmaap-dr.feed' \ - --user publisher:tomcat \ - --data "$data" http://127.0.0.1:8080/prov/feed/ -*/ diff --git a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestDrFeedsPut.java b/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestDrFeedsPut.java deleted file mode 100644 index 15e7c70a..00000000 --- a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestDrFeedsPut.java +++ /dev/null @@ -1,58 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START================================================== - * * org.onap.dmaap - * * =========================================================================== - * * Copyright © 2017 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==================================================== - * * - * * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * * - ******************************************************************************/ - -package datarouter.provisioning; - -import static org.junit.Assert.fail; - -import java.io.IOException; - -import jakarta.servlet.http.HttpServletResponse; - -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpPut; -import org.apache.http.util.EntityUtils; -import org.junit.Test; -import org.onap.dmaap.datarouter.provisioning.FeedServlet; - -public class IntegrationTestDrFeedsPut extends IntegrationTestBase { - @Test - public void testNotAllowed() { - String url = props.getProperty("test.host") + "/"; - HttpPut put = new HttpPut(url); - try { - put.addHeader(FeedServlet.BEHALF_HEADER, "JUnit"); - - HttpResponse response = httpclient.execute(put); - ckResponse(response, HttpServletResponse.SC_METHOD_NOT_ALLOWED); - - HttpEntity entity = response.getEntity(); - EntityUtils.consume(entity); - } catch (IOException e) { - fail(e.getMessage()); - } finally { - put.releaseConnection(); - } - } -} diff --git a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestFeedDelete.java b/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestFeedDelete.java deleted file mode 100644 index 25e6e43a..00000000 --- a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestFeedDelete.java +++ /dev/null @@ -1,100 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START================================================== - * * org.onap.dmaap - * * =========================================================================== - * * Copyright © 2017 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==================================================== - * * - * * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * * - ******************************************************************************/ - -package datarouter.provisioning; - -import static org.junit.Assert.fail; - -import java.io.IOException; - -import jakarta.servlet.http.HttpServletResponse; - -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpDelete; -import org.apache.http.util.EntityUtils; -import org.json.JSONArray; -import org.json.JSONObject; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.onap.dmaap.datarouter.provisioning.FeedServlet; - -public class IntegrationTestFeedDelete extends IntegrationTestBase { - @BeforeClass - public static void setUpBeforeClass() throws Exception { - } - - @AfterClass - public static void tearDownAfterClass() throws Exception { - } - - @Before - public void setUp() throws Exception { - super.setUp(); - getDBstate(); - } - - @Test - public void testDeleteNormal() { - // Delete the first non-deleted feed in the DB - JSONArray ja = db_state.getJSONArray("feeds"); - for (int i = ja.length() - 1; i >= 0; i--) { - JSONObject feed = ja.getJSONObject(i); - if (!feed.getBoolean("deleted")) { - int feedid = feed.getInt("feedid"); - testCommon(HttpServletResponse.SC_NO_CONTENT, "/feed/" + feedid); - return; - } - } - } - - @Test - public void testDeleteNoFeedId() { - testCommon(HttpServletResponse.SC_BAD_REQUEST, "/feed/"); - } - - @Test - public void testDeleteNoFeed() { - testCommon(HttpServletResponse.SC_NOT_FOUND, "/feed/999999"); - } - - private void testCommon(int expect, String uri) { - String url = props.getProperty("test.host") + uri; - HttpDelete del = new HttpDelete(url); - try { - del.addHeader(FeedServlet.BEHALF_HEADER, "JUnit"); - - HttpResponse response = httpclient.execute(del); - ckResponse(response, expect); - - HttpEntity entity = response.getEntity(); - EntityUtils.consume(entity); - } catch (IOException e) { - fail(e.getMessage()); - } finally { - del.releaseConnection(); - } - } -} diff --git a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestFeedPut.java b/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestFeedPut.java deleted file mode 100644 index d77bc98d..00000000 --- a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestFeedPut.java +++ /dev/null @@ -1,214 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START================================================== - * * org.onap.dmaap - * * =========================================================================== - * * Copyright © 2017 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==================================================== - * * - * * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * * - ******************************************************************************/ - -package datarouter.provisioning; - -import static org.junit.Assert.fail; - -import java.io.IOException; - -import jakarta.servlet.http.HttpServletResponse; - -import org.apache.http.Header; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpPut; -import org.apache.http.entity.ByteArrayEntity; -import org.apache.http.entity.ContentType; -import org.apache.http.util.EntityUtils; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; -import org.json.JSONTokener; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.onap.dmaap.datarouter.provisioning.FeedServlet; - -public class IntegrationTestFeedPut extends IntegrationTestBase { - @BeforeClass - public static void setUpBeforeClass() throws Exception { - } - - @AfterClass - public static void tearDownAfterClass() throws Exception { - } - - @Before - public void setUp() throws Exception { - super.setUp(); - getDBstate(); - } - - @Test - public void testPutNoFeedId() { - JSONObject jo = buildFeedRequest(); - testCommon(jo, HttpServletResponse.SC_BAD_REQUEST, "/feed/"); - } - - @Test - public void testPutNoFeed() { - JSONObject jo = buildFeedRequest(); - testCommon(jo, HttpServletResponse.SC_NOT_FOUND, "/feed/999999"); - } - - @Test - public void testBadContentType() { - JSONObject jo = buildFeedRequest(); - testCommon(jo, HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE, "bad/bad", "JUnit"); - } - - @Test - public void testChangeName() { - JSONObject jo = buildFeedRequest(); - jo.put("name", "badname"); - testCommon(jo, HttpServletResponse.SC_BAD_REQUEST, FeedServlet.FEED_CONTENT_TYPE, "JUnit"); - } - - @Test - public void testChangeVersion() { - JSONObject jo = buildFeedRequest(); - jo.put("version", "badvers"); - testCommon(jo, HttpServletResponse.SC_BAD_REQUEST, FeedServlet.FEED_CONTENT_TYPE, "JUnit"); - } - - @Test - public void testBadPublisher() { - JSONObject jo = buildFeedRequest(); - testCommon(jo, HttpServletResponse.SC_BAD_REQUEST, FeedServlet.FEED_CONTENT_TYPE, "BadBadBad"); - } - - @Test - public void testChangeDescription() { - JSONObject jo = buildFeedRequest(); - // change descr - jo.put("description", "This description HAS BEEN CHANGED!!!"); - testCommon(jo, HttpServletResponse.SC_OK, FeedServlet.FEED_CONTENT_TYPE, "JUnit"); - } - - private void testCommon(JSONObject jo, int expect, String uri) { - testCommon(jo, expect, FeedServlet.FEED_CONTENT_TYPE, "Junit", uri); - } - - private void testCommon(JSONObject jo, int expect, String ctype, String bhdr) { - JSONArray ja = db_state.getJSONArray("feeds"); - for (int i = 0; i < ja.length(); i++) { - JSONObject feed0 = ja.getJSONObject(i); - if (!feed0.getBoolean("deleted") && feed0.getString("publisher").equals(bhdr)) { - int feedid = feed0.getInt("feedid"); - testCommon(jo, expect, ctype, bhdr, "/feed/" + feedid); - return; - } - } - } - - private void testCommon(JSONObject jo, int expect, String ctype, String bhdr, String uri) { - String url = props.getProperty("test.host") + uri; - HttpPut put = new HttpPut(url); - try { - if (bhdr != null) { - put.addHeader(FeedServlet.BEHALF_HEADER, bhdr); - } - String strJo = jo.toString(); - HttpEntity body = new ByteArrayEntity(strJo.getBytes(), ContentType.create(ctype)); - put.setEntity(body); - - HttpResponse response = httpclient.execute(put); - ckResponse(response, expect); - - HttpEntity entity = response.getEntity(); - ctype = entity.getContentType().getValue().trim(); - int code = response.getStatusLine().getStatusCode(); - if (code == HttpServletResponse.SC_CREATED && !ctype.equals(FeedServlet.FEEDFULL_CONTENT_TYPE)) { - fail("Got wrong content type: " + ctype); - } - - if (code == HttpServletResponse.SC_CREATED) { - Header[] loc = response.getHeaders("Location"); - if (loc == null) { - fail("Missing Location header."); - } - } - - // do something useful with the response body and ensure it is fully consumed - if (ctype.equals(FeedServlet.FEEDFULL_CONTENT_TYPE)) { - // ck Location header! - JSONObject jo2 = null; - try { - jo2 = new JSONObject(new JSONTokener(entity.getContent())); - System.err.println(jo2.toString()); - } catch (Exception e) { - fail("Bad JSON: " + e.getMessage()); - } - try { - jo2.getString("publisher"); - JSONObject jo3 = jo2.getJSONObject("links"); - jo3.getString("self"); - jo3.getString("publish"); - jo3.getString("subscribe"); - jo3.getString("log"); - } catch (JSONException e) { - fail("required field missing from result: " + e.getMessage()); - } - } else { - EntityUtils.consume(entity); - } - } catch (IOException e) { - fail(e.getMessage()); - } finally { - put.releaseConnection(); - } - } - - private JSONObject buildFeedRequest() { - JSONObject jo = new JSONObject(); - jo.put("name", "feed"); - jo.put("version", "1.0.0"); - jo.put("description", "Sample feed used by JUnit to test"); - - JSONObject jo2 = new JSONObject(); - jo2.put("classification", "unrestricted"); - - JSONObject jo3 = new JSONObject(); - jo3.put("id", "id001"); - jo3.put("password", "re1kwelj"); - JSONObject jo4 = new JSONObject(); - jo4.put("id", "id002"); - jo4.put("password", "o9eqlmbd"); - - JSONArray ja = new JSONArray(); - ja.put(jo3); - ja.put(jo4); - jo2.put("endpoint_ids", ja); - - ja = new JSONArray(); - ja.put("20.0.0.1"); - ja.put("195.68.12.15"); - ja.put("135.207.136.128/25"); - jo2.put("endpoint_addrs", ja); - - jo.put("authorization", jo2); - return jo; - } -} diff --git a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestInternalGet.java b/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestInternalGet.java deleted file mode 100644 index 25397f7f..00000000 --- a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestInternalGet.java +++ /dev/null @@ -1,106 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START================================================== - * * org.onap.dmaap - * * =========================================================================== - * * Copyright © 2017 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==================================================== - * * - * * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * * - ******************************************************************************/ - -package datarouter.provisioning; - -import static org.junit.Assert.fail; - -import java.io.IOException; - -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.util.EntityUtils; -import org.json.JSONException; -import org.json.JSONObject; -import org.json.JSONTokener; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; -import org.onap.dmaap.datarouter.provisioning.FeedServlet; -import org.onap.dmaap.datarouter.provisioning.beans.Parameters; - -public class IntegrationTestInternalGet extends IntegrationTestBase { - @BeforeClass - public static void setUpBeforeClass() throws Exception { - } - - @AfterClass - public static void tearDownAfterClass() throws Exception { - } - - @Test - public void testNormal() { - String url = props.getProperty("test.host") + "/internal/prov"; - HttpGet httpPost = new HttpGet(url); - try { - httpPost.addHeader(FeedServlet.BEHALF_HEADER, "JUnit"); - - HttpResponse response = httpclient.execute(httpPost); - int code = response.getStatusLine().getStatusCode(); - if (code != 200) { - fail("Unexpected response, expect " + 200 + " got " + code); - } - - HttpEntity entity = response.getEntity(); - String ctype = entity.getContentType().getValue().trim(); - boolean ok = ctype.equals(FeedServlet.PROVFULL_CONTENT_TYPE1); - ok |= ctype.equals(FeedServlet.PROVFULL_CONTENT_TYPE2); - if (!ok) { - fail("Got wrong content type: " + ctype); - } - - // do something useful with the response body and ensure it is fully consumed - if (ok) { - JSONObject jo = null; - try { - jo = new JSONObject(new JSONTokener(entity.getContent())); - } catch (Exception e) { - fail("Bad JSON: " + e.getMessage()); - } - try { - jo.getJSONArray("feeds"); - jo.getJSONArray("subscriptions"); - JSONObject jo2 = jo.getJSONObject("parameters"); - jo2.getJSONArray(Parameters.NODES); - jo2.getString(Parameters.ACTIVE_POD); - jo2.getString(Parameters.STANDBY_POD); - jo2.getInt(Parameters.LOGROLL_INTERVAL); - jo2.getInt(Parameters.DELIVERY_INIT_RETRY_INTERVAL); - jo2.getInt(Parameters.DELIVERY_MAX_RETRY_INTERVAL); - jo2.getInt(Parameters.DELIVERY_RETRY_RATIO); - jo2.getInt(Parameters.DELIVERY_MAX_AGE); - } catch (JSONException e) { - fail("required field missing from result: " + e.getMessage()); - } - } else { - EntityUtils.consume(entity); - } - } catch (IOException e) { - e.printStackTrace(); - fail(e.getMessage()); - } finally { - httpPost.releaseConnection(); - } - } -} diff --git a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestInternalMisc.java b/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestInternalMisc.java deleted file mode 100644 index 9c30cd3f..00000000 --- a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestInternalMisc.java +++ /dev/null @@ -1,155 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START================================================== - * * org.onap.dmaap - * * =========================================================================== - * * Copyright © 2017 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==================================================== - * * - * * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * * - ******************************************************************************/ - -package datarouter.provisioning; - -import static org.junit.Assert.fail; - -import java.io.IOException; - -import jakarta.servlet.http.HttpServletResponse; - -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.util.EntityUtils; -import org.json.JSONArray; -import org.json.JSONTokener; -import org.junit.Test; -import org.onap.dmaap.datarouter.provisioning.FeedServlet; - -public class IntegrationTestInternalMisc extends IntegrationTestBase { - @Test - public void testInternalDrlogs() { - String url = props.getProperty("test.host") + "/internal/drlogs"; - HttpGet httpPost = new HttpGet(url); - try { - httpPost.addHeader(FeedServlet.BEHALF_HEADER, "JUnit"); - HttpResponse response = httpclient.execute(httpPost); - int code = response.getStatusLine().getStatusCode(); - if (code != 200) { - fail("Unexpected response, expect " + HttpServletResponse.SC_NOT_FOUND + " got " + code); - } - - HttpEntity entity = response.getEntity(); - String ctype = entity.getContentType().getValue().trim(); - boolean ok = ctype.equals("text/plain"); - if (!ok) { - fail("Got wrong content type: " + ctype); - } - - EntityUtils.consume(entity); - } catch (IOException e) { - e.printStackTrace(); - fail(e.getMessage()); - } finally { - httpPost.releaseConnection(); - } - } - - @Test - public void testInternalHalt() { - String url = props.getProperty("test.host") + "/halt"; - HttpGet httpPost = new HttpGet(url); - try { - httpPost.addHeader(FeedServlet.BEHALF_HEADER, "JUnit"); - - HttpResponse response = httpclient.execute(httpPost); - int code = response.getStatusLine().getStatusCode(); - if (code != HttpServletResponse.SC_NOT_FOUND) { - fail("Unexpected response, expect " + HttpServletResponse.SC_NOT_FOUND + " got " + code); - } - - HttpEntity entity = response.getEntity(); - EntityUtils.consume(entity); - } catch (IOException e) { - e.printStackTrace(); - fail(e.getMessage()); - } finally { - httpPost.releaseConnection(); - } - } - - @SuppressWarnings("unused") - @Test - public void testInternalLogs() { - String url = props.getProperty("test.host") + "/internal/logs"; - HttpGet httpPost = new HttpGet(url); - try { - httpPost.addHeader(FeedServlet.BEHALF_HEADER, "JUnit"); - - HttpResponse response = httpclient.execute(httpPost); - int code = response.getStatusLine().getStatusCode(); - if (code != 200) { - fail("Unexpected response, expect " + 200 + " got " + code); - } - - HttpEntity entity = response.getEntity(); - String ctype = entity.getContentType().getValue().trim(); - boolean ok = ctype.equals("application/json"); - if (!ok) { - fail("Got wrong content type: " + ctype); - } - - // do something useful with the response body and ensure it is fully consumed - if (ok) { - try { - new JSONArray(new JSONTokener(entity.getContent())); - } catch (Exception e) { - fail("Bad JSON: " + e.getMessage()); - } - } else { - EntityUtils.consume(entity); - } - } catch (IOException e) { - e.printStackTrace(); - fail(e.getMessage()); - } finally { - httpPost.releaseConnection(); - } - } - - @Test - public void testInternalBadUrl() { - String url = props.getProperty("test.host") + "/internal/badurl"; - HttpGet httpPost = new HttpGet(url); - try { - httpPost.addHeader(FeedServlet.BEHALF_HEADER, "JUnit"); - - HttpResponse response = httpclient.execute(httpPost); - int code = response.getStatusLine().getStatusCode(); - if (code != HttpServletResponse.SC_NOT_FOUND) { - fail("Unexpected response, expect " + HttpServletResponse.SC_NOT_FOUND + " got " + code); - } - - HttpEntity entity = response.getEntity(); - EntityUtils.consume(entity); - } catch (IOException e) { - e.printStackTrace(); - fail(e.getMessage()); - } finally { - httpPost.releaseConnection(); - } - } - -} diff --git a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestLogGet.java b/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestLogGet.java deleted file mode 100644 index 0da0f41d..00000000 --- a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestLogGet.java +++ /dev/null @@ -1,205 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START================================================== - * * org.onap.dmaap - * * =========================================================================== - * * Copyright © 2017 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==================================================== - * * - * * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * * - ******************************************************************************/ - -package datarouter.provisioning; - -import static org.junit.Assert.fail; - -import java.io.IOException; -import java.text.SimpleDateFormat; - -import jakarta.servlet.http.HttpServletResponse; - -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.util.EntityUtils; -import org.json.JSONArray; -import org.json.JSONTokener; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.onap.dmaap.datarouter.provisioning.FeedServlet; - -public class IntegrationTestLogGet extends IntegrationTestBase { - private JSONArray returnedlist; - private int feedid = 4; - private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); - - @BeforeClass - public static void setUpBeforeClass() throws Exception { - // need to seed the DB here - } - - @AfterClass - public static void tearDownAfterClass() throws Exception { - // need to "unseed" the DB - } - - /** - * This is the setUp method. - */ - @Before - public void setUp() throws Exception { - super.setUp(); - getDBstate(); -// JSONArray ja = db_state.getJSONArray("feeds"); -// for (int i = 0; i < ja.length(); i++) { -// JSONObject jo = ja.getJSONObject(i); -// if (!jo.getBoolean("deleted")) -// feedid = jo.getInt("feedid"); -// } - } - - @Test - public void testNormal() { - testCommon(HttpServletResponse.SC_OK); - } - - @Test - public void testNormalPubOnly() { - testCommon(HttpServletResponse.SC_OK, "?type=pub"); - } - - @Test - public void testNormalDelOnly() { - testCommon(HttpServletResponse.SC_OK, "?type=del"); - } - - @Test - public void testNormalExpOnly() { - testCommon(HttpServletResponse.SC_OK, "?type=exp"); - } - - @Test - public void testNormalXxxOnly() { - testCommon(HttpServletResponse.SC_BAD_REQUEST, "?type=xxx"); - } - - @Test - public void testNormalStatusSuccess() { - testCommon(HttpServletResponse.SC_OK, "?statusCode=success"); - } - - @Test - public void testNormalStatusRedirect() { - testCommon(HttpServletResponse.SC_OK, "?statusCode=redirect"); - } - - @Test - public void testNormalStatusFailure() { - testCommon(HttpServletResponse.SC_OK, "?statusCode=failure"); - } - - @Test - public void testNormalStatus200() { - testCommon(HttpServletResponse.SC_OK, "?statusCode=200"); - } - - @Test - public void testNormalStatusXxx() { - testCommon(HttpServletResponse.SC_BAD_REQUEST, "?statusCode=xxx"); - } - - @Test - public void testNormalExpiryNotRetryable() { - testCommon(HttpServletResponse.SC_OK, "?expiryReason=notRetryable"); - } - - @Test - public void testNormalExpiryRetriesExhausted() { - testCommon(HttpServletResponse.SC_OK, "?expiryReason=retriesExhausted"); - } - - @Test - public void testNormalExpiryXxx() { - testCommon(HttpServletResponse.SC_BAD_REQUEST, "?expiryReason=xxx"); - } - - @Test - public void testNormalPublishId() { - testCommon(HttpServletResponse.SC_OK, "?publishId=1366985877801.mtdvnj00-drtr.proto.research.att.com"); - } - - @Test - public void testNormalStart() { - long nowMinus5Days = System.currentTimeMillis() - (5 * 24 * 60 * 60 * 1000L); // 5 days - testCommon(HttpServletResponse.SC_OK, String.format("?start=%s", sdf.format(nowMinus5Days))); - } - - @Test - public void testBadStart() { - testCommon(HttpServletResponse.SC_BAD_REQUEST, "?start=xxx"); - } - - @Test - public void testLongEnd() { - testCommon(HttpServletResponse.SC_OK, "?end=1364837896220"); - } - - @Test - public void testBadEnd() { - testCommon(HttpServletResponse.SC_BAD_REQUEST, "?end=2013-04-25T11:01:25Q"); - } - - private void testCommon(int expect) { - testCommon(expect, ""); - } - - private void testCommon(int expect, String query) { - String url = props.getProperty("test.host") + "/feedlog/" + feedid + query; - HttpGet httpGet = new HttpGet(url); - try { - HttpResponse response = httpclient.execute(httpGet); - ckResponse(response, expect); - - HttpEntity entity = response.getEntity(); - String ctype = entity.getContentType().getValue().trim(); - if (expect == HttpServletResponse.SC_OK) { - if (!ctype.equals(FeedServlet.LOGLIST_CONTENT_TYPE)) { - fail("Got wrong content type: " + ctype); - } - } - - // do something useful with the response body and ensure it is fully consumed - if (ctype.equals(FeedServlet.LOGLIST_CONTENT_TYPE)) { - try { - returnedlist = new JSONArray(new JSONTokener(entity.getContent())); - int returnedListLength = returnedlist.length(); - if (returnedListLength != 0) { - System.err.println(returnedListLength + " items"); - } - } catch (Exception e) { - fail("Bad JSON: " + e.getMessage()); - } - } else { - EntityUtils.consume(entity); - } - } catch (IOException e) { - fail(e.getMessage()); - } finally { - httpGet.releaseConnection(); - } - } -} diff --git a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestPublish.java b/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestPublish.java deleted file mode 100644 index 5c84a670..00000000 --- a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestPublish.java +++ /dev/null @@ -1,126 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START================================================== - * * org.onap.dmaap - * * =========================================================================== - * * Copyright © 2017 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==================================================== - * * - * * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * * - ******************************************************************************/ - -package datarouter.provisioning; - -import static org.junit.Assert.fail; - -import java.io.IOException; - -import jakarta.servlet.http.HttpServletResponse; - -import org.apache.http.Header; -import org.apache.http.HttpResponse; -import org.apache.http.client.RedirectStrategy; -import org.apache.http.client.methods.HttpDelete; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.methods.HttpPut; -import org.apache.http.client.methods.HttpRequestBase; -import org.apache.http.impl.client.DefaultRedirectStrategy; -import org.json.JSONArray; -import org.json.JSONObject; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.onap.dmaap.datarouter.provisioning.FeedServlet; - -public class IntegrationTestPublish extends IntegrationTestBase { - private String publishUrl; - - @BeforeClass - public static void setUpBeforeClass() throws Exception { - } - - @AfterClass - public static void tearDownAfterClass() throws Exception { - } - - /** - * This is the setUp method. - */ - @Before - public void setUp() throws Exception { - super.setUp(); - getDBstate(); - // Get publish URL from first feed - JSONArray ja = db_state.getJSONArray("feeds"); - for (int i = ja.length() - 1; i >= 0; i--) { - JSONObject feed = ja.getJSONObject(i); - if (!feed.getBoolean("deleted")) { - publishUrl = feed.getJSONObject("links").getString("publish"); - publishUrl += "/" + System.currentTimeMillis(); - return; - } - } - } - - @Test - public void testDelete() { - HttpDelete httpDelete = new HttpDelete(publishUrl); - testCommon(httpDelete); - } - - @Test - public void testGet() { - HttpGet httpGet = new HttpGet(publishUrl); - testCommon(httpGet); - } - - @Test - public void testPut() { - HttpPut httpPut = new HttpPut(publishUrl); - testCommon(httpPut); - } - - @Test - public void testPost() { - HttpPost httpPost = new HttpPost(publishUrl); - testCommon(httpPost); - } - - private void testCommon(HttpRequestBase rb) { - try { - rb.addHeader(FeedServlet.BEHALF_HEADER, "JUnit"); - RedirectStrategy strategy = new DefaultRedirectStrategy() { - protected boolean isRedirectable(String method) { - return false; - } - }; - httpclient.setRedirectStrategy(strategy); - HttpResponse response = httpclient.execute(rb); - ckResponse(response, HttpServletResponse.SC_MOVED_PERMANENTLY); - - // Make sure there is a Location hdr - Header[] loc = response.getHeaders("Location"); - if (loc == null || loc.length == 0) { - fail("No location header"); - } - } catch (IOException e) { - fail(e.getMessage()); - } finally { - rb.releaseConnection(); - } - } -} diff --git a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestRleBitSet.java b/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestRleBitSet.java deleted file mode 100644 index 133e7dc1..00000000 --- a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestRleBitSet.java +++ /dev/null @@ -1,289 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START================================================== - * * org.onap.dmaap - * * =========================================================================== - * * Copyright © 2017 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==================================================== - * * - * * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * * - ******************************************************************************/ - -package datarouter.provisioning; - -import static org.junit.Assert.fail; - -import java.util.Iterator; - -import org.junit.Test; -import org.onap.dmaap.datarouter.provisioning.utils.RLEBitSet; - -public class IntegrationTestRleBitSet { - @Test - public void testBasicConstructor() { - RLEBitSet bs = new RLEBitSet(); - if (!bs.isEmpty()) { - fail("bit set not empty"); - } - } - - @Test - public void testStringConstructor() { - RLEBitSet bs = new RLEBitSet("1-10"); - if (bs.isEmpty()) { - fail("bit set is empty"); - } - if (!bs.toString().equals("1-10")) { - fail("bad value"); - } - bs = new RLEBitSet("69,70,71"); - if (bs.isEmpty()) { - fail("bit set is empty"); - } - if (!bs.toString().equals("69-71")) { - fail("bad value"); - } - bs = new RLEBitSet("555 444 443 442"); - if (!bs.toString().equals("442-444,555")) { - fail("bad value"); - } - } - - @Test - public void testLength() { - RLEBitSet bs = new RLEBitSet(); - if (bs.length() != 0) { - fail("testLength fail " + bs + " " + bs.length()); - } - bs = new RLEBitSet("1-10"); - if (bs.length() != 11) { - fail("testLength fail " + bs + " " + bs.length()); - } - bs = new RLEBitSet("1-20,100000000-100000005"); - if (bs.length() != 100000006) { - fail("testLength fail " + bs + " " + bs.length()); - } - } - - @Test - public void testGet() { - RLEBitSet bs = new RLEBitSet("1-10"); - if (!bs.get(5)) { - fail("get"); - } - if (bs.get(69)) { - fail("get"); - } - } - - @Test - public void testSetOneBit() { - RLEBitSet bs = new RLEBitSet(); - for (int i = 12; i < 200; i++) { - bs.set(i); - } - bs.set(690); - for (int i = 305; i < 309; i++) { - bs.set(i); - } - bs.set(304); - if (!bs.toString().equals("12-199,304-308,690")) { - fail("testSetOneBit fail " + bs); - } - } - - @Test - public void testSetString() { - RLEBitSet bs = new RLEBitSet(); - bs.set("1-100"); - if (!bs.toString().equals("1-100")) { - fail("testSetString fail " + bs); - } - } - - @Test - public void testSetRange() { - RLEBitSet bs = new RLEBitSet(); - bs.set(50,60); - if (!bs.toString().equals("50-59")) { - fail("testSetRange fail " + bs); - } - } - - @Test - public void testClearOneBit() { - RLEBitSet bs = new RLEBitSet("1-10"); - bs.clear(5); - if (!bs.toString().equals("1-4,6-10")) { - fail("testClearOneBit fail"); - } - bs = new RLEBitSet("1-10"); - bs.clear(11); - if (!bs.toString().equals("1-10")) { - fail("testClearOneBit fail " + bs); - } - } - - @Test - public void testClearRangeLeft() { - RLEBitSet bs = new RLEBitSet("100-200"); - bs.clear(40,50); - if (!bs.toString().equals("100-200")) { - fail("testClearRangeLeft fail " + bs); - } - } - - @Test - public void testClearRangeRight() { - RLEBitSet bs = new RLEBitSet("100-200"); - bs.clear(400,500); - if (!bs.toString().equals("100-200")) { - fail("testClearRangeRight fail " + bs); - } - } - - @Test - public void testClearRangeMiddle() { - RLEBitSet bs = new RLEBitSet("100-200"); - bs.clear(120,130); - if (!bs.toString().equals("100-119,130-200")) { - fail("testClearRangeRight fail " + bs); - } - } - - @Test - public void testClearRangeIntersect() { - RLEBitSet bs = new RLEBitSet("100-200"); - bs.clear(100,200); - if (!bs.toString().equals("200")) { - fail("testClearRangeIntersect fail " + bs); - } - } - - @Test - public void testClearOverlapLeft() { - RLEBitSet bs = new RLEBitSet("100-200"); - bs.clear(50,150); - if (!bs.toString().equals("150-200")) { - fail("testClearOverlapLeft fail " + bs); - } - } - - @Test - public void testClearOverlapRight() { - RLEBitSet bs = new RLEBitSet("100-200"); - bs.clear(150,250); - if (!bs.toString().equals("100-149")) { - fail("testClearOverlapRight fail " + bs); - } - } - - @Test - public void testClearOverlapAll() { - RLEBitSet bs = new RLEBitSet("100-200"); - bs.clear(50,250); - if (!bs.toString().equals("")) { - fail("testClearOverlapAll fail " + bs); - } - } - - @Test - public void testAnd() { - RLEBitSet bs = new RLEBitSet("100-200"); - RLEBitSet b2 = new RLEBitSet("150-400"); - bs.and(b2); - if (!bs.toString().equals("150-200")) { - fail("testAnd fail " + bs); - } - bs = new RLEBitSet("100-200"); - b2 = new RLEBitSet("1500-4000"); - bs.and(b2); - if (!bs.isEmpty()) { - fail("testAnd fail " + bs); - } - } - - @Test - public void testAndNot() { - RLEBitSet bs = new RLEBitSet("100-200"); - RLEBitSet b2 = new RLEBitSet("150-159"); - bs.andNot(b2); - if (!bs.toString().equals("100-149,160-200")) { - fail("testAndNot fail " + bs); - } - } - - @Test - public void testIsEmpty() { - RLEBitSet bs = new RLEBitSet(""); - if (!bs.isEmpty()) { - fail("testIsEmpty fail " + bs); - } - bs.set(1); - if (bs.isEmpty()) { - fail("testIsEmpty fail " + bs); - } - } - - @Test - public void testCardinality() { - RLEBitSet bs = new RLEBitSet("1-120,10000000-10000005"); - if (bs.cardinality() != 126) { - fail("testCardinality fail 1"); - } - } - - @Test - public void testIterator() { - RLEBitSet rleBitSet = new RLEBitSet("1,5,10-12"); - Iterator rleBitSetRangeIterator = rleBitSet.getRangeIterator(); - if (!rleBitSetRangeIterator.hasNext()) { - fail("iterator fail 1"); - } - Long[] ll = rleBitSetRangeIterator.next(); - if (ll == null || ll[0] != 1 || ll[1] != 1) { - fail("iterator fail 2"); - } - - if (!rleBitSetRangeIterator.hasNext()) { - fail("iterator fail 3"); - } - ll = rleBitSetRangeIterator.next(); - if (ll == null || ll[0] != 5 || ll[1] != 5) { - fail("iterator fail 4"); - } - - if (!rleBitSetRangeIterator.hasNext()) { - fail("iterator fail 5"); - } - ll = rleBitSetRangeIterator.next(); - if (ll == null || ll[0] != 10 || ll[1] != 12) { - fail("iterator fail 6"); - } - - if (rleBitSetRangeIterator.hasNext()) { - fail("iterator fail 7"); - } - } - - @Test - public void testClone() { - RLEBitSet bs1 = new RLEBitSet("1,5,10-12"); - RLEBitSet bs2 = (RLEBitSet) bs1.clone(); - if (!bs1.toString().equals(bs2.toString())) { - fail("clone"); - } - } -} diff --git a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestRouteApi.java b/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestRouteApi.java deleted file mode 100644 index 365ceab2..00000000 --- a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestRouteApi.java +++ /dev/null @@ -1,28 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START================================================== - * * org.onap.dmaap - * * =========================================================================== - * * Copyright © 2017 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==================================================== - * * - * * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * * - ******************************************************************************/ - -package datarouter.provisioning; - -public class IntegrationTestRouteApi extends IntegrationTestBase { - -} diff --git a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestSubscribePost.java b/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestSubscribePost.java deleted file mode 100644 index dfcdeff4..00000000 --- a/datarouter-prov/src/test/java/datarouter/provisioning/IntegrationTestSubscribePost.java +++ /dev/null @@ -1,192 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START================================================== - * * org.onap.dmaap - * * =========================================================================== - * * Copyright © 2017 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==================================================== - * * - * * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * * - ******************************************************************************/ - -package datarouter.provisioning; - -import static org.junit.Assert.fail; - -import java.io.IOException; - -import jakarta.servlet.http.HttpServletResponse; - -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.ByteArrayEntity; -import org.apache.http.entity.ContentType; -import org.apache.http.util.EntityUtils; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; -import org.json.JSONTokener; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.onap.dmaap.datarouter.provisioning.FeedServlet; -import org.onap.dmaap.datarouter.provisioning.SubscribeServlet; - -public class IntegrationTestSubscribePost extends IntegrationTestBase { - private int feednum = 0; - - @BeforeClass - public static void setUpBeforeClass() throws Exception { - } - - @AfterClass - public static void tearDownAfterClass() throws Exception { - } - - /** - * This is the setUp method. - */ - @Before - public void setUp() throws Exception { - super.setUp(); - getDBstate(); - // use the first feed to subscribe to - JSONArray ja = db_state.getJSONArray("feeds"); - for (int i = 0; i < ja.length(); i++) { - JSONObject feed0 = ja.getJSONObject(i); - if (feed0 != null && !feed0.getBoolean("deleted")) { - feednum = feed0.getInt("feedid"); - return; - } - } - } - - @Test - public void testNormal() { - JSONObject jo = buildSubRequest(); - testCommon(jo, HttpServletResponse.SC_CREATED); - } - - @Test - public void testMissingUrl() { - JSONObject jo = buildSubRequest(); - jo.getJSONObject("delivery").remove("url"); - testCommon(jo, HttpServletResponse.SC_BAD_REQUEST); - } - - @Test - public void testTooLongUrl() { - JSONObject jo = buildSubRequest(); - jo.getJSONObject("delivery").put("url", "https://" + s257); - testCommon(jo, HttpServletResponse.SC_BAD_REQUEST); - } - - @Test - public void testMissingUser() { - JSONObject jo = buildSubRequest(); - jo.getJSONObject("delivery").remove("user"); - testCommon(jo, HttpServletResponse.SC_BAD_REQUEST); - } - - @Test - public void testTooLongUser() { - JSONObject jo = buildSubRequest(); - jo.getJSONObject("delivery").put("user", s33); - testCommon(jo, HttpServletResponse.SC_BAD_REQUEST); - } - - @Test - public void testMissingPassword() { - JSONObject jo = buildSubRequest(); - jo.getJSONObject("delivery").remove("password"); - testCommon(jo, HttpServletResponse.SC_BAD_REQUEST); - } - - @Test - public void testTooLongPassword() { - JSONObject jo = buildSubRequest(); - jo.getJSONObject("delivery").put("password", s33); - testCommon(jo, HttpServletResponse.SC_BAD_REQUEST); - } - - @Test - public void testNonBooleanMetadata() { - JSONObject jo = buildSubRequest(); - jo.put("metadataOnly", s33); - testCommon(jo, HttpServletResponse.SC_BAD_REQUEST); - } - - private void testCommon(JSONObject jo, int expect) { - String url = props.getProperty("test.host") + "/subscribe/" + feednum; - HttpPost httpPost = new HttpPost(url); - try { - httpPost.addHeader(SubscribeServlet.BEHALF_HEADER, "JUnit"); - String strJo = jo.toString(); - HttpEntity body = new ByteArrayEntity(strJo.getBytes(), - ContentType.create(SubscribeServlet.SUB_CONTENT_TYPE)); - httpPost.setEntity(body); - - HttpResponse response = httpclient.execute(httpPost); - ckResponse(response, expect); - - HttpEntity entity = response.getEntity(); - String ctype = entity.getContentType().getValue(); - int code = response.getStatusLine().getStatusCode(); - if (code == HttpServletResponse.SC_CREATED && !ctype.equals(SubscribeServlet.SUBFULL_CONTENT_TYPE)) { - fail("Got wrong content type: " + ctype); - } - - // do something useful with the response body and ensure it is fully consumed - if (ctype.equals(FeedServlet.SUBFULL_CONTENT_TYPE)) { - JSONObject jo2 = null; - try { - jo2 = new JSONObject(new JSONTokener(entity.getContent())); - } catch (Exception e) { - fail("Bad JSON: " + e.getMessage()); - } - try { - jo2.getString("subscriber"); - JSONObject jo3 = jo2.getJSONObject("links"); - jo3.getString("self"); - jo3.getString("feed"); - jo3.getString("log"); - } catch (JSONException e) { - fail("required field missing from result: " + e.getMessage()); - } - } else { - EntityUtils.consume(entity); - } - } catch (IOException e) { - fail(e.getMessage()); - } finally { - httpPost.releaseConnection(); - } - } - - private JSONObject buildSubRequest() { - JSONObject jo2 = new JSONObject(); - jo2.put("url", "https://www.att.com/"); - jo2.put("user", "dmr"); - jo2.put("password", "passw0rd"); - jo2.put("use100", true); - - JSONObject jo = new JSONObject(); - jo.put("delivery", jo2); - jo.put("metadataOnly", Boolean.FALSE); - return jo; - } -} diff --git a/datarouter-prov/src/test/java/datarouter/provisioning/package.html b/datarouter-prov/src/test/java/datarouter/provisioning/package.html deleted file mode 100644 index d0383b8d..00000000 --- a/datarouter-prov/src/test/java/datarouter/provisioning/package.html +++ /dev/null @@ -1,29 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START================================================== - * * org.onap.dmaap - * * =========================================================================== - * * Copyright © 2017 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==================================================== - * * - * * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * * - ******************************************************************************/ - - -

-This package provides JUnit tests for the provisioning server. -

- - diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/BaseServletTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/BaseServletTest.java index 84244dc3..fa228914 100755 --- a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/BaseServletTest.java +++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/BaseServletTest.java @@ -257,24 +257,4 @@ public class BaseServletTest extends DrServletTestBase { assertNotEquals(hashed_sub_pass.getJSONObject("delivery").get("password").toString(), "PASSWORD"); } - - @Test - public void Given_BaseServlet_Verify_Cadi_Feed_Permission() { - assertEquals("org.onap.dmaap-dr.feed|legacy|publish", baseServlet.getFeedPermission("legacy", "publish")); - assertEquals("org.onap.dmaap-dr.feed|legacy|suspend", baseServlet.getFeedPermission("legacy", "suspend")); - assertEquals("org.onap.dmaap-dr.feed|legacy|restore", baseServlet.getFeedPermission("legacy", "restore")); - assertEquals("org.onap.dmaap-dr.feed|org.onap.dmaap-dr.NoInstanceDefined|restore", baseServlet.getFeedPermission(null, "restore")); - assertEquals("org.onap.dmaap-dr.feed|legacy|*", baseServlet.getFeedPermission("legacy", "default")); - } - - @Test - public void Given_BaseServlet_Verify_Cadi_Sub_Permission() { - assertEquals("org.onap.dmaap-dr.feed|legacy|subscribe", baseServlet.getSubscriberPermission("legacy", "subscribe")); - assertEquals("org.onap.dmaap-dr.sub|legacy|suspend", baseServlet.getSubscriberPermission("legacy", "suspend")); - assertEquals("org.onap.dmaap-dr.sub|legacy|restore", baseServlet.getSubscriberPermission("legacy", "restore")); - assertEquals("org.onap.dmaap-dr.sub|legacy|publish", baseServlet.getSubscriberPermission("legacy", "publish")); - assertEquals("org.onap.dmaap-dr.sub|org.onap.dmaap-dr.NoInstanceDefined|restore", baseServlet.getSubscriberPermission(null, "restore")); - assertEquals("org.onap.dmaap-dr.sub|legacy|*", baseServlet.getSubscriberPermission("legacy", "default")); - } - } diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/DRFeedsServletTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/DRFeedsServletTest.java index 9993334e..dca7523b 100755 --- a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/DRFeedsServletTest.java +++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/DRFeedsServletTest.java @@ -219,114 +219,6 @@ public class DRFeedsServletTest extends DrServletTestBase { .sendError(eq(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE), anyString()); } - @Test - public void Given_Request_Is_HTTP_POST_And_CadiEnabled_Is_True_And_Request_Is_Not_Authorized_Then_Forbidden_Response_Is_Generated() - throws Exception { - setAuthoriserToReturnRequestNotAuthorized(); - FieldUtils.writeDeclaredStaticField(BaseServlet.class, "isCadiEnabled", "true", true); - when(request.getHeader(DRFeedsServlet.EXCLUDE_AAF_HEADER)).thenReturn("true"); - JSONObject JSObject = buildRequestJsonObject(); - DRFeedsServlet drfeedsServlet = new DRFeedsServlet() { - public JSONObject getJSONfromInput(HttpServletRequest req) { - JSONObject jo = new JSONObject(); - jo.put("name", "not_stub_name"); - jo.put("version", "1.0"); - jo.put("authorization", JSObject); - jo.put("aaf_instance", "legacy"); - return jo; - } - }; - drfeedsServlet.doPost(request, response); - verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), anyString()); - } - - @Test - public void Given_Request_Is_HTTP_POST_And_CadiEnabled_Is_False_And_Request_Is_Not_Authorized_Then_Forbidden_Response_Is_Generated() - throws Exception { - setAuthoriserToReturnRequestNotAuthorized(); - FieldUtils.writeDeclaredStaticField(BaseServlet.class, "isCadiEnabled", "false", true); - when(request.getHeader(DRFeedsServlet.EXCLUDE_AAF_HEADER)).thenReturn("true"); - JSONObject JSObject = buildRequestJsonObject(); - DRFeedsServlet drfeedsServlet = new DRFeedsServlet() { - public JSONObject getJSONfromInput(HttpServletRequest req) { - JSONObject jo = new JSONObject(); - jo.put("name", "not_stub_name"); - jo.put("version", "1.0"); - jo.put("authorization", JSObject); - jo.put("aaf_instance", "legacy"); - return jo; - } - }; - drfeedsServlet.doPost(request, response); - verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), anyString()); - } - - @Test - public void Given_Request_Is_HTTP_POST_And_AAF_DRFeed_And_Exclude_AAF_Is_True_Then_Forbidden_Response_Is_Generated() throws Exception { - when(request.getHeader(DRFeedsServlet.EXCLUDE_AAF_HEADER)).thenReturn("true"); - FieldUtils.writeDeclaredStaticField(BaseServlet.class, "isCadiEnabled", "true", true); - JSONObject JSObject = buildRequestJsonObject(); - DRFeedsServlet drfeedsServlet = new DRFeedsServlet() { - public JSONObject getJSONfromInput(HttpServletRequest req) { - JSONObject jo = new JSONObject(); - jo.put("name", "not_stub_name"); - jo.put("version", "1.0"); - jo.put("authorization", JSObject); - jo.put("aaf_instance", "https://aaf-onap-test.osaaf.org:8095"); - return jo; - } - }; - drfeedsServlet.doPost(request, response); - verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), contains("Invalid request exclude_AAF")); - } - - @Test - public void Given_Request_Is_HTTP_POST_And_AAF_DRFeed_And_Exclude_AAF_Is_False_Without_Permissions_Then_Forbidden_Response_Is_Generated() throws Exception { - when(request.getHeader(DRFeedsServlet.EXCLUDE_AAF_HEADER)).thenReturn("false"); - FieldUtils.writeDeclaredStaticField(BaseServlet.class, "isCadiEnabled", "true", true); - JSONObject JSObject = buildRequestJsonObject(); - DRFeedsServlet drfeedsServlet = new DRFeedsServlet() { - public JSONObject getJSONfromInput(HttpServletRequest req) { - JSONObject jo = new JSONObject(); - jo.put("name", "not_stub_name"); - jo.put("version", "1.0"); - jo.put("authorization", JSObject); - jo.put("aaf_instance", "*"); - return jo; - } - }; - drfeedsServlet.doPost(request, response); - verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), contains("AAF disallows access to permission")); - } - - @Test - public void Given_Request_Is_HTTP_POST_And_AAF_DRFeed_And_Exclude_AAF_Is_False_With_Permissions_Then_Created_OK_Response_Is_Generated() throws Exception { - FieldUtils.writeDeclaredStaticField(BaseServlet.class, "isCadiEnabled", "true", true); - ServletOutputStream outStream = mock(ServletOutputStream.class); - when(response.getOutputStream()).thenReturn(outStream); - when(request.getHeader(DRFeedsServlet.EXCLUDE_AAF_HEADER)).thenReturn("false"); - JSONObject JSObject = buildRequestJsonObject(); - when(request.isUserInRole("org.onap.dmaap-dr.feed|*|create")).thenReturn(true); - DRFeedsServlet drfeedsServlet = new DRFeedsServlet() { - public JSONObject getJSONfromInput(HttpServletRequest req) { - JSONObject jo = new JSONObject(); - jo.put("name", "not_stub_name"); - jo.put("version", "1.0"); - jo.put("authorization", JSObject); - jo.put("aaf_instance", "*"); - return jo; - } - - @Override - protected boolean doInsert(Insertable bean) { - return true; - } - }; - drfeedsServlet.doPost(request, response); - verify(response).setStatus(eq(HttpServletResponse.SC_CREATED)); - verifyEnteringExitCalled(listAppender); - } - @Test public void Given_Request_Is_HTTP_POST_And_Request_Contains_Badly_Formed_JSON_Then_Bad_Request_Response_Is_Generated() throws Exception { @@ -363,18 +255,15 @@ public class DRFeedsServletTest extends DrServletTestBase { @Test public void Given_Request_Is_HTTP_POST_And_Feed_Already_Exists_Bad_Request_Response_Is_Generated() throws Exception { - when(request.getParameter("name")).thenReturn("AafFeed"); + when(request.getParameter("name")).thenReturn("Feed1"); when(request.getParameter("version")).thenReturn("v0.1"); - when(request.getHeader(DRFeedsServlet.EXCLUDE_AAF_HEADER)).thenReturn("false"); - when(request.isUserInRole("org.onap.dmaap-dr.feed|*|create")).thenReturn(true); JSONObject JSObject = buildRequestJsonObject(); DRFeedsServlet drfeedsServlet = new DRFeedsServlet() { public JSONObject getJSONfromInput(HttpServletRequest req) { JSONObject jo = new JSONObject(); - jo.put("name", "AafFeed"); + jo.put("name", "Feed1"); jo.put("version", "v0.1"); jo.put("authorization", JSObject); - jo.put("aaf_instance", "*"); return jo; } }; @@ -385,14 +274,12 @@ public class DRFeedsServletTest extends DrServletTestBase { @Test public void Given_Request_Is_HTTP_POST_And_POST_Fails_Bad_Request_Response_Is_Generated() throws Exception { JSONObject JSObject = buildRequestJsonObject(); - when(request.getHeader(DRFeedsServlet.EXCLUDE_AAF_HEADER)).thenReturn("true"); DRFeedsServlet drfeedsServlet = new DRFeedsServlet() { public JSONObject getJSONfromInput(HttpServletRequest req) { JSONObject jo = new JSONObject(); jo.put("name", "stub_name"); jo.put("version", "2.0"); jo.put("authorization", JSObject); - jo.put("aaf_instance", "legacy"); return jo; } diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/FeedServletTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/FeedServletTest.java index 066b51fc..656876fc 100755 --- a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/FeedServletTest.java +++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/FeedServletTest.java @@ -34,6 +34,8 @@ import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.read.ListAppender; import jakarta.servlet.ServletInputStream; import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.sql.Connection; import java.sql.SQLException; import java.util.HashSet; @@ -41,8 +43,6 @@ import java.util.Set; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.lang3.reflect.FieldUtils; import org.jetbrains.annotations.NotNull; import org.json.JSONArray; @@ -138,26 +138,11 @@ public class FeedServletTest extends DrServletTestBase { @Test public void Given_Request_Is_HTTP_DELETE_And_Request_Is_Not_Authorized_Then_Forbidden_Response_Is_Generated() throws Exception { setAuthoriserToReturnRequestNotAuthorized(); + FieldUtils.writeDeclaredStaticField(BaseServlet.class, "requireCert", true, true); feedServlet.doDelete(request, response); verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), anyString()); } - @Test - public void Given_Request_Is_HTTP_DELETE_And_AAF_Feed_Without_Permissions_Then_Forbidden_Response_Is_Generated() throws Exception { - when(request.getPathInfo()).thenReturn("/2"); - feedServlet.doDelete(request, response); - verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), contains("AAF disallows access to permission")); - } - - @Test - public void Given_Request_Is_HTTP_DELETE_And_AAF_Feed_With_Permissions_Then_A_NO_CONTENT_Response_Is_Generated() { - when(request.getPathInfo()).thenReturn("/3"); - when(request.isUserInRole("org.onap.dmaap-dr.feed|*|delete")).thenReturn(true); - feedServlet.doDelete(request, response); - verify(response).setStatus(eq(HttpServletResponse.SC_NO_CONTENT)); - verifyEnteringExitCalled(listAppender); - } - @Test public void Given_Request_Is_HTTP_DELETE_And_Delete_On_Database_Fails_An_Internal_Server_Error_Is_Reported() throws Exception { @@ -343,7 +328,7 @@ public class FeedServletTest extends DrServletTestBase { FeedServlet feedServlet = new FeedServlet() { public JSONObject getJSONfromInput(HttpServletRequest req) { JSONObject jo = new JSONObject(); - jo.put("name", "AafFeed"); + jo.put("name", "Feed22"); jo.put("version", "v0.2"); jo.put("authorization", JSObject); return jo; @@ -356,64 +341,20 @@ public class FeedServletTest extends DrServletTestBase { @Test public void Given_Request_Is_HTTP_PUT_And_Request_Is_Not_Authorized_Then_Forbidden_Response_Is_Generated() throws Exception { setAuthoriserToReturnRequestNotAuthorized(); + FieldUtils.writeDeclaredStaticField(BaseServlet.class, "requireCert", true, true); when(request.getPathInfo()).thenReturn("/2"); JSONObject JSObject = buildRequestJsonObject(); FeedServlet feedServlet = new FeedServlet() { public JSONObject getJSONfromInput(HttpServletRequest req) { JSONObject jo = new JSONObject(); - jo.put("name", "AafFeed"); - jo.put("version", "v0.1"); - jo.put("authorization", JSObject); - return jo; - } - }; - feedServlet.doPut(request, response); - verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), contains("Policy Engine disallows access")); - } - - @Test - public void Given_Request_Is_HTTP_PUT_And_AAF_Feed_Without_Permissions_Then_Forbidden_Response_Is_Generated() throws Exception { - when(request.getPathInfo()).thenReturn("/2"); - JSONObject JSObject = buildRequestJsonObject(); - FeedServlet feedServlet = new FeedServlet() { - public JSONObject getJSONfromInput(HttpServletRequest req) { - JSONObject jo = new JSONObject(); - jo.put("name", "AafFeed"); - jo.put("version", "v0.1"); - jo.put("authorization", JSObject); - jo.put("aaf_instance", "https://aaf-onap-test.osaaf.org:8095"); - return jo; - } - }; - feedServlet.doPut(request, response); - verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), contains("AAF disallows access to permission")); - } - - @Test - public void Given_Request_Is_HTTP_PUT_And_AAF_Feed_With_Permissions_Then_STATUS_OK__Response_Is_Generated() throws Exception { - ServletOutputStream outStream = mock(ServletOutputStream.class); - when(response.getOutputStream()).thenReturn(outStream); - when(request.getPathInfo()).thenReturn("/2"); - when(request.isUserInRole("org.onap.dmaap-dr.feed|*|edit")).thenReturn(true); - JSONObject JSObject = buildRequestJsonObject(); - FeedServlet feedServlet = new FeedServlet() { - public JSONObject getJSONfromInput(HttpServletRequest req) { - JSONObject jo = new JSONObject(); - jo.put("name", "AafFeed"); + jo.put("name", "Feed22"); jo.put("version", "v0.1"); jo.put("authorization", JSObject); - jo.put("aaf_instance", "*"); return jo; } - @Override - protected boolean doUpdate(Updateable bean) { - return true; - } - }; feedServlet.doPut(request, response); - verify(response).setStatus(eq(HttpServletResponse.SC_OK)); - verifyEnteringExitCalled(listAppender); + verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), contains("Client certificate is missing.")); } @Test @@ -425,7 +366,7 @@ public class FeedServletTest extends DrServletTestBase { FeedServlet feedServlet = new FeedServlet() { public JSONObject getJSONfromInput(HttpServletRequest req) { JSONObject jo = new JSONObject(); - jo.put("name", "AafFeed"); + jo.put("name", "Feed22"); jo.put("version", "v0.1"); jo.put("authorization", JSObject); return jo; @@ -449,7 +390,7 @@ public class FeedServletTest extends DrServletTestBase { FeedServlet feedServlet = new FeedServlet() { public JSONObject getJSONfromInput(HttpServletRequest req) { JSONObject jo = new JSONObject(); - jo.put("name", "AafFeed"); + jo.put("name", "Feed22"); jo.put("version", "v0.1"); jo.put("authorization", JSObject); return jo; diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/ProvServerTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/ProvServerTest.java index a915fa84..1528a563 100644 --- a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/ProvServerTest.java +++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/ProvServerTest.java @@ -20,38 +20,28 @@ package org.onap.dmaap.datarouter.provisioning; -import java.io.File; -import java.io.IOException; import org.apache.commons.lang3.reflect.FieldUtils; import org.junit.Assert; -import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; -import org.onap.dmaap.datarouter.provisioning.utils.AafPropsUtils; +import org.junit.runner.RunWith; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.modules.junit4.PowerMockRunner; +@RunWith(PowerMockRunner.class) +@PowerMockIgnore({"com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "org.w3c.*"}) public class ProvServerTest { - private AafPropsUtils aafPropsUtils; - - @Before - public void setUp() { - try { - aafPropsUtils = new AafPropsUtils(new File("src/test/resources/aaf/org.onap.dmaap-dr.props")); - } catch (IOException e) { - e.printStackTrace(); - } - } - @BeforeClass public static void init() { System.setProperty( "org.onap.dmaap.datarouter.provserver.properties", - "src/test/resources/h2DatabaseTlsDisabled.properties"); + "src/test/resources/h2Database.properties"); } @Test public void Verify_Prov_Server_Is_Configured_Correctly() throws IllegalAccessException { - FieldUtils.writeDeclaredStaticField(ProvRunner.class, "aafPropsUtils", aafPropsUtils, true); + FieldUtils.writeDeclaredStaticField(ProvRunner.class, "tlsEnabled", false, true); Assert.assertNotNull(ProvServer.getServerInstance()); } } diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/SubscribeServletTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/SubscribeServletTest.java index bf2371f8..41d5b1db 100755 --- a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/SubscribeServletTest.java +++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/SubscribeServletTest.java @@ -188,10 +188,10 @@ public class SubscribeServletTest extends DrServletTestBase { } @Test - public void Given_Request_Is_HTTP_POST_And_Request_Is_Not_Authorized_Then_Forbidden_Response_Is_Generated() throws Exception { - setAuthoriserToReturnRequestNotAuthorized(); + public void Given_Request_Is_HTTP_POST_And_Password_Is_Too_Long_Then_Bad_Request_Response_Is_Generated() throws Exception { when(request.getPathInfo()).thenReturn("/1"); JSONObject JSObject = buildRequestJsonObject(); + JSObject.put("password", "aervaervaervgaervaestbnswtrnsrnsrdtnsrtnsrtnydstyndtrynsrnsrtnsrtnsrtnswtrnswtrn"); SubscribeServlet subscribeServlet = new SubscribeServlet() { public JSONObject getJSONfromInput(HttpServletRequest req) { JSONObject jo = new JSONObject(); @@ -203,115 +203,10 @@ public class SubscribeServletTest extends DrServletTestBase { jo.put("sync", false); return jo; } - @Override - protected boolean doInsert(Insertable bean) { - return false; - } - }; - subscribeServlet.doPost(request, response); - verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), anyString()); - } - - @Test - public void Given_Request_Is_HTTP_POST_And_AAF_Subscriber_Added_To_Legacy_Feed_Then_Forbidden_Response_Is_Generated() throws Exception { - when(request.getPathInfo()).thenReturn("/1"); - JSONObject JSObject = buildRequestJsonObject(); - SubscribeServlet subscribeServlet = new SubscribeServlet() { - public JSONObject getJSONfromInput(HttpServletRequest req) { - JSONObject jo = new JSONObject(); - jo.put("name", "stub_name"); - jo.put("version", "2.0"); - jo.put("metadataOnly", true); - jo.put("suspend", true); - jo.put("delivery", JSObject); - jo.put("aaf_instance", "*"); - jo.put("follow_redirect", false); - jo.put("sync", false); - return jo; - } - @Override - protected boolean doInsert(Insertable bean) { - return false; - } - }; - subscribeServlet.doPost(request, response); - verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), contains("AAF Subscriber can not be added to legacy Feed")); - } - - @Test - public void Given_Request_Is_HTTP_POST_And_Legacy_Subscriber_Added_To_AAF_Feed_And_Is_Not_Authorized_Then_Forbidden_Response_Is_Generated() throws Exception { - setAuthoriserToReturnRequestNotAuthorized(); - when(request.getPathInfo()).thenReturn("/2"); - JSONObject JSObject = buildRequestJsonObject(); - SubscribeServlet subscribeServlet = new SubscribeServlet() { - public JSONObject getJSONfromInput(HttpServletRequest req) { - JSONObject jo = new JSONObject(); - jo.put("name", "stub_name"); - jo.put("version", "2.0"); - jo.put("metadataOnly", true); - jo.put("suspend", true); - jo.put("delivery", JSObject); - jo.put("aaf_instance", "legacy"); - jo.put("follow_redirect", false); - jo.put("sync", false); - return jo; - } - }; - subscribeServlet.doPost(request, response); - verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), contains("Policy Engine disallows access.")); - } - @Test - public void Given_Request_Is_HTTP_POST_And_AAF_Subscriber_Added_To_AAF_Feed_Without_Permissions_Then_Forbidden_Response_Is_Generated() throws Exception { - when(request.getPathInfo()).thenReturn("/2"); - JSONObject JSObject = buildRequestJsonObject(); - SubscribeServlet subscribeServlet = new SubscribeServlet() { - public JSONObject getJSONfromInput(HttpServletRequest req) { - JSONObject jo = new JSONObject(); - jo.put("name", "stub_name"); - jo.put("version", "2.0"); - jo.put("metadataOnly", true); - jo.put("suspend", true); - jo.put("delivery", JSObject); - jo.put("aaf_instance", "*"); - jo.put("follow_redirect", false); - jo.put("sync", false); - return jo; - } }; subscribeServlet.doPost(request, response); - verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), contains("AAF disallows access to permission")); - } - - @Test - public void Given_Request_Is_HTTP_POST_And_AAF_Subscriber_Added_To_AAF_Feed_With_Permissions_Then_OK_Response_Is_Generated() throws Exception { - ServletOutputStream outStream = mock(ServletOutputStream.class); - when(response.getOutputStream()).thenReturn(outStream); - when(request.getPathInfo()).thenReturn("/2"); - when(request.isUserInRole("org.onap.dmaap-dr.feed|*|approveSub")).thenReturn(true); - JSONObject JSObject = buildRequestJsonObject(); - SubscribeServlet subscribeServlet = new SubscribeServlet() { - public JSONObject getJSONfromInput(HttpServletRequest req) { - JSONObject jo = new JSONObject(); - jo.put("name", "stub_name"); - jo.put("version", "2.0"); - jo.put("metadataOnly", true); - jo.put("suspend", true); - jo.put("delivery", JSObject); - jo.put("aaf_instance", "*"); - jo.put("follow_redirect", false); - jo.put("sync", false); - return jo; - } - - @Override - protected boolean doInsert(Insertable bean) { - return true; - } - }; - subscribeServlet.doPost(request, response); - verify(response).setStatus(eq(HttpServletResponse.SC_CREATED)); - verifyEnteringExitCalled(listAppender); + verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), anyString()); } @Test @@ -345,7 +240,7 @@ public class SubscribeServletTest extends DrServletTestBase { @Test public void Given_Request_Is_HTTP_POST_And_POST_Fails_Bad_Request_Response_Is_Generated() throws Exception { - when(request.getPathInfo()).thenReturn("/2"); + when(request.getPathInfo()).thenReturn("/1"); JSONObject JSObject = buildRequestJsonObject(); SubscribeServlet subscribeServlet = new SubscribeServlet() { public JSONObject getJSONfromInput(HttpServletRequest req) { @@ -355,7 +250,6 @@ public class SubscribeServletTest extends DrServletTestBase { jo.put("metadataOnly", true); jo.put("suspend", true); jo.put("delivery", JSObject); - jo.put("aaf_instance", "legacy"); jo.put("follow_redirect", false); jo.put("sync", false); return jo; diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServletTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServletTest.java index d5badd34..f428e1eb 100755 --- a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServletTest.java +++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServletTest.java @@ -88,7 +88,7 @@ public class SubscriptionServletTest extends DrServletTestBase { em = emf.createEntityManager(); System.setProperty( "org.onap.dmaap.datarouter.provserver.properties", - "src/test/resources/h2DatabaseTlsDisabled.properties"); + "src/test/resources/h2Database.properties"); } @AfterClass @@ -140,6 +140,7 @@ public class SubscriptionServletTest extends DrServletTestBase { @Test public void Given_Request_Is_HTTP_DELETE_And_Request_Is_Not_Authorized_Then_Forbidden_Response_Is_Generated() throws Exception { setAuthoriserToReturnRequestNotAuthorized(); + FieldUtils.writeDeclaredStaticField(BaseServlet.class, "requireCert", true, true); subscriptionServlet.doDelete(request, response); verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), anyString()); } @@ -155,17 +156,6 @@ public class SubscriptionServletTest extends DrServletTestBase { verify(response).sendError(eq(HttpServletResponse.SC_INTERNAL_SERVER_ERROR), anyString()); } - @Test - public void Given_Request_Is_HTTP_DELETE_And_AAF_CADI_Is_Enabled_With_Permissions_Then_A_NO_CONTENT_Response_Is_Generated() throws Exception { - when(request.getHeader("Content-Type")).thenReturn("application/vnd.dmaap-dr.subscription; version=1.0"); - when(request.getPathInfo()).thenReturn("/2"); - when(request.isUserInRole("org.onap.dmaap-dr.sub|*|delete")).thenReturn(true); - subscriptionServlet.doDelete(request, response); - verify(response).setStatus(eq(HttpServletResponse.SC_NO_CONTENT)); - verifyEnteringExitCalled(listAppender); - resetAafSubscriptionInDB(); - } - @Test public void Given_Request_Is_HTTP_GET_And_Is_Not_Secure_When_HTTPS_Is_Required_Then_Forbidden_Response_Is_Generated() throws Exception { when(request.isSecure()).thenReturn(false); @@ -244,6 +234,7 @@ public class SubscriptionServletTest extends DrServletTestBase { public void Given_Request_Is_HTTP_PUT_And_Request_Is_Not_Authorized_Then_Forbidden_Response_Is_Generated() throws Exception { setAuthoriserToReturnRequestNotAuthorized(); when(request.getHeader("Content-Type")).thenReturn("application/vnd.dmaap-dr.subscription; version=1.0"); + FieldUtils.writeDeclaredStaticField(BaseServlet.class, "requireCert", true, true); JSONObject JSObject = buildRequestJsonObject(); SubscriptionServlet subscriptionServlet = new SubscriptionServlet() { public JSONObject getJSONfromInput(HttpServletRequest req) { @@ -253,7 +244,6 @@ public class SubscriptionServletTest extends DrServletTestBase { jo.put("metadataOnly", true); jo.put("suspend", true); jo.put("delivery", JSObject); - jo.put("aaf_instance", "legacy"); jo.put("follow_redirect", false); jo.put("decompress", true); jo.put("sync", true); @@ -265,60 +255,6 @@ public class SubscriptionServletTest extends DrServletTestBase { verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), anyString()); } - @Test - public void Given_Request_Is_HTTP_PUT_And_AAF_CADI_Is_Enabled_Without_Permissions_Then_Forbidden_Response_Is_Generated() throws Exception { - when(request.getHeader("Content-Type")).thenReturn("application/vnd.dmaap-dr.subscription; version=1.0"); - when(request.getPathInfo()).thenReturn("/3"); - JSONObject JSObject = buildRequestJsonObject(); - SubscriptionServlet subscriptionServlet = new SubscriptionServlet() { - public JSONObject getJSONfromInput(HttpServletRequest req) { - JSONObject jo = new JSONObject(); - jo.put("name", "stub_name"); - jo.put("version", "2.0"); - jo.put("metadataOnly", true); - jo.put("suspend", true); - jo.put("delivery", JSObject); - jo.put("aaf_instance", "*"); - jo.put("follow_redirect", false); - jo.put("sync", true); - jo.put("changeowner", true); - return jo; - } - }; - subscriptionServlet.doPut(request, response); - verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), contains("AAF disallows access")); - } - - @Test - public void Given_Request_Is_HTTP_PUT_And_AAF_CADI_Is_Enabled_With_Permissions_Then_OK_Response_Is_Generated() throws Exception { - ServletOutputStream outStream = mock(ServletOutputStream.class); - when(response.getOutputStream()).thenReturn(outStream); - when(request.getHeader("X-DMAAP-DR-ON-BEHALF-OF-GROUP")).thenReturn("stub_subjectGroup"); - when(request.getHeader("Content-Type")).thenReturn("application/vnd.dmaap-dr.subscription; version=1.0"); - when(request.getPathInfo()).thenReturn("/3"); - when(request.isUserInRole("org.onap.dmaap-dr.sub|*|edit")).thenReturn(true); - JSONObject JSObject = buildRequestJsonObject(); - SubscriptionServlet subscriptionServlet = new SubscriptionServlet() { - public JSONObject getJSONfromInput(HttpServletRequest req) { - JSONObject jo = new JSONObject(); - jo.put("name", "stub_name"); - jo.put("version", "2.0"); - jo.put("metadataOnly", true); - jo.put("suspend", true); - jo.put("delivery", JSObject); - jo.put("aaf_instance", "*"); - jo.put("follow_redirect", false); - jo.put("sync", true); - return jo; - } - }; - subscriptionServlet.doPut(request, response); - verify(response).setStatus(eq(HttpServletResponse.SC_OK)); - resetAafSubscriptionInDB(); - addNewSubscriptionInDB(); - verifyEnteringExitCalled(listAppender); - } - @Test public void Given_Request_Is_HTTP_PUT_And_Content_Header_Is_Not_Supported_Type_Then_Unsupported_Media_Type_Response_Is_Generated() throws Exception { when(request.getContentType()).thenReturn("stub_ContentType"); @@ -363,7 +299,6 @@ public class SubscriptionServletTest extends DrServletTestBase { jo.put("privilegedSubscriber", true); jo.put("decompress", true); jo.put("delivery", JSObject); - jo.put("aaf_instance", "legacy"); jo.put("follow_redirect", false); jo.put("subscriber", "differentSubscriber"); jo.put("sync", true); @@ -388,7 +323,6 @@ public class SubscriptionServletTest extends DrServletTestBase { jo.put("suspend", true); jo.put("privilegedSubscriber", true); jo.put("delivery", JSObject); - jo.put("aaf_instance", "legacy"); jo.put("decompress", true); jo.put("follow_redirect", false); jo.put("sync", true); @@ -421,7 +355,6 @@ public class SubscriptionServletTest extends DrServletTestBase { jo.put("privilegedSubscriber", true); jo.put("decompress", true); jo.put("delivery", JSObject); - jo.put("aaf_instance", "legacy"); jo.put("follow_redirect", false); jo.put("sync", true); jo.put("changeowner", true); @@ -430,7 +363,7 @@ public class SubscriptionServletTest extends DrServletTestBase { }; subscriptionServlet.doPut(request, response); verify(response).setStatus(eq(HttpServletResponse.SC_OK)); - changeSubscriptionBackToNormal(); + //changeSubscriptionBackToNormal(); verifyEnteringExitCalled(listAppender); } @@ -523,7 +456,6 @@ public class SubscriptionServletTest extends DrServletTestBase { jo.put("suspend", true); jo.put("delivery", JSObject); jo.put("privilegedSubscriber", false); - jo.put("aaf_instance", "legacy"); jo.put("follow_redirect", false); jo.put("decompress", false); jo.put("failed", false); @@ -616,7 +548,6 @@ public class SubscriptionServletTest extends DrServletTestBase { subscription.setGroupid(1); subscription.setMetadataOnly(false); subscription.setSuspended(false); - subscription.setAafInstance("https://aaf-onap-test.osaaf.org:8095"); subscription.setDecompress(false); subscription.setPrivilegedSubscriber(false); try (Connection conn = ProvDbUtils.getInstance().getConnection()) { diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/FeedTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/FeedTest.java index 5e87d3a7..87ac7ed5 100644 --- a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/FeedTest.java +++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/beans/FeedTest.java @@ -98,8 +98,8 @@ public class FeedTest { @Test public void Given_doDelete_Succeeds_Then_doInsert_To_Put_Feed_Back_And_Bool_Is_True() throws SQLException { - Boolean bool = feed.doDelete(provDbUtils.getConnection()); - Assert.assertEquals(true, bool); + boolean bool = feed.doDelete(provDbUtils.getConnection()); + Assert.assertTrue(bool); JSONObject jo = new JSONObject(); jo.put("self","self_link"); jo.put("publish","publish_link"); @@ -107,7 +107,7 @@ public class FeedTest { jo.put("log","log_link"); feed.setLinks(new FeedLinks(jo)); bool = feed.doInsert(provDbUtils.getConnection()); - Assert.assertEquals(true, bool); + Assert.assertTrue(bool); } @Test @@ -133,7 +133,7 @@ public class FeedTest { public void Given_doDelete_Throws_SQLException_Then_Returns_False() throws SQLException { Connection spyConnection = CreateSpyForDbConnection(); Mockito.doThrow(new SQLException()).when(spyConnection).prepareStatement(anyString()); - Assert.assertEquals(feed.doDelete(spyConnection), false); + Assert.assertFalse(feed.doDelete(spyConnection)); } @Test @@ -147,7 +147,7 @@ public class FeedTest { fa.setEndpointIDS(setA); fa.setEndpointAddrs(setB); feed.setAuthorization(fa); - Assert.assertEquals(feed.doInsert(connection), false); + Assert.assertFalse(feed.doInsert(connection)); } @@ -155,7 +155,7 @@ public class FeedTest { public void Given_doUpdate_Throws_SQLException_Then_Returns_False() throws SQLException { Connection spyConnection = CreateSpyForDbConnection(); Mockito.doThrow(new SQLException()).when(spyConnection).prepareStatement(anyString()); - Assert.assertEquals(feed.doUpdate(spyConnection), false); + Assert.assertFalse(feed.doUpdate(spyConnection)); } @@ -174,7 +174,7 @@ public class FeedTest { Assert.assertEquals(feed.getGroupid(), 1); Assert.assertEquals(feed.getDescription(), "test feed"); Assert.assertEquals(feed.getBusinessDescription(), "test feed"); - Assert.assertEquals(feed.isSuspended(), false); + Assert.assertFalse(feed.isSuspended()); Assert.assertEquals(feed.getPublisher(), "publish"); } diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/utils/AafPropsUtilsTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/utils/AafPropsUtilsTest.java deleted file mode 100644 index 4f2f3ee5..00000000 --- a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/utils/AafPropsUtilsTest.java +++ /dev/null @@ -1,63 +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.dmaap.datarouter.provisioning.utils; - -import java.io.File; -import java.io.IOException; -import org.junit.Assert; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; - -public class AafPropsUtilsTest { - - private static AafPropsUtils aafPropsUtils; - - @BeforeClass - public static void init() throws Exception { - aafPropsUtils = new AafPropsUtils(new File("src/test/resources/aaf/org.onap.dmaap-dr.props")); - } - - @Test - public void Assert_AaafPropsUtils_Decrypt_KeyStorePass() { - Assert.assertEquals("b.Qo{*!a(a;jmeOfKbA&vHx#", aafPropsUtils.getKeystorePassProperty()); - } - - @Test - public void Assert_AaafPropsUtils_Decrypt_TruststorePass() { - Assert.assertEquals("YeXhcTw6%G[od1a43+P!yhoN", aafPropsUtils.getTruststorePassProperty()); - } - - @Test - public void Assert_AaafPropsUtils_Get_KeyStorePathProp() { - Assert.assertEquals("src/test/resources/aaf/org.onap.dmaap-dr.p12", aafPropsUtils.getKeystorePathProperty()); - } - - @Test - public void Assert_AaafPropsUtils_Get_TrustStorePathProp() { - Assert.assertEquals("src/test/resources/aaf/org.onap.dmaap-dr.trust.jks", aafPropsUtils.getTruststorePathProperty()); - } - - @Test - public void Assert_AaafPropsUtils_Get_PropAccessObj() { - Assert.assertNotNull(aafPropsUtils.getPropAccess()); - } - -} diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/utils/ProvTlsManagerTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/utils/ProvTlsManagerTest.java new file mode 100644 index 00000000..680a483d --- /dev/null +++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/utils/ProvTlsManagerTest.java @@ -0,0 +1,63 @@ +/*- + * ============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.dmaap.datarouter.provisioning.utils; + +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.UnrecoverableKeyException; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.onap.dmaap.datarouter.provisioning.ProvRunner; +import org.onap.dmaap.datarouter.provisioning.ProvServer; + +public class ProvTlsManagerTest { + + ProvTlsManager provTlsManager; + + @BeforeClass + public static void init() { + System.setProperty( + "org.onap.dmaap.datarouter.provserver.properties", + "src/test/resources/h2Database.properties"); + } + + @Before + public void setUp() throws Exception { + } + + @Test + public void Verify_Prov_Tls_Manager_Is_Configured_Correctly_And_Returns_Non_Null() throws Exception { + provTlsManager = new ProvTlsManager(ProvRunner.getProvProperties(), true); + Assert.assertNotNull(provTlsManager.getSslContextFactoryServer()); + Assert.assertNotNull(provTlsManager.getSslSocketFactory()); + Assert.assertEquals(provTlsManager.getTrustStoreFile(), "src/test/resources/certs/truststore.jks"); + Assert.assertEquals(provTlsManager.getTrustStorePassword(), "secret"); + } + + @Test + public void Verify_Prov_Tls_Manager_Is_Configured_Correctly_When_Load_Certs_Is_False() throws Exception { + provTlsManager = new ProvTlsManager(ProvRunner.getProvProperties(), false); + Assert.assertEquals(provTlsManager.getTrustStorePassword(), "secret"); + } +} diff --git a/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/utils/UrlUtilsTest.java b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/utils/UrlUtilsTest.java new file mode 100644 index 00000000..ac95044f --- /dev/null +++ b/datarouter-prov/src/test/java/org/onap/dmaap/datarouter/provisioning/utils/UrlUtilsTest.java @@ -0,0 +1,62 @@ +/*- + * ============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.dmaap.datarouter.provisioning.utils; + +import org.apache.commons.lang3.reflect.FieldUtils; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.dmaap.datarouter.provisioning.BaseServlet; +import org.onap.dmaap.datarouter.provisioning.ProvRunner; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.modules.junit4.PowerMockRunner; + +@RunWith(PowerMockRunner.class) +@PowerMockIgnore({"com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "org.w3c.*"}) +public class UrlUtilsTest { + + @BeforeClass + public static void init() { + System.setProperty( + "org.onap.dmaap.datarouter.provserver.properties", + "src/test/resources/h2Database.properties"); + } + + @Before + public void setUp() throws Exception { + FieldUtils.writeDeclaredStaticField(BaseServlet.class, "initialActivePod", "mypod1", true); + FieldUtils.writeDeclaredStaticField(BaseServlet.class, "initialStandbyPod", "mypod2", true); + FieldUtils.writeDeclaredStaticField(ProvRunner.class, "tlsEnabled", false, true); + } + + @Test + public void Verify_UrlUtils_generatePeerProvURL_Returns_Valid_Http_Url() { + Assert.assertEquals(URLUtilities.generatePeerProvURL(), "http://mypod2:8080/internal/prov"); + } + + @Test + public void Verify_UrlUtils_generatePeerLogsURL_Returns_Valid_Http_Url() { + Assert.assertEquals(URLUtilities.generatePeerLogsURL(), "http://mypod2:8080/internal/drlogs/"); + } + +} diff --git a/datarouter-prov/src/test/resources/aaf/org.onap.dmaap-dr.cred.props b/datarouter-prov/src/test/resources/aaf/org.onap.dmaap-dr.cred.props deleted file mode 100644 index bf3feda8..00000000 --- a/datarouter-prov/src/test/resources/aaf/org.onap.dmaap-dr.cred.props +++ /dev/null @@ -1,17 +0,0 @@ -############################################################ -# Properties Generated by AT&T Certificate Manager -# by root -# on 2022-03-22T12:34:23.012+0000 -# @copyright 2019, AT&T -############################################################ -Challenge=enc:v6yuDc_Lu1OgeFEthckOsa7R0XW6h0iZqUQXnw4CpstwzjmN0x9VOsf27um5fC5z -cadi_alias=dmaap-dr-prov@dmaap-dr.onap.org -cadi_key_password=enc:CBXkw5IMQ8IeOhERa_oK4XcS1BsKy3T9BiZgAOIBqI46Nvy0USwgXCyOkTgVlJn7 -cadi_keyfile=src/test/resources/aaf/org.onap.dmaap-dr.keyfile -cadi_keystore=src/test/resources/aaf/org.onap.dmaap-dr.p12 -cadi_keystore_password=enc:Qd78mq7KSyK4G-gmnA0YVrB4jpMLgMX_4jDmwkdkKpD-MmonHNXlDA0TzRd3oxWe -cadi_keystore_password_jks=enc:GuyybAMtPX21LbCx_AXGnO7nz3NlPenZESuLVgrw-_cK55re75K4YOLYVzQswUYU -cadi_keystore_password_p12=enc:Qd78mq7KSyK4G-gmnA0YVrB4jpMLgMX_4jDmwkdkKpD-MmonHNXlDA0TzRd3oxWe -cadi_truststore=src/test/resources/aaf/org.onap.dmaap-dr.trust.jks -cadi_truststore_password=enc:y10bIyzTHei-rxWnWgHUUFUD_9TfOBdxmIn6vEf0zsyZtWmeP8ZjFE1LoPn7Ri4g -cadi_x509_issuers=CN=intermediateCA_1, OU=OSAAF, O=ONAP, C=US:CN=intermediateCA_7, OU=OSAAF, O=ONAP, C=US:CN=intermediateCA_9, OU=OSAAF, O=ONAP, C=US diff --git a/datarouter-prov/src/test/resources/aaf/org.onap.dmaap-dr.keyfile b/datarouter-prov/src/test/resources/aaf/org.onap.dmaap-dr.keyfile deleted file mode 100644 index 86092892..00000000 --- a/datarouter-prov/src/test/resources/aaf/org.onap.dmaap-dr.keyfile +++ /dev/null @@ -1,27 +0,0 @@ -gf-I4kLSg98uxwCXpklt-W2Qfa0mFgvXDoQk_qsLs4uuLI9FmWkrdlgdqzEgISL1sf6SAhoXFXO4 -BSm8fSPPrjaFEQ-uZcho1bY63lG710ZLh7vf0Bc7WPieRXesloH07CRXXjUdTkXXU8qTP6Ufru16 -mbGODzcZ-Ygm2GLVbkLk7953CJYIvuYT0M3ggrDr51eOalpgwXA1uO2DCTmY_fyqFNpZbLEtcYAx -EEBkbaT0KhKwSfXfPINjpfCVMNBr3eK2m75RFJzTmA4Nq_WFgQQBUJkYu6EaWR8xwKEnX3brIFN- -uY8Xk-Wxh8hhqNQWSxaSa_w6BfbP5CwUpIk9Ex1v_gCa63NIy4WzoRxOHKuCQAS26vLJFxTTNOlP -d_DVC0gmvL-q8VnedNVSsRw1zuDOtOzKg3iUbTjopba3YryelxwL2xUJzkxv8RiOVvTCdZ34lPP0 -vQCaGJYg52OKOCMaIs4e6bqfCFMT4nlbad--mPeZGS3X5pJ0xSAMRa8L2_ksHbTOvcjOlCvmWNDK -puP22sdegP-mV6Ygm30Gyn7TnUodDA3bzIiA70zrkrlt8pBMhKmCbmWvGfjItoRnfGwtlsm1OU73 -Jst8pQ_mvCK486UoH4Lui1kNBTqAJIrzYT_m-MrL6w9lx7Lu-ZG0HqdDVO4zB06WTyCXT-I2r-XS -F9ddoQ3GOUMA4kIckEeEVYfZiVaoPeizNwynSLHZDA3Xztc-kz7HEqdUCypM5pM32qGN-z4Gzbh0 -K4GO7_cGyctMGNY5za3iANK3BBBx9d3G3XKuCH2EDF9aj_kFarMaJjTHwn9-OAeD2GXtdYQqarod -4Yw11CD8JjyF6PdYstTh9t5_iK3pZjFaLMBPlLFN_tDu_5zsVagJjM7nMjfn8iWH5o3rj7WAIqBC -NoxZhIRUVpEmDKkhsnq9i9gdjoiKjrNwEsswX2vGsXEAf1vTXH2YsgraTjEhlW0cIb4PBLd4YoSE -AW3MXhwu5rYFgGooHyB99OKZOX6-5Y44fA0TE0ypn8HZ5oVrERCHVHNXsiXg1pRjTHjoIYUFoSQQ -lT8eVUo5MUxQ0SVKUi03wA7EduWrwvuD_KyLeNnvECj6IDuK7qiqH86UV7AyQhwjSZPj4N3KIlvD -VJNLmt6s8b6SLZpO23P-ZceFEIIYG7E1IGmo2s5VkWTNTkvqD7blxoOsfBIxb-SjttnMtbKCcXPj -aKMC1oqr5xLsvtg9XDKKXt4kELElRBiKtrud8t7qqYMfC-q6lIddmG8x_196qsYiErKd9mLyDT2H -DG9wmz3dDds_bUnXA7_-LsriDI4t_fAqAKnvR8tLi9DjhU1g9yjlGuKn4yd3y8aK-UFFfBi1AKxA -WoxSt2Omw_sl9Jc6bzoZ2_NHPZz7IaDhSu1imAAcAms4SIr3g-MnBffVpxarrXYsoaxurMRMoqLx -r0DyV1Y9IZSwo-xsWk42CxrvEF31AmFWewI0ykA8bZ-zpWux3z7BfbKDqxglg3Lp5uIfVFHamds3 -ya-KMBCtaSgiJ9fB7Q183Lt0tMxrOLe3hln55I4SRgHT5blh1LEznIigIfhFEOo514JEdctkVrDS -bDSbCO-yZE_0BcznTsjoyImwObeVRbDDu0feM9uGs4fL7zwVCbzEurGU2js-0o0rcyDiv30tsL5S -LaxA-xz7x5HO4JAd7BeaeF4-v0-IeLKPH4HzYk0g1PKskZaZHMWBWSPaJWin68ahh9Eh44xSjsCW -TUcoddf4-5HZS_RWlrLvbnfbEBAm7Ikbno1zLJz7_H3tmLKv2axkGEu-YWIAffb7xMzG0T9m6S3B -Iz1jWxtJ41gTE5kGFmaezDeUGPrioaqOq0bCq6DStQMc_5kcKAIg6GffOX75ZvagC2E6E_B58AGU -iVDzz_yi4Xcssf2jN-MIiHes0HsMQILrLAu1PLZh9qOIGOnVgLdwr0o5CGsg0h7Bxxl6jFQubwAZ -rc2foRg7arAcRHYasoC34f9pH0hfBzHfTGg5S7bWU6mDaldpWS8Na0EoCoFoZATkdzG77w6c \ No newline at end of file diff --git a/datarouter-prov/src/test/resources/aaf/org.onap.dmaap-dr.location.props b/datarouter-prov/src/test/resources/aaf/org.onap.dmaap-dr.location.props deleted file mode 100644 index eef8aac6..00000000 --- a/datarouter-prov/src/test/resources/aaf/org.onap.dmaap-dr.location.props +++ /dev/null @@ -1,8 +0,0 @@ -############################################################ -# Properties Generated by AT&T Certificate Manager -# by root -# on 2022-03-22T12:34:21.359+0000 -# @copyright 2019, AT&T -############################################################ -cadi_latitude=38.0 -cadi_longitude=-72.0 diff --git a/datarouter-prov/src/test/resources/aaf/org.onap.dmaap-dr.p12 b/datarouter-prov/src/test/resources/aaf/org.onap.dmaap-dr.p12 deleted file mode 100644 index 69948c2562e06b8e679fe1ec0be5cb189215204a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4217 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 SW%p+#fk}F=wcuM diff --git a/datarouter-prov/src/test/resources/certs/org.onap.dmaap-dr-prov.p12 b/datarouter-prov/src/test/resources/certs/org.onap.dmaap-dr-prov.p12 new file mode 100755 index 0000000000000000000000000000000000000000..1393fb054f626ac71ab079a0fe2b0bff1d60130b GIT binary patch literal 4596 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