diff --git a/TP/NGSI-LD/DistributedOperations/LoopDetection/D018_01.robot b/TP/NGSI-LD/DistributedOperations/LoopDetection/D018_01.robot new file mode 100644 index 0000000000000000000000000000000000000000..51aacf4e0dc958e4484fd69f1e01d5113720b01f --- /dev/null +++ b/TP/NGSI-LD/DistributedOperations/LoopDetection/D018_01.robot @@ -0,0 +1,56 @@ +*** Settings *** +Documentation Verify that a loop is detected when the Via header contains the broker's identifier. + +Resource ${EXECDIR}/resources/ApiUtils/Common.resource +Resource ${EXECDIR}/resources/ApiUtils/ContextInformationConsumption.resource +Resource ${EXECDIR}/resources/ApiUtils/ContextInformationProvision.resource +Resource ${EXECDIR}/resources/ApiUtils/ContextSourceDiscovery.resource +Resource ${EXECDIR}/resources/ApiUtils/ContextSourceRegistration.resource +Resource ${EXECDIR}/resources/AssertionUtils.resource +Resource ${EXECDIR}/resources/JsonUtils.resource +Resource ${EXECDIR}/resources/MockServerUtils.resource + +Test Setup Create Entity And Registration On The Context Broker And Start Context Source Mock Server +Test Teardown Delete Registrations And Stop Context Source Mock Server + +*** Variables *** +${entity_payload_filename} vehicle-simple-attributes.jsonld +${registration_payload_file_path} csourceRegistrations/context-source-registration-vehicle-redirection-ops.jsonld + +*** Test Cases *** +D018_01 Loop Detection With Via Header + [Documentation] Verify that a loop is detected when the Via header contains the broker's identifier. + [Tags] since_v1.8.1 dist-ops 4_3_3 cf_06 5_6_6 6_3_18 + + ${response}= Create Entity ${entity_payload_filename} ${entity_id} + Check Response Status Code 201 ${response.status_code} + + Wait For Request + ${response}= Get Request Headers + ${payload}= Convert To Dictionary ${response} + ${expected_via_header}= Get From Dictionary ${payload} Via + + ${response}= Delete Entity ${entity_id} via=${expected_via_header} + Check Response Status Code 508 ${response.status_code} + +*** Keywords *** +Create Entity And Registration On The Context Broker And Start Context Source Mock Server + ${entity_id}= Generate Random Vehicle Entity Id + Set Test Variable ${entity_id} + + ${registration_id}= Generate Random CSR Id + Set Suite Variable ${registration_id} + ${registration_payload}= Prepare Context Source Registration From File + ... ${registration_id} + ... ${registration_payload_file_path} + ... entity_id=${entity_id} + ... mode=inclusive + ${response}= Create Context Source Registration With Return ${registration_payload} + Check Response Status Code 201 ${response.status_code} + + Start Context Source Mock Server + +Delete Registrations And Stop Context Source Mock Server + Delete Entity ${entity_id} + Delete Context Source Registration ${registration_id} + Stop Context Source Mock Server diff --git a/TP/NGSI-LD/DistributedOperations/LoopDetection/D018_02.robot b/TP/NGSI-LD/DistributedOperations/LoopDetection/D018_02.robot new file mode 100644 index 0000000000000000000000000000000000000000..42244ad2cc267ed7e63931f3dbd74b9b743dd6d9 --- /dev/null +++ b/TP/NGSI-LD/DistributedOperations/LoopDetection/D018_02.robot @@ -0,0 +1,123 @@ +*** Settings *** +Documentation Check Via Header Forwarding To Context Source across multiple NGSI-LD endpoints + +Resource ${EXECDIR}/resources/ApiUtils/Common.resource +Resource ${EXECDIR}/resources/ApiUtils/ContextInformationConsumption.resource +Resource ${EXECDIR}/resources/ApiUtils/ContextInformationProvision.resource +Resource ${EXECDIR}/resources/ApiUtils/ContextSourceDiscovery.resource +Resource ${EXECDIR}/resources/ApiUtils/ContextSourceRegistration.resource +Resource ${EXECDIR}/resources/AssertionUtils.resource +Resource ${EXECDIR}/resources/JsonUtils.resource +Resource ${EXECDIR}/resources/MockServerUtils.resource + +Test Setup Create Entity And Registration On The Context Broker And Start Context Source Mock Server +Test Teardown Delete Registrations And Stop Context Source Mock Server + +*** Variables *** +${first_entity_payload_filename} vehicle-simple-attributes.jsonld +${second_entity_payload_filename} vehicle-simple-attributes-second-different.jsonld +${third_entity_payload_filename} vehicle-simple-attributes-second.json +${brandname_payload_filename} vehicle-brandname-complete-fragment.jsonld +${entity_pattern} urn:ngsi-ld:Vehicle:* +${registration_payload_file_path} csourceRegistrations/context-source-registration-vehicle-redirection-ops.jsonld + +*** Test Cases *** +D018_02_01 Check Post Via Header Forwarding To Context Source + [Documentation] Verify that the request contains the POST Via header when forwarding operations to the Context Source + [Tags] since_v1.8.1 dist-ops 4_3_3 cf_06 additive-inclusive 5_6_6 6_3_18 + + Set Stub Reply POST /broker1/ngsi-ld/v1/entities 201 + ${response}= Create Entity ${second_entity_payload_filename} ${entity_id2} + Check Response Status Code 201 ${response.status_code} + + Wait For Request + ${response}= Get Request Headers + ${payload}= Convert To Dictionary ${response} + Dictionary Should Contain Key ${payload} Via + +D018_02_02 Check Update Via Header Forwarding To Context Source + [Documentation] Verify that the request contains the PATCH Via header when forwarding operations to the Context Source + [Tags] since_v1.8.1 dist-ops 4_3_3 cf_06 additive-inclusive 5_6_6 6_3_18 + + Set Stub Reply PATCH /broker1/ngsi-ld/v1/entities/${entity_id}/attrs/ 204 + ${response}= Update Entity Attributes + ... ${entity_id} + ... ${brandname_payload_filename} + ... ${CONTENT_TYPE_LD_JSON} + Check Response Status Code 204 ${response.status_code} + + Wait For Request + ${response}= Get Request Headers + ${payload}= Convert To Dictionary ${response} + Dictionary Should Contain Key ${payload} Via + +D018_02_03 Check Delete Via Header Forwarding To Context Source + [Documentation] Verify that the request contains the DELETE Via header when forwarding operations to the Context Source + [Tags] since_v1.8.1 dist-ops 4_3_3 cf_06 additive-inclusive 5_6_6 6_3_18 + + Set Stub Reply DELETE /broker1/ngsi-ld/v1/entities/${entity_id} 204 + ${response}= Delete Entity ${entity_id} + Check Response Status Code 204 ${response.status_code} + + Wait For Request + ${response}= Get Request Headers + ${payload}= Convert To Dictionary ${response} + Dictionary Should Contain Key ${payload} Via + +D018_02_04 Check Put Via Header Forwarding To Context Source + [Documentation] Verify that the request contains the PUT Via header when forwarding operations to the Context Source + [Tags] since_v1.8.1 dist-ops 4_3_3 cf_06 additive-inclusive 5_6_6 6_3_18 + + Set Stub Reply PUT /broker1/ngsi-ld/v1/entities/${entity_id} 204 + ${response}= Replace Entity + ... ${entity_id} + ... ${third_entity_payload_filename} + ... ${CONTENT_TYPE_JSON} + ... context=${ngsild_test_suite_context} + Check Response Status Code 204 ${response.status_code} + + Wait For Request + ${response}= Get Request Headers + ${payload}= Convert To Dictionary ${response} + Dictionary Should Contain Key ${payload} Via + +D018_02_05 Check Get Via Header Forwarding To Context Source + [Documentation] Verify that the request contains the GET Via header when forwarding operations to the Context Source + [Tags] since_v1.8.1 dist-ops 4_3_3 cf_06 additive-inclusive 5_6_6 6_3_18 + + Set Stub Reply GET /broker1/ngsi-ld/v1/entities/${entity_id} 200 + ${response}= Retrieve Entity ${entity_id} + Check Response Status Code 200 ${response.status_code} + + Wait For Request + ${response}= Get Request Headers + ${payload}= Convert To Dictionary ${response} + Dictionary Should Contain Key ${payload} Via + +*** Keywords *** +Create Entity And Registration On The Context Broker And Start Context Source Mock Server + ${entity_id}= Generate Random Vehicle Entity Id + Set Suite Variable ${entity_id} + ${entity_id2}= Generate Random Vehicle Entity Id + Set Suite Variable ${entity_id2} + ${response}= Create Entity ${first_entity_payload_filename} ${entity_id} + Check Response Status Code 201 ${response.status_code} + + ${registration_id}= Generate Random CSR Id + Set Suite Variable ${registration_id} + ${registration_payload}= Prepare Context Source Registration From File + ... ${registration_id} + ... ${registration_payload_file_path} + ... entity_id_pattern=${entity_pattern} + ... mode=inclusive + ... endpoint=/broker1 + ${response}= Create Context Source Registration With Return ${registration_payload} + Check Response Status Code 201 ${response.status_code} + + Start Context Source Mock Server + +Delete Registrations And Stop Context Source Mock Server + Delete Entity ${entity_id} + Delete Entity ${entity_id2} + Delete Context Source Registration ${registration_id} + Stop Context Source Mock Server diff --git a/TP/NGSI-LD/DistributedOperations/LoopDetection/D018_03.robot b/TP/NGSI-LD/DistributedOperations/LoopDetection/D018_03.robot new file mode 100644 index 0000000000000000000000000000000000000000..3a74d2ceafcafa06121d5b575c3e5655adb6812c --- /dev/null +++ b/TP/NGSI-LD/DistributedOperations/LoopDetection/D018_03.robot @@ -0,0 +1,63 @@ +*** Settings *** +Documentation Verify that the request contains both the Via header from the Context Broker and the Via from the Context Source + +Resource ${EXECDIR}/resources/ApiUtils/Common.resource +Resource ${EXECDIR}/resources/ApiUtils/ContextInformationConsumption.resource +Resource ${EXECDIR}/resources/ApiUtils/ContextInformationProvision.resource +Resource ${EXECDIR}/resources/ApiUtils/ContextSourceDiscovery.resource +Resource ${EXECDIR}/resources/ApiUtils/ContextSourceRegistration.resource +Resource ${EXECDIR}/resources/AssertionUtils.resource +Resource ${EXECDIR}/resources/JsonUtils.resource +Resource ${EXECDIR}/resources/MockServerUtils.resource + +Test Setup Create Entity And Registration On The Context Broker And Start Context Source Mock Server +Test Teardown Delete Registrations And Stop Context Source Mock Server + +*** Variables *** +${entity_payload_filename} vehicle-simple-attributes.jsonld +${registration_payload_file_path} csourceRegistrations/context-source-registration-vehicle-redirection-ops.jsonld + +*** Test Cases *** +D018_03 Check Via Header Forwarding To Context Source + [Documentation] Verify that the request contains the Via header from both the Context Broker and the Context Source + [Tags] since_v1.8.1 dist-ops 4_3_3 cf_06 additive-inclusive 5_6_6 6_3_18 + + ${response}= Create Entity ${entity_payload_filename} ${entity_id} + Check Response Status Code 201 ${response.status_code} + + Wait For Request + ${response}= Get Request Headers + ${payload}= Convert To Dictionary ${response} + ${create_via_header}= Get From Dictionary ${payload} Via + Set Suite Variable ${create_via_header} + + Set Stub Reply DELETE /broker1/ngsi-ld/v1/entities/${entity_id} 204 + ${response}= Delete Entity ${entity_id} + Check Response Status Code 204 ${response.status_code} + + Wait For Request + ${response}= Get Request Headers + ${delete_via_header}= Convert To Dictionary ${response} + Should Contain ${delete_via_header}[Via]\[value] ${create_via_header} + +*** Keywords *** +Create Entity And Registration On The Context Broker And Start Context Source Mock Server + ${entity_id}= Generate Random Vehicle Entity Id + Set Suite Variable ${entity_id} + + ${registration_id}= Generate Random CSR Id + Set Suite Variable ${registration_id} + ${registration_payload}= Prepare Context Source Registration From File + ... ${registration_id} + ... ${registration_payload_file_path} + ... entity_id=${entity_id} + ... mode=inclusive + ... endpoint=/broker1 + ${response}= Create Context Source Registration With Return ${registration_payload} + Check Response Status Code 201 ${response.status_code} + + Start Context Source Mock Server + +Delete Registrations And Stop Context Source Mock Server + Delete Context Source Registration ${registration_id} + Stop Context Source Mock Server diff --git a/resources/ApiUtils/ContextInformationProvision.resource b/resources/ApiUtils/ContextInformationProvision.resource index c812d5ec6aac8642880c4d0f05c75dd2c5d3d4a0..0318318c59fa0b8b21aa4f410e1692e2e1120d5f 100755 --- a/resources/ApiUtils/ContextInformationProvision.resource +++ b/resources/ApiUtils/ContextInformationProvision.resource @@ -5,6 +5,7 @@ Library RequestsLibrary Library OperatingSystem Library Collections Library JSONLibrary +Library HttpCtrl.Server Resource ${EXECDIR}/resources/ApiUtils/Common.resource Resource ${EXECDIR}/resources/ApiUtils/TemporalContextInformationProvision.resource Resource ${EXECDIR}/resources/JsonUtils.resource @@ -271,13 +272,16 @@ Delete Entity Attributes Delete Entity [Tags] actor_context-producer - [Arguments] ${id} ${local}=${EMPTY} ${broker_url}=${EMPTY} + [Arguments] ${id} ${local}=${EMPTY} ${broker_url}=${EMPTY} ${via}=${EMPTY} &{params}= Create Dictionary IF '${local}'!='' Set To Dictionary ${params} local=${local} ${final_url}= Set Variable If '${broker_url}' != '' ${broker_url} ${url} + &{headers}= Create Dictionary + IF '${via}'!='' Set To Dictionary ${headers} Via ${via} ${response}= DELETE ... url=${final_url}/${ENTITIES_ENDPOINT_PATH}${id} ... params=${params} + ... headers=${headers} ... expected_status=any IF ${delete_temporal_on_core_delete} Delete Temporal Representation Of Entity ${id}