CSIT Support for ServiceLevel PNF Software Upgrade

  - Details on CSIT test cases: https://wiki.onap.org/display/DW/E2E+Integration+Test+Cases+PNF-Software+Upgrade+With+Schema+Updates

  - Newly added test are listed below:
    1. Distribute Service Level Upgrade Template
    2. Get ServiceModel Version from AAI using ServiceModelInVariant UUId
    3. Invoke Service Instantiation for ServiceLevel Upgrade
    4. Verify PNF-1 Configuration for Service Level Upgrade
    5. AAI-Update for PNF-1 Target Software Version after Service Level Upgrade
    6. Verify PNF-2 Configuration for Service Level Upgrade
    7. AAI-Update for PNF-2 Target Software Version after Service Level Upgrade
    8. Test AAI-Update for ServiceInstance after Service Level Upgrade

Issue-ID: INT-1591

Signed-off-by: ajay_dp001 <ajay.deep.singh@est.tech>
Change-Id: I7bd1ee8d19692f16e0f4415b5115e88a9feff869
diff --git a/tests/usecases-pnf-sw-upgrade/pnf-sw-upgrade/data/blueprint_archive.zip b/tests/usecases-pnf-sw-upgrade/pnf-sw-upgrade/data/blueprint_archive.zip
index 4edc9de..055d7de 100644
--- a/tests/usecases-pnf-sw-upgrade/pnf-sw-upgrade/data/blueprint_archive.zip
+++ b/tests/usecases-pnf-sw-upgrade/pnf-sw-upgrade/data/blueprint_archive.zip
Binary files differ
diff --git a/tests/usecases-pnf-sw-upgrade/pnf-sw-upgrade/data/distributeServiceTemplate_2.0.json b/tests/usecases-pnf-sw-upgrade/pnf-sw-upgrade/data/distributeServiceTemplate_2.0.json
new file mode 100644
index 0000000..e5b3d89
--- /dev/null
+++ b/tests/usecases-pnf-sw-upgrade/pnf-sw-upgrade/data/distributeServiceTemplate_2.0.json
@@ -0,0 +1,35 @@
+{
+  "distributionID": "6ac9fa0c-70f0-4213-a8d4-5b58d6a17697",
+    "serviceName": "Demo_svc",
+    "serviceVersion": "2.0",
+    "serviceUUID": "8351245d-50da-4695-8756-3a22618377f7",
+    "serviceDescription": "ServiceLevelUpgrade",
+    "serviceInvariantUUID": "fe41489e-1563-46a3-b90a-1db629e4375b",
+    "resources": [
+      {
+        "resourceInstanceName": "Demo_pnf 0",
+        "resourceCustomizationUUID": "23b43821-4eds-31f4-bfd4-66a7e0fd9bb2",
+        "resourceName": "Demo_pnf",
+        "resourceVersion": "1.0",
+        "resoucreType": "PNF",
+        "resourceUUID": "a42f6566-6a29-43e1-bac9-b91a59d702ac",
+        "resourceInvariantUUID": "fdf44827-35db-4ee5-bd70-7500e633576e",
+        "category": "Network L4+",
+        "subcategory": "Common Network Resources",
+        "artifacts": []
+      }
+    ],
+    "serviceArtifacts": [
+      {
+        "artifactName": "service-DemoSvc-csar_2.0.csar",
+        "artifactType": "TOSCA_CSAR",
+        "artifactURL": "//unzipped_sdc_csar/v1/catalog/services/DemoSvc/2.0/artifacts/service-DemoSvc-csar.csar",
+        "artifactChecksum": "YjFhZWZhOTU2MzljMDI4ZmVlNzlhOTgxYTcxMzg5ODI\u003d",
+        "artifactDescription": "TOSCA definition package of the asset",
+        "artifactTimeout": 0,
+        "artifactVersion": "2",
+        "artifactUUID": "809894a4-c862-4294-b2fb-e016b4268546"
+      }
+    ],
+    "workloadContext": "Production"
+  }
\ No newline at end of file
diff --git a/tests/usecases-pnf-sw-upgrade/pnf-sw-upgrade/data/mount2.json b/tests/usecases-pnf-sw-upgrade/pnf-sw-upgrade/data/mount2.json
new file mode 100755
index 0000000..efe94b4
--- /dev/null
+++ b/tests/usecases-pnf-sw-upgrade/pnf-sw-upgrade/data/mount2.json
@@ -0,0 +1,18 @@
+{
+  "node": [
+    {
+      "node-id": "PNFDemo1",
+      "netconf-node-topology:protocol": {
+        "name": "TLS"
+      },
+      "netconf-node-topology:host": "pnfaddr",
+      "netconf-node-topology:key-based": {
+        "username": "netconf",
+        "key-id": "ODL_private_key_0"
+      },
+      "netconf-node-topology:port": 6514,
+      "netconf-node-topology:tcp-only": false,
+      "netconf-node-topology:max-connection-attempts": 5
+    }
+  ]
+}
\ No newline at end of file
diff --git a/tests/usecases-pnf-sw-upgrade/pnf-sw-upgrade/data/serviceLevelUpgradeRequest.json b/tests/usecases-pnf-sw-upgrade/pnf-sw-upgrade/data/serviceLevelUpgradeRequest.json
new file mode 100644
index 0000000..d7a6b57
--- /dev/null
+++ b/tests/usecases-pnf-sw-upgrade/pnf-sw-upgrade/data/serviceLevelUpgradeRequest.json
@@ -0,0 +1,38 @@
+{
+  "requestDetails": {
+    "subscriberInfo": {
+      "globalSubscriberId": "807c7a02-249c-4db8-9fa9-bee973fe08ce"
+    },
+    "modelInfo": {
+      "modelVersion": "2.0",
+      "modelVersionId": "8351245d-50da-4695-8756-3a22618377f7",
+      "modelInvariantId": "fe41489e-1563-46a3-b90a-1db629e4375b",
+      "modelName": "Demo_svc",
+      "modelType": "service"
+    },
+    "requestInfo": {
+      "suppressRollback": false,
+      "requestorId": "demo",
+      "instanceName": "testInstanceName",
+      "source": "VID"
+    },
+    "requestParameters": {
+      "subscriptionServiceType": "pNF",
+      "userParams": [
+        {
+          "name": "targetSoftwareVersion",
+          "value": "pnf_sw_version-4.0.0"
+        }
+      ],
+      "aLaCarte": false,
+      "payload": "{\"k1\": \"v1\"}"
+    },
+    "project": {
+      "projectName": "ServiceLevelUpgrade"
+    },
+    "owningEntity": {
+      "owningEntityId": "67f2e84c-734d-4e90-a1e4-d2ffa2e75849",
+      "owningEntityName": "OE-Test"
+    }
+  }
+}
\ No newline at end of file
diff --git a/tests/usecases-pnf-sw-upgrade/pnf-sw-upgrade/pnf-sw-upgrade.robot b/tests/usecases-pnf-sw-upgrade/pnf-sw-upgrade/pnf-sw-upgrade.robot
index d3762a0..1bb2d71 100644
--- a/tests/usecases-pnf-sw-upgrade/pnf-sw-upgrade/pnf-sw-upgrade.robot
+++ b/tests/usecases-pnf-sw-upgrade/pnf-sw-upgrade/pnf-sw-upgrade.robot
@@ -8,7 +8,9 @@
 *** Variables ***
 ${SDNC_KEYSTORE_CONFIG_PATH}    /restconf/config/netconf-keystore:keystore
 ${SDNC_MOUNT_PATH}    /restconf/config/network-topology:network-topology/topology/topology-netconf/node/PNFDemo
