Add migration in integration tests 13/137813/1
authorFrancescoFioraEst <francesco.fiora@est.tech>
Wed, 17 Apr 2024 10:42:58 +0000 (11:42 +0100)
committerFrancescoFioraEst <francesco.fiora@est.tech>
Mon, 29 Apr 2024 15:03:51 +0000 (16:03 +0100)
Issue-ID: POLICY-4972
Change-Id: I40c554fcb062b4928663bbfd5a03ddd2dd1f6805
Signed-off-by: FrancescoFioraEst <francesco.fiora@est.tech>
14 files changed:
README.md
compose/get-k8s-versions.sh
csit/resources/scripts/get-cluster-info.sh
csit/resources/scripts/run-test.sh
csit/resources/scripts/setup-clamp.sh
csit/resources/tests/data/OutProperties.json [new file with mode: 0644]
csit/resources/tests/data/ac-definition-migration-from.yaml [new file with mode: 0644]
csit/resources/tests/data/ac-definition-migration-to.yaml [new file with mode: 0644]
csit/resources/tests/data/ac-instance-migration-from.yaml [new file with mode: 0644]
csit/resources/tests/data/ac-instance-migration-to.yaml [new file with mode: 0644]
csit/resources/tests/data/ac-instance-update.yaml [new file with mode: 0644]
csit/resources/tests/policy-clamp-test.robot
csit/run-k8s-csit.sh
helm/policy/templates/job.yaml

index 709eee3..c1e90e5 100644 (file)
--- a/README.md
+++ b/README.md
@@ -26,6 +26,9 @@ Steps involved in running CSIT in kubernetes:
   4. Invokes the respective robot test file for the project supplied by the user. 
      The test execution results can be viewed from the logs of policy-csit-robot pod.
 
+Running Policy CSIT in docker:
+To run CSIT in docker, docker/csit/run-project-csit.sh script can be invoked with the argument {project_name}.
+
 Running Policy Regression Tests:
   ACM regression tests can be invoked using the script docker/csit/run-acm-regression.sh with the arguments {ACM-R release name} {participant release name}
   For example, if ACM-R and participants needs to be tested for backward compatbility between montreal and london versions, the script can be invoked 
index 1575164..4995460 100755 (executable)
@@ -1,7 +1,7 @@
 #! /bin/bash
 
 # ============LICENSE_START====================================================
-#  Copyright (C) 2023 Nordix Foundation. All rights reserved.
+#  Copyright (C) 2023-2024 Nordix Foundation. 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.
@@ -27,9 +27,9 @@ fi
 
 VALUES_YML=${WORKSPACE}/helm/policy/values.yaml
 
-policy_components=(policy-api policy-pap policy-apex-pdp policy-models-simulator policy-pdpd-cl policy-xacml-pdp policy-distribution)
+policy_components=(policy-api policy-pap policy-apex-pdp policy-models-simulator policy-pdpd-cl policy-xacml-pdp policy-distribution policy-db-migrator)
 
-clamp_components=(policy-clamp-runtime-acm policy-clamp-ac-kserve-ppnt policy-clamp-ac-k8s-ppnt policy-clamp-ac-pf-ppnt policy-clamp-ac-http-ppnt policy-clamp-ac-a1pms-ppnt)
+clamp_components=(policy-clamp-runtime-acm policy-clamp-ac-kserve-ppnt policy-clamp-ac-k8s-ppnt policy-clamp-ac-pf-ppnt policy-clamp-ac-http-ppnt policy-clamp-ac-sim-ppnt policy-clamp-ac-a1pms-ppnt)
 
 version_tags=$(source ${WORKSPACE}/compose/get-versions.sh)
 export version_tags
index ab0b27b..539bf6a 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash
 # ============LICENSE_START=======================================================
-#  Copyright (C) 2023 Nordix Foundation. All rights reserved.
+#  Copyright (C) 2023-2024 Nordix Foundation. 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.
@@ -28,9 +28,10 @@ export XACML_PORT=30004
 export DROOLS_PORT=30005
 export DIST_PORT=30006
 export ACM_PORT=30007
-export POLICY_PF_PARTICIPANT_PORT=30008
-export POLICY_HTTP_PARTICIPANT_PORT=30009
-export POLICY_K8S_PARTICIPANT_PORT=30010
+export PF_PARTICIPANT_PORT=30008
+export HTTP_PARTICIPANT_PORT=30009
+export K8S_PARTICIPANT_PORT=30010
+export SIM_PARTICIPANT_PORT=30011
 export SIMULATOR_PORT=30904
 
 # Retrieve pod names
@@ -44,8 +45,9 @@ function get_pod_names() {
   export DIST_POD=$(get_pod_name distribution)
   export ACM_POD=$(get_pod_name acm-runtime)
   export POLICY_PPNT_POD=$(get_pod_name policy-ppnt)
-  export POLICY_PPNT_POD=$(get_pod_name http-ppnt)
-  export POLICY_PPNT_POD=$(get_pod_name k8s-ppnt)
+  export POLICY_HTTP_POD=$(get_pod_name http-ppnt)
+  export POLICY_SIM_POD=$(get_pod_name sim-ppnt)
+  export POLICY_K8S_POD=$(get_pod_name k8s-ppnt)
 }
 
 # Retrieve service names
@@ -60,6 +62,7 @@ function get_svc_names() {
   export ACM_SVC=$(get_svc_name policy-clamp-runtime-acm)
   export POLICY_PPNT_SVC=$(get_svc_name policy-clamp-ac-pf-ppnt)
   export POLICY_HTTP_SVC=$(get_svc_name policy-clamp-ac-http-ppnt)
+  export POLICY_SIM_SVC=$(get_svc_name policy-clamp-ac-sim-ppnt)
   export POLICY_K8S_SVC=$(get_svc_name policy-clamp-ac-k8s-ppnt)
 }
 
