Draft: feat(distributed): add TCs for the distribution of discovery operations

Add TCs D019 to D024 covering the six discovery operations (TS 104 175 §10.6) when matching Context Sources are registered: merge of local and remote results, restriction to what the registration declares, local=true, auxiliary registrations (never contacted) and redirect registrations (matched through redirectionOps).

The discovery request keywords accept a local parameter, and the mock server decodes paths before matching a stub, as a broker may forward an entity type or attribute IRI percent-encoded.

Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com

Merge request reports

Loading
+63 −0
Changes for TP/NGSI-LD/DistributedOperations/Consumption/Discovery/RetrieveAvailableAttributeInformation/D024_01_aux.robot: 63 added lines, 0 removed lines.
Original line number Diff line number Diff line
*** Settings ***
Documentation       Check that an auxiliary Context Source, which can only register retrieveOps, is not contacted

Resource            ${EXECDIR}/resources/ApiUtils/Common.resource
Resource            ${EXECDIR}/resources/ApiUtils/ContextInformationConsumption.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          Setup Registration And Start Context Source Mock Server
Test Teardown       Delete Registration And Stop Context Source Mock Server


*** Variables ***
${registration_payload_file_path}=      csourceRegistrations/context-source-registration-vehicle-complete.jsonld


*** Test Cases ***
D024_01_aux Retrieve Available Attribute Information Is Not Forwarded To An Auxiliary Context Source
    [Documentation]    Check that an auxiliary Context Source, which can only register retrieveOps, is not contacted
    [Tags]
    ...    since_v1.6.1
    ...    dist-ops
    ...    core_4_3_3
    ...    cf_04
    ...    ed-attr
    ...    additive-auxiliary
    ...    core_9_3_2
    ...    core_10_6_8
    ${remote_payload}=    Get File    ${EXECDIR}/data/types/distributed/attribute-info-speed.json
    Set Stub Reply    GET    /ngsi-ld/v1/attributes/speed    200    ${remote_payload}
    Set Stub Reply
    ...    GET
    ...    /ngsi-ld/v1/attributes/https://ngsi-ld-test-suite/context#speed
    ...    200
    ...    ${remote_payload}
    ${response}=    Retrieve Attribute    attribute_name=speed    context=${ngsild_test_suite_context}
    Check Response Status Code    404    ${response.status_code}
    ${stub_count}=    Get Stub Count    GET    /ngsi-ld/v1/attributes/speed
    Should Be Equal As Integers    ${stub_count}    0
    ${stub_count}=    Get Stub Count    GET    /ngsi-ld/v1/attributes/https://ngsi-ld-test-suite/context#speed
    Should Be Equal As Integers    ${stub_count}    0


*** Keywords ***
Setup Registration And Start Context Source Mock Server
    ${registration_id}=    Generate Random CSR Id
    Set Suite Variable    ${registration_id}
    ${operations}=    Create List    retrieveOps
    ${registration_payload}=    Prepare Context Source Registration From File
    ...    ${registration_id}
    ...    ${registration_payload_file_path}
    ...    mode=auxiliary
    ...    operations=${operations}
    ${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}
    Stop Context Source Mock Server
+60 −0
Changes for TP/NGSI-LD/DistributedOperations/Consumption/Discovery/RetrieveAvailableAttributeInformation/D024_01_inc.robot: 60 added lines, 0 removed lines.
Original line number Diff line number Diff line
*** Settings ***
Documentation       Check that the attribute speed provided by an inclusive Context Source is returned even if it
...                 is unknown locally

Resource            ${EXECDIR}/resources/ApiUtils/Common.resource
Resource            ${EXECDIR}/resources/ApiUtils/ContextInformationConsumption.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          Setup Registration And Start Context Source Mock Server
Test Teardown       Delete Registration And Stop Context Source Mock Server


*** Variables ***
${registration_payload_file_path}=      csourceRegistrations/context-source-registration-vehicle-complete.jsonld