+${SDNC_MOUNT_PATH2}    /restconf/config/network-topology:network-topology/topology/topology-netconf/node/PNFDemo1
 ${PNFSIM_MOUNT_PATH}    /restconf/config/network-topology:network-topology/topology/topology-netconf/node/PNFDemo/yang-ext:mount/pnf-sw-upgrade:software-upgrade
+${PNFSIM_MOUNT_PATH2}    /restconf/config/network-topology:network-topology/topology/topology-netconf/node/PNFDemo1/yang-ext:mount/pnf-sw-upgrade:software-upgrade
 ${PNFSIM_DELETE_PATH}    /restconf/config/network-topology:network-topology/topology/topology-netconf/node/PNFDemo
 ${BP_UPLOAD_URL}    /api/v1/blueprint-model/publish
 ${BP_PROCESS_URL}    /api/v1/execution-service/process
@@ -48,12 +50,14 @@
     ${serviceInstanceId}=    Set Variable    cd4decf6-4f27-4775-9561-0e683ed43635
     SET GLOBAL VARIABLE     ${serviceInstanceId}
     ${pnfName}=    Set Variable    PNFDemo
-    SET GLOBAL VARIABLE       ${pnfName}
+    SET GLOBAL VARIABLE      ${pnfName}
+    ${pnfName1}=    Set Variable    PNFDemo1
+    SET GLOBAL VARIABLE      ${pnfName1}
 
 Get pnf workflow
     Create Session   api_handler_session  http://${REPO_IP}:8080
     &{headers}=  Create Dictionary    Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==    Content-Type=application/json    Accept=application/json