@@ -74,6 +77,7 @@ function expose_services() {
     expose_service $ACM_SVC
     expose_service $POLICY_PPNT_SVC
     expose_service POLICY_HTTP_SVC
+    expose_service POLICY_SIM_SVC
     expose_service POLICY_K8S_SVC
 
     setup_message_router_svc
@@ -103,9 +107,10 @@ function patch_ports() {
   patch_port "$API_SVC" $API_PORT
   patch_port "$PAP_SVC" $PAP_PORT
   patch_port "$ACM_SVC" $ACM_PORT
-  patch_port "$POLICY_PPNT_SVC" $POLICY_PF_PARTICIPANT_PORT
-  patch_port "$HTTP_PPNT_SVC" $POLICY_HTTP_PARTICIPANT_PORT
-  patch_port "$K8S_PPNT_SVC" $POLICY_K8S_PARTICIPANT_PORT
+  patch_port "$POLICY_PPNT_SVC" $PF_PARTICIPANT_PORT
+  patch_port "$POLICY_HTTP_SVC" $HTTP_PARTICIPANT_PORT
+  patch_port "$POLICY_SIM_SVC" $SIM_PARTICIPANT_PORT
+  patch_port "$POLICY_K8S_SVC" $K8S_PARTICIPANT_PORT
   patch_port "$DIST_SVC" $DIST_PORT
   patch_port "$DROOLS_SVC" $DROOLS_PORT
   patch_port "$XACML_SVC" $XACML_PORT
index 34048e2..90dec57 100755 (executable)
@@ -27,6 +27,7 @@ DATA=/opt/robotworkspace/models/models-examples/src/main/resources/policies
 NODETEMPLATES=/opt/robotworkspace/models/models-examples/src/main/resources/nodetemplates
 
 POLICY_RUNTIME_ACM_IP=policy-clamp-runtime-acm:${DEFAULT_PORT}
+POLICY_PARTICIPANT_SIM_IP=policy-clamp-ac-sim-ppnt:${DEFAULT_PORT}
 POLICY_API_IP=policy-api:${DEFAULT_PORT}
 POLICY_PAP_IP=policy-pap:${DEFAULT_PORT}
 APEX_IP=policy-apex-pdp:${DEFAULT_PORT}
@@ -42,7 +43,8 @@ DIST_TEMP_FOLDER=/tmp/distribution
 
 export ROBOT_VARIABLES=
 ROBOT_VARIABLES="-v DATA:$DATA -v NODETEMPLATES:$NODETEMPLATES -v POLICY_API_IP:$POLICY_API_IP
--v POLICY_RUNTIME_ACM_IP:$POLICY_RUNTIME_ACM_IP -v POLICY_PAP_IP:$POLICY_PAP_IP -v APEX_IP:$APEX_IP
+-v POLICY_RUNTIME_ACM_IP:$POLICY_RUNTIME_ACM_IP -v POLICY_PARTICIPANT_SIM_IP:$POLICY_PARTICIPANT_SIM_IP
+-v POLICY_PAP_IP:$POLICY_PAP_IP -v APEX_IP:$APEX_IP
 -v APEX_EVENTS_IP:$APEX_EVENTS_IP -v KAFKA_IP:$KAFKA_IP -v PROMETHEUS_IP:${PROMETHEUS_IP}
 -v POLICY_PDPX_IP:$POLICY_PDPX_IP -v POLICY_DROOLS_IP:$POLICY_DROOLS_IP -v TEMP_FOLDER:${DIST_TEMP_FOLDER}
 -v DISTRIBUTION_IP:$DISTRIBUTION_IP -v CLAMP_K8S_TEST:$CLAMP_K8S_TEST"
index 4eae4da..ba4467b 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash
 # ============LICENSE_START=======================================================
-#  Copyright (C) 2021-2023 Nordix Foundation.
+#  Copyright (C) 2021-2024 Nordix Foundation.
 # ================================================================================
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -30,6 +30,7 @@ CLAMP_K8S_TEST=false
 export SUITES="policy-clamp-test.robot"
 
 ROBOT_VARIABLES="-v POLICY_RUNTIME_ACM_IP:localhost:${ACM_PORT}
+-v POLICY_PARTICIPANT_SIM_IP:localhost:${SIM_PARTICIPANT_PORT}
 -v POLICY_API_IP:localhost:${API_PORT} -v POLICY_PAP_IP:localhost:${PAP_PORT} -v CLAMP_K8S_TEST:$CLAMP_K8S_TEST"
 
 
diff --git a/csit/resources/tests/data/OutProperties.json b/csit/resources/tests/data/OutProperties.json
new file mode 100644 (file)
index 0000000..1d4144c
--- /dev/null
@@ -0,0 +1,13 @@
+{
+  "outProperties": {
+    "test": {
+        "object": "TEXTPLACEHOLDER",
+        "from": "Participant",
+        "to": "Runtime"
+      }
+  },
+  "automationCompositionId": "INSTACEIDPLACEHOLDER",
+  "automationCompositionElementId": "709c62b3-8918-41b9-a747-d21eb79c6c34",
+  "useState": "IDLE",
+  "operationalState": "ENABLED"
+}
diff --git a/csit/resources/tests/data/ac-definition-migration-from.yaml b/csit/resources/tests/data/ac-definition-migration-from.yaml
new file mode 100644 (file)
index 0000000..273cfec
--- /dev/null
@@ -0,0 +1,153 @@
+# ============LICENSE_START=======================================================
+# Copyright (C) 2024 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=========================================================
+tosca_definitions_version: tosca_simple_yaml_1_3
+name: Migration-From
+data_types:
+  onap.datatypes.ToscaConceptIdentifier:
+    derived_from: tosca.datatypes.Root
+    properties:
+      name:
+        type: string
+        required: true
+      version:
+        type: string
+        required: true
+
+node_types:
+  org.onap.policy.clamp.acm.Participant:
+    version: 1.0.1
+    derived_from: tosca.nodetypes.Root
+    properties:
+      provider:
+        type: string
+        required: false
+  org.onap.policy.clamp.acm.AutomationCompositionElement:
+    version: 1.0.1
+    derived_from: tosca.nodetypes.Root
+    properties:
+      provider:
+        type: string
+        required: false
+        metadata:
+          common: true
+        description: Specifies the organization that provides the automation composition element
+      startPhase:
+        type: integer
+        required: false
+        constraints:
+          - greater_or_equal: 0
+        metadata:
+          common: true
+        description: A value indicating the start phase in which this automation composition element will be started, the
+          first start phase is zero. Automation Composition Elements are started in their start_phase order and stopped
+          in reverse start phase order. Automation Composition Elements with the same start phase are started and
+          stopped simultaneously
+
+  org.onap.policy.clamp.acm.AutomationComposition:
+    version: 1.0.1
+    derived_from: tosca.nodetypes.Root
+    properties:
+      provider:
+        type: string
+        required: false
+        metadata:
+          common: true
+        description: Specifies the organization that provides the automation composition element
+      elements:
+        type: list
+        required: true
+        metadata:
+          common: true
+        entry_schema:
+          type: onap.datatypes.ToscaConceptIdentifier
+        description: Specifies a list of automation composition element definitions that make up this automation composition definition
+
+  org.onap.policy.clamp.acm.SimAutomationCompositionElement:
+    version: 1.0.0
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
+    properties:
+      baseUrl:
+        type: string
+        required: true
+        description: The base URL to be prepended to each path, identifies the host for the REST endpoints.
+      httpHeaders:
+        type: map
+        required: false
+        entry_schema:
+          type: string
+        description: HTTP headers to send on REST requests
+      configurationEntities:
+        type: map
+        required: true
+        entry_schema:
+          type: map
+        description: The connfiguration entities the Automation Composition Element is managing and their associated REST requests
+
+topology_template:
+
+  node_templates:
+
+    org.onap.policy.clamp.acm.SimParticipant:
+      version: 2.3.4
+      type: org.onap.policy.clamp.acm.Participant
+      type_version: 1.0.1
+      description: Participant Simulator
+      properties:
+        provider: ONAP
+
+    onap.policy.clamp.ac.element.Sim_StarterAutomationCompositionElement:
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.SimAutomationCompositionElement
+      type_version: 1.0.0
+      description: Automation composition element for the http requests of AC Element Starter microservice
+      properties:
+        provider: ONAP
+        startPhase: 0
+
+    onap.policy.clamp.ac.element.Sim_BridgeAutomationCompositionElement:
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.SimAutomationCompositionElement
+      type_version: 1.0.0
+      description: Automation composition element for the http requests of AC Element Bridge microservice
+      properties:
+        provider: ONAP
+        startPhase: 0
+
+    onap.policy.clamp.ac.element.Sim_SinkAutomationCompositionElement:
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.SimAutomationCompositionElement
+      type_version: 1.0.0
+      description: Automation composition element for the http requests of AC Element Sink microservice
+      properties:
+        provider: ONAP
+        startPhase: 0
+
+    onap.policy.clamp.ac.element.AutomationCompositionDefinition:
+      version: 1.2.3
+      type: org.onap.policy.clamp.acm.AutomationComposition
+      type_version: 1.0.1
+      description: Automation composition for Demo
+      properties:
+        provider: ONAP
+        elements:
+          - name: onap.policy.clamp.ac.element.Sim_StarterAutomationCompositionElement
+            version: 1.2.3
+          - name: onap.policy.clamp.ac.element.Sim_BridgeAutomationCompositionElement
+            version: 1.2.3
+          - name: onap.policy.clamp.ac.element.Sim_SinkAutomationCompositionElement
+            version: 1.2.3
diff --git a/csit/resources/tests/data/ac-definition-migration-to.yaml b/csit/resources/tests/data/ac-definition-migration-to.yaml
new file mode 100644 (file)
index 0000000..efc550b
--- /dev/null
@@ -0,0 +1,153 @@
+# ============LICENSE_START=======================================================
+# Copyright (C) 2024 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=========================================================
+tosca_definitions_version: tosca_simple_yaml_1_3
+name: Migration-To
+data_types:
+  onap.datatypes.ToscaConceptIdentifier:
+    derived_from: tosca.datatypes.Root
+    properties:
+      name:
+        type: string
+        required: true
+      version:
+        type: string
+        required: true
+
+node_types:
+  org.onap.policy.clamp.acm.Participant:
+    version: 1.0.1
+    derived_from: tosca.nodetypes.Root
+    properties:
+      provider:
+        type: string
+        required: false
+  org.onap.policy.clamp.acm.AutomationCompositionElement:
+    version: 1.0.1
+    derived_from: tosca.nodetypes.Root
+    properties:
+      provider:
+        type: string
+        required: false
+        metadata:
+          common: true
+        description: Specifies the organization that provides the automation composition element
+      startPhase:
+        type: integer
+        required: false
+        constraints:
+          - greater_or_equal: 0
+        metadata:
+          common: true
+        description: A value indicating the start phase in which this automation composition element will be started, the
+          first start phase is zero. Automation Composition Elements are started in their start_phase order and stopped
+          in reverse start phase order. Automation Composition Elements with the same start phase are started and
+          stopped simultaneously
+
+  org.onap.policy.clamp.acm.AutomationComposition:
+    version: 1.0.1
+    derived_from: tosca.nodetypes.Root
+    properties:
+      provider:
+        type: string
+        required: false
+        metadata:
+          common: true
+        description: Specifies the organization that provides the automation composition element
+      elements:
+        type: list
+        required: true
+        metadata:
+          common: true
+        entry_schema:
+          type: onap.datatypes.ToscaConceptIdentifier
+        description: Specifies a list of automation composition element definitions that make up this automation composition definition
+
+  org.onap.policy.clamp.acm.SimAutomationCompositionElement:
+    version: 1.0.0
+    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
+    properties:
+      baseUrl:
+        type: string
+        required: true
+        description: The base URL to be prepended to each path, identifies the host for the REST endpoints.
+      httpHeaders:
+        type: map
+        required: false
+        entry_schema:
+          type: string
+        description: HTTP headers to send on REST requests
+      configurationEntities:
+        type: map
+        required: true
+        entry_schema:
+          type: map
+        description: The connfiguration entities the Automation Composition Element is managing and their associated REST requests
+
+topology_template:
+
+  node_templates:
+
+    org.onap.policy.clamp.acm.SimParticipant:
+      version: 2.3.4
+      type: org.onap.policy.clamp.acm.Participant
+      type_version: 1.0.1
+      description: Participant Simulator
+      properties:
+        provider: ONAP
+
+    onap.policy.clamp.ac.element.Sim_StarterAutomationCompositionElement:
+      version: 1.2.4
+      type: org.onap.policy.clamp.acm.SimAutomationCompositionElement
+      type_version: 1.0.0
+      description: Automation composition element for the http requests of AC Element Starter microservice
+      properties:
+        provider: ONAP
+        startPhase: 0
+
+    onap.policy.clamp.ac.element.Sim_BridgeAutomationCompositionElement:
+      version: 1.2.4
+      type: org.onap.policy.clamp.acm.SimAutomationCompositionElement
+      type_version: 1.0.0
+      description: Automation composition element for the http requests of AC Element Bridge microservice
+      properties:
+        provider: ONAP
+        startPhase: 0
+
+    onap.policy.clamp.ac.element.Sim_SinkAutomationCompositionElement:
+      version: 1.2.4
+      type: org.onap.policy.clamp.acm.SimAutomationCompositionElement
+      type_version: 1.0.0
+      description: Automation composition element for the http requests of AC Element Sink microservice
+      properties:
+        provider: ONAP
+        startPhase: 0
+
+    onap.policy.clamp.ac.element.AutomationCompositionDefinition:
+      version: 1.2.4
+      type: org.onap.policy.clamp.acm.AutomationComposition
+      type_version: 1.0.1
+      description: Automation composition for Demo
+      properties:
+        provider: ONAP
+        elements:
+          - name: onap.policy.clamp.ac.element.Sim_StarterAutomationCompositionElement
+            version: 1.2.4
+          - name: onap.policy.clamp.ac.element.Sim_BridgeAutomationCompositionElement
+            version: 1.2.4
+          - name: onap.policy.clamp.ac.element.Sim_SinkAutomationCompositionElement
+            version: 1.2.4
diff --git a/csit/resources/tests/data/ac-instance-migration-from.yaml b/csit/resources/tests/data/ac-instance-migration-from.yaml
new file mode 100644 (file)
index 0000000..76858e4
--- /dev/null
@@ -0,0 +1,97 @@
+# ============LICENSE_START=======================================================
+# Copyright (C) 2024 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=========================================================
+name: Instance-Migration-From
+version: 1.0.1
+compositionId: COMPOSITIONIDPLACEHOLDER
+description: Demo automation composition instance 0
+elements:
+
+  709c62b3-8918-41b9-a747-d21eb79c6c34:
+    id: 709c62b3-8918-41b9-a747-d21eb79c6c34
+    definition:
+      name: onap.policy.clamp.ac.element.Sim_StarterAutomationCompositionElement
+      version: 1.2.3
+    description: Starter Automation Composition Element for the Demo
+    properties:
+      baseUrl: http://address:30800
+      httpHeaders:
+        Content-Type: application/json
+        Authorization: Basic YWNtVXNlcjp6YiFYenRHMzQ=
+      configurationEntities:
+        - configurationEntityId:
+            name: onap.policy.clamp.ac.starter
+            version: 1.0.0
+          restSequence:
+            - restRequestId:
+                name: request1
+                version: 1.0.1
+              httpMethod: POST
+              path: /onap/policy/clamp/acelement/v2/activate
+              body: '{ "receiverId": { "name": "onap.policy.clamp.ac.startertobridge", "version": "1.0.0" }, "timerMs": 20000, "elementType": "STARTER", "topicParameterGroup": { "server": "message-router:3904", "listenerTopic": "POLICY_UPDATE_MSG", "publisherTopic": "AC_ELEMENT_MSG", "fetchTimeout": 15000, "topicCommInfrastructure": "dmaap" } }'
+              expectedResponse: 201
+          myParameterToUpdate: text
+
+  709c62b3-8918-41b9-a747-d21eb79c6c35:
+    id: 709c62b3-8918-41b9-a747-d21eb79c6c35
+    definition:
+      name: onap.policy.clamp.ac.element.Sim_BridgeAutomationCompositionElement
+      version: 1.2.3
+    description: Bridge Automation Composition Element for the Demo
+    properties:
+      baseUrl: http://address:30801
+      httpHeaders:
+        Content-Type: application/json
+        Authorization: Basic YWNtVXNlcjp6YiFYenRHMzQ=
+      configurationEntities:
+        - configurationEntityId:
+            name: onap.policy.clamp.ac.bridge
+            version: 1.0.0
+          restSequence:
+            - restRequestId:
+                name: request2
+                version: 1.0.1
+              httpMethod: POST
+              path: /onap/policy/clamp/acelement/v2/activate
+              body: '{ "receiverId": { "name": "onap.policy.clamp.ac.bridgetosink", "version": "1.0.0" }, "timerMs": 20000, "elementType": "BRIDGE", "topicParameterGroup": { "server": "message-router:3904", "listenerTopic": "POLICY_UPDATE_MSG", "publisherTopic": "AC_ELEMENT_MSG", "fetchTimeout": 15000, "topicCommInfrastructure": "dmaap" } }'
+              expectedResponse: 201
+          myParameterToUpdate: text
+
+  709c62b3-8918-41b9-a747-d21eb79c6c36:
+    id: 709c62b3-8918-41b9-a747-d21eb79c6c36
+    definition:
+      name: onap.policy.clamp.ac.element.Sim_SinkAutomationCompositionElement
+      version: 1.2.3
+    description: Sink Automation Composition Element for the Demo
+    properties:
+      baseUrl: http://address:30802
+      httpHeaders:
+        Content-Type: application/json
+        Authorization: Basic YWNtVXNlcjp6YiFYenRHMzQ=
+      configurationEntities:
+        - configurationEntityId:
+            name: onap.policy.clamp.ac.sink
+            version: 1.0.0
+          restSequence:
+            - restRequestId:
+                name: request3
+                version: 1.0.1
+              httpMethod: POST
+              path: /onap/policy/clamp/acelement/v2/activate
+              body: '{ "receiverId": { "name": "onap.policy.clamp.ac.sink", "version": "1.0.0" }, "timerMs": 20000, "elementType": "SINK", "topicParameterGroup": { "server": "message-router", "listenerTopic": "POLICY_UPDATE_MSG", "publisherTopic": "AC_ELEMENT_MSG", "fetchTimeout": 15000, "topicCommInfrastructure": "dmaap" } }'
+              expectedResponse: 201
+          myParameterToUpdate: text
diff --git a/csit/resources/tests/data/ac-instance-migration-to.yaml b/csit/resources/tests/data/ac-instance-migration-to.yaml
new file mode 100644 (file)
index 0000000..65b684a
--- /dev/null
@@ -0,0 +1,59 @@
+# ============LICENSE_START=======================================================
+# Copyright (C) 2024 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=========================================================
+name: Instance-Migration-To
+version: 1.0.1
+compositionId: COMPOSITIONIDPLACEHOLDER
+instanceId: INSTACEIDPLACEHOLDER
+compositionTargetId: COMPOSITIONTARGETIDPLACEHOLDER
+description: Demo automation composition instance 0
+elements:
+
+  709c62b3-8918-41b9-a747-d21eb79c6c34:
+    id: 709c62b3-8918-41b9-a747-d21eb79c6c34
+    definition:
+      name: onap.policy.clamp.ac.element.Sim_StarterAutomationCompositionElement
+      version: 1.2.4
+    description: Starter Automation Composition Element for the Demo
+    properties:
+      baseUrl: http://10.101.0.249:30800
+      configurationEntities:
+        - configurationEntityId:
+          myParameterToUpdate: text updated for migration
+
+  709c62b3-8918-41b9-a747-d21eb79c6c35:
+    id: 709c62b3-8918-41b9-a747-d21eb79c6c35
+    definition:
+      name: onap.policy.clamp.ac.element.Sim_BridgeAutomationCompositionElement
+      version: 1.2.4
+    description: Bridge Automation Composition Element for the Demo
+    properties:
+      baseUrl: http://10.101.0.249:30801
+      configurationEntities:
+        - configurationEntityId:
+          myParameterToUpdate: TEXTPLACEHOLDER
+
+  709c62b3-8918-41b9-a747-d21eb79c6c36:
+    id: 709c62b3-8918-41b9-a747-d21eb79c6c36
+    definition:
+      name: onap.policy.clamp.ac.element.Sim_SinkAutomationCompositionElement
+      version: 1.2.4
+    description: Sink Automation Composition Element for the Demo
+    properties:
+      configurationEntities:
+        - configurationEntityId:
+          myParameterToUpdate: text updated for migration
diff --git a/csit/resources/tests/data/ac-instance-update.yaml b/csit/resources/tests/data/ac-instance-update.yaml
new file mode 100644 (file)
index 0000000..2601559
--- /dev/null
@@ -0,0 +1,60 @@
+# ============LICENSE_START=======================================================
+# Copyright (C) 2024 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=========================================================
+name: Instance-Migration-To
+version: 1.0.1
+compositionId: COMPOSITIONIDPLACEHOLDER
+instanceId: INSTACEIDPLACEHOLDER
+description: Demo automation composition instance 0
+elements:
+
+  709c62b3-8918-41b9-a747-d21eb79c6c34:
+    id: 709c62b3-8918-41b9-a747-d21eb79c6c34
+    definition:
+      name: onap.policy.clamp.ac.element.Sim_StarterAutomationCompositionElement
+      version: 1.2.3
+    description: Starter Automation Composition Element for the Demo
+    properties:
+      baseUrl: http://address:30800
+      httpHeaders:
+        Content-Type: application/json
+        Authorization: Basic YWNtVXNlcjp6YiFYenRHMzQ=
+      configurationEntities:
+        - configurationEntityId:
+          myParameterToUpdate: TEXTPLACEHOLDER
+
+  709c62b3-8918-41b9-a747-d21eb79c6c35:
+    id: 709c62b3-8918-41b9-a747-d21eb79c6c35
+    definition:
+      name: onap.policy.clamp.ac.element.Sim_BridgeAutomationCompositionElement
+      version: 1.2.3
+    description: Bridge Automation Composition Element for the Demo
+    properties:
+      configurationEntities:
+        - configurationEntityId:
+          myParameterToUpdate: text updated
+
+  709c62b3-8918-41b9-a747-d21eb79c6c36:
+    id: 709c62b3-8918-41b9-a747-d21eb79c6c36
+    definition:
+      name: onap.policy.clamp.ac.element.Sim_SinkAutomationCompositionElement
+      version: 1.2.3
+    description: Sink Automation Composition Element for the Demo
+    properties:
+      configurationEntities:
+        - configurationEntityId:
+          myParameterToUpdate: text updated
index 95af26a..eff970a 100644 (file)
@@ -17,6 +17,16 @@ HealthcheckAcm
      Log    Received response from ACM healthcheck {resp.text}
      Should Be Equal As Strings    ${resp.status_code}     200
 
+HealthcheckParticipantSim
+     [Documentation]    Healthcheck on Participant Simulator
+     ${auth}=    Create List    participantUser    zb!XztG34
+     Log    Creating session http://${POLICY_PARTICIPANT_SIM_IP}
+     ${session}=    Create Session      participant  http://${POLICY_PARTICIPANT_SIM_IP}   auth=${auth}
+     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
+     ${resp}=   GET On Session     participant  /onap/policy/simparticipant/health     headers=${headers}
+     Log    Received response from participant healthcheck {resp.text}
+     Should Be Equal As Strings    ${resp.status_code}     200
+
 HealthcheckApi
      [Documentation]    Healthcheck on policy-api
      Wait Until Keyword Succeeds    5 min    10 sec    VerifyHealthcheckApi
@@ -35,7 +45,7 @@ RegisterParticipants
      Should Be Equal As Strings    ${resp.status_code}     202
 
 CommissionAutomationComposition
-     [Documentation]  Commission automation composition.
+     [Documentation]  Commission automation composition definition.
      ${auth}=    Create List    runtimeUser    zb!XztG34
      Log    Creating session http://${POLICY_RUNTIME_ACM_IP}
      ${postyaml}=  Get file  ${CURDIR}/data/acelement-usecase.yaml
@@ -47,6 +57,32 @@ CommissionAutomationComposition
      set Suite variable  ${compositionId}  ${respyaml["compositionId"]}
      Should Be Equal As Strings    ${resp.status_code}     201
 
+CommissionAcDefinitionMigrationFrom
+     [Documentation]  Commission automation composition definition From.
+     ${auth}=    Create List    runtimeUser    zb!XztG34
+     Log    Creating session http://${POLICY_RUNTIME_ACM_IP}
+     ${postyaml}=  Get file  ${CURDIR}/data/ac-definition-migration-from.yaml
+     ${session}=    Create Session      policy  http://${POLICY_RUNTIME_ACM_IP}   auth=${auth}
+     ${headers}=  Create Dictionary     Accept=application/yaml    Content-Type=application/yaml
+     ${resp}=   POST On Session     policy  /onap/policy/clamp/acm/v2/compositions   data=${postyaml}  headers=${headers}
+     Log    Received response from runtime acm ${resp.text}
+     ${respyaml}=  yaml.Safe Load  ${resp.text}
+     set Suite variable  ${compositionFromId}  ${respyaml["compositionId"]}
+     Should Be Equal As Strings    ${resp.status_code}     201
+
+CommissionAcDefinitionMigrationTo
+     [Documentation]  Commission automation composition definition To.
+     ${auth}=    Create List    runtimeUser    zb!XztG34
+     Log    Creating session http://${POLICY_RUNTIME_ACM_IP}
+     ${postyaml}=  Get file  ${CURDIR}/data/ac-definition-migration-to.yaml
+     ${session}=    Create Session      policy  http://${POLICY_RUNTIME_ACM_IP}   auth=${auth}
+     ${headers}=  Create Dictionary     Accept=application/yaml    Content-Type=application/yaml
+     ${resp}=   POST On Session     policy  /onap/policy/clamp/acm/v2/compositions   data=${postyaml}  headers=${headers}
+     Log    Received response from runtime acm ${resp.text}
+     ${respyaml}=  yaml.Safe Load  ${resp.text}
+     set Suite variable  ${compositionToId}  ${respyaml["compositionId"]}
+     Should Be Equal As Strings    ${resp.status_code}     201
+
 PrimeACDefinitions
      [Documentation]  Prime automation composition definition
      ${auth}=    Create List    runtimeUser    zb!XztG34
@@ -56,8 +92,29 @@ PrimeACDefinitions
      ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
      ${resp}=   PUT On Session     policy  /onap/policy/clamp/acm/v2/compositions/${compositionId}   data=${postjson}  headers=${headers}
      Should Be Equal As Strings    ${resp.status_code}     202
-     Wait Until Keyword Succeeds    2 min    5 sec    VerifyPriming  PRIMED
+     Wait Until Keyword Succeeds    2 min    5 sec    VerifyPriming  ${compositionId}  PRIMED
 
+PrimeACDefinitionFrom
+     [Documentation]  Prime automation composition definition Migration From.
+     ${auth}=    Create List    runtimeUser    zb!XztG34
+     Log    Creating session http://${POLICY_RUNTIME_ACM_IP}
+     ${postjson}=  Get file  ${CURDIR}/data/ACPriming.json
+     ${session}=    Create Session      policy  http://${POLICY_RUNTIME_ACM_IP}   auth=${auth}
+     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
+     ${resp}=   PUT On Session     policy  /onap/policy/clamp/acm/v2/compositions/${compositionFromId}   data=${postjson}  headers=${headers}
+     Should Be Equal As Strings    ${resp.status_code}     202
+     Wait Until Keyword Succeeds    2 min    5 sec    VerifyPriming  ${compositionFromId}  PRIMED
+
+PrimeACDefinitionTo
+     [Documentation]  Prime automation composition definition Migration To.
+     ${auth}=    Create List    runtimeUser    zb!XztG34
+     Log    Creating session http://${POLICY_RUNTIME_ACM_IP}
+     ${postjson}=  Get file  ${CURDIR}/data/ACPriming.json
+     ${session}=    Create Session      policy  http://${POLICY_RUNTIME_ACM_IP}   auth=${auth}
+     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
+     ${resp}=   PUT On Session     policy  /onap/policy/clamp/acm/v2/compositions/${compositionToId}   data=${postjson}  headers=${headers}
+     Should Be Equal As Strings    ${resp.status_code}     202
+     Wait Until Keyword Succeeds    2 min    5 sec    VerifyPriming  ${compositionToId}  PRIMED
 
 InstantiateAutomationComposition
      [Documentation]  Instantiate automation composition.
@@ -77,6 +134,20 @@ InstantiateAutomationComposition
      set Suite variable  ${instanceId}    ${respyaml["instanceId"]}
      Should Be Equal As Strings    ${resp.status_code}     201
 
+InstantiateAutomationCompositionMigrationFrom
+     [Documentation]  Instantiate automation composition migration.
+     ${auth}=    Create List    runtimeUser    zb!XztG34
+     Log    Creating session http://${POLICY_RUNTIME_ACM_IP}
+     ${postyaml}=  Get file  ${CURDIR}/data/ac-instance-migration-from.yaml
+     ${updatedpostyaml}=   Replace String     ${postyaml}     COMPOSITIONIDPLACEHOLDER       ${compositionFromId}
+     ${session}=    Create Session      policy  http://${POLICY_RUNTIME_ACM_IP}   auth=${auth}
+     ${headers}=  Create Dictionary     Accept=application/yaml    Content-Type=application/yaml
+     ${resp}=   POST On Session     policy  /onap/policy/clamp/acm/v2/compositions/${compositionFromId}/instances   data=${updatedpostyaml}  headers=${headers}
+     Log    Received response from runtime acm ${resp.text}
+     ${respyaml}=  yaml.Safe Load  ${resp.text}
+     set Suite variable  ${instanceMigrationId}    ${respyaml["instanceId"]}
+     Should Be Equal As Strings    ${resp.status_code}     201
+
 DeployAutomationComposition
      [Documentation]  Deploy automation composition.
      ${auth}=    Create List    runtimeUser    zb!XztG34
@@ -87,8 +158,7 @@ DeployAutomationComposition
      ${resp}=   PUT On Session     policy  /onap/policy/clamp/acm/v2/compositions/${compositionId}/instances/${instanceId}   data=${postjson}  headers=${headers}
      Log    Received response from runtime acm ${resp.text}
      Should Be Equal As Strings    ${resp.status_code}     202
-     Wait Until Keyword Succeeds    10 min    5 sec    VerifyDeployStatus  DEPLOYED
-
+     Wait Until Keyword Succeeds    10 min    5 sec    VerifyDeployStatus  ${compositionId}  ${instanceId}  DEPLOYED
 
 QueryPolicies
      [Documentation]    Verify the new policies deployed
@@ -102,7 +172,6 @@ QueryPolicies
      Should Be Equal As Strings    ${resp.status_code}     200
      Dictionary Should Contain Value  ${resp.json()[0]}  onap.policies.native.apex.ac.element
 
-
 QueryPolicyTypes
      [Documentation]    Verify the new policy types created
      ${auth}=    Create List    policyadmin    zb!XztG34
@@ -115,6 +184,66 @@ QueryPolicyTypes
      Should Be Equal As Strings    ${resp.status_code}     200
      List Should Contain Value  ${resp.json()['policy_types']}  onap.policies.native.Apex
 
+DeployAutomationCompositionMigration
+     [Documentation]  Deploy automation composition.
+     ${auth}=    Create List    runtimeUser    zb!XztG34
+     Log    Creating session http://${POLICY_RUNTIME_ACM_IP}
+     ${postjson}=  Get file  ${CURDIR}/data/DeployAC.json
+     ${session}=    Create Session      policy  http://${POLICY_RUNTIME_ACM_IP}   auth=${auth}
+     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
+     ${resp}=   PUT On Session     policy  /onap/policy/clamp/acm/v2/compositions/${compositionFromId}/instances/${instanceMigrationId}   data=${postjson}  headers=${headers}
+     Log    Received response from runtime acm ${resp.text}
+     Should Be Equal As Strings    ${resp.status_code}     202
+     Wait Until Keyword Succeeds    10 min    5 sec    VerifyDeployStatus  ${compositionFromId}  ${instanceMigrationId}  DEPLOYED
+
+SendOutPropertiesToRuntime
+     [Documentation]  Send Out Properties To Runtime
+     ${auth}=    Create List    participantUser    zb!XztG34
+     Log    Creating session http://${POLICY_PARTICIPANT_SIM_IP}
+     ${postjson}=  Get file  ${CURDIR}/data/OutProperties.json
+     ${updatedpostjson}=   Replace String     ${postjson}     INSTACEIDPLACEHOLDER       ${instanceMigrationId}
+     ${updatedpostjson}=   Replace String     ${updatedpostjson}     TEXTPLACEHOLDER       MyTextToSend
+     ${session}=    Create Session      policy  http://${POLICY_PARTICIPANT_SIM_IP}   auth=${auth}
+     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
+     ${resp}=   PUT On Session     policy  /onap/policy/simparticipant/v2/datas   data=${updatedpostjson}  headers=${headers}
+     Log    Received response from participant sim ${resp.text}
+     Should Be Equal As Strings    ${resp.status_code}     200
+     Wait Until Keyword Succeeds    2 min    5 sec    VerifyPropertiesUpdated  ${compositionFromId}  ${instanceMigrationId}  MyTextToSend
+
+AutomationCompositionUpdate
+     [Documentation]  Update of an automation composition.
+     ${auth}=    Create List    runtimeUser    zb!XztG34
+     Log    Creating session http://${POLICY_RUNTIME_ACM_IP}
+     ${postyaml}=  Get file  ${CURDIR}/data/ac-instance-update.yaml
+     ${updatedpostyaml}=   Replace String     ${postyaml}     COMPOSITIONIDPLACEHOLDER       ${compositionFromId}
+     ${updatedpostyaml}=   Replace String     ${updatedpostyaml}     INSTACEIDPLACEHOLDER       ${instanceMigrationId}
+     ${updatedpostyaml}=   Replace String     ${updatedpostyaml}     TEXTPLACEHOLDER       MyTextUpdated
+     ${session}=    Create Session      policy  http://${POLICY_RUNTIME_ACM_IP}   auth=${auth}
+     ${headers}=  Create Dictionary     Accept=application/yaml    Content-Type=application/yaml
+     ${resp}=   POST On Session     policy  /onap/policy/clamp/acm/v2/compositions/${compositionFromId}/instances   data=${updatedpostyaml}  headers=${headers}
+     Log    Received response from runtime acm ${resp.text}
+     Should Be Equal As Strings    ${resp.status_code}     200
+     Wait Until Keyword Succeeds    2 min    5 sec    VerifyDeployStatus  ${compositionFromId}  ${instanceMigrationId}  DEPLOYED
+     VerifyPropertiesUpdated  ${compositionFromId}  ${instanceMigrationId}  MyTextUpdated
+     VerifyParticipantSim  ${instanceMigrationId}  MyTextUpdated
+
+AutomationCompositionMigrationTo
+     [Documentation]  Migration of an automation composition.
+     ${auth}=    Create List    runtimeUser    zb!XztG34
+     Log    Creating session http://${POLICY_RUNTIME_ACM_IP}
+     ${postyaml}=  Get file  ${CURDIR}/data/ac-instance-migration-to.yaml
+     ${updatedpostyaml}=   Replace String     ${postyaml}     COMPOSITIONIDPLACEHOLDER       ${compositionFromId}
+     ${updatedpostyaml}=   Replace String     ${updatedpostyaml}     COMPOSITIONTARGETIDPLACEHOLDER       ${compositionToId}
+     ${updatedpostyaml}=   Replace String     ${updatedpostyaml}     INSTACEIDPLACEHOLDER       ${instanceMigrationId}
+     ${updatedpostyaml}=   Replace String     ${updatedpostyaml}     TEXTPLACEHOLDER       TextForMigration
+     ${session}=    Create Session      policy  http://${POLICY_RUNTIME_ACM_IP}   auth=${auth}
+     ${headers}=  Create Dictionary     Accept=application/yaml    Content-Type=application/yaml
+     ${resp}=   POST On Session     policy  /onap/policy/clamp/acm/v2/compositions/${compositionFromId}/instances   data=${updatedpostyaml}  headers=${headers}
+     Log    Received response from runtime acm ${resp.text}
+     Should Be Equal As Strings    ${resp.status_code}     200
+     Wait Until Keyword Succeeds    10 min    5 sec    VerifyDeployStatus  ${compositionToId}  ${instanceMigrationId}  DEPLOYED
+     VerifyPropertiesUpdated  ${compositionToId}  ${instanceMigrationId}  TextForMigration
+     VerifyParticipantSim  ${instanceMigrationId}  TextForMigration
 
 UnDeployAutomationComposition
      [Documentation]  UnDeploy automation composition.
@@ -126,8 +255,19 @@ UnDeployAutomationComposition
      ${resp}=   PUT On Session     policy  /onap/policy/clamp/acm/v2/compositions/${compositionId}/instances/${instanceId}   data=${postjson}   headers=${headers}
      Log    Received response from runtime acm ${resp.text}
      Should Be Equal As Strings    ${resp.status_code}     202
-     Wait Until Keyword Succeeds    10 min    5 sec    VerifyDeployStatus  UNDEPLOYED
+     Wait Until Keyword Succeeds    10 min    5 sec    VerifyDeployStatus  ${compositionId}  ${instanceId}  UNDEPLOYED
 
+UnDeployAutomationCompositionMigrationTo
+     [Documentation]  UnDeploy automation composition migrated.
+     ${auth}=    Create List    runtimeUser    zb!XztG34
+     Log    Creating session http://${POLICY_RUNTIME_ACM_IP}
+     ${postjson}=  Get file  ${CURDIR}/data/UndeployAC.json
+     ${session}=    Create Session      policy  http://${POLICY_RUNTIME_ACM_IP}   auth=${auth}
+     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
+     ${resp}=   PUT On Session     policy  /onap/policy/clamp/acm/v2/compositions/${compositionToId}/instances/${instanceMigrationId}   data=${postjson}   headers=${headers}
+     Log    Received response from runtime acm ${resp.text}
+     Should Be Equal As Strings    ${resp.status_code}     202
+     Wait Until Keyword Succeeds    10 min    5 sec    VerifyDeployStatus  ${compositionToId}  ${instanceMigrationId}  UNDEPLOYED
 
 UnInstantiateAutomationComposition
      [Documentation]  Delete automation composition instance.
@@ -138,8 +278,18 @@ UnInstantiateAutomationComposition
      ${resp}=   DELETE On Session     policy  /onap/policy/clamp/acm/v2/compositions/${compositionId}/instances/${instanceId}     headers=${headers}
      Log    Received response from runtime acm ${resp.text}
      Should Be Equal As Strings    ${resp.status_code}     202
-     Wait Until Keyword Succeeds    1 min    5 sec    VerifyUninstantiated
+     Wait Until Keyword Succeeds    1 min    5 sec    VerifyUninstantiated  ${compositionId}
 
+UnInstantiateAutomationCompositionMigrationTo
+     [Documentation]  Delete automation composition instance migrated.
+     ${auth}=    Create List    runtimeUser    zb!XztG34
+     Log    Creating session http://${POLICY_RUNTIME_ACM_IP}
+     ${session}=    Create Session      policy  http://${POLICY_RUNTIME_ACM_IP}   auth=${auth}
+     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
+     ${resp}=   DELETE On Session     policy  /onap/policy/clamp/acm/v2/compositions/${compositionToId}/instances/${instanceMigrationId}     headers=${headers}
+     Log    Received response from runtime acm ${resp.text}
+     Should Be Equal As Strings    ${resp.status_code}     202
+     Wait Until Keyword Succeeds    1 min    5 sec    VerifyUninstantiated  ${compositionToId}
 
 DePrimeACDefinitions
      [Documentation]  DePrime automation composition definition
@@ -150,8 +300,29 @@ DePrimeACDefinitions
      ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
      ${resp}=   PUT On Session     policy  /onap/policy/clamp/acm/v2/compositions/${compositionId}   data=${postjson}  headers=${headers}
      Should Be Equal As Strings    ${resp.status_code}     202
-     Wait Until Keyword Succeeds    2 min    5 sec    VerifyPriming  COMMISSIONED
+     Wait Until Keyword Succeeds    2 min    5 sec    VerifyPriming  ${compositionId}  COMMISSIONED
+
+DePrimeACDefinitionsFrom
+     [Documentation]  DePrime automation composition definition migration From.
+     ${auth}=    Create List    runtimeUser    zb!XztG34
+     Log    Creating session http://${POLICY_RUNTIME_ACM_IP}
+     ${postjson}=  Get file  ${CURDIR}/data/ACDepriming.json
+     ${session}=    Create Session      policy  http://${POLICY_RUNTIME_ACM_IP}   auth=${auth}
+     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
+     ${resp}=   PUT On Session     policy  /onap/policy/clamp/acm/v2/compositions/${compositionFromId}   data=${postjson}  headers=${headers}
+     Should Be Equal As Strings    ${resp.status_code}     202
+     Wait Until Keyword Succeeds    2 min    5 sec    VerifyPriming  ${compositionFromId}  COMMISSIONED
 
+DePrimeACDefinitionsTo
+     [Documentation]  DePrime automation composition definition migration To.
+     ${auth}=    Create List    runtimeUser    zb!XztG34
+     Log    Creating session http://${POLICY_RUNTIME_ACM_IP}
+     ${postjson}=  Get file  ${CURDIR}/data/ACDepriming.json
+     ${session}=    Create Session      policy  http://${POLICY_RUNTIME_ACM_IP}   auth=${auth}
+     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
+     ${resp}=   PUT On Session     policy  /onap/policy/clamp/acm/v2/compositions/${compositionToId}   data=${postjson}  headers=${headers}
+     Should Be Equal As Strings    ${resp.status_code}     202
+     Wait Until Keyword Succeeds    2 min    5 sec    VerifyPriming  ${compositionToId}  COMMISSIONED
 
 DeleteACDefinition
      [Documentation]  Delete automation composition definition.
@@ -163,6 +334,25 @@ DeleteACDefinition
      Log    Received response from runtime acm ${resp.text}
      Should Be Equal As Strings    ${resp.status_code}     200
 
+DeleteACDefinitionFrom
+     [Documentation]  Delete automation composition definition migration From.
+     ${auth}=    Create List    runtimeUser    zb!XztG34
+     Log    Creating session http://${POLICY_RUNTIME_ACM_IP}
+     ${session}=    Create Session      policy  http://${POLICY_RUNTIME_ACM_IP}   auth=${auth}
+     ${headers}=  Create Dictionary     Accept=application/yaml    Content-Type=application/yaml
+     ${resp}=   DELETE On Session     policy  /onap/policy/clamp/acm/v2/compositions/${compositionFromId}  headers=${headers}
+     Log    Received response from runtime acm ${resp.text}
+     Should Be Equal As Strings    ${resp.status_code}     200
+
+DeleteACDefinitionTo
+     [Documentation]  Delete automation composition definition migration To.
+     ${auth}=    Create List    runtimeUser    zb!XztG34
+     Log    Creating session http://${POLICY_RUNTIME_ACM_IP}
+     ${session}=    Create Session      policy  http://${POLICY_RUNTIME_ACM_IP}   auth=${auth}
+     ${headers}=  Create Dictionary     Accept=application/yaml    Content-Type=application/yaml
+     ${resp}=   DELETE On Session     policy  /onap/policy/clamp/acm/v2/compositions/${compositionToId}  headers=${headers}
+     Log    Received response from runtime acm ${resp.text}
+     Should Be Equal As Strings    ${resp.status_code}     200
 
 
 *** Keywords ***
@@ -188,35 +378,60 @@ VerifyHealthcheckPap
      Should Be Equal As Strings    ${resp.status_code}     200
 
 VerifyPriming
-    [Arguments]  ${primestate}
+    [Arguments]  ${theCompositionId}  ${primestate}
     [Documentation]    Verify the AC definitions are primed to the participants
     ${auth}=    Create List    runtimeUser    zb!XztG34
     Log    Creating session http://${POLICY_RUNTIME_ACM_IP}
     ${session}=    Create Session      policy  http://${POLICY_RUNTIME_ACM_IP}   auth=${auth}
     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
-    ${resp}=   GET On Session     policy  /onap/policy/clamp/acm/v2/compositions/${compositionId}   headers=${headers}
+    ${resp}=   GET On Session     policy  /onap/policy/clamp/acm/v2/compositions/${theCompositionId}   headers=${headers}
     Should Be Equal As Strings    ${resp.status_code}   200
     Run Keyword If  ${resp.status_code}==200  Should Be Equal As Strings  ${resp.json()['state']}  ${primestate}
 
 VerifyDeployStatus
-     [Arguments]  ${deploystate}
+     [Arguments]  ${theCompositionId}  ${theInstanceId}  ${deploystate}
      [Documentation]  Verify the Deploy status of automation composition.
      ${auth}=    Create List    runtimeUser    zb!XztG34
      Log    Creating session http://${POLICY_RUNTIME_ACM_IP}
-     ${postjson}=  Get file  ${CURDIR}/data/DeployAC.json
      ${session}=    Create Session      policy  http://${POLICY_RUNTIME_ACM_IP}   auth=${auth}
      ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
-     ${resp}=   GET On Session     policy  /onap/policy/clamp/acm/v2/compositions/${compositionId}/instances/${instanceId}     headers=${headers}
+     ${resp}=   GET On Session     policy  /onap/policy/clamp/acm/v2/compositions/${theCompositionId}/instances/${theInstanceId}     headers=${headers}
      Should Be Equal As Strings    ${resp.status_code}     200
      Run Keyword If  ${resp.status_code}==200  Should Be Equal As Strings  ${resp.json()['deployState']}  ${deploystate}
 
+VerifyPropertiesUpdated
+     [Arguments]  ${theCompositionId}  ${theInstanceId}  ${textToFind}
+     [Documentation]  Verify the Deploy status of automation composition.
+     ${auth}=    Create List    runtimeUser    zb!XztG34
+     Log    Creating session http://${POLICY_RUNTIME_ACM_IP}
+     ${session}=    Create Session      policy  http://${POLICY_RUNTIME_ACM_IP}   auth=${auth}
+     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
+     ${resp}=   GET On Session     policy  /onap/policy/clamp/acm/v2/compositions/${theCompositionId}/instances/${theInstanceId}     headers=${headers}
+     Should Be Equal As Strings    ${resp.status_code}     200
+     ${respstring}   Convert To String   ${resp.json()}
+     Run Keyword If  ${resp.status_code}==200  Should Match Regexp  ${respstring}  ${textToFind}
+
+VerifyParticipantSim
+     [Arguments]  ${theInstanceId}  ${textToFind}
+     [Documentation]  Query on Participant Simulator
+     ${auth}=    Create List    participantUser    zb!XztG34
+     Log    Creating session http://${POLICY_PARTICIPANT_SIM_IP}
+     ${session}=    Create Session      ACM  http://${POLICY_PARTICIPANT_SIM_IP}   auth=${auth}
+     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
+     ${resp}=   GET On Session     ACM  /onap/policy/simparticipant/v2/instances/${theInstanceId}     headers=${headers}
+     Log    Received response from participant {resp.text}
+     Should Be Equal As Strings    ${resp.status_code}     200
+     ${respstring}   Convert To String   ${resp.json()}
+     Should Match Regexp  ${respstring}  ${textToFind}
+
 VerifyUninstantiated
+     [Arguments]  ${theCompositionId}
      [Documentation]  Verify the Uninstantiation of automation composition.
      ${auth}=    Create List    runtimeUser    zb!XztG34
      Log    Creating session http://${POLICY_RUNTIME_ACM_IP}
      ${session}=    Create Session      policy  http://${POLICY_RUNTIME_ACM_IP}   auth=${auth}
      ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
-     ${resp}=   GET On Session     policy  /onap/policy/clamp/acm/v2/compositions/${compositionId}/instances     headers=${headers}
+     ${resp}=   GET On Session     policy  /onap/policy/clamp/acm/v2/compositions/${theCompositionId}/instances     headers=${headers}
      Should Be Equal As Strings    ${resp.status_code}     200
      Run Keyword If  ${resp.status_code}==200  Length Should Be  ${resp.json()['automationCompositionList']}  0
 
index 478d048..d8fda02 100755 (executable)
@@ -45,6 +45,7 @@ POLICY_XACML_CONTAINER="policy-xacml-pdp"
 POLICY_DISTRIBUTION_CONTAINER="policy-distribution"
 POLICY_K8S_PPNT_CONTAINER="policy-clamp-ac-k8s-ppnt"
 POLICY_HTTP_PPNT_CONTAINER="policy-clamp-ac-http-ppnt"
+POLICY_SIM_PPNT_CONTAINER="policy-clamp-ac-sim-ppnt"
 POLICY_PF_PPNT_CONTAINER="policy-clamp-ac-pf-ppnt"
 KAFKA_CONTAINER="kafka-deployment"
 ZK_CONTAINER="zookeeper-deployment"
@@ -87,9 +88,27 @@ function spin_microk8s_cluster() {
     else
         echo "K8s cluster is already running"
         echo "----------------------------------------"
-        return 0
     fi
 
+    echo "Verify if kubectl is running.."
+    kubectl version
+    exitcode="${?}"
+
+    if [ "$exitcode" -ne 0 ]; then
+        echo "Kubectl not available, Spinning up the cluster.."
+        sudo snap install kubectl --classic --channel=1.26/stable
+
+        if [ "${?}" -ne 0 ]; then
+            echo "Failed to install Kubectl. Aborting.."
+            return 1
+        fi
+        echo "Kubectl installation completed"
+        echo "----------------------------------------"
+    else
+        echo "Kubectl is already running"
+        echo "----------------------------------------"
+        return 0
+    fi
 }
 
 function install_kafka() {
@@ -216,9 +235,10 @@ function set_project_config() {
     clamp | policy-clamp)
         export ROBOT_FILE=$POLICY_CLAMP_ROBOT
         export READINESS_CONTAINERS=($POLICY_CLAMP_CONTAINER,$POLICY_APEX_CONTAINER,$POLICY_PF_PPNT_CONTAINER,$POLICY_K8S_PPNT_CONTAINER,
-            $POLICY_HTTP_PPNT_CONTAINER)
+            $POLICY_HTTP_PPNT_CONTAINER,$POLICY_SIM_PPNT_CONTAINER)
         export SET_VALUES="--set $POLICY_CLAMP_CONTAINER.enabled=true --set $POLICY_APEX_CONTAINER.enabled=true
-            --set $POLICY_PF_PPNT_CONTAINER.enabled=true --set $POLICY_K8S_PPNT_CONTAINER.enabled=true --set $POLICY_HTTP_PPNT_CONTAINER.enabled=true"
+            --set $POLICY_PF_PPNT_CONTAINER.enabled=true --set $POLICY_K8S_PPNT_CONTAINER.enabled=true
+            --set $POLICY_HTTP_PPNT_CONTAINER.enabled=true --set $POLICY_SIM_PPNT_CONTAINER.enabled=true"
         install_chartmuseum
         ;;
 
@@ -263,11 +283,12 @@ function set_project_config() {
         export READINESS_CONTAINERS=($POLICY_APEX_CONTAINER,$POLICY_API_CONTAINER,$POLICY_PAP_CONTAINER,
                     $POLICY_DISTRIBUTION_CONTAINER,$POLICY_DROOLS_CONTAINER,$POLICY_XACML_CONTAINER,
                     $POLICY_CLAMP_CONTAINER,$POLICY_PF_PPNT_CONTAINER,$POLICY_K8S_PPNT_CONTAINER,
-                    $POLICY_HTTP_PPNT_CONTAINER)
+                    $POLICY_HTTP_PPNT_CONTAINER,$POLICY_SIM_PPNT_CONTAINER)
         export SET_VALUES="--set $POLICY_APEX_CONTAINER.enabled=true --set $POLICY_XACML_CONTAINER.enabled=true
             --set $POLICY_DISTRIBUTION_CONTAINER.enabled=true --set $POLICY_DROOLS_CONTAINER.enabled=true
             --set $POLICY_CLAMP_CONTAINER.enabled=true --set $POLICY_PF_PPNT_CONTAINER.enabled=true
-            --set $POLICY_K8S_PPNT_CONTAINER.enabled=true --set $POLICY_HTTP_PPNT_CONTAINER.enabled=true"
+            --set $POLICY_K8S_PPNT_CONTAINER.enabled=true --set $POLICY_HTTP_PPNT_CONTAINER.enabled=true
+            --set $POLICY_SIM_PPNT_CONTAINER.enabled=true"
         ;;
     esac
 
index 560cea0..4d3bd71 100755 (executable)
@@ -128,7 +128,7 @@ spec:
                 fieldPath: metadata.namespace
       containers:
       - name: policy-galera-db-migrator-policy
-        image: {{ .Values.global.dockerRepository }}/{{ .Values.dbmigrator.image }}
+        image: {{ .Values.global.repository }}/{{ .Values.dbmigrator.image }}
         imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
         volumeMounts:
           - mountPath: /dbcmd-config/db_migrator_policy_init.sh
@@ -212,7 +212,7 @@ spec:
                 fieldPath: metadata.namespace
       containers:
       - name: policy-galera-db-migrator-clamp
-        image: {{ .Values.global.dockerRepository }}/{{ .Values.dbmigrator.image }}
+        image: {{ .Values.global.repository }}/{{ .Values.dbmigrator.image }}
         imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
         volumeMounts:
         - mountPath: /dbcmd-config/db_migrator_policy_init.sh