diff --git a/TP/NGSI-LD/DistributedOperations/Provision/EntityAttributes/AppendEntityAttributes/D003_01_exc.robot b/TP/NGSI-LD/DistributedOperations/Provision/EntityAttributes/AppendEntityAttributes/D003_01_exc.robot new file mode 100644 index 0000000000000000000000000000000000000000..63907c119e8f54fc9c259d23f1c456631e604cb8 --- /dev/null +++ b/TP/NGSI-LD/DistributedOperations/Provision/EntityAttributes/AppendEntityAttributes/D003_01_exc.robot @@ -0,0 +1,62 @@ +*** Settings *** +Documentation Check that when appending entity attributes to an entity with an exclusive registration, the attributes managed locally are updated on the Context Broker, while attributes managed with the exclusive registration are updated in the Context Source. + +Resource ${EXECDIR}/resources/ApiUtils/Common.resource +Resource ${EXECDIR}/resources/ApiUtils/ContextInformationProvision.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 Setup Registration And Start Context Source Mock Server +Test Teardown Delete Registration And Stop Context Source Mock Server + + +*** Variables *** +${entity_payload_filename} vehicle-simple-attributes.jsonld +${fragment_filename} vehicle-speed-isParked-fragment.json +${registration_payload_file_path} csourceRegistrations/context-source-registration-vehicle-speed.jsonld + +*** Test Cases *** +D003_01_exc Append Entity Attribute + [Documentation] Check that an entity attribute is appended and the exclusive registration forwards the request to the Context Source + [Tags] since_v1.6.1 dist-ops 4_3_3 cf_06 proxy-exclusive 4_3_6_3 5_6_3 + + Set Stub Reply POST /broker1/ngsi-ld/v1/entities/${entity_id}/attrs/ 204 + ${response}= Append Entity Attributes + ... ${entity_id} + ... ${fragment_filename} + ... ${CONTENT_TYPE_JSON} + Check Response Status Code 204 ${response.status_code} + + ${stub_count}= Get Stub Count POST /broker1/ngsi-ld/v1/entities/${entity_id}/attrs/ + Should Be Equal ${stub_count} 1 + + ${response}= Retrieve Entity by Id ${entity_id} context=${ngsild_test_suite_context} local=true + ${body}= Get From Dictionary ${response.json()} speed + Should Not Contain ${body} speed + +*** Keywords *** +Create Entity And Setup Registration And Start Context Source Mock Server + ${entity_id}= Generate Random Vehicle Entity Id + Set Suite Variable ${entity_id} + + ${response}= Create Entity ${entity_payload_filename} ${entity_id} local=true + 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=${entity_id} + ... mode=exclusive + ... 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 Registration And Stop Context Source Mock Server + Delete Context Source Registration ${registration_id} + Delete Entity by Id ${entity_id} + Stop Context Source Mock Server \ No newline at end of file diff --git a/TP/NGSI-LD/DistributedOperations/Provision/EntityAttributes/AppendEntityAttributes/D003_01_inc.robot b/TP/NGSI-LD/DistributedOperations/Provision/EntityAttributes/AppendEntityAttributes/D003_01_inc.robot new file mode 100644 index 0000000000000000000000000000000000000000..725795324c98c544e690cd3c9d36c29d9063245e --- /dev/null +++ b/TP/NGSI-LD/DistributedOperations/Provision/EntityAttributes/AppendEntityAttributes/D003_01_inc.robot @@ -0,0 +1,67 @@ +*** Settings *** +Documentation Check that if one request the Context Broker to append an attribute whose id matches an inclusive registration, the update is performed on the Context Broker and forwarded to 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 Setup Registration And Start Context Source Mock Server +Test Teardown Delete Registration And Stop Context Source Mock Server + + +*** Variables *** +${entity_payload_filename} vehicle-simple-attributes.jsonld +${fragment_filename} vehicle-speed-isParked-fragment.json +${registration_payload_file_path} csourceRegistrations/context-source-registration-vehicle-redirection-ops.jsonld + +*** Test Cases *** +D003_01_inc Append Entity Attribute + [Documentation] Check that, given an inclusive registration, appending entity attributes updates the Context Source accordingly. + [Tags] since_v1.6.1 dist-ops 4_3_3 cf_06 additive-inclusive 4_3_6_2 5_6_3 + + ${response}= Retrieve Entity by Id ${entity_id} + ${old_body}= Get From Dictionary ${response.json()} isParked + + Set Stub Reply POST /ngsi-ld/v1/entities/${entity_id}/attrs/ 204 + ${response}= Append Entity Attributes + ... ${entity_id} + ... ${fragment_filename} + ... ${CONTENT_TYPE_JSON} + Check Response Status Code 204 ${response.status_code} + + ${stub_count}= Get Stub Count POST /ngsi-ld/v1/entities/${entity_id}/attrs/ + Should Be Equal ${stub_count} 1 + + ${response}= Retrieve Entity by Id ${entity_id} + ${new_body}= Get From Dictionary ${response.json()} isParked + + Should Have Value In Json ${response.json()} $.speed + Should Not Be Equal ${old_body} ${new_body} + +*** Keywords *** +Create Entity And Setup Registration And Start Context Source Mock Server + ${entity_id}= Generate Random Vehicle Entity Id + Set Suite Variable ${entity_id} + + ${response}= Create Entity ${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=${entity_id} + ${response}= Create Context Source Registration With Return ${registration_payload} + Check Response Status Code 201 ${response.status_code} + Start Context Source Mock Server + +Delete Registration And Stop Context Source Mock Server + Delete Context Source Registration ${registration_id} + Delete Entity by Id ${entity_id} + Stop Context Source Mock Server diff --git a/TP/NGSI-LD/DistributedOperations/Provision/EntityAttributes/AppendEntityAttributes/D003_01_red.robot b/TP/NGSI-LD/DistributedOperations/Provision/EntityAttributes/AppendEntityAttributes/D003_01_red.robot new file mode 100644 index 0000000000000000000000000000000000000000..c25f2a38b7b54e0e7b198f8ea33388016b8873b5 --- /dev/null +++ b/TP/NGSI-LD/DistributedOperations/Provision/EntityAttributes/AppendEntityAttributes/D003_01_red.robot @@ -0,0 +1,74 @@ +*** Settings *** +Documentation Check that if one request the Context Broker to append an attribute whose id matches two redirect registrations, the update is forwarded and the entity attributes are updated in both Context Sources +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 Setup Registration And Start Context Source Mock Server +Test Teardown Delete Registration And Stop Context Source Mock Server + + +*** Variables *** +${entity_payload_filename} vehicle-simple-attributes.jsonld +${fragment_filename} vehicle-speed-isParked-fragment.json +${registration_payload_file_path} csourceRegistrations/context-source-registration-vehicle-redirection-ops.jsonld + +*** Test Cases *** +D003_01_red Append Entity Attribute + [Documentation] Check that an entity attribute is appended and the redirect registration forwards the request to the Context Sources + [Tags] since_v1.6.1 dist-ops 4_3_3 cf_06 proxy-redirect 4_3_6_3 5_6_3 + + Set Stub Reply POST /broker1/ngsi-ld/v1/entities/${entity_id}/attrs/ 204 + Set Stub Reply POST /broker2/ngsi-ld/v1/entities/${entity_id}/attrs/ 204 + ${response}= Append Entity Attributes + ... ${entity_id} + ... ${fragment_filename} + ... ${CONTENT_TYPE_JSON} + Check Response Status Code 204 ${response.status_code} + + ${stub_count}= Get Stub Count POST /broker1/ngsi-ld/v1/entities/${entity_id}/attrs/ + Should Be Equal ${stub_count} 1 + ${stub_count}= Get Stub Count POST /broker2/ngsi-ld/v1/entities/${entity_id}/attrs/ + Should Be Equal ${stub_count} 1 + + ${response}= Retrieve Entity by Id ${entity_id} context=${ngsild_test_suite_context} local=true + Check Response Status Code 404 ${response.status_code} + +*** Keywords *** +Setup Registration 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=redirect + ... endpoint=/broker1 + ${response}= Create Context Source Registration With Return ${registration_payload} + Check Response Status Code 201 ${response.status_code} + + ${registration_id2}= Generate Random CSR Id + Set Suite Variable ${registration_id2} + ${registration_payload}= Prepare Context Source Registration From File + ... ${registration_id2} + ... ${registration_payload_file_path} + ... entity_id=${entity_id} + ... mode=redirect + ... endpoint=/broker2 + ${response}= Create Context Source Registration With Return ${registration_payload} + Check Response Status Code 201 ${response.status_code} + + Start Context Source Mock Server + +Delete Registration And Stop Context Source Mock Server + Delete Context Source Registration ${registration_id} + Delete Context Source Registration ${registration_id2} + Stop Context Source Mock Server \ No newline at end of file diff --git a/TP/NGSI-LD/DistributedOperations/Provision/EntityAttributes/AppendEntityAttributes/D003_02_exc.robot b/TP/NGSI-LD/DistributedOperations/Provision/EntityAttributes/AppendEntityAttributes/D003_02_exc.robot new file mode 100644 index 0000000000000000000000000000000000000000..55ebba1cfbb41dfd44966a96063441f3ef0c86b8 --- /dev/null +++ b/TP/NGSI-LD/DistributedOperations/Provision/EntityAttributes/AppendEntityAttributes/D003_02_exc.robot @@ -0,0 +1,63 @@ +*** Settings *** +Documentation Check that if one request the Context Broker to append an attribute whose id matches an exclusive registration with noOverwrite flag, the entity is updated on the Context Broker and the update is forwarded to the Context Source but existing attributes are not overwritten + +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 Setup Registration And Start Context Source Mock Server +Test Teardown Delete Registration And Stop Context Source Mock Server + + +*** Variables *** +${entity_payload_filename} vehicle-simple-attributes.jsonld +${fragment_filename} vehicle-speed-isParked-fragment.json +${registration_payload_file_path} csourceRegistrations/context-source-registration-vehicle-speed.jsonld + +*** Test Cases *** +D003_02_exc Append Entity Attribute + [Documentation] Check that an entity attribute is appended and the exclusive registration forwards the request to the Context Source with the noOverwrite flag + [Tags] since_v1.6.1 dist-ops 4_3_3 cf_06 proxy-exclusive 4_3_6_3 5_6_3 + + Set Stub Reply POST /broker1/ngsi-ld/v1/entities/${entity_id}/attrs/ 207 + ${response}= Append Entity Attributes With Parameters + ... ${entity_id} + ... ${fragment_filename} + ... ${CONTENT_TYPE_JSON} + ... noOverwrite + Wait for redirected request + Check Response Status Code 207 ${response.status_code} + + ${stub}= Get Request Url Params options + Should Contain ${stub} noOverwrite + +*** Keywords *** +Create Entity And Setup Registration And Start Context Source Mock Server + ${entity_id}= Generate Random Vehicle Entity Id + Set Suite Variable ${entity_id} + + ${response}= Create Entity ${entity_payload_filename} ${entity_id} local=${True} + 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=${entity_id} + ... mode=exclusive + ... 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 Registration And Stop Context Source Mock Server + Delete Context Source Registration ${registration_id} + Delete Entity by Id ${entity_id} + Stop Context Source Mock Server \ No newline at end of file diff --git a/TP/NGSI-LD/DistributedOperations/Provision/EntityAttributes/AppendEntityAttributes/D003_02_inc.robot b/TP/NGSI-LD/DistributedOperations/Provision/EntityAttributes/AppendEntityAttributes/D003_02_inc.robot new file mode 100644 index 0000000000000000000000000000000000000000..e7bbb65ca2758a6baa383ec153183edd5a9366b9 --- /dev/null +++ b/TP/NGSI-LD/DistributedOperations/Provision/EntityAttributes/AppendEntityAttributes/D003_02_inc.robot @@ -0,0 +1,68 @@ +*** Settings *** +Documentation Check that, given an inclusive registration with the noOverwrite flag, appending entity attributes creates the new attributes in the Context Source accordingly but does not modify existing ones. + +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 Setup Registration And Start Context Source Mock Server +Test Teardown Delete Registration And Stop Context Source Mock Server + +*** Variables *** +${entity_payload_filename} vehicle-simple-attributes.jsonld +${fragment_filename} vehicle-speed-isParked-fragment.json +${registration_payload_file_path} csourceRegistrations/context-source-registration-vehicle-redirection-ops.jsonld + +*** Test Cases *** +D003_02_inc Append Entity Attribute + [Documentation] Check that an entity attribute is appended and the inclusive registration forwards the request to the Context Source with the noOverwrite flag + [Tags] since_v1.6.1 dist-ops 4_3_3 cf_06 additive-inclusive 4_3_6_2 5_6_3 + + ${response}= Retrieve Entity by Id ${entity_id} + ${old_body}= Get From Dictionary ${response.json()} isParked + + Set Stub Reply POST /ngsi-ld/v1/entities/${entity_id}/attrs/ 207 + ${response}= Append Entity Attributes With Parameters + ... ${entity_id} + ... ${fragment_filename} + ... ${CONTENT_TYPE_JSON} + ... noOverwrite + Wait For Request + Check Response Status Code 207 ${response.status_code} + + ${stub}= Get Request Url Params options + Should Contain ${stub} noOverwrite + + ${response}= Retrieve Entity by Id ${entity_id} + ${new_body}= Get From Dictionary ${response.json()} isParked + Should Have Value In Json ${response.json()} $.speed + Should Be Equal ${old_body} ${new_body} + +*** Keywords *** +Create Entity And Setup Registration And Start Context Source Mock Server + ${entity_id}= Generate Random Vehicle Entity Id + Set Suite Variable ${entity_id} + + ${response}= Create Entity ${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=${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 Registration And Stop Context Source Mock Server + Delete Context Source Registration ${registration_id} + Delete Entity by Id ${entity_id} + Stop Context Source Mock Server diff --git a/TP/NGSI-LD/DistributedOperations/Provision/EntityAttributes/AppendEntityAttributes/D003_02_red.robot b/TP/NGSI-LD/DistributedOperations/Provision/EntityAttributes/AppendEntityAttributes/D003_02_red.robot new file mode 100644 index 0000000000000000000000000000000000000000..42eb5fabf348f21929363af0204abd8e4f9e0329 --- /dev/null +++ b/TP/NGSI-LD/DistributedOperations/Provision/EntityAttributes/AppendEntityAttributes/D003_02_red.robot @@ -0,0 +1,72 @@ +*** Settings *** +Documentation Check that if one request the Context Broker to append an attribute whose id matches a redirect registration with noOverwrite flag, the entity is updated on the Context Broker and the update is forwarded to the Context Source but existing attributes are not overwritten + +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 Setup Registration And Start Context Source Mock Server +Test Teardown Delete Registration And Stop Context Source Mock Server + + +*** Variables *** +${entity_payload_filename} vehicle-simple-attributes.jsonld +${fragment_filename} vehicle-speed-isParked-fragment.json +${registration_payload_file_path} csourceRegistrations/context-source-registration-vehicle-redirection-ops.jsonld + +*** Test Cases *** +D003_02_red Append Entity Attribute + [Documentation] Check that an entity attribute is appended and the redirect registration forwards the request to the Context Source with the noOverwrite flag + [Tags] since_v1.6.1 dist-ops 4_3_3 cf_06 proxy-redirect 4_3_6_3 5_6_3 + + Set Stub Reply POST /broker1/ngsi-ld/v1/entities/${entity_id}/attrs/ 207 + Set Stub Reply POST /broker2/ngsi-ld/v1/entities/${entity_id}/attrs/ 207 + ${response}= Append Entity Attributes With Parameters + ... ${entity_id} + ... ${fragment_filename} + ... ${CONTENT_TYPE_JSON} + ... noOverwrite + Wait for redirected request + Check Response Status Code 207 ${response.status_code} + + ${stub}= Get Request Url Params options + Should Contain ${stub} noOverwrite + +*** Keywords *** +Setup Registration 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=redirect + ... endpoint=/broker1 + ${response}= Create Context Source Registration With Return ${registration_payload} + Check Response Status Code 201 ${response.status_code} + + ${registration_id2}= Generate Random CSR Id + Set Suite Variable ${registration_id2} + ${registration_payload}= Prepare Context Source Registration From File + ... ${registration_id2} + ... ${registration_payload_file_path} + ... entity_id=${entity_id} + ... mode=redirect + ... endpoint=/broker2 + ${response}= Create Context Source Registration With Return ${registration_payload} + Check Response Status Code 201 ${response.status_code} + + Start Context Source Mock Server + +Delete Registration And Stop Context Source Mock Server + Delete Context Source Registration ${registration_id} + Delete Context Source Registration ${registration_id2} + Stop Context Source Mock Server \ No newline at end of file diff --git a/data/csourceRegistrations/context-source-registration-vehicle-speed.jsonld b/data/csourceRegistrations/context-source-registration-vehicle-speed.jsonld new file mode 100644 index 0000000000000000000000000000000000000000..b1798060b56ef16a88b88829b549d2cad3f63e69 --- /dev/null +++ b/data/csourceRegistrations/context-source-registration-vehicle-speed.jsonld @@ -0,0 +1,21 @@ +{ + "id": "urn:ngsi-ld:ContextSourceRegistration:randomUUID", + "type": "ContextSourceRegistration", + "information": [ + { + "entities": [ + { + "id": "urn:ngsi-ld:Vehicle:randomUUID", + "type": "Vehicle" + } + + ], + "propertyNames":["speed"] + } + ], + "operations": ["redirectionOps"], + "endpoint": "http://my.csource.org:1026/", + "@context":[ + "https://forge.etsi.org/rep/cim/ngsi-ld-test-suite/-/raw/develop/resources/jsonld-contexts/ngsi-ld-test-suite-compound.jsonld" + ] +} \ No newline at end of file diff --git a/data/entities/fragmentEntities/vehicle-speed-isParked-fragment.json b/data/entities/fragmentEntities/vehicle-speed-isParked-fragment.json new file mode 100644 index 0000000000000000000000000000000000000000..3ed3d2000cb75310d6c5d2cbc1224a64cfac3ba4 --- /dev/null +++ b/data/entities/fragmentEntities/vehicle-speed-isParked-fragment.json @@ -0,0 +1,19 @@ +{ + "isParked": { + "type": "Relationship", + "object": "urn:ngsi-ld:OffStreetParking:Downtown1", + "observedAt": "2017-07-29T12:00:04Z", + "providedBy": { + "type": "Relationship", + "object": "urn:ngsi-ld:Person:JohnDoe" + } + }, + "speed": { + "type": "Property", + "value": 99, + "source": { + "type": "Property", + "value": "Speedometer" + } + } +} \ No newline at end of file diff --git a/libraries/robotframework-httpctrl/src/HttpCtrl/__init__.py b/libraries/robotframework-httpctrl/src/HttpCtrl/__init__.py index 571984816661a9cfe9782b4fb6ed925609f0c74e..d37c89de9590e7ac28aef43c9dabcbf8eed19933 100755 --- a/libraries/robotframework-httpctrl/src/HttpCtrl/__init__.py +++ b/libraries/robotframework-httpctrl/src/HttpCtrl/__init__.py @@ -13,6 +13,8 @@ import http.client import json import threading +from urllib.parse import urlparse, parse_qs + from robot.api import logger from HttpCtrl.utils.logger import LoggerAssistant @@ -1119,6 +1121,43 @@ class Server: response = Response(int(status), None, json.dumps(body), None, None) HttpStubContainer().add(criteria, response) + def get_stub(self, method, url): + """ + + Returns server stub that is used by server to reply. + + `method` [in] (string): Request method that is used to handle by server stub (GET, POST, DELETE, etc., see: RFC 7231, RFC 5789). + + `url` [in] (string): Path to the resource that is used by server stub, for example, in case address www.httpbin.org/ip - '/ip' is an path. + + Example how to get server stub for request with `POST` method and URL `/api/v2/request`. + + +----------------+------+-----------------+ + | Get Stub | POST | /api/v2/request | + +----------------+------+-----------------+ + + .. code:: text + + Get Stub POST /api/v2/request + + Example how to get server stub for request with `GET` method and URL `/get` + + +----------------+------+-----+ + | Get Stub | GET | /get | + +----------------+------+-----+ + + .. code:: text + + Get Stub GET /get + + """ + if self.__server is None: + message_error = "Impossible to get server stub (reason: 'server is not created')." + raise AssertionError(message_error) + + criteria = HttpStubCriteria(method=method, url=url) + result = HttpStubContainer().get(criteria, None) + return result def get_stub_count(self, method, url): """ @@ -1296,6 +1335,30 @@ class Server: """ return self.__request.get_url() + + def get_request_url_params(self, param_name): + """ + + Returns URL parameters of received request as a dictionary. This function should be called after \`Wait For Request\`, + otherwise None is returned. + + Example how to obtain URL parameters of incoming request: + + +-----------------------+ + | Get Request Url Params | + +-----------------------+ + + .. code:: text + + Get Request Url Params + + """ + url = self.__request.get_url() + parsed_url = urlparse(url) + params = parse_qs(parsed_url.query) + + param_value = params[param_name] + return param_value[0] if len(param_value) == 1 else param_value def set_reply_header(self, key, value):