-    ${get_pnfworkflows_request}=    Get Request    api_handler_session    /onap/so/infra/workflowSpecifications/v1/pnfWorkflows     headers=${headers}
+    ${get_pnfworkflows_request}=    Get Request    api_handler_session    /onap/so/infra/workflowSpecifications/v1/workflows     headers=${headers}
     Run Keyword If  '${get_pnfworkflows_request.status_code}' == '200'  log to console   \nexecuted with expected result
     log to console      ${get_pnfworkflows_request.content}
     ${pnfworkflows_json_response}=    Evaluate     json.loads(r"""${get_pnfworkflows_request.content}""", strict=False)    json
@@ -62,6 +66,8 @@
     ${activate_workflow_name}=    Set Variable    ""
     ${download_workflow_uuid}=    Set Variable    ""
     ${download_workflow_name}=    Set Variable    ""
+    ${serviceLevel_workflow_uuid}=    Set Variable    ""
+    ${serviceLevel_workflow_name}=    Set Variable    ""
     FOR    ${member}     IN      @{all_wf_members}
        ${workflow_uuid}=          Set Variable        ${member}[workflowSpecification][artifactInfo][artifactUuid]
        ${workflow_name}=          Set Variable        ${member}[workflowSpecification][artifactInfo][artifactName]
@@ -70,14 +76,19 @@
        ${activate_workflow_name}=    Set Variable If  '${workflow_name}' == 'GenericPnfSoftwareUpgrade'    ${workflow_name}   ${activate_workflow_name}
        ${download_workflow_uuid}=    Set Variable If  '${workflow_name}' == 'GenericPnfSWUPDownload'       ${workflow_uuid}   ${download_workflow_uuid}
        ${download_workflow_name}=    Set Variable If  '${workflow_name}' == 'GenericPnfSWUPDownload'       ${workflow_name}   ${download_workflow_name}
+       ${serviceLevel_workflow_uuid}=    Set Variable If  '${workflow_name}' == 'ServiceLevelUpgrade'      ${workflow_uuid}   ${serviceLevel_workflow_uuid}
+       ${serviceLevel_workflow_name}=    Set Variable If  '${workflow_name}' == 'ServiceLevelUpgrade'      ${workflow_name}   ${serviceLevel_workflow_name}
     END
 
     SET GLOBAL VARIABLE       ${activate_workflow_uuid}
     SET GLOBAL VARIABLE       ${download_workflow_uuid}