*** Test Cases ***
D024_01_inc Retrieve Available Attribute Information From An Inclusive Context Source
    [Documentation]    Check that the attribute speed provided by an inclusive Context Source is returned even if it
    ...    is unknown locally
    [Tags]
    ...    since_v1.6.1
    ...    dist-ops
    ...    core_4_3_3
    ...    cf_04
    ...    ed-attr
    ...    additive-inclusive
    ...    core_9_3_2
    ...    core_10_6_8
    ${remote_payload}=    Get File    ${EXECDIR}/data/types/distributed/attribute-info-speed.json
    Set Stub Reply    GET    /ngsi-ld/v1/attributes/speed    200    ${remote_payload}
    Set Stub Reply
    ...    GET
    ...    /ngsi-ld/v1/attributes/https://ngsi-ld-test-suite/context#speed
    ...    200
    ...    ${remote_payload}
    ${response}=    Retrieve Attribute    attribute_name=speed    context=${ngsild_test_suite_context}
    Check Response Status Code    200    ${response.status_code}
    Should Be Equal    ${response.json()["attributeName"]}    speed
    List Should Contain Value    ${response.json()["typeNames"]}    Vehicle


*** Keywords ***
Setup Registration And Start Context Source Mock Server
    ${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}
    ${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}
    Stop Context Source Mock Server
+54 −0
Changes for TP/NGSI-LD/DistributedOperations/Consumption/Discovery/RetrieveAvailableAttributeInformation/D024_01_red.robot: 54 added lines, 0 removed lines.
Original line number Diff line number Diff line
*** Settings ***
Documentation       Check that the attribute speed provided by a redirect Context Source registering redirectionOps
...                 is returned

Resource            ${EXECDIR}/resources/ApiUtils/Common.resource
Resource            ${EXECDIR}/resources/ApiUtils/ContextInformationConsumption.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          Setup Registration And Start Context Source Mock Server
Test Teardown       Delete Registration And Stop Context Source Mock Server


*** Variables ***
${registration_payload_file_path}=      csourceRegistrations/context-source-registration-vehicle-redirection-ops.jsonld


*** Test Cases ***
D024_01_red Retrieve Available Attribute Information From A Redirect Context Source
    [Documentation]    Check that the attribute speed provided by a redirect Context Source registering redirectionOps
    ...    is returned
    [Tags]    since_v1.6.1    dist-ops    core_4_3_3    cf_04    ed-attr    proxy-redirect    core_9_3_3    core_10_6_8
    ${remote_payload}=    Get File    ${EXECDIR}/data/types/distributed/attribute-info-speed.json
    Set Stub Reply    GET    /broker1/ngsi-ld/v1/attributes/speed    200    ${remote_payload}
    Set Stub Reply
    ...    GET
    ...    /broker1/ngsi-ld/v1/attributes/https://ngsi-ld-test-suite/context#speed
    ...    200
    ...    ${remote_payload}
    ${response}=    Retrieve Attribute    attribute_name=speed    context=${ngsild_test_suite_context}
    Check Response Status Code    200    ${response.status_code}
    Should Be Equal    ${response.json()["attributeName"]}    speed
    List Should Contain Value    ${response.json()["typeNames"]}    Vehicle


*** Keywords ***
Setup Registration And Start Context Source Mock Server
    ${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}
    ...    mode=redirect
    ...    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}
    Stop Context Source Mock Server
+60 −0
Changes for TP/NGSI-LD/DistributedOperations/Consumption/Discovery/RetrieveAvailableAttributeInformation/D024_02_inc.robot: 60 added lines, 0 removed lines.
Original line number Diff line number Diff line
*** Settings ***
Documentation       Check that the Bus entity type, not declared in the registration of the Context Source, is not
...                 returned

