From faac45b578a29078700b5ea003c69cedc1a17b5f Mon Sep 17 00:00:00 2001 From: liamfallon Date: Thu, 1 Sep 2022 12:05:47 +0100 Subject: [PATCH] Convert CSIT tests to use HTTP rather than HTTPS This commit converts the CSITs from HTTPS to HTTP. It also does some refactoring and didying up on the CSIT environment. Issue-ID: POLICY-4338 Change-Id: Ie19908a8d2a457df3ae5f4e490d5528889f395c8 Signed-off-by: liamfallon --- csit/apex-pdp/tests/apex-pdp-test.robot | 4 +- .../tests/data/onap.policies.apex.pnf.Test.json | 8 +- .../onap.policies.apex.pnf.metadataSet.Test.json | 8 +- .../tests/data/onap.policies.apex.vnf.Test.json | 6 +- csit/clamp/tests/policy-clamp-test.robot | 28 ++--- csit/common-library.robot | 20 +-- csit/config/apex-pdp/OnapPfConfig.json | 6 +- csit/config/api/groups.json | 137 ++++++++++++++++++++ csit/config/caserial.txt | 1 - csit/config/clamp/AcRuntimeParameters.yaml | 6 +- csit/config/clamp/HttpParticipantParameters.yaml | 8 +- .../clamp/KubernetesParticipantParameters.yaml | 8 +- csit/config/clamp/PolicyParticipantParameters.yaml | 12 +- csit/config/clamp/application-smoke.properties | 12 +- csit/config/clamp/groups.json | 137 ++++++++++++++++++++ csit/config/distribution/defaultConfig.json | 6 +- csit/config/distribution/groups.json | 137 ++++++++++++++++++++ csit/config/dns_ssl.txt | 21 ---- .../custom/engine-system.properties | 0 .../custom/feature-lifecycle.properties | 4 +- .../custom/features.pre.sh | 0 .../custom/standalone-settings.xml | 0 .../env/base.conf | 9 +- .../env/feature-healthcheck.conf | 0 .../env/feature-pooling-dmaap.conf | 0 csit/config/drools-applications/groups.json | 137 ++++++++++++++++++++ .../custom/engine-system.properties | 0 .../{drools => drools-pdp}/custom/noop.pre.sh | 0 csit/config/{drools => drools-pdp}/env/base.conf | 4 +- csit/config/drools-pdp/groups.json | 137 ++++++++++++++++++++ csit/config/gui/application.yaml | 2 +- csit/config/gui/groups.json | 137 ++++++++++++++++++++ csit/config/pap/papParameters.yaml | 12 +- csit/config/policy-truststore | Bin 124180 -> 0 bytes csit/config/sim-all/simParameters.json | 18 +-- csit/config/xacml-pdp/defaultConfig.json | 8 +- csit/docker-compose-all.yml | 139 +++++++++------------ .../tests/drools-applications-test.robot | 8 +- csit/drools-pdp/tests/drools-pdp-test.robot | 8 +- csit/gen_keystore.sh | 54 -------- csit/gen_truststore.sh | 49 -------- csit/make_topic.sh | 3 +- csit/onset.sh | 3 +- csit/pap/plans/setup.sh | 9 +- csit/prepare-config-files.py | 59 --------- csit/run-project-csit.sh | 59 ++++----- csit/start-grafana.sh | 10 +- csit/start-gui-smoke-components.sh | 8 +- csit/wait_for_port.sh | 62 ++++++--- csit/wait_topic.sh | 3 +- csit/xacml-pdp/plans/setup.sh | 2 +- 51 files changed, 1082 insertions(+), 427 deletions(-) create mode 100644 csit/config/api/groups.json delete mode 100644 csit/config/caserial.txt create mode 100644 csit/config/clamp/groups.json create mode 100644 csit/config/distribution/groups.json delete mode 100644 csit/config/dns_ssl.txt rename csit/config/{drools-apps => drools-applications}/custom/engine-system.properties (100%) rename csit/config/{drools-apps => drools-applications}/custom/feature-lifecycle.properties (93%) rename csit/config/{drools-apps => drools-applications}/custom/features.pre.sh (100%) rename csit/config/{drools-apps => drools-applications}/custom/standalone-settings.xml (100%) rename csit/config/{drools-apps => drools-applications}/env/base.conf (96%) rename csit/config/{drools-apps => drools-applications}/env/feature-healthcheck.conf (100%) rename csit/config/{drools-apps => drools-applications}/env/feature-pooling-dmaap.conf (100%) create mode 100644 csit/config/drools-applications/groups.json rename csit/config/{drools => drools-pdp}/custom/engine-system.properties (100%) rename csit/config/{drools => drools-pdp}/custom/noop.pre.sh (100%) rename csit/config/{drools => drools-pdp}/env/base.conf (97%) create mode 100644 csit/config/drools-pdp/groups.json create mode 100644 csit/config/gui/groups.json delete mode 100644 csit/config/policy-truststore delete mode 100755 csit/gen_keystore.sh delete mode 100755 csit/gen_truststore.sh delete mode 100755 csit/prepare-config-files.py diff --git a/csit/apex-pdp/tests/apex-pdp-test.robot b/csit/apex-pdp/tests/apex-pdp-test.robot index b0e4c727..77393270 100644 --- a/csit/apex-pdp/tests/apex-pdp-test.robot +++ b/csit/apex-pdp/tests/apex-pdp-test.robot @@ -100,7 +100,7 @@ RunEventOnApexEngine TriggerAndVerifyTestPnfPolicy [Documentation] Send TestPnf policy trigger event to DMaaP and read notifications to verify policy execution - Create Session apexSession https://${DMAAP_IP}:3905 max_retries=1 + Create Session apexSession http://${DMAAP_IP}:3904 max_retries=1 ${data}= Get Binary File ${CURDIR}/data/VesEventForPnfPolicy.json &{headers}= Create Dictionary Content-Type=application/json Accept=application/json ${resp}= POST On Session apexSession /events/unauthenticated.DCAE_CL_OUTPUT data=${data} headers=${headers} @@ -111,7 +111,7 @@ TriggerAndVerifyTestPnfPolicy TriggerAndVerifyTestVnfPolicy [Documentation] Send TestVnf policy trigger event to DMaaP and read notifications to verify policy execution - Create Session apexSession https://${DMAAP_IP}:3905 max_retries=1 + Create Session apexSession http://${DMAAP_IP}:3904 max_retries=1 ${data}= Get Binary File ${CURDIR}/data/VesEventForVnfPolicy.json &{headers}= Create Dictionary Content-Type=application/json Accept=application/json ${resp}= POST On Session apexSession /events/unauthenticated.DCAE_POLICY_EXAMPLE_OUTPUT data=${data} headers=${headers} diff --git a/csit/apex-pdp/tests/data/onap.policies.apex.pnf.Test.json b/csit/apex-pdp/tests/data/onap.policies.apex.pnf.Test.json index 5d9cbf9a..05522936 100644 --- a/csit/apex-pdp/tests/data/onap.policies.apex.pnf.Test.json +++ b/csit/apex-pdp/tests/data/onap.policies.apex.pnf.Test.json @@ -32,7 +32,7 @@ "taskParameters": [ { "key": "logUrl", - "value": "https://message-router:3905/events/APEX-CL-MGT" + "value": "http://message-router:3904/events/APEX-CL-MGT" } ] }, @@ -2778,7 +2778,7 @@ "carrierTechnology": "RESTCLIENT", "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters", "parameters": { - "url": "https://message-router:3905/events/unauthenticated.DCAE_CL_OUTPUT/cl/apex?timeout=30000" + "url": "http://message-router:3904/events/unauthenticated.DCAE_CL_OUTPUT/cl/apex?timeout=30000" } }, "eventProtocolParameters": { @@ -2791,7 +2791,7 @@ "carrierTechnology": "RESTREQUESTOR", "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters", "parameters": { - "url": "https://aai-sim:6666/aai/v16/network/pnfs/pnf/{pnfName}", + "url": "http://aai-sim:6666/aai/v16/network/pnfs/pnf/{pnfName}", "httpMethod": "GET", "httpCodeFilter": "[2-5][0-1][0-9]", "httpHeaders": [ @@ -2879,7 +2879,7 @@ "carrierTechnology": "RESTCLIENT", "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters", "parameters": { - "url": "https://message-router:3905/events/APEX-CL-MGT" + "url": "http://message-router:3904/events/APEX-CL-MGT" } }, "eventProtocolParameters": { diff --git a/csit/apex-pdp/tests/data/onap.policies.apex.pnf.metadataSet.Test.json b/csit/apex-pdp/tests/data/onap.policies.apex.pnf.metadataSet.Test.json index 767adf13..20338fff 100644 --- a/csit/apex-pdp/tests/data/onap.policies.apex.pnf.metadataSet.Test.json +++ b/csit/apex-pdp/tests/data/onap.policies.apex.pnf.metadataSet.Test.json @@ -36,7 +36,7 @@ "taskParameters": [ { "key": "logUrl", - "value": "https://message-router:3905/events/APEX-CL-MGT2" + "value": "http://message-router:3904/events/APEX-CL-MGT2" } ] } @@ -47,7 +47,7 @@ "carrierTechnology": "RESTCLIENT", "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters", "parameters": { - "url": "https://message-router:3905/events/unauthenticated.DCAE_CL_OUTPUT/cl/apex?timeout=30000" + "url": "http://message-router:3904/events/unauthenticated.DCAE_CL_OUTPUT/cl/apex?timeout=30000" } }, "eventProtocolParameters": { @@ -60,7 +60,7 @@ "carrierTechnology": "RESTREQUESTOR", "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters", "parameters": { - "url": "https://aai-sim:6666/aai/v16/network/pnfs/pnf/{pnfName}", + "url": "http://aai-sim:6666/aai/v16/network/pnfs/pnf/{pnfName}", "httpMethod": "GET", "httpCodeFilter": "[2-5][0-1][0-9]", "httpHeaders": [ @@ -148,7 +148,7 @@ "carrierTechnology": "RESTCLIENT", "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters", "parameters": { - "url": "https://message-router:3905/events/APEX-CL-MGT2" + "url": "http://message-router:3904/events/APEX-CL-MGT2" } }, "eventProtocolParameters": { diff --git a/csit/apex-pdp/tests/data/onap.policies.apex.vnf.Test.json b/csit/apex-pdp/tests/data/onap.policies.apex.vnf.Test.json index d000de7c..7886f84b 100644 --- a/csit/apex-pdp/tests/data/onap.policies.apex.vnf.Test.json +++ b/csit/apex-pdp/tests/data/onap.policies.apex.vnf.Test.json @@ -32,7 +32,7 @@ "taskParameters": [ { "key": "logUrl", - "value": "https://message-router:3905/events/APEX-CL-MGT" + "value": "http://message-router:3904/events/APEX-CL-MGT" } ] }, @@ -3060,7 +3060,7 @@ "carrierTechnology": "RESTCLIENT", "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters", "parameters": { - "url": "https://message-router:3905/events/unauthenticated.DCAE_POLICY_EXAMPLE_OUTPUT/ApexExampleCG1/1?timeout=30000" + "url": "http://message-router:3904/events/unauthenticated.DCAE_POLICY_EXAMPLE_OUTPUT/ApexExampleCG1/1?timeout=30000" } }, "eventProtocolParameters": { @@ -3073,7 +3073,7 @@ "carrierTechnology": "RESTREQUESTOR", "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.restrequestor.RestRequestorCarrierTechnologyParameters", "parameters": { - "url": "https://aai-sim:6666/aai/v16/network/generic-vnfs/generic-vnf?vnf-name={vnf-name}", + "url": "http://aai-sim:6666/aai/v16/network/generic-vnfs/generic-vnf?vnf-name={vnf-name}", "httpMethod": "GET", "httpCodeFilter": "[245][0-9][0-9]", "httpHeaders": [ diff --git a/csit/clamp/tests/policy-clamp-test.robot b/csit/clamp/tests/policy-clamp-test.robot index fe241333..f819d2d2 100644 --- a/csit/clamp/tests/policy-clamp-test.robot +++ b/csit/clamp/tests/policy-clamp-test.robot @@ -9,9 +9,9 @@ Library json CommissionAutomationCompositionV1 [Documentation] Commission automation composition. ${auth}= Create List runtimeUser zb!XztG34 - Log Creating session https://${POLICY_RUNTIME_ACM_IP}:6969 + Log Creating session http://${POLICY_RUNTIME_ACM_IP}:6969 ${postyaml}= Get file ${CURDIR}/data/PMSHMultipleACTosca.yaml - ${session}= Create Session policy https://${POLICY_RUNTIME_ACM_IP}:6969 auth=${auth} + ${session}= Create Session policy http://${POLICY_RUNTIME_ACM_IP}:6969 auth=${auth} ${headers}= Create Dictionary Accept=application/yaml Content-Type=application/yaml ${resp}= POST On Session policy /onap/policy/clamp/acm/v2/commission data=${postyaml} headers=${headers} Log Received response from runtime acm ${resp.text} @@ -20,9 +20,9 @@ CommissionAutomationCompositionV1 InstantiateAutomationCompositionV1 [Documentation] Instantiate automation composition. ${auth}= Create List runtimeUser zb!XztG34 - Log Creating session https://${POLICY_RUNTIME_ACM_IP}:6969 + Log Creating session http://${POLICY_RUNTIME_ACM_IP}:6969 ${postjson}= Get file ${CURDIR}/data/InstantiateAC.json - ${session}= Create Session policy https://${POLICY_RUNTIME_ACM_IP}:6969 auth=${auth} + ${session}= Create Session policy http://${POLICY_RUNTIME_ACM_IP}:6969 auth=${auth} ${headers}= Create Dictionary Accept=application/json Content-Type=application/json ${resp}= POST On Session policy /onap/policy/clamp/acm/v2/instantiation data=${postjson} headers=${headers} Log Received response from runtime acm ${resp.text} @@ -31,9 +31,9 @@ InstantiateAutomationCompositionV1 PassivateAutomationComposition [Documentation] Passivate automation composition. ${auth}= Create List runtimeUser zb!XztG34 - Log Creating session https://${POLICY_RUNTIME_ACM_IP}:6969 + Log Creating session http://${POLICY_RUNTIME_ACM_IP}:6969 ${postjson}= Get file ${CURDIR}/data/PassivateAC.json - ${session}= Create Session policy https://${POLICY_RUNTIME_ACM_IP}:6969 auth=${auth} + ${session}= Create Session policy http://${POLICY_RUNTIME_ACM_IP}:6969 auth=${auth} ${headers}= Create Dictionary Accept=application/json Content-Type=application/json ${resp}= PUT On Session policy /onap/policy/clamp/acm/v2/instantiation/command data=${postjson} headers=${headers} Log Received response from runtime acm ${resp.text} @@ -42,8 +42,8 @@ PassivateAutomationComposition QueryPolicies [Documentation] Runs Policy Participant Query New Policies ${auth}= Create List policyadmin zb!XztG34 - Log Creating session https://${POLICY_API_IP}:6969 - ${session}= Create Session policy https://${POLICY_API_IP}:6969 auth=${auth} + Log Creating session http://${POLICY_API_IP}:6969 + ${session}= Create Session policy http://${POLICY_API_IP}:6969 auth=${auth} ${headers}= Create Dictionary Accept=application/json Content-Type=application/json ${resp}= GET On Session policy /policy/api/v1/policies headers=${headers} Log Received response from policy-api {resp.text} @@ -52,8 +52,8 @@ QueryPolicies QueryPolicyTypes [Documentation] Runs Policy Participant Query New Policy Types ${auth}= Create List policyadmin zb!XztG34 - Log Creating session https://${POLICY_API_IP}:6969 - ${session}= Create Session policy https://${POLICY_API_IP}:6969 auth=${auth} + Log Creating session http://${POLICY_API_IP}:6969 + ${session}= Create Session policy http://${POLICY_API_IP}:6969 auth=${auth} ${headers}= Create Dictionary Accept=application/json Content-Type=application/json ${resp}= GET On Session policy /policy/api/v1/policytypes headers=${headers} Log Received response from policy-api ${resp.text} @@ -62,9 +62,9 @@ QueryPolicyTypes StateChangeRunningAutomationComposition [Documentation] AutomationComposition State Change to RUNNING. ${auth}= Create List runtimeUser zb!XztG34 - Log Creating session https://${POLICY_RUNTIME_ACM_IP}:6969 + Log Creating session http://${POLICY_RUNTIME_ACM_IP}:6969 ${postjson}= Get file ${CURDIR}/data/StateChangeRunningAC.json - ${session}= Create Session policy https://${POLICY_RUNTIME_ACM_IP}:6969 auth=${auth} + ${session}= Create Session policy http://${POLICY_RUNTIME_ACM_IP}:6969 auth=${auth} ${headers}= Create Dictionary Accept=application/json Content-Type=application/json ${resp}= PUT On Session policy /onap/policy/clamp/acm/v2/instantiation/command data=${postjson} headers=${headers} expected_status=406 Log Received response from runtime acm ${resp.text} @@ -72,8 +72,8 @@ StateChangeRunningAutomationComposition QueryInstantiatedACs [Documentation] Get Instantiated AutomationCompositions ${auth}= Create List runtimeUser zb!XztG34 - Log Creating session https://${POLICY_RUNTIME_ACM_IP}:6969 - ${session}= Create Session policy https://${POLICY_RUNTIME_ACM_IP}:6969 auth=${auth} + Log Creating session http://${POLICY_RUNTIME_ACM_IP}:6969 + ${session}= Create Session policy http://${POLICY_RUNTIME_ACM_IP}:6969 auth=${auth} ${headers}= Create Dictionary Accept=application/json Content-Type=application/json ${resp}= GET On Session policy /onap/policy/clamp/acm/v2/instantiation headers=${headers} Log Received response from runtime acm ${resp.text} diff --git a/csit/common-library.robot b/csit/common-library.robot index aa737a02..b90f854c 100644 --- a/csit/common-library.robot +++ b/csit/common-library.robot @@ -16,8 +16,8 @@ HealthCheckAuth PerformPostRequest [Arguments] ${hostname} ${url} ${expectedstatus} ${postjson} ${params} ${auth} - Log Creating session https://${hostname}:6969 - ${session}= Create Session policy https://${hostname}:6969 auth=${auth} + Log Creating session http://${hostname}:6969 + ${session}= Create Session policy http://${hostname}:6969 auth=${auth} ${headers}= Create Dictionary Accept=application/json Content-Type=application/json ${resp}= POST On Session policy ${url} data=${postjson} params=${params} headers=${headers} expected_status=${expectedstatus} Log Received response from policy ${resp.text} @@ -25,8 +25,8 @@ PerformPostRequest PerformPutRequest [Arguments] ${hostname} ${url} ${expectedstatus} ${params} ${auth} - Log Creating session https://${hostname}:6969 - ${session}= Create Session policy https://${hostname}:6969 auth=${auth} + Log Creating session http://${hostname}:6969 + ${session}= Create Session policy http://${hostname}:6969 auth=${auth} ${headers}= Create Dictionary Accept=application/json Content-Type=application/json ${resp}= PUT On Session policy ${url} params=${params} headers=${headers} expected_status=${expectedstatus} Log Received response from policy ${resp.text} @@ -34,8 +34,8 @@ PerformPutRequest PerformGetRequest [Arguments] ${hostname} ${url} ${expectedstatus} ${params} ${auth} - Log Creating session https://${hostname}:6969 - ${session}= Create Session policy https://${hostname}:6969 auth=${auth} + Log Creating session http://${hostname}:6969 + ${session}= Create Session policy http://${hostname}:6969 auth=${auth} ${headers}= Create Dictionary Accept=application/json Content-Type=application/json ${resp}= GET On Session policy ${url} params=${params} headers=${headers} expected_status=${expectedstatus} Log Received response from policy ${resp.text} @@ -43,8 +43,8 @@ PerformGetRequest PerformDeleteRequest [Arguments] ${hostname} ${url} ${expectedstatus} ${auth} - Log Creating session https://${hostname}:6969 - ${session}= Create Session policy https://${hostname}:6969 auth=${auth} + Log Creating session http://${hostname}:6969 + ${session}= Create Session policy http://${hostname}:6969 auth=${auth} ${headers}= Create Dictionary Accept=application/json Content-Type=application/json ${resp}= DELETE On Session policy ${url} headers=${headers} expected_status=${expectedstatus} Log Received response from policy ${resp.text} @@ -114,8 +114,8 @@ QueryPolicyStatus GetMetrics [Arguments] ${hostname} ${auth} - Log Creating session https://${hostname}:6969 - ${session}= Create Session policy https://${hostname}:6969 auth=${auth} + Log Creating session http://${hostname}:6969 + ${session}= Create Session policy http://${hostname}:6969 auth=${auth} ${resp}= GET On Session policy /metrics expected_status=200 Log Received response from policy ${resp.text} [return] ${resp} diff --git a/csit/config/apex-pdp/OnapPfConfig.json b/csit/config/apex-pdp/OnapPfConfig.json index 74085a19..5760259b 100644 --- a/csit/config/apex-pdp/OnapPfConfig.json +++ b/csit/config/apex-pdp/OnapPfConfig.json @@ -5,7 +5,7 @@ "port": 6969, "userName": "healthcheck", "password": "zb!XztG34", - "https": {{HTTPS_ENABLED}}, + "https": false, "prometheus": true }, "pdpStatusParameters":{ @@ -29,13 +29,13 @@ "topic" : "POLICY-PDP-PAP", "servers" : [ "message-router" ], "topicCommInfrastructure" : "dmaap", - "useHttps" : {{HTTPS_ENABLED}} + "useHttps" : false }], "topicSinks" : [{ "topic" : "POLICY-PDP-PAP", "servers" : [ "message-router" ], "topicCommInfrastructure" : "dmaap", - "useHttps" : {{HTTPS_ENABLED}} + "useHttps" : false }] } } diff --git a/csit/config/api/groups.json b/csit/config/api/groups.json new file mode 100644 index 00000000..6ee30e1c --- /dev/null +++ b/csit/config/api/groups.json @@ -0,0 +1,137 @@ +{ + "groups": [ + { + "name": "defaultGroup", + "version": "1.0.0", + "description": "The default group that registers all supported policy types and pdps.", + "pdpGroupState": "ACTIVE", + "pdpSubgroups": [ + { + "pdpType": "xacml", + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.guard.common.FrequencyLimiter", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.common.MinMax", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.common.Blacklist", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.common.Filter", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.coordination.FirstBlocksSecond", + "version": "1.0.0" + }, + { + "name": "onap.policies.monitoring.*", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.*", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.AffinityPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.DistancePolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.HpaPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.OptimizationPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.PciPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.service.QueryPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.service.SubscriberPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.Vim_fit", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.VnfPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.Xacml", + "version": "1.0.0" + }, + { + "name": "onap.policies.Naming", + "version": "1.0.0" + }, + { + "name": "onap.policies.match.*", + "version": "1.0.0" + } + ], + "currentInstanceCount": 0, + "desiredInstanceCount": 1, + "policies": [ + { + "name": "SDNC_Policy.ONAP_NF_NAMING_TIMESTAMP", + "version": "1.0.0" + } + ] + }, + { + "pdpType": "drools", + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.operational.common.Drools", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.drools.Controller", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.drools.Artifact", + "version": "1.0.0" + } + ], + "currentInstanceCount": 0, + "desiredInstanceCount": 1, + "policies": [] + }, + { + "pdpType": "apex", + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.operational.common.Apex", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.Apex", + "version": "1.0.0" + } + ], + "currentInstanceCount": 0, + "desiredInstanceCount": 1, + "policies": [] + } + ] + } + ] +} diff --git a/csit/config/caserial.txt b/csit/config/caserial.txt deleted file mode 100644 index 3bdca32d..00000000 --- a/csit/config/caserial.txt +++ /dev/null @@ -1 +0,0 @@ -1245 diff --git a/csit/config/clamp/AcRuntimeParameters.yaml b/csit/config/clamp/AcRuntimeParameters.yaml index d70627f1..e437dd20 100644 --- a/csit/config/clamp/AcRuntimeParameters.yaml +++ b/csit/config/clamp/AcRuntimeParameters.yaml @@ -33,7 +33,7 @@ security: server: port: 6969 ssl: - enabled: {{HTTPS_ENABLED}} + enabled: false error: path: /error @@ -52,14 +52,14 @@ runtime: - ${topicServer:message-router} topicCommInfrastructure: dmaap fetchTimeout: 15000 - useHttps: {{HTTPS_ENABLED}} + useHttps: false topicSinks: - topic: POLICY-ACRUNTIME-PARTICIPANT servers: - ${topicServer:message-router} topicCommInfrastructure: dmaap - useHttps: {{HTTPS_ENABLED}} + useHttps: false management: endpoints: diff --git a/csit/config/clamp/HttpParticipantParameters.yaml b/csit/config/clamp/HttpParticipantParameters.yaml index 62b9dc46..15768882 100644 --- a/csit/config/clamp/HttpParticipantParameters.yaml +++ b/csit/config/clamp/HttpParticipantParameters.yaml @@ -22,21 +22,21 @@ participant: - ${topicServer:message-router} topicCommInfrastructure: dmaap fetchTimeout: 15000 - useHttps: {{HTTPS_ENABLED}} + useHttps: false topicSinks: - topic: POLICY-ACRUNTIME-PARTICIPANT servers: - ${topicServer:message-router} topicCommInfrastructure: dmaap - useHttps: {{HTTPS_ENABLED}} + useHttps: false management: endpoints: web: exposure: include: health, metrics, prometheus server: - port: 8084 + port: 6969 ssl: - enabled: {{HTTPS_ENABLED}} + enabled: false servlet: context-path: /onap/policy/clamp/acm/httpparticipant diff --git a/csit/config/clamp/KubernetesParticipantParameters.yaml b/csit/config/clamp/KubernetesParticipantParameters.yaml index 49c568cb..c13f8151 100644 --- a/csit/config/clamp/KubernetesParticipantParameters.yaml +++ b/csit/config/clamp/KubernetesParticipantParameters.yaml @@ -26,14 +26,14 @@ participant: - ${topicServer:message-router} topicCommInfrastructure: dmaap fetchTimeout: 15000 - useHttps: {{HTTPS_ENABLED}} + useHttps: false topicSinks: - topic: POLICY-ACRUNTIME-PARTICIPANT servers: - ${topicServer:message-router} topicCommInfrastructure: dmaap - useHttps: {{HTTPS_ENABLED}} + useHttps: false management: endpoints: @@ -41,9 +41,9 @@ management: exposure: include: health, metrics, prometheus server: - port: 8083 + port: 6969 ssl: - enabled: {{HTTPS_ENABLED}} + enabled: false servlet: context-path: /onap/policy/clamp/acm/k8sparticipant diff --git a/csit/config/clamp/PolicyParticipantParameters.yaml b/csit/config/clamp/PolicyParticipantParameters.yaml index 73d40d4b..acaaebbe 100644 --- a/csit/config/clamp/PolicyParticipantParameters.yaml +++ b/csit/config/clamp/PolicyParticipantParameters.yaml @@ -13,7 +13,7 @@ participant: port: 6969 userName: policyadmin password: zb!XztG34 - useHttps: {{HTTPS_ENABLED}} + useHttps: false allowSelfSignedCerts: true policyPapParameters: clientName: pap @@ -21,7 +21,7 @@ participant: port: 6969 userName: policyadmin password: zb!XztG34 - useHttps: {{HTTPS_ENABLED}} + useHttps: false allowSelfSignedCerts: true intermediaryParameters: reportingTimeIntervalMs: 120000 @@ -40,22 +40,22 @@ participant: - ${topicServer:message-router} topicCommInfrastructure: dmaap fetchTimeout: 15000 - useHttps: {{HTTPS_ENABLED}} + useHttps: false topicSinks: - topic: POLICY-ACRUNTIME-PARTICIPANT servers: - ${topicServer:message-router} topicCommInfrastructure: dmaap - useHttps: {{HTTPS_ENABLED}} + useHttps: false management: endpoints: web: exposure: include: health, metrics, prometheus server: - port: 8085 + port: 6969 ssl: - enabled: {{HTTPS_ENABLED}} + enabled: false servlet: context-path: /onap/policy/clamp/acm/policyparticipant diff --git a/csit/config/clamp/application-smoke.properties b/csit/config/clamp/application-smoke.properties index 40578077..6910b68b 100644 --- a/csit/config/clamp/application-smoke.properties +++ b/csit/config/clamp/application-smoke.properties @@ -148,10 +148,10 @@ clamp.config.httpclient.connectTimeout=10000 # # Configuration Settings for Policy Engine Components -clamp.config.policy.api.url={{PROTOCOL}}${POLICY_API_HOST}:6969 +clamp.config.policy.api.url=http://${POLICY_API_HOST}:6969 clamp.config.policy.api.userName=policyadmin clamp.config.policy.api.password=zb!XztG34 -clamp.config.policy.pap.url={{PROTOCOL}}${POLICY_PAP_HOST}:6969 +clamp.config.policy.pap.url=http://${POLICY_PAP_HOST}:6969 clamp.config.policy.pap.userName=policyadmin clamp.config.policy.pap.password=zb!XztG34 @@ -160,12 +160,12 @@ clamp.config.policy.pap.password=zb!XztG34 clamp.config.sdc.csarFolder = /tmp/sdc-controllers #DCAE Inventory Url Properties -clamp.config.dcae.inventory.url={{PROTOCOL}}localhost:8085 +clamp.config.dcae.inventory.url=http://localhost:8085 clamp.config.dcae.intentory.retry.interval=10000 clamp.config.dcae.intentory.retry.limit=5 #DCAE Deployment Url Properties -clamp.config.dcae.deployment.url={{PROTOCOL}}localhost:8085 +clamp.config.dcae.deployment.url=http://localhost:8085 clamp.config.dcae.deployment.userName=test clamp.config.dcae.deployment.password=test @@ -187,11 +187,11 @@ clamp.config.tosca.converter.default.datatypes=classpath:/clds/tosca-converter/d clamp.config.tosca.converter.dictionary.support.enabled=true # Configuration settings for CDS -clamp.config.cds.url={{PROTOCOL}}cds-blueprints-processor-http:8080 +clamp.config.cds.url=http://cds-blueprints-processor-http:8080 clamp.config.cds.userName=ccsdkapps clamp.config.cds.password=ccsdkapps # Configuration settings for ControlLoop Runtime Rest API -clamp.config.acm.runtime.url={{PROTOCOL}}${RUNTIME_HOST}:6969 +clamp.config.acm.runtime.url=http://${RUNTIME_HOST}:6969 clamp.config.acm.runtime.userName=runtimeUser clamp.config.acm.runtime.password=zb!XztG34 diff --git a/csit/config/clamp/groups.json b/csit/config/clamp/groups.json new file mode 100644 index 00000000..6ee30e1c --- /dev/null +++ b/csit/config/clamp/groups.json @@ -0,0 +1,137 @@ +{ + "groups": [ + { + "name": "defaultGroup", + "version": "1.0.0", + "description": "The default group that registers all supported policy types and pdps.", + "pdpGroupState": "ACTIVE", + "pdpSubgroups": [ + { + "pdpType": "xacml", + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.guard.common.FrequencyLimiter", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.common.MinMax", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.common.Blacklist", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.common.Filter", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.coordination.FirstBlocksSecond", + "version": "1.0.0" + }, + { + "name": "onap.policies.monitoring.*", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.*", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.AffinityPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.DistancePolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.HpaPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.OptimizationPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.PciPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.service.QueryPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.service.SubscriberPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.Vim_fit", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.VnfPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.Xacml", + "version": "1.0.0" + }, + { + "name": "onap.policies.Naming", + "version": "1.0.0" + }, + { + "name": "onap.policies.match.*", + "version": "1.0.0" + } + ], + "currentInstanceCount": 0, + "desiredInstanceCount": 1, + "policies": [ + { + "name": "SDNC_Policy.ONAP_NF_NAMING_TIMESTAMP", + "version": "1.0.0" + } + ] + }, + { + "pdpType": "drools", + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.operational.common.Drools", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.drools.Controller", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.drools.Artifact", + "version": "1.0.0" + } + ], + "currentInstanceCount": 0, + "desiredInstanceCount": 1, + "policies": [] + }, + { + "pdpType": "apex", + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.operational.common.Apex", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.Apex", + "version": "1.0.0" + } + ], + "currentInstanceCount": 0, + "desiredInstanceCount": 1, + "policies": [] + } + ] + } + ] +} diff --git a/csit/config/distribution/defaultConfig.json b/csit/config/distribution/defaultConfig.json index 50cb822e..7f09c6b4 100644 --- a/csit/config/distribution/defaultConfig.json +++ b/csit/config/distribution/defaultConfig.json @@ -5,7 +5,7 @@ "port":6969, "userName":"healthcheck", "password":"zb!XztG34", - "https": {{HTTPS_ENABLED}}, + "https": false, "prometheus": true }, "receptionHandlerParameters":{ @@ -59,7 +59,7 @@ "port": 6969, "userName": "policyadmin", "password": "zb!XztG34", - "useHttps": {{HTTPS_ENABLED}} + "useHttps": false }, "papParameters": { "clientName": "policy-pap", @@ -67,7 +67,7 @@ "port": 6969, "userName": "policyadmin", "password": "zb!XztG34", - "useHttps": {{HTTPS_ENABLED}} + "useHttps": false }, "deployPolicies": true } diff --git a/csit/config/distribution/groups.json b/csit/config/distribution/groups.json new file mode 100644 index 00000000..6ee30e1c --- /dev/null +++ b/csit/config/distribution/groups.json @@ -0,0 +1,137 @@ +{ + "groups": [ + { + "name": "defaultGroup", + "version": "1.0.0", + "description": "The default group that registers all supported policy types and pdps.", + "pdpGroupState": "ACTIVE", + "pdpSubgroups": [ + { + "pdpType": "xacml", + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.guard.common.FrequencyLimiter", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.common.MinMax", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.common.Blacklist", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.common.Filter", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.coordination.FirstBlocksSecond", + "version": "1.0.0" + }, + { + "name": "onap.policies.monitoring.*", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.*", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.AffinityPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.DistancePolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.HpaPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.OptimizationPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.PciPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.service.QueryPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.service.SubscriberPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.Vim_fit", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.VnfPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.Xacml", + "version": "1.0.0" + }, + { + "name": "onap.policies.Naming", + "version": "1.0.0" + }, + { + "name": "onap.policies.match.*", + "version": "1.0.0" + } + ], + "currentInstanceCount": 0, + "desiredInstanceCount": 1, + "policies": [ + { + "name": "SDNC_Policy.ONAP_NF_NAMING_TIMESTAMP", + "version": "1.0.0" + } + ] + }, + { + "pdpType": "drools", + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.operational.common.Drools", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.drools.Controller", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.drools.Artifact", + "version": "1.0.0" + } + ], + "currentInstanceCount": 0, + "desiredInstanceCount": 1, + "policies": [] + }, + { + "pdpType": "apex", + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.operational.common.Apex", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.Apex", + "version": "1.0.0" + } + ], + "currentInstanceCount": 0, + "desiredInstanceCount": 1, + "policies": [] + } + ] + } + ] +} diff --git a/csit/config/dns_ssl.txt b/csit/config/dns_ssl.txt deleted file mode 100644 index 9833ed23..00000000 --- a/csit/config/dns_ssl.txt +++ /dev/null @@ -1,21 +0,0 @@ -subjectAltName = \ - DNS:policy, \ - DNS:drools, \ - DNS:drools.onap, \ - DNS:policy-apex-pdp, \ - DNS:policy-apex-pdp.onap, \ - DNS:policy-api, \ - DNS:policy-api.onap, \ - DNS:policy-distribution, \ - DNS:policy-distribution.onap, \ - DNS:policy-pap, \ - DNS:policy-pap.onap, \ - DNS:policy-xacml-pdp, \ - DNS:policy-xacml-pdp.onap, \ - DNS:simulator, \ - DNS:aai-sim, \ - DNS:grpc-sim, \ - DNS:sdnc-sim, \ - DNS:so-sim, \ - DNS:vfc-sim, \ - DNS:message-router diff --git a/csit/config/drools-apps/custom/engine-system.properties b/csit/config/drools-applications/custom/engine-system.properties similarity index 100% rename from csit/config/drools-apps/custom/engine-system.properties rename to csit/config/drools-applications/custom/engine-system.properties diff --git a/csit/config/drools-apps/custom/feature-lifecycle.properties b/csit/config/drools-applications/custom/feature-lifecycle.properties similarity index 93% rename from csit/config/drools-apps/custom/feature-lifecycle.properties rename to csit/config/drools-applications/custom/feature-lifecycle.properties index dcbf290e..3e862970 100644 --- a/csit/config/drools-apps/custom/feature-lifecycle.properties +++ b/csit/config/drools-applications/custom/feature-lifecycle.properties @@ -29,10 +29,10 @@ dmaap.source.topics.POLICY-PDP-PAP.servers=${envd:DMAAP_SERVERS} dmaap.source.topics.POLICY-PDP-PAP.effectiveTopic=${envd:POLICY_PDP_PAP_TOPIC} dmaap.source.topics.POLICY-PDP-PAP.apiKey=${envd:POLICY_PDP_PAP_API_KEY} dmaap.source.topics.POLICY-PDP-PAP.apiSecret=${envd:POLICY_PDP_PAP_API_SECRET} -dmaap.source.topics.POLICY-PDP-PAP.https=${envd:DMAAP_HTTPS:true} +dmaap.source.topics.POLICY-PDP-PAP.https=${envd:DMAAP_HTTPS:false} dmaap.sink.topics.POLICY-PDP-PAP.servers=${envd:DMAAP_SERVERS} dmaap.sink.topics.POLICY-PDP-PAP.effectiveTopic=${envd:POLICY_PDP_PAP_TOPIC} dmaap.sink.topics.POLICY-PDP-PAP.apiKey=${envd:POLICY_PDP_PAP_API_KEY} dmaap.sink.topics.POLICY-PDP-PAP.apiSecret=${envd:POLICY_PDP_PAP_API_SECRET} -dmaap.sink.topics.POLICY-PDP-PAP.https=${envd:DMAAP_HTTPS:true} +dmaap.sink.topics.POLICY-PDP-PAP.https=${envd:DMAAP_HTTPS:false} diff --git a/csit/config/drools-apps/custom/features.pre.sh b/csit/config/drools-applications/custom/features.pre.sh similarity index 100% rename from csit/config/drools-apps/custom/features.pre.sh rename to csit/config/drools-applications/custom/features.pre.sh diff --git a/csit/config/drools-apps/custom/standalone-settings.xml b/csit/config/drools-applications/custom/standalone-settings.xml similarity index 100% rename from csit/config/drools-apps/custom/standalone-settings.xml rename to csit/config/drools-applications/custom/standalone-settings.xml diff --git a/csit/config/drools-apps/env/base.conf b/csit/config/drools-applications/env/base.conf similarity index 96% rename from csit/config/drools-apps/env/base.conf rename to csit/config/drools-applications/env/base.conf index 04142257..c3cf80f7 100644 --- a/csit/config/drools-apps/env/base.conf +++ b/csit/config/drools-applications/env/base.conf @@ -61,7 +61,7 @@ AAF_HOST=aaf.api.simpledemo.onap.org # HTTP Servers -HTTP_SERVER_HTTPS={{HTTPS_ENABLED}} +HTTP_SERVER_HTTPS=false PROMETHEUS=true # LIVENESS Checks @@ -97,7 +97,7 @@ PDP_PORT=6969 PDP_CONTEXT_URI=policy/pdpx/v1/ PDP_USERNAME=healthcheck PDP_PASSWORD=zb!XztG34 - +PDP_HTTPS=false # DCAE DMaaP @@ -108,7 +108,7 @@ DCAE_CONSUMER_GROUP=dcae.policy.shared # Open DMaaP DMAAP_SERVERS=message-router -DMAAP_HTTPS={{HTTPS_ENABLED}} +DMAAP_HTTPS=false # AAI @@ -117,13 +117,14 @@ AAI_PORT=6666 AAI_CONTEXT_URI= AAI_USERNAME=policy@policy.onap.org AAI_PASSWORD=demo123456! +AAI_HTTPS=false # MSO SO_HOST=so-sim SO_PORT=6669 SO_CONTEXT_URI= -SO_URL=https://message-router:6669/ +SO_URL=http://message-router:6669/ SO_USERNAME=InfraPortalClient SO_PASSWORD=password1$ diff --git a/csit/config/drools-apps/env/feature-healthcheck.conf b/csit/config/drools-applications/env/feature-healthcheck.conf similarity index 100% rename from csit/config/drools-apps/env/feature-healthcheck.conf rename to csit/config/drools-applications/env/feature-healthcheck.conf diff --git a/csit/config/drools-apps/env/feature-pooling-dmaap.conf b/csit/config/drools-applications/env/feature-pooling-dmaap.conf similarity index 100% rename from csit/config/drools-apps/env/feature-pooling-dmaap.conf rename to csit/config/drools-applications/env/feature-pooling-dmaap.conf diff --git a/csit/config/drools-applications/groups.json b/csit/config/drools-applications/groups.json new file mode 100644 index 00000000..6ee30e1c --- /dev/null +++ b/csit/config/drools-applications/groups.json @@ -0,0 +1,137 @@ +{ + "groups": [ + { + "name": "defaultGroup", + "version": "1.0.0", + "description": "The default group that registers all supported policy types and pdps.", + "pdpGroupState": "ACTIVE", + "pdpSubgroups": [ + { + "pdpType": "xacml", + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.guard.common.FrequencyLimiter", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.common.MinMax", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.common.Blacklist", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.common.Filter", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.coordination.FirstBlocksSecond", + "version": "1.0.0" + }, + { + "name": "onap.policies.monitoring.*", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.*", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.AffinityPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.DistancePolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.HpaPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.OptimizationPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.PciPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.service.QueryPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.service.SubscriberPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.Vim_fit", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.VnfPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.Xacml", + "version": "1.0.0" + }, + { + "name": "onap.policies.Naming", + "version": "1.0.0" + }, + { + "name": "onap.policies.match.*", + "version": "1.0.0" + } + ], + "currentInstanceCount": 0, + "desiredInstanceCount": 1, + "policies": [ + { + "name": "SDNC_Policy.ONAP_NF_NAMING_TIMESTAMP", + "version": "1.0.0" + } + ] + }, + { + "pdpType": "drools", + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.operational.common.Drools", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.drools.Controller", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.drools.Artifact", + "version": "1.0.0" + } + ], + "currentInstanceCount": 0, + "desiredInstanceCount": 1, + "policies": [] + }, + { + "pdpType": "apex", + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.operational.common.Apex", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.Apex", + "version": "1.0.0" + } + ], + "currentInstanceCount": 0, + "desiredInstanceCount": 1, + "policies": [] + } + ] + } + ] +} diff --git a/csit/config/drools/custom/engine-system.properties b/csit/config/drools-pdp/custom/engine-system.properties similarity index 100% rename from csit/config/drools/custom/engine-system.properties rename to csit/config/drools-pdp/custom/engine-system.properties diff --git a/csit/config/drools/custom/noop.pre.sh b/csit/config/drools-pdp/custom/noop.pre.sh similarity index 100% rename from csit/config/drools/custom/noop.pre.sh rename to csit/config/drools-pdp/custom/noop.pre.sh diff --git a/csit/config/drools/env/base.conf b/csit/config/drools-pdp/env/base.conf similarity index 97% rename from csit/config/drools/env/base.conf rename to csit/config/drools-pdp/env/base.conf index fd4d66fc..4bd7632b 100644 --- a/csit/config/drools/env/base.conf +++ b/csit/config/drools-pdp/env/base.conf @@ -59,7 +59,7 @@ AAF_HOST=aaf.api.simpledemo.onap.org # HTTP Servers -HTTP_SERVER_HTTPS={{HTTPS_ENABLED}} +HTTP_SERVER_HTTPS=false PROMETHEUS=true # PDP-D DMaaP configuration channel @@ -104,7 +104,7 @@ DCAE_CONSUMER_GROUP=dcae.policy.shared # Open DMaaP DMAAP_SERVERS=mr.api.simpledemo.onap.org -DMAAP_HTTPS={{HTTPS_ENABLED}} +DMAAP_HTTPS=false # AAI diff --git a/csit/config/drools-pdp/groups.json b/csit/config/drools-pdp/groups.json new file mode 100644 index 00000000..6ee30e1c --- /dev/null +++ b/csit/config/drools-pdp/groups.json @@ -0,0 +1,137 @@ +{ + "groups": [ + { + "name": "defaultGroup", + "version": "1.0.0", + "description": "The default group that registers all supported policy types and pdps.", + "pdpGroupState": "ACTIVE", + "pdpSubgroups": [ + { + "pdpType": "xacml", + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.guard.common.FrequencyLimiter", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.common.MinMax", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.common.Blacklist", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.common.Filter", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.coordination.FirstBlocksSecond", + "version": "1.0.0" + }, + { + "name": "onap.policies.monitoring.*", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.*", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.AffinityPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.DistancePolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.HpaPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.OptimizationPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.PciPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.service.QueryPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.service.SubscriberPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.Vim_fit", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.VnfPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.Xacml", + "version": "1.0.0" + }, + { + "name": "onap.policies.Naming", + "version": "1.0.0" + }, + { + "name": "onap.policies.match.*", + "version": "1.0.0" + } + ], + "currentInstanceCount": 0, + "desiredInstanceCount": 1, + "policies": [ + { + "name": "SDNC_Policy.ONAP_NF_NAMING_TIMESTAMP", + "version": "1.0.0" + } + ] + }, + { + "pdpType": "drools", + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.operational.common.Drools", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.drools.Controller", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.drools.Artifact", + "version": "1.0.0" + } + ], + "currentInstanceCount": 0, + "desiredInstanceCount": 1, + "policies": [] + }, + { + "pdpType": "apex", + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.operational.common.Apex", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.Apex", + "version": "1.0.0" + } + ], + "currentInstanceCount": 0, + "desiredInstanceCount": 1, + "policies": [] + } + ] + } + ] +} diff --git a/csit/config/gui/application.yaml b/csit/config/gui/application.yaml index a0a6c224..12effe27 100644 --- a/csit/config/gui/application.yaml +++ b/csit/config/gui/application.yaml @@ -18,7 +18,7 @@ server: port: 2443 ssl: - enabled: {{HTTPS_ENABLED}} + enabled: false enabled-protocols: TLSv1.2 client-auth: want key-store: file:${KEYSTORE} diff --git a/csit/config/gui/groups.json b/csit/config/gui/groups.json new file mode 100644 index 00000000..6ee30e1c --- /dev/null +++ b/csit/config/gui/groups.json @@ -0,0 +1,137 @@ +{ + "groups": [ + { + "name": "defaultGroup", + "version": "1.0.0", + "description": "The default group that registers all supported policy types and pdps.", + "pdpGroupState": "ACTIVE", + "pdpSubgroups": [ + { + "pdpType": "xacml", + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.guard.common.FrequencyLimiter", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.common.MinMax", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.common.Blacklist", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.common.Filter", + "version": "1.0.0" + }, + { + "name": "onap.policies.controlloop.guard.coordination.FirstBlocksSecond", + "version": "1.0.0" + }, + { + "name": "onap.policies.monitoring.*", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.*", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.AffinityPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.DistancePolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.HpaPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.OptimizationPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.PciPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.service.QueryPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.service.SubscriberPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.Vim_fit", + "version": "1.0.0" + }, + { + "name": "onap.policies.optimization.resource.VnfPolicy", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.Xacml", + "version": "1.0.0" + }, + { + "name": "onap.policies.Naming", + "version": "1.0.0" + }, + { + "name": "onap.policies.match.*", + "version": "1.0.0" + } + ], + "currentInstanceCount": 0, + "desiredInstanceCount": 1, + "policies": [ + { + "name": "SDNC_Policy.ONAP_NF_NAMING_TIMESTAMP", + "version": "1.0.0" + } + ] + }, + { + "pdpType": "drools", + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.operational.common.Drools", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.drools.Controller", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.drools.Artifact", + "version": "1.0.0" + } + ], + "currentInstanceCount": 0, + "desiredInstanceCount": 1, + "policies": [] + }, + { + "pdpType": "apex", + "supportedPolicyTypes": [ + { + "name": "onap.policies.controlloop.operational.common.Apex", + "version": "1.0.0" + }, + { + "name": "onap.policies.native.Apex", + "version": "1.0.0" + } + ], + "currentInstanceCount": 0, + "desiredInstanceCount": 1, + "policies": [] + } + ] + } + ] +} diff --git a/csit/config/pap/papParameters.yaml b/csit/config/pap/papParameters.yaml index 9a57ebb6..bb050205 100644 --- a/csit/config/pap/papParameters.yaml +++ b/csit/config/pap/papParameters.yaml @@ -24,7 +24,7 @@ spring: server: port: 6969 ssl: - enabled: {{HTTPS_ENABLED}} + enabled: false pap: name: PapGroup @@ -44,7 +44,7 @@ pap: servers: - message-router topicCommInfrastructure: dmaap - useHttps: {{HTTPS_ENABLED}} + useHttps: false fetchTimeout: 15000 - topic: POLICY-HEARTBEAT effectiveTopic: POLICY-PDP-PAP @@ -52,26 +52,26 @@ pap: servers: - message-router topicCommInfrastructure: dmaap - useHttps: {{HTTPS_ENABLED}} + useHttps: false fetchTimeout: 15000 topicSinks: - topic: POLICY-PDP-PAP servers: - message-router topicCommInfrastructure: dmaap - useHttps: {{HTTPS_ENABLED}} + useHttps: false - topic: POLICY-NOTIFICATION servers: - message-router topicCommInfrastructure: dmaap - useHttps: {{HTTPS_ENABLED}} + useHttps: false healthCheckRestClientParameters: - clientName: api hostname: policy-api port: 6969 userName: policyadmin password: zb!XztG34 - useHttps: {{HTTPS_ENABLED}} + useHttps: false basePath: policy/api/v1/healthcheck management: diff --git a/csit/config/policy-truststore b/csit/config/policy-truststore deleted file mode 100644 index 883e0a9c7914798b9361927ae2185407c165b206..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124180 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 =0ne6ku4wMUAX}@`OfI<=eQpd7Ys4tdZ9fl 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�A*i4% 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 diff --git a/csit/config/sim-all/simParameters.json b/csit/config/sim-all/simParameters.json index 3d348125..41fc9057 100644 --- a/csit/config/sim-all/simParameters.json +++ b/csit/config/sim-all/simParameters.json @@ -8,15 +8,15 @@ "name": "DMaaP simulator", "providerClass": "org.onap.policy.models.sim.dmaap.rest.DmaapSimRestControllerV1", "host": "0.0.0.0", - "port": {{MESSAGE_ROUTER_PORT}}, - "https": {{HTTPS_ENABLED}} + "port": 3904, + "https": false }, { "name": "A&AI simulator", "providerClass": "org.onap.policy.simulators.AaiSimulatorJaxRs", "host": "0.0.0.0", "port": 6666, - "https": {{HTTPS_ENABLED}}, + "https": false, "userName": "policy@policy.onap.org", "password": "demo123456!", "resourceLocation": "/opt/app/policy/simulators/etc/mounted/aairesponse/" @@ -26,7 +26,7 @@ "providerClass": "org.onap.policy.simulators.SdncSimulatorJaxRs", "host": "0.0.0.0", "port": 6668, - "https": {{HTTPS_ENABLED}} + "https": false }, { "name": "SO simulator", @@ -42,7 +42,7 @@ "providerClass": "org.onap.policy.simulators.VfcSimulatorJaxRs", "host": "0.0.0.0", "port": 6670, - "https": {{HTTPS_ENABLED}} + "https": false } ], "topicSinks": [ @@ -50,7 +50,7 @@ "topic": "APPC-CL", "servers": ["${HOST_NAME}"], "topicCommInfrastructure": "DMAAP", - "useHttps": {{HTTPS_ENABLED}}, + "useHttps": false, "apiKey": "some-key", "apiSecret": "some-secret" }, @@ -58,7 +58,7 @@ "topic": "APPC-LCM-WRITE", "servers": ["${HOST_NAME}"], "topicCommInfrastructure": "DMAAP", - "useHttps": {{HTTPS_ENABLED}}, + "useHttps": false, "apiKey": "some-key", "apiSecret": "some-secret" } @@ -68,7 +68,7 @@ "topic": "APPC-CL", "servers": ["${HOST_NAME}"], "topicCommInfrastructure": "DMAAP", - "useHttps": {{HTTPS_ENABLED}}, + "useHttps": false, "apiKey": "some-key", "apiSecret": "some-secret" }, @@ -76,7 +76,7 @@ "topic": "APPC-LCM-READ", "servers": ["${HOST_NAME}"], "topicCommInfrastructure": "DMAAP", - "useHttps": {{HTTPS_ENABLED}}, + "useHttps": false, "apiKey": "some-key", "apiSecret": "some-secret" } diff --git a/csit/config/xacml-pdp/defaultConfig.json b/csit/config/xacml-pdp/defaultConfig.json index 6ee07698..a4bcc5ed 100644 --- a/csit/config/xacml-pdp/defaultConfig.json +++ b/csit/config/xacml-pdp/defaultConfig.json @@ -7,7 +7,7 @@ "port": 6969, "userName": "healthcheck", "password": "zb!XztG34", - "https": {{HTTPS_ENABLED}}, + "https": false, "aaf": false, "prometheus": true }, @@ -16,7 +16,7 @@ "port": 6969, "userName": "policyadmin", "password": "zb!XztG34", - "useHttps": {{HTTPS_ENABLED}}, + "useHttps": false, "aaf": false }, "applicationParameters": { @@ -27,13 +27,13 @@ "topic" : "POLICY-PDP-PAP", "servers" : [ "message-router" ], "topicCommInfrastructure" : "dmaap", - "useHttps" : {{HTTPS_ENABLED}} + "useHttps" : false }], "topicSinks" : [{ "topic" : "POLICY-PDP-PAP", "servers" : [ "message-router" ], "topicCommInfrastructure" : "dmaap", - "useHttps" : {{HTTPS_ENABLED}} + "useHttps" : false }] } } diff --git a/csit/docker-compose-all.yml b/csit/docker-compose-all.yml index ef4bebdf..577d0482 100644 --- a/csit/docker-compose-all.yml +++ b/csit/docker-compose-all.yml @@ -20,7 +20,7 @@ version: '2' services: mariadb: - image: nexus3.onap.org:10001/mariadb:${POLICY_MARIADB_VER} + image: ${CONTAINER_LOCATION}mariadb:${POLICY_MARIADB_VER} container_name: mariadb hostname: mariadb command: ['--lower-case-table-names=1', '--wait_timeout=28800'] @@ -31,7 +31,7 @@ services: expose: - 3306 policy-db-migrator: - image: nexus3.onap.org:10001/onap/policy-db-migrator:${POLICY_DOCKER_VERSION} + image: ${CONTAINER_LOCATION}onap/policy-db-migrator:${POLICY_DOCKER_VERSION} container_name: policy-db-migrator hostname: policy-db-migrator depends_on: @@ -52,7 +52,7 @@ services: 'mariadb', '3306' ] simulator: - image: nexus3.onap.org:10001/onap/policy-models-simulator:${POLICY_MODELS_VERSION} + image: ${CONTAINER_LOCATION}onap/policy-models-simulator:${POLICY_MODELS_VERSION} container_name: simulator hostname: simulator networks: @@ -66,26 +66,23 @@ services: - vfc-sim volumes: - ./config/sim-all:/opt/app/policy/simulators/etc/mounted:ro - - ./config/ks.jks:/opt/app/policy/simulators/etc/ssl/policy-keystore:ro - - ./config/policy-truststore:/opt/app/policy/simulators/etc/ssl/policy-truststore:ro expose: - 6666 - 6668 - 6669 - 6670 - - 3905 + - 3904 - 6680 api: - image: nexus3.onap.org:10001/onap/policy-api:${POLICY_API_VERSION} + image: ${CONTAINER_LOCATION}onap/policy-api:${POLICY_API_VERSION} container_name: policy-api depends_on: - policy-db-migrator hostname: policy-api - expose: - - 6969 + ports: + - 30440:6969 volumes: - - ./config/ks.jks:/opt/app/policy/api/etc/ssl/policy-keystore:ro - - ./config/policy-truststore:/opt/app/policy/api/etc/ssl/policy-truststore:ro + - ./config/api/apiParameters.yaml:/opt/app/policy/api/etc/apiParameters.yaml:ro - ./wait_for_port.sh:/opt/app/policy/api/bin/wait_for_port.sh:ro entrypoint: ./wait_for_port.sh command: [ @@ -94,74 +91,71 @@ services: 'policy-db-migrator', '6824' ] pap: - image: nexus3.onap.org:10001/onap/policy-pap:${POLICY_PAP_VERSION} + image: ${CONTAINER_LOCATION}onap/policy-pap:${POLICY_PAP_VERSION} container_name: policy-pap depends_on: - mariadb - simulator - api hostname: policy-pap - expose: - - 6969 + ports: + - 30442:6969 volumes: - ./config/pap/papParameters.yaml:/opt/app/policy/pap/etc/papParameters.yaml:ro - ./config/${PROJECT}/groups.json:/opt/app/policy/pap/etc/mounted/groups.json:ro - - ./config/ks.jks:/opt/app/policy/pap/etc/ssl/policy-keystore:ro - - ./config/policy-truststore:/opt/app/policy/pap/etc/ssl/policy-truststore:ro - ./wait_for_port.sh:/opt/app/policy/pap/bin/wait_for_port.sh:ro entrypoint: ./wait_for_port.sh command: [ '-c', './policy-pap.sh', 'mariadb', '3306', - 'message-router', '3905', + 'message-router', '3904', 'api', '6969' ] xacml-pdp: - image: nexus3.onap.org:10001/onap/policy-xacml-pdp:${POLICY_XACML_PDP_VERSION} + image: ${CONTAINER_LOCATION}onap/policy-xacml-pdp:${POLICY_XACML_PDP_VERSION} container_name: policy-xacml-pdp depends_on: - mariadb - simulator - pap hostname: policy-xacml-pdp - expose: - - 6969 + ports: + - 30441:6969 volumes: - ./config/xacml-pdp/defaultConfig.json:/opt/app/policy/pdpx/etc/defaultConfig.json:ro - - ./config/ks.jks:/opt/app/policy/pdpx/etc/ssl/policy-keystore:ro - - ./config/policy-truststore:/opt/app/policy/pdpx/etc/ssl/policy-truststore:ro + - ./config/xacml-pdp/groups.json:/opt/app/policy/pdpx/etc/groups.json:ro - ./wait_for_port.sh:/opt/app/policy/pdpx/bin/wait_for_port.sh:ro entrypoint: ./wait_for_port.sh command: [ '-c', './policy-pdpx.sh', 'mariadb', '3306', - 'message-router', '3905', + 'message-router', '3904', 'pap', '6969' ] drools: - image: nexus3.onap.org:10001/onap/policy-drools:${POLICY_DROOLS_PDP_VERSION} + image: ${CONTAINER_LOCATION}onap/policy-drools:${POLICY_DROOLS_PDP_VERSION} container_name: drools depends_on: - mariadb - simulator - pap hostname: drools - expose: - - 6969 - - 9696 + ports: + - 30217:6969 + - 30216:9696 volumes: - - ./config/drools/custom:/tmp/policy-install/config:ro + - ./config/drools-pdp/custom:/tmp/policy-install/config:ro - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro env_file: - - config/drools/env/base.conf + - config/drools-pdp/env/base.conf entrypoint: /opt/app/policy/bin/wait_for_port.sh command: [ '-c', '/opt/app/policy/bin/pdpd-entrypoint.sh boot', 'mariadb', '3306', - 'message-router', '3905' + 'message-router', '3904' ] drools-apps: - image: nexus3.onap.org:10001/onap/policy-pdpd-cl:${POLICY_DROOLS_APPS_VERSION} + image: ${CONTAINER_LOCATION}onap/policy-pdpd-cl:${POLICY_DROOLS_APPS_VERSION} container_name: drools-apps depends_on: - mariadb @@ -169,21 +163,21 @@ services: - pap - xacml-pdp hostname: drools-apps - expose: - - 6969 - - 9696 + ports: + - 30221:6969 + - 30219:9696 volumes: - - ./config/drools-apps/custom:/tmp/policy-install/config:ro + - ./config/drools-applications/custom:/tmp/policy-install/config:ro - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro env_file: - - config/drools-apps/env/base.conf - - config/drools-apps/env/feature-healthcheck.conf - - config/drools-apps/env/feature-pooling-dmaap.conf + - config/drools-applications/env/base.conf + - config/drools-applications/env/feature-healthcheck.conf + - config/drools-applications/env/feature-pooling-dmaap.conf entrypoint: /opt/app/policy/bin/wait_for_port.sh command: [ '-c', '/opt/app/policy/bin/pdpd-cl-entrypoint.sh boot', 'mariadb', '3306', - 'message-router', '3905', + 'message-router', '3904', 'pap', '6969', 'aai-sim', '6666', 'sdnc-sim', '6668', @@ -191,30 +185,27 @@ services: 'vfc-sim', '6670' ] apex-pdp: - image: nexus3.onap.org:10001/onap/policy-apex-pdp:${POLICY_APEX_PDP_VERSION} + image: ${CONTAINER_LOCATION}onap/policy-apex-pdp:${POLICY_APEX_PDP_VERSION} container_name: policy-apex-pdp depends_on: - mariadb - simulator - pap hostname: policy-apex-pdp - expose: - - 6969 - - 23324 + ports: + - 30237:6969 volumes: - ./config/apex-pdp/OnapPfConfig.json:/opt/app/policy/apex-pdp/etc/onappf/config/OnapPfConfig.json:ro - - ./config/ks.jks:/opt/app/policy/apex-pdp/etc/ssl/policy-keystore:ro - - ./config/policy-truststore:/opt/app/policy/apex-pdp/etc/ssl/policy-truststore:ro - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro entrypoint: /opt/app/policy/bin/wait_for_port.sh command: [ '-c', '/opt/app/policy/apex-pdp/bin/apexOnapPf.sh -c /opt/app/policy/apex-pdp/etc/onappf/config/OnapPfConfig.json', 'mariadb', '3306', - 'message-router', '3905', + 'message-router', '3904', 'pap', '6969' ] distribution: - image: nexus3.onap.org:10001/onap/policy-distribution:${POLICY_DISTRIBUTION_VERSION} + image: ${CONTAINER_LOCATION}onap/policy-distribution:${POLICY_DISTRIBUTION_VERSION} container_name: policy-distribution depends_on: - mariadb @@ -224,84 +215,78 @@ services: hostname: policy-distribution volumes: - ./config/distribution/defaultConfig.json:/opt/app/policy/distribution/etc/defaultConfig.json:ro - - ./config/ks.jks:/opt/app/policy/distribution/etc/ssl/policy-keystore:ro - - ./config/policy-truststore:/opt/app/policy/distribution/etc/ssl/policy-truststore:ro - ./distribution/config/temp/:/opt/app/policy/distribution/etc/temp/:ro - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro entrypoint: /opt/app/policy/bin/wait_for_port.sh command: [ '-c', './policy-dist.sh', 'mariadb', '3306', - 'message-router', '3905', + 'message-router', '3904', 'pap', '6969', 'apex-pdp', '6969' ] policy-clamp-runtime-acm: - image: nexus3.onap.org:10001/onap/policy-clamp-runtime-acm:${POLICY_CLAMP_VERSION} + image: ${CONTAINER_LOCATION}onap/policy-clamp-runtime-acm:${POLICY_CLAMP_VERSION} container_name: policy-clamp-runtime-acm depends_on: - mariadb - simulator hostname: policy-clamp-runtime-acm - expose: - - 6969 + ports: + - 30258:6969 volumes: - - ./config/policy-truststore:/opt/app/policy/clamp/etc/ssl/policy-truststore:ro + - ./config/clamp/AcRuntimeParameters.yaml:/opt/app/policy/clamp/etc/AcRuntimeParameters.yaml - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro - - ./config/ks.jks:/opt/app/policy/clamp/etc/ssl/policy-keystore:ro entrypoint: /opt/app/policy/bin/wait_for_port.sh command: [ '-c', './acm-runtime.sh', - 'message-router', '3905' + 'message-router', '3904' ] policy-clamp-ac-http-ppnt: - image: nexus3.onap.org:10001/onap/policy-clamp-ac-http-ppnt:${POLICY_CLAMP_VERSION} + image: ${CONTAINER_LOCATION}onap/policy-clamp-ac-http-ppnt:${POLICY_CLAMP_VERSION} container_name: policy-clamp-ac-http-ppnt hostname: policy-clamp-ac-http-ppnt - expose: - - 6971 + ports: + - 30290:6969 volumes: - - ./config/policy-truststore:/opt/app/policy/clamp/etc/ssl/policy-truststore:ro + - ./config/clamp/HttpParticipantParameters.yaml:/opt/app/policy/clamp/etc/HttpParticipantParameters.yaml - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro - - ./config/ks.jks:/opt/app/policy/clamp/etc/ssl/policy-keystore:ro entrypoint: /opt/app/policy/bin/wait_for_port.sh command: [ '-c', './http-participant.sh', - 'message-router', '3905' + 'policy-clamp-runtime-acm', '6969', + 'message-router', '3904' ] policy-clamp-ac-k8s-ppnt: - image: nexus3.onap.org:10001/onap/policy-clamp-ac-k8s-ppnt:${POLICY_CLAMP_VERSION} + image: ${CONTAINER_LOCATION}onap/policy-clamp-ac-k8s-ppnt:${POLICY_CLAMP_VERSION} container_name: policy-clamp-ac-k8s-ppnt hostname: policy-clamp-ac-k8s-ppnt - expose: - - 6972 + ports: + - 30295:6969 volumes: - - ./config/policy-truststore:/opt/app/policy/clamp/etc/ssl/policy-truststore:ro + - ./config/clamp/KubernetesParticipantParameters.yaml:/opt/app/policy/clamp/etc/KubernetesParticipantParameters.yaml - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro - - ./config/ks.jks:/opt/app/policy/clamp/etc/ssl/policy-keystore:ro entrypoint: /opt/app/policy/bin/wait_for_port.sh command: [ '-c', './kubernetes-participant.sh', - 'message-router', '3905' + 'policy-clamp-runtime-acm', '6969', + 'message-router', '3904' ] policy-clamp-ac-pf-ppnt: - image: nexus3.onap.org:10001/onap/policy-clamp-ac-pf-ppnt:${POLICY_CLAMP_VERSION} + image: ${CONTAINER_LOCATION}onap/policy-clamp-ac-pf-ppnt:${POLICY_CLAMP_VERSION} container_name: policy-clamp-ac-pf-ppnt depends_on: - simulator - api - - policy-clamp-ac-http-ppnt - - policy-clamp-ac-k8s-ppnt hostname: policy-clamp-ac-pf-ppnt - expose: - - 6973 + ports: + - 30218:6969 volumes: - - ./config/policy-truststore:/opt/app/policy/clamp/etc/ssl/policy-truststore:ro + - ./config/clamp/PolicyParticipantParameters.yaml:/opt/app/policy/clamp/etc/PolicyParticipantParameters.yaml:ro - ./wait_for_port.sh:/opt/app/policy/bin/wait_for_port.sh:ro - - ./config/ks.jks:/opt/app/policy/clamp/etc/ssl/policy-keystore:ro - - ./config/clamp/PolicyParticipantParameters.yaml:/opt/app/policy/clamp/config/PolicyParticipantParameters.yaml:ro entrypoint: /opt/app/policy/bin/wait_for_port.sh command: [ '-c', './policy-participant.sh', - 'message-router', '3905' + 'policy-clamp-runtime-acm', '6969', + 'message-router', '3904' ] diff --git a/csit/drools-applications/tests/drools-applications-test.robot b/csit/drools-applications/tests/drools-applications-test.robot index a908f79b..c06631b9 100644 --- a/csit/drools-applications/tests/drools-applications-test.robot +++ b/csit/drools-applications/tests/drools-applications-test.robot @@ -213,8 +213,8 @@ VerifyController PeformGetRequest [Arguments] ${url} ${hostname} ${port} ${expectedstatus} ${auth}= Create List demo@people.osaaf.org demo123456! - Log Creating session https://${hostname}:${port} - ${session}= Create Session policy https://${hostname}:${port} auth=${auth} + Log Creating session http://${hostname}:${port} + ${session}= Create Session policy http://${hostname}:${port} auth=${auth} ${headers}= Create Dictionary Accept=application/json Content-Type=application/json ${resp}= GET On Session policy ${url} headers=${headers} expected_status=${expectedstatus} Log Received response from policy ${resp.text} @@ -224,8 +224,8 @@ PerformPostRequest [Arguments] ${url} ${params} ${hostname} ${port} ${jsonfile} ${filepath} ${contenttype} ${expectedstatus} ${auth}= Create List policyadmin zb!XztG34 ${postjson}= Get file ${filepath}/${jsonfile} - Log Creating session https://${hostname}:${port} - ${session}= Create Session policy https://${hostname}:${port} auth=${auth} + Log Creating session http://${hostname}:${port} + ${session}= Create Session policy http://${hostname}:${port} auth=${auth} ${headers}= Create Dictionary Accept=application/${contenttype} Content-Type=application/${contenttype} ${resp}= POST On Session policy ${url} params=${params} data=${postjson} headers=${headers} expected_status=${expectedstatus} Log Received response from policy ${resp.text} diff --git a/csit/drools-pdp/tests/drools-pdp-test.robot b/csit/drools-pdp/tests/drools-pdp-test.robot index 68dc4ead..3d95b6a1 100644 --- a/csit/drools-pdp/tests/drools-pdp-test.robot +++ b/csit/drools-pdp/tests/drools-pdp-test.robot @@ -8,8 +8,8 @@ Library json Alive [Documentation] Runs Policy PDP Alive Check ${auth}= Create List demo@people.osaaf.org demo123456! - Log Creating session https://${POLICY_DROOLS_IP}:9696 - ${session}= Create Session policy https://${POLICY_DROOLS_IP}:9696 auth=${auth} + Log Creating session http://${POLICY_DROOLS_IP}:9696 + ${session}= Create Session policy http://${POLICY_DROOLS_IP}:9696 auth=${auth} ${headers}= Create Dictionary Accept=application/json Content-Type=application/json ${resp}= GET On Session policy /policy/pdp/engine headers=${headers} expected_status=200 Log Received response from policy ${resp.text} @@ -18,8 +18,8 @@ Alive Metrics [Documentation] Verify drools-pdp is exporting metrics ${auth}= Create List demo@people.osaaf.org demo123456! - Log Creating session https://${POLICY_DROOLS_IP}:9696 - ${session}= Create Session policy https://${POLICY_DROOLS_IP}:9696 auth=${auth} + Log Creating session http://${POLICY_DROOLS_IP}:9696 + ${session}= Create Session policy http://${POLICY_DROOLS_IP}:9696 auth=${auth} ${headers}= Create Dictionary Accept=application/json Content-Type=application/json ${resp}= GET On Session policy /metrics headers=${headers} expected_status=200 Log Received response from policy ${resp.text} diff --git a/csit/gen_keystore.sh b/csit/gen_keystore.sh deleted file mode 100755 index 9b1cdfd6..00000000 --- a/csit/gen_keystore.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash -# -# ===========LICENSE_START==================================================== -# Copyright (C) 2021 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===================================================== -# - -# -# Generates a self-signed keystore for use by the various policy docker -# images. -# - -DIR="${0%/*}/config" -cd "${DIR}" - -OUTFILE=ks.jks - -ALIAS="policy@policy.onap.org" -PASS=Pol1cy_0nap - -dn="C=US, O=ONAP, OU=OSAAF, OU=policy@policy.onap.org:DEV, CN=policy" - -rm -f "${OUTFILE}" - -keytool -genkeypair -alias "${ALIAS}" -validity 30 \ - -keyalg RSA -dname "${dn}" -keystore "${OUTFILE}" \ - -keypass "${PASS}" -storepass "${PASS}" - -keytool -certreq -alias "${ALIAS}" -keystore ks.jks -file ks.csr \ - -storepass "${PASS}" - -openssl x509 -CA caroot.cer -CAkey cakey.pem -CAserial caserial.txt \ - -req -in ks.csr -out ks.cer -passin "pass:${PASS}" \ - -extfile dns_ssl.txt -days 30 - -keytool -import -noprompt -file caroot.cer -keystore ks.jks \ - -storepass "${PASS}" - -keytool -import -alias "${ALIAS}" -file ks.cer -keystore ks.jks \ - -storepass "${PASS}" - -chmod 644 "$OUTFILE" diff --git a/csit/gen_truststore.sh b/csit/gen_truststore.sh deleted file mode 100755 index 748d5f30..00000000 --- a/csit/gen_truststore.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash -# -# ===========LICENSE_START==================================================== -# Copyright (C) 2021 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===================================================== -# - -# -# Generates a root certificate and truststore for use by the various policy -# docker images. -# - -DIR="${0%/*}/config" -cd "${DIR}" - -OUTFILE=policy-truststore -ALIAS=onap.policy.csit.root.ca -PASS=Pol1cy_0nap - -keytool -list -alias ${ALIAS} -keystore ${OUTFILE} -storepass "${PASS}" \ - >/dev/null 2>&1 -if [ $? -eq 0 ] -then - echo "Truststore already contains a policy root CA - not re-generating" - exit 0 -fi - -openssl req -new -keyout cakey.pem -out careq.pem -passout "pass:${PASS}" \ - -subj "/C=US/ST=New Jersey/OU=ONAP/CN=policy.onap" - -openssl x509 -signkey cakey.pem -req -days 3650 -in careq.pem \ - -out caroot.cer -extensions v3_ca -passin "pass:${PASS}" - -keytool -import -noprompt -trustcacerts -alias ${ALIAS} \ - -file caroot.cer -keystore "${OUTFILE}" -storepass "${PASS}" - -chmod 644 "$OUTFILE" diff --git a/csit/make_topic.sh b/csit/make_topic.sh index 77e0a2dd..05d11f3c 100755 --- a/csit/make_topic.sh +++ b/csit/make_topic.sh @@ -2,6 +2,7 @@ # # ===========LICENSE_START==================================================== # Copyright (C) 2020-2021 AT&T Intellectual Property. All rights reserved. +# Modifications 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. @@ -29,5 +30,5 @@ fi topic="${1}" -curl -s -k "https://${SIM_IP}:3905/events/${topic}/script/1?limit=1&timeout=0" +curl -s -k "http://${SIM_IP}:3904/events/${topic}/script/1?limit=1&timeout=0" echo diff --git a/csit/onset.sh b/csit/onset.sh index 06b0c9fd..251b5b51 100755 --- a/csit/onset.sh +++ b/csit/onset.sh @@ -2,6 +2,7 @@ # # ===========LICENSE_START==================================================== # Copyright (C) 2020-2021 AT&T Intellectual Property. All rights reserved. +# Modifications 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. @@ -28,5 +29,5 @@ then fi curl -k -H "Content-type: application/json" --data-binary @$1 \ - https://${SIM_IP}:3905/events/unauthenticated.DCAE_CL_OUTPUT + http://${SIM_IP}:3904/events/unauthenticated.DCAE_CL_OUTPUT echo diff --git a/csit/pap/plans/setup.sh b/csit/pap/plans/setup.sh index f002d684..c5b75937 100755 --- a/csit/pap/plans/setup.sh +++ b/csit/pap/plans/setup.sh @@ -24,13 +24,17 @@ python3 -m pip uninstall -y docker-py python3 -m pip uninstall -y docker python3 -m pip install -U docker -sudo apt-get -y install libxml2-utils - source "${SCRIPTS}"/get-versions.sh + +sudo apt-get -y install libxml2-utils bash "${SCRIPTS}"/get-models-examples.sh +echo "${POLICY_PAP_VERSION}" + +cd "${SCRIPTS}" docker-compose -f "${SCRIPTS}"/docker-compose-all.yml up -d pap apex-pdp +sleep 10 unset http_proxy https_proxy POLICY_PAP_IP=$(get-instance-ip.sh policy-pap) @@ -44,7 +48,6 @@ echo MARIADB IP IS "${MARIADB_IP}" # wait for the app to start up "${SCRIPTS}"/wait_for_port.sh "${POLICY_PAP_IP}" 6969 - DATA=${WORKSPACE}/models/models-examples/src/main/resources/policies NODETEMPLATES=${WORKSPACE}/models/models-examples/src/main/resources/nodetemplates diff --git a/csit/prepare-config-files.py b/csit/prepare-config-files.py deleted file mode 100755 index 4eaa3422..00000000 --- a/csit/prepare-config-files.py +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/python3 -# -# ============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====================================================== - -import os -import argparse - -if __name__ == '__main__': - parser = argparse.ArgumentParser(description='Process configuration files for https/ssl ' - 'disabling.') - parser.add_argument('--https', default="true", - help='enable or disable https/ssl connection. ' - 'use https=true or https=false') - - https_enabled = parser.parse_args().https - message_router_port = '3905' if https_enabled == "true" else '3904' - protocol = 'https://' if https_enabled == "true" else 'http://' - - current_dir = os.getcwd() - config_dir = current_dir + "/config/" - - files = [] - for (dirpath, dirnames, filenames) in os.walk(config_dir): - for filename in filenames: - files.append(os.path.join(dirpath, filename)) - - for file in files: - try: - with open(file, 'r+') as f: - content = f.read() - new_content = content.replace("{{HTTPS_ENABLED}}", https_enabled) - new_content = new_content.replace("{{PROTOCOL}}", protocol) - new_content = new_content.replace("{{MESSAGE_ROUTER_PORT}}", message_router_port) - - if new_content != content: - f.seek(0) - f.truncate() - f.write(new_content) - print("File {0} updated!".format(file)) - except UnicodeDecodeError: - print("File didn't open: ", file) - - exit(0) diff --git a/csit/run-project-csit.sh b/csit/run-project-csit.sh index f09af486..b5ddc8ed 100755 --- a/csit/run-project-csit.sh +++ b/csit/run-project-csit.sh @@ -51,16 +51,23 @@ function on_exit(){ trap on_exit EXIT function docker_stats(){ - #General memory details - echo "> top -bn1 | head -3" - top -bn1 | head -3 - echo - - echo "> free -h" - free -h - echo + # General memory details + if [ "$(uname -s)" == "Darwin" ] + then + echo "> top -l1 | head -10" + sh -c "top -l1 | head -10" + echo + else + echo "> top -bn1 | head -3" + sh -c "top -bn1 | head -3" + echo + + echo "> free -h" + sh -c "free -h" + echo + fi - #Memory details per Docker + # Memory details per Docker echo "> docker ps" docker ps echo @@ -120,6 +127,19 @@ function source_safely() { # main # +if $(docker images | grep -q "onap\/policy-api") +then + echo where + export CONTAINER_LOCATION=$( + docker images | + grep onap/policy-api | + head -1 | + sed 's/onap\/policy-api.*$//' + ) +else + export CONTAINER_LOCATION="nexus3.onap.org:10001/" +fi + # set and save options for quick failure harden_set && save_set @@ -145,10 +165,6 @@ export ROBOT_VARIABLES= # get the plan from git clone source "${SCRIPTS}"/get-branch.sh -# Prepare configuration files -cd "${WORKSPACE}/csit" -python3 ./prepare-config-files.py --https=true - export PROJECT="${1}" cd ${WORKSPACE} @@ -165,25 +181,12 @@ source_safely "${SCRIPTS}/prepare-csit.sh" # Activate the virtualenv containing all the required libraries installed by prepare-csit.sh source_safely "${ROBOT_VENV}/bin/activate" -WORKDIR=$(mktemp -d --suffix=-robot-workdir) +WORKDIR=$(mktemp -d) cd "${WORKDIR}" # Sign in to nexus3 docker repo docker login -u docker -p docker nexus3.onap.org:10001 -# Generate truststore and keystore to be used by repos -${SCRIPTS}/gen_truststore.sh -${SCRIPTS}/gen_keystore.sh -cp ${SCRIPTS}/config/ks.jks ${SCRIPTS}/config/drools/custom/policy-keystore -cp ${SCRIPTS}/config/ks.jks ${SCRIPTS}/config/drools-apps/custom/policy-keystore -cp ${SCRIPTS}/config/policy-truststore \ - ${SCRIPTS}/config/drools/custom/policy-truststore -cp ${SCRIPTS}/config/policy-truststore \ - ${SCRIPTS}/config/drools-apps/custom/policy-truststore -chmod 644 \ - ${SCRIPTS}/config/drools/custom/policy-* \ - ${SCRIPTS}/config/drools-apps/custom/policy-* - # Run setup script plan if it exists cd "${TESTPLANDIR}/plans/" SETUP="${TESTPLANDIR}/plans/setup.sh" @@ -200,7 +203,7 @@ cd "${WORKDIR}" echo "Reading the testplan:" cat "${TESTPLANDIR}/plans/testplan.txt" | egrep -v '(^[[:space:]]*#|^[[:space:]]*$)' | sed "s|^|${TESTPLANDIR}/tests/|" > testplan.txt cat testplan.txt -SUITES=$( xargs -a testplan.txt ) +SUITES=$( xargs < testplan.txt ) echo ROBOT_VARIABLES="${ROBOT_VARIABLES}" echo "Starting Robot test suites ${SUITES} ..." diff --git a/csit/start-grafana.sh b/csit/start-grafana.sh index 0350ad25..e081d04c 100755 --- a/csit/start-grafana.sh +++ b/csit/start-grafana.sh @@ -21,20 +21,16 @@ SCRIPTS=$(git rev-parse --show-toplevel) export SCRIPTS="${SCRIPTS}"/csit -cd ${SCRIPTS} - -python3 ./prepare-config-files.py --https=false - -source ./get-versions.sh +source "${SCRIPTS}"/get-versions.sh export PROJECT="${1}" if [ -z "${PROJECT}" ]; then echo "Starting all components..." - docker-compose -f ./compose-grafana.yml up -d + docker-compose -f "${SCRIPTS}"/compose-grafana.yml up -d else echo "Starting ${PROJECT} application..." - docker-compose -f ./compose-grafana.yml up -d "${PROJECT}" grafana + docker-compose -f "${SCRIPTS}"/compose-grafana.yml up -d "${PROJECT}" grafana fi prometheus=$(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' prometheus) diff --git a/csit/start-gui-smoke-components.sh b/csit/start-gui-smoke-components.sh index 4fe36a01..257502f1 100755 --- a/csit/start-gui-smoke-components.sh +++ b/csit/start-gui-smoke-components.sh @@ -18,12 +18,8 @@ SCRIPTS=$(git rev-parse --show-toplevel) export SCRIPTS="${SCRIPTS}"/csit -cd ${SCRIPTS} +source "${SCRIPTS}"/get-versions.sh -python3 ./prepare-config-files.py --https=true - -source ./get-versions.sh - -docker-compose -f docker-compose-gui-smoke.yml up -d policy-gui +docker-compose -f "${SCRIPTS}"/docker-compose-gui-smoke.yml up -d policy-gui echo "Clamp GUI: https://localhost:2443/clamp" diff --git a/csit/wait_for_port.sh b/csit/wait_for_port.sh index 0eeb1c9b..0a9adc3a 100755 --- a/csit/wait_for_port.sh +++ b/csit/wait_for_port.sh @@ -1,6 +1,7 @@ #!/bin/sh # ============LICENSE_START==================================================== # Copyright (C) 2021 AT&T Intellectual Property. All rights reserved. +# Modifications 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. @@ -17,35 +18,64 @@ # SPDX-License-Identifier: Apache-2.0 # ============LICENSE_END====================================================== +usage() { + echo args: [-t timeout] [-c command] hostname1 port1 hostname2 port2 ... >&2 + exit 1 +} + tmout=300 cmd= -while getopts c:t: opt; do +while getopts c:t: opt +do case "$opt" in - c) cmd="$OPTARG" ;; - t) tmout="$OPTARG" ;; + c) + cmd="$OPTARG" + ;; + + t) + tmout="$OPTARG" + ;; + + *) + usage + ;; esac done -nargs=$(expr $OPTIND - 1) -shift $nargs -even_args=$(expr $# % 2) -if [ $# -lt 2 -o $even_args -ne 0 ]; then - echo "args: [-t timeout] [-c command] hostname1 port1 hostname2 port2 ..." >&2 - exit 1 +nargs=$((OPTIND-1)) +shift "$nargs" + +even_args=$(($#%2)) +if [ $# -lt 2 ] || [ "$even_args" -ne 0 ] +then + usage fi -while [ $# -ge 2 ]; do - export host=$1 - export port=$2 +while [ $# -ge 2 ] +do + export host="$1" + export port="$2" shift shift echo "Waiting for $host port $port..." - timeout $tmout sh -c 'until nc -vz "$host" "$port"; do echo -n "."; - sleep 1; done' - rc=$? - if [ $rc != 0 ]; then + while [ "$tmout" -gt 0 ] + do + nc -vz "$host" "$port" + rc=$? + + if [ $rc -eq 0 ] + then + break + else + tmout=$((tmout-1)) + sleep 1 + fi + done + + if [ $rc -ne 0 ] + then echo "$host port $port cannot be reached" exit $rc fi diff --git a/csit/wait_topic.sh b/csit/wait_topic.sh index 64b6c9f3..a6d997d0 100755 --- a/csit/wait_topic.sh +++ b/csit/wait_topic.sh @@ -2,6 +2,7 @@ # # ===========LICENSE_START==================================================== # Copyright (C) 2020-2021 AT&T Intellectual Property. All rights reserved. +# Modifications 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. @@ -39,7 +40,7 @@ matched=no while [ ${matched} = "no" ] do - msg=`curl -s -k "https://${SIM_IP}:3905/events/${topic}/script/1?limit=1"` + msg=`curl -s -k "http://${SIM_IP}:3904/events/${topic}/script/1?limit=1"` if [ $? -ne 0 -o "${msg}" = "[]" ] then echo not found >&2 diff --git a/csit/xacml-pdp/plans/setup.sh b/csit/xacml-pdp/plans/setup.sh index c99a0318..705c8202 100755 --- a/csit/xacml-pdp/plans/setup.sh +++ b/csit/xacml-pdp/plans/setup.sh @@ -40,7 +40,7 @@ POLICY_PAP_IP=$(get-instance-ip.sh policy-pap) export SIM_IP -echo PDP IP IS "${POLICY_PDPX_IP}" +echo XACML-PDP IP IS "${POLICY_PDPX_IP}" echo API IP IS "${POLICY_API_IP}" echo PAP IP IS "${POLICY_PAP_IP}" echo MARIADB IP IS "${MARIADB_IP}" -- 2.16.6