+    SET GLOBAL VARIABLE       ${serviceLevel_workflow_uuid}
     Run Keyword If  '${activate_workflow_name}' == 'GenericPnfSoftwareUpgrade'  log to console   \nexecuted with expected result
     Run Keyword If  '${download_workflow_name}' == 'GenericPnfSWUPDownload'  log to console   \nexecuted with expected result
+    Run Keyword If  '${serviceLevel_workflow_name}' == 'ServiceLevelUpgrade'  log to console   \nexecuted with expected result
     Should Be Equal As Strings    '${activate_workflow_name}'    'GenericPnfSoftwareUpgrade'
     Should Be Equal As Strings    '${download_workflow_name}'    'GenericPnfSWUPDownload'
+    Should Be Equal As Strings    '${serviceLevel_workflow_name}'    'ServiceLevelUpgrade'
 
 Invoke Service Instantiation for pnf software download
     Create Session   api_handler_session  http://${REPO_IP}:8080
@@ -194,3 +205,158 @@
     Log To Console     final target software version received: ${sw_version}
     Run Keyword If  '${sw_version}' == 'pnf_sw_version-3.0.0'  log to console   \nexecuted with expected result
     Should Be Equal As Strings    '${sw_version}'    'pnf_sw_version-3.0.0'
+
+Distribute ServiceLevel Upgrade Template
+    Create Session   sdc_controller_session  http://${REPO_IP}:8085
+    ${data}=    Get Binary File     ${CURDIR}${/}data${/}distributeServiceTemplate_2.0.json
+    &{headers}=  Create Dictionary    Authorization=Basic bXNvX2FkbWluOnBhc3N3b3JkMSQ=    resource-location=/app/distribution-test-zip/unzipped/    Content-Type=application/json    Accept=application/json
+    ${resp}=    Post Request    sdc_controller_session    /test/treatNotification/v1    data=${data}    headers=${headers}
+    Run Keyword If  '${resp.status_code}' == '200'  log to console  \nexecuted with expected result
+    Should Be Equal As Strings    '${resp.status_code}'    '200'
+    ${model_version_id_2}=    Set Variable    8351245d-50da-4695-8756-3a22618377f7
+    SET GLOBAL VARIABLE     ${model_version_id_2}
+
+Get Service-Model-Version From AAI Using Service-Model-InVariant-UUId
+    Create Session   aai_simulator_session  https://${REPO_IP}:9993
+    &{headers}=  Create Dictionary    Authorization=Basic YWFpOmFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==    Content-Type=application/xml    Accept=application/xml    verify=False
+    ${model-invariant-id}=    Set Variable    a51e2bef-961c-496f-b235-b4540400e885
+    ${get_serviceVersion}=    Get Request    aai_simulator_session    aai/v11/service-design-and-creation/models/model/${model-invariant-id}/model-vers     headers=${headers}
+    Run Keyword If  '${get_serviceVersion.status_code}' == '200'  log to console   \nExecuted with expected
+    Log to console  ${get_serviceVersion.content}
+    Should Be Equal As Strings    ${get_serviceVersion.status_code}    200
+    ${serviceVersion_json_response}=    Evaluate    json.loads(r"""${get_serviceVersion.content}""", strict=False)    json
+    ${all_service_version}=    Set Variable    ${serviceVersion_json_response['model-vers']['model-ver']}
+    ${model-version-id_1}=    Set Variable    ""
+    ${model-version-id_2}=    Set Variable    ""
+    FOR    ${member}    IN    @{all_service_version}
+       ${model-version}=    Set Variable    ${member}[model-version]
+       ${model-version-id}=    Set Variable    ${member}[model-version-id]
+       Log to console    The ServiceModel Version ${model-version} has ModelVersion Id : ${model-version-id}
+       ${model-version-id_1}=    Set Variable If  '${model-version}' == '1.0'    ${model-version-id}   ${model-version-id_1}
+       ${model-version-id_2}=    Set Variable If  '${model-version}' == '2.0'    ${model-version-id}   ${model-version-id_2}
+    END
+    SET GLOBAL VARIABLE    ${model-version-id_1}
+    SET GLOBAL VARIABLE    ${model-version-id_2}
+
+Invoke Service Instantiation for ServiceLevel Upgrade
+    Create Session   api_handler_session  http://${REPO_IP}:8080
+    ${data}=    Get Binary File     ${CURDIR}${/}data${/}serviceLevelUpgradeRequest.json
+    ${serviceInstanceId}=    Set Variable    ${model-version-id_1}
+    &{headers}=  Create Dictionary    Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==    Content-Type=application/json    Accept=application/json    X-ONAP-RequestID=0ffc559c-5513-44bc-8b02-5759d84600f4    X-ONAP-PartnerName=ONAP    X-RequestorID=VID
+    ${service_instantiation_request}=    Post Request    api_handler_session    /onap/so/infra/instanceManagement/v1/serviceInstances/${serviceInstanceId}/workflows/${serviceLevel_workflow_uuid}    data=${data}    headers=${headers}
+    Run Keyword If  '${service_instantiation_request.status_code}' == '200'  log to console   \nexecuted with expected result
+    log to console      ${service_instantiation_request.content}
+    ${service_instantiation_json_response}=    Evaluate     json.loads(r"""${service_instantiation_request.content}""", strict=False)    json
+    ${request_ID}=          Set Variable         ${service_instantiation_json_response}[requestReferences][requestId]
+    ${actual_service_request_state}=    Set Variable    ""
+     FOR    ${INDEX}    IN RANGE    ${MAXIMUM_ATTEMPTS_BEFORE_TIMEOUT}
+       ${orchestration_status_service_request}=   Get Request  api_handler_session   /onap/so/infra/orchestrationRequests/v7/${request_ID}
+       Run Keyword If  '${orchestration_status_service_request.status_code}' == '200'  log to console   \nexecuted with expected result
+       log to console      ${orchestration_status_service_request.content}
+       ${orchestration_json_service_response}=    Evaluate     json.loads(r"""${orchestration_status_service_request.content}""", strict=False)    json
+       ${actual_service_request_state}=     SET VARIABLE       ${orchestration_json_service_response}[request][requestStatus][requestState]
+       Log To Console    Received actual repsonse status:${actual_service_request_state}
+       RUN KEYWORD IF   '${actual_service_request_state}' == 'COMPLETE' or '${actual_service_request_state}' == 'FAILED'      Exit For Loop
+       log to console  Will try again after ${SLEEP_INTERVAL_SEC} seconds
+       SLEEP   ${SLEEP_INTERVAL_SEC}s
+     END
+    Log To Console     final repsonse status received: ${actual_service_request_state}
+    Run Keyword If  '${actual_service_request_state}' == 'COMPLETE'  log to console   \nexecuted with expected result
+    Should Be Equal As Strings    '${actual_service_request_state}'    'COMPLETE'
+
+Test Verify PNF-1 Configuration for Service Level Upgrade
+     [Documentation]    Checking PNF configuration params
+     Create Session   sdnc  http://${REPO_IP}:8282
+     &{headers}=  Create Dictionary    Authorization=Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ==    Content-Type=application/json
+     ${mount}=    Get File     ${CURDIR}${/}data${/}mount.json
+     Log to console  ${mount}
+     ${pnf_mount_resp}=    Put Request    sdnc    ${SDNC_MOUNT_PATH}    data=${mount}    headers=${headers}
+     Should Be Equal As Strings    ${pnf_mount_resp.status_code}    201
+     SLEEP   10
+     ${pnfsim_software_resp}=    Get Request    sdnc    ${PNFSIM_MOUNT_PATH}    headers=${headers}
+     Should Be Equal As Strings    ${pnfsim_software_resp.status_code}    200
+     Log to console  ${pnfsim_software_resp.content}
+     ${pnfsim_software_resp_json}=    Evaluate     json.loads(r"""${pnfsim_software_resp.content}""", strict=False)    json
+     ${all_upgp_members}=    Set Variable     ${pnfsim_software_resp_json['software-upgrade']['upgrade-package']}
+     FOR    ${member}     IN      @{all_upgp_members}
+        ${soft_ver}=    Get From Dictionary   ${member}     software-version
+        ${soft_status}=    Get From Dictionary   ${member}     current-status
+        Log to console   The node ${pnfName} has software version ${soft_ver} : ${soft_status}
+        Run Keyword If  '${soft_ver}' == 'pnf_sw_version-4.0.0'   Exit For Loop
+     END
+     Run Keyword If  '${soft_ver}' == 'pnf_sw_version-4.0.0'  log to console   \nexecuted with expected result
+     Should Be Equal As Strings    '${soft_ver}'    'pnf_sw_version-4.0.0'
+     Should Be Equal As Strings    '${soft_status}'    'ACTIVATION_COMPLETED'
+
+Test AAI-Update for PNF-1 Target Software Version after Service Level Upgrade
+    Create Session   aai_simulator_session  https://${REPO_IP}:9993
+    &{headers}=  Create Dictionary    Authorization=Basic YWFpOmFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==    Content-Type=application/json    Accept=application/json    verify=False
+    FOR    ${INDEX}    IN RANGE    ${MAXIMUM_ATTEMPTS_BEFORE_TIMEOUT}
+       ${get_pnf_request}=    Get Request    aai_simulator_session    aai/v11/network/pnfs/pnf/${pnfName}     headers=${headers}
+       Run Keyword If  '${get_pnf_request.status_code}' == '200'  log to console   \nexecuted with expected result
+       ${get_pnf_json_response}=    Evaluate     json.loads(r"""${get_pnf_request.content}""", strict=False)    json
+       Log to console  ${get_pnf_json_response}
+       ${sw_version}=          Set Variable         ${get_pnf_json_response}[sw-version]
+       Log to console  ${sw_version}
+       Run Keyword If  '${sw_version}' == 'pnf_sw_version-4.0.0'   Exit For Loop
+       log to console  Will try again after ${SLEEP_INTERVAL_SEC} seconds
+       SLEEP   ${SLEEP_INTERVAL_SEC}s
+    END
+    Log To Console     final target software version received: ${sw_version}
+    Run Keyword If  '${sw_version}' == 'pnf_sw_version-4.0.0'  log to console   \nexecuted with expected result
+    Should Be Equal As Strings    '${sw_version}'    'pnf_sw_version-4.0.0'
+
+Test Verify PNF-2 Configuration for Service Level Upgrade
+     [Documentation]    Checking PNF configuration params
+     Create Session   sdnc  http://${REPO_IP}:8282
+     &{headers}=  Create Dictionary    Authorization=Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ==    Content-Type=application/json
+     ${mount}=    Get File     ${CURDIR}${/}data${/}mount2.json
+     Log to console  ${mount}
+     ${pnf_mount_resp}=    Put Request    sdnc    ${SDNC_MOUNT_PATH2}    data=${mount}    headers=${headers}
+     Should Be Equal As Strings    ${pnf_mount_resp.status_code}    201
+     SLEEP   10
+     ${pnfsim_software_resp}=    Get Request    sdnc    ${PNFSIM_MOUNT_PATH2}    headers=${headers}
+     Should Be Equal As Strings    ${pnfsim_software_resp.status_code}    200
+     Log to console  ${pnfsim_software_resp.content}
+     ${pnfsim_software_resp_json}=    Evaluate     json.loads(r"""${pnfsim_software_resp.content}""", strict=False)    json
+     ${all_upgp_members}=    Set Variable     ${pnfsim_software_resp_json['software-upgrade']['upgrade-package']}
+     FOR    ${member}     IN      @{all_upgp_members}
+        ${soft_ver}=    Get From Dictionary   ${member}     software-version
+        ${soft_status}=    Get From Dictionary   ${member}     current-status
+        Log to console   The node ${pnfName1} has software version ${soft_ver} : ${soft_status}
+        Run Keyword If  '${soft_ver}' == 'pnf_sw_version-4.0.0'   Exit For Loop
+     END
+     Run Keyword If  '${soft_ver}' == 'pnf_sw_version-4.0.0'  log to console   \nexecuted with expected result
+     Should Be Equal As Strings    '${soft_ver}'    'pnf_sw_version-4.0.0'
+     Should Be Equal As Strings    '${soft_status}'    'ACTIVATION_COMPLETED'
+
+Test AAI-Update for PNF-2 Target Software Version after Service Level Upgrade
+    Create Session   aai_simulator_session  https://${REPO_IP}:9993
+    &{headers}=  Create Dictionary    Authorization=Basic YWFpOmFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==    Content-Type=application/json    Accept=application/json    verify=False
+    FOR    ${INDEX}    IN RANGE    ${MAXIMUM_ATTEMPTS_BEFORE_TIMEOUT}
+       ${get_pnf_request}=    Get Request    aai_simulator_session    aai/v11/network/pnfs/pnf/${pnfName1}     headers=${headers}
+       Run Keyword If  '${get_pnf_request.status_code}' == '200'  log to console   \nexecuted with expected result
+       ${get_pnf_json_response}=    Evaluate     json.loads(r"""${get_pnf_request.content}""", strict=False)    json
+       Log to console  ${get_pnf_json_response}
+       ${sw_version}=          Set Variable         ${get_pnf_json_response}[sw-version]
+       Log to console  ${sw_version}
+       Run Keyword If  '${sw_version}' == 'pnf_sw_version-4.0.0'   Exit For Loop
+       log to console  Will try again after ${SLEEP_INTERVAL_SEC} seconds
+       SLEEP   ${SLEEP_INTERVAL_SEC}s
+    END
+    Log To Console     final target software version received: ${sw_version}
+    Run Keyword If  '${sw_version}' == 'pnf_sw_version-4.0.0'  log to console   \nexecuted with expected result
+    Should Be Equal As Strings    '${sw_version}'    'pnf_sw_version-4.0.0'
+
+Test AAI-Update for ServiceInstance after Service Level Upgrade
+    ${globalSubscriberId}=    Set Variable    807c7a02-249c-4db8-9fa9-bee973fe08ce
+    Create Session   aai_simulator_session  https://${REPO_IP}:9993
+    &{headers}=  Create Dictionary    Authorization=Basic YWFpOmFhaS5vbmFwLm9yZzpkZW1vMTIzNDU2IQ==    Content-Type=application/json    Accept=application/json    verify=False
+    ${get_service_request}=    Get Request    aai_simulator_session    aai/v17/business/customers/customer/${globalSubscriberId}/service-subscriptions/service-subscription/pNF/service-instances/service-instance/${model_version_id_2}     headers=${headers}
+    Run Keyword If  '${get_service_request.status_code}' == '200'  log to console   \nexecuted with expected result
+    ${get_service_json_response}=    Evaluate     json.loads(r"""${get_service_request.content}""", strict=False)    json
+    Log to console  ${get_service_json_response}
+    ${service_instance_id}=    Set Variable    ${get_service_json_response}[service-instance-id]
+    Should Be Equal As Strings    '${service_instance_id}'    'df4decf6-h727-8875-8761-89683ed43645'
+    ${model_version_id}=    Set Variable    ${get_service_json_response}[model-version-id]
+    Should Be Equal As Strings    '${model_version_id}'    '${model_version_id_2}'
\ No newline at end of file