Resource            ${EXECDIR}/resources/ApiUtils/Common.resource
Resource            ${EXECDIR}/resources/ApiUtils/ContextInformationConsumption.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          Setup Registration And Start Context Source Mock Server
Test Teardown       Delete Registration And Stop Context Source Mock Server


*** Variables ***
${registration_payload_file_path}=      csourceRegistrations/context-source-registration-vehicle-speed.jsonld


*** Test Cases ***
D024_02_inc Retrieve Available Attribute Information Restricted To The Registration Of The Context Source
    [Documentation]    Check that the Bus entity type, not declared in the registration of the Context Source, is not
    ...    returned
    [Tags]
    ...    since_v1.6.1
    ...    dist-ops
    ...    core_4_3_3
    ...    cf_04
    ...    ed-attr
    ...    additive-inclusive
    ...    core_9_3_2
    ...    core_10_6_8
    ${remote_payload}=    Get File    ${EXECDIR}/data/types/distributed/attribute-info-speed-vehicle-and-bus.json
    Set Stub Reply    GET    /ngsi-ld/v1/attributes/speed    200    ${remote_payload}
    Set Stub Reply
    ...    GET
    ...    /ngsi-ld/v1/attributes/https://ngsi-ld-test-suite/context#speed
    ...    200
    ...    ${remote_payload}
    ${response}=    Retrieve Attribute    attribute_name=speed    context=${ngsild_test_suite_context}
    Check Response Status Code    200    ${response.status_code}
    List Should Contain Value    ${response.json()["typeNames"]}    Vehicle
    List Should Not Contain Value    ${response.json()["typeNames"]}    Bus


*** Keywords ***
Setup Registration And Start Context Source Mock Server
    ${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}
    ${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}
    Stop Context Source Mock Server
+61 −0
Changes for TP/NGSI-LD/DistributedOperations/Consumption/Discovery/RetrieveAvailableAttributeInformation/D024_03_inc.robot: 61 added lines, 0 removed lines.
Original line number Diff line number Diff line
*** Settings ***
Documentation       Check that the Context Source is not contacted when local is set to true

Resource            ${EXECDIR}/resources/ApiUtils/Common.resource
Resource            ${EXECDIR}/resources/ApiUtils/ContextInformationConsumption.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          Setup Registration And Start Context Source Mock Server
Test Teardown       Delete Registration And Stop Context Source Mock Server


*** Variables ***
${registration_payload_file_path}=      csourceRegistrations/context-source-registration-vehicle-complete.jsonld


*** Test Cases ***
D024_03_inc Retrieve Available Attribute Information With Local Set To True
    [Documentation]    Check that the Context Source is not contacted when local is set to true
    [Tags]
    ...    since_v1.6.1
    ...    dist-ops
    ...    core_4_3_3
    ...    cf_04
    ...    ed-attr
    ...    additive-inclusive
    ...    core_9_3_2
    ...    core_10_6_8
    ...    http_6_4_11
    ${remote_payload}=    Get File    ${EXECDIR}/data/types/distributed/attribute-info-speed.json
    Set Stub Reply    GET    /ngsi-ld/v1/attributes/speed    200    ${remote_payload}
    Set Stub Reply
    ...    GET
    ...    /ngsi-ld/v1/attributes/https://ngsi-ld-test-suite/context#speed
    ...    200
    ...    ${remote_payload}
    ${response}=    Retrieve Attribute    attribute_name=speed    context=${ngsild_test_suite_context}    local=true
    Check Response Status Code    404    ${response.status_code}
    ${stub_count}=    Get Stub Count    GET    /ngsi-ld/v1/attributes/speed
    Should Be Equal As Integers    ${stub_count}    0
    ${stub_count}=    Get Stub Count    GET    /ngsi-ld/v1/attributes/https://ngsi-ld-test-suite/context#speed
    Should Be Equal As Integers    ${stub_count}    0


*** Keywords ***
Setup Registration And Start Context Source Mock Server
    ${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}
    ${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}
    Stop Context Source Mock Server
Loading
Loading