Commit 5bc87746 authored by thomas Bousselin's avatar thomas Bousselin
Browse files

feat: reworked IOP

parent 2ad92d1e
Loading
Loading
Loading
Loading
+39 −18
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@ Resource ${EXECDIR}/resources/IOPUtils/InteroperabilityUtils.resource
Test Setup          Setup Initial Context Source Registrations
Test Teardown       Delete Entities and Delete Registrations


*** Variables ***
${first_entity_payload_filename}                interoperability/offstreet-parking1-full.jsonld
${second_entity_payload_filename}               interoperability/offstreet-parking2-full.jsonld
@@ -15,26 +16,46 @@ ${inclusive_registration_payload_file_path} csourceRegistrations/interoperabi
${exclusive_registration_payload_file_path}     csourceRegistrations/interoperability/context-source-registration-exclusive-1.jsonld
${first_expected_payload_file_path}             interoperability/query-entity-IOP-003-01-01-first.json
${second_expected_payload_file_path}            interoperability/query-entity-IOP-003-01-01-second.json
${broker_A_url}
${broker_B_url}
${broker_C_url}
${broker_A_url}                                 ${EMPTY}
${broker_B_url}                                 ${EMPTY}
${broker_C_url}                                 ${EMPTY}


*** Test Cases ***
IOP_003_01_01 Query Entities Of Type OffstreetParking Via GET
    [Documentation]    Pre-conditions: no user context. Data only on leaves. B contains OffStreetParking:1 and OffStreetParking:2 without location and totalSpotsNumber. C contains OffStreetParking:2.
    ...    Registrations established: Inclusive in A to B. Exclusive in A to C.
    [Tags]    since_v1.6.1    iop    cnf_01    4_3_3    additive-inclusive    proxy-exclusive    4_3_6    5_7_2    6_4_3_1
    [Tags]
    ...    since_v1.6.1
    ...    iop
    ...    cnf_01
    ...    4_3_3
    ...    additive-inclusive
    ...    proxy-exclusive
    ...    4_3_6
    ...    5_7_2
    ...    6_4_3_1

    # Agent queries all entities with type OffStreetParking in A and checks for a successful response that contains the attributes of both entities in B and C.
    ${response_a}=    Query Entities    entity_types=OffStreetParking    broker_url=${broker_A_url}    context=${ngsild_test_suite_context}
    ${response_a}=    Query Entities
    ...    entity_types=OffStreetParking
    ...    broker_url=${broker_A_url}
    ...    context=${ngsild_test_suite_context}
    Check Response Status Code    200    ${response_a.status_code}

    ${entity_ids}=    Create List    ${first_entity_id}    ${second_entity_id}
    Check Response Body Containing Entities URIS set to    ${entity_ids}    ${response_a.json()}

    # Agent checks that OffStreetParking:1 in A is the same as the one in B and that OffStreetParking:2 in A contains the attributes of both OffStreetParking:2 in B and C.
    Check Response Body Containing Entity element by id    ${first_expected_payload_file_path}    ${first_entity_id}    ${response_a.json()}
    Check Response Body Containing Entity element by id    ${second_expected_payload_file_path}    ${second_entity_id}    ${response_a.json()}
    Check Response Body Containing Entity element by id
    ...    ${first_expected_payload_file_path}
    ...    ${first_entity_id}
    ...    ${response_a.json()}
    Check Response Body Containing Entity element by id
    ...    ${second_expected_payload_file_path}
    ...    ${second_entity_id}
    ...    ${response_a.json()}


*** Keywords ***
Setup Initial Context Source Registrations
+55 −52
Original line number Diff line number Diff line
@@ -7,56 +7,66 @@ Resource ${EXECDIR}/resources/IOPUtils/InteroperabilityUtils.resource
Test Setup          Setup Initial Context Source Registrations
Test Teardown       Delete Entities and Delete Registrations


*** Variables ***
${first_entity_payload_filename}                interoperability/offstreet-parking1-full.jsonld
${second_entity_payload_filename}               interoperability/offstreet-parking2-full.jsonld
${third_entity_payload_filename}               interoperability/offstreet-parking2-no-location.jsonld
${inclusive_registration_payload_file_path}    csourceRegistrations/interoperability/context-source-registration-inclusive-2.jsonld
${exclusive_registration_payload_file_path}    csourceRegistrations/interoperability/context-source-registration-exclusive-2.jsonld
${broker_A_url}
${broker_B_url}
${broker_C_url}
${third_entity_payload_filename}                interoperability/offstreet-parking2-no-location-and-totalspotsnumber.jsonld
${inclusive_registration_payload_file_path}     csourceRegistrations/interoperability/context-source-registration-inclusive-1.jsonld
${exclusive_registration_payload_file_path}     csourceRegistrations/interoperability/context-source-registration-exclusive-1.jsonld
${first_expected_payload_file_path}             interoperability/query-entity-IOP-003-01-01-first.json
${second_expected_payload_file_path}            interoperability/query-entity-IOP-003-01-01-second.json
${broker_A_url}                                 ${EMPTY}
${broker_B_url}                                 ${EMPTY}
${broker_C_url}                                 ${EMPTY}


*** Test Cases ***
IOP_003_01_02 Query Entities Of Type OffstreetParking Via POST
    [Documentation]    Pre-conditions: no user context. Data only on leaves. B contains OffStreetParking:1 and OffStreetParking:2 without location. C contains OffStreetParking:2.
    ...    Registrations established: Inclusive in A to B. Exclusive in A to C.
    [Tags]    since_v1.6.1    iop    cnf_01    4_3_3    additive-inclusive    proxy-exclusive    4_3_6    5_7_2    6_23_2_1
    [Tags]
    ...    since_v1.6.1
    ...    iop
    ...    cnf_01
    ...    4_3_3
    ...    additive-inclusive
    ...    proxy-exclusive
    ...    4_3_6
    ...    5_7_2
    ...    6_23_2_1

    # Agent queries all entities with type OffStreetParking in A and checks for a successful response that contains the attributes of both entities in B and C.
    @{entities}=    Create List    ${entity_id}    ${second_entity_id}
    ${response}=    Query Entities Via POST   entities=${entities}    broker_url=${broker_A_url}    context=${ngsild_test_suite_context}
    Check Response Status Code    200    ${response.status_code}
    Should Contain    ${response.json()}    availableSpotsNumber
    Should Contain    ${response.json()}    totalSpotsNumber
    Should Contain    ${response.json()}    availableSpotsNumber
    Should Contain    ${response.json()}   location

    #Agent queries all entities with type OffStreetParking in B and C
    ${response}=    Query Entities Via POST   entities=${entities}    broker_url=${broker_B_url}    context=${ngsild_test_suite_context}
    @{first_expected_payload}=    Set Variable    ${response.json()}
    Check Response Body Containing Entities URIS set to    ${entities}    ${response.json()}

    ${response}=    Query Entities Via POST   entities=${entity_id}    broker_url=${broker_C_url}    context=${ngsild_test_suite_context}
    @{second_expected_payload}=    Set Variable    ${response.json()}
    Check Response Body Containing Entities URIS set to    ${entity_id}    ${response.json()}
    &{entity_selector}=    Create Dictionary    type=OffStreetParking
    @{entities}=    Create List    ${entity_selector}
    ${response_a}=    Query Entities Via POST
    ...    entities=${entities}
    ...    broker_url=${broker_A_url}
    ...    context=${ngsild_test_suite_context}
    Check Response Status Code    200    ${response_a.status_code}

    ${entity_ids}=    Create List    ${first_entity_id}    ${second_entity_id}
    Check Response Body Containing Entities URIS set to    ${entity_ids}    ${response_a.json()}

    # Agent checks that OffstreetParking:1 in A is the same as the one in B and that OffstreetParking:2 in A contains the attributes of both OffstreetParking:2 in B and C.
    Should Be Equal    ${response.json()}    ${first_expected_payload}
    Should Contain    ${response.json()}   ${first_expected_payload}
    Should Contain    ${response.json()}   ${second_expected_payload}
    Check Response Body Containing Entity element by id
    ...    ${first_expected_payload_file_path}
    ...    ${first_entity_id}
    ...    ${response_a.json()}
    Check Response Body Containing Entity element by id
    ...    ${second_expected_payload_file_path}
    ...    ${second_entity_id}
    ...    ${response_a.json()}


*** Keywords ***
Setup Initial Context Source Registrations

    ${entity_id}=    Generate Random Parking Entity Id
    Set Suite Variable    ${entity_id}
    ${second_entity_id}=    Generate Random Parking Entity Id
    Set Suite Variable    ${second_entity_id}
    Set Test Variable    ${first_entity_id}    urn:ngsi-ld:OffStreetParking:1
    Set Test Variable    ${second_entity_id}    urn:ngsi-ld:OffStreetParking:2

    ${response}=    Create Entity
    ...    ${first_entity_payload_filename}
    ...    ${entity_id}
    ...    ${first_entity_id}
    ...    broker_url=${broker_B_url}
    Check Response Status Code    201    ${response.status_code}

@@ -68,35 +78,28 @@ Setup Initial Context Source Registrations

    ${response}=    Create Entity
    ...    ${second_entity_payload_filename}
    ...    ${entity_id}
    ...    ${second_entity_id}
    ...    broker_url=${broker_C_url}
    Check Response Status Code    201    ${response.status_code}

    @{first_set}=    Create List
    ...    ${entity_id}
    ...    ${EMPTY}
    ...    ${inclusive_registration_payload_file_path}
    ...    inclusive
    ...    ${broker_B_url}
    ...    ${broker_A_url}

    @{second_set}=    Create List
    ...    ${second_entity_id}
    ...    ${inclusive_registration_payload_file_path}
    ...    inclusive
    ...    ${broker_B_url}
    ...    ${broker_A_url}

    @{third_set}=    Create List
    ...    ${entity_id}
    ...    ${EMPTY}
    ...    ${exclusive_registration_payload_file_path}
    ...    exclusive
    ...    ${broker_C_url}
    ...    ${broker_A_url}

    @{first_configuration}=    Create List    ${first_set}    ${second_set}    ${third_set}
    @{first_configuration}=    Create List    ${first_set}    ${second_set}
    Compose IOP Configuration    ${first_configuration}

Delete Entities And Delete Registrations
    @{broker_count}=    Create List    ${broker_A_url}    ${broker_B_url}    ${broker_C_url}
    @{entities_to_delete}=    Create List    ${entity_id}    ${second_entity_id}
    @{entities_to_delete}=    Create List    ${first_entity_id}    ${second_entity_id}
    Delete Registrations And Entities    ${broker_count}    ${entities_to_delete}
+77 −76
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@ Resource ${EXECDIR}/resources/IOPUtils/InteroperabilityUtils.resource
Test Setup          Setup Initial Context Source Registrations
Test Teardown       Delete Entities and Delete Registrations


*** Variables ***
${location_name_payload_filename}                       interoperability/offstreet-parking2-location-and-name.jsonld
${first_entity_no_location_payload_filename}            interoperability/offstreet-parking1-no-location.jsonld
@@ -16,107 +17,107 @@ ${second_full_entity_payload_filename} interoperability/offstreet
${inclusive_registration_payload_file_path}             csourceRegistrations/interoperability/context-source-registration-inclusive-2.jsonld
${first_redirect_registration_payload_file_path}        csourceRegistrations/interoperability/context-source-registration-redirect-2.jsonld
${second_redirect_registration_payload_file_path}       csourceRegistrations/interoperability/context-source-registration-redirect-3.jsonld
${broker_A_url}
${broker_B_url}
${broker_C_url}
${broker_D_url}
${broker_A_url}                                         ${EMPTY}
${broker_B_url}                                         ${EMPTY}
${broker_C_url}                                         ${EMPTY}
${broker_D_url}                                         ${EMPTY}


*** Test Cases ***
IOP_003_02_01 Query Entities Of Type OffstreetParking Via GET
    [Documentation]    Pre-conditions: no user context. Data on every broker. B contains OffStreetParking:1 without location and OffStreetParking:2 without location. C contains OffStreetParking:1 and OffStreetParking:2. D contains OffStreetParking:2 with location and name only.
    ...    Registrations established: Inclusive in A to B. Redirect in A to C. Redirect in A to D.
    [Tags]    since_v1.6.1    iop    cnf_02    4_3_3    additive-inclusive    proxy-redirect    4_3_6    5_7_2    6_4_3_1
    [Tags]
    ...    since_v1.6.1
    ...    iop
    ...    cnf_02
    ...    4_3_3
    ...    additive-inclusive
    ...    proxy-redirect
    ...    4_3_6
    ...    5_7_2
    ...    6_4_3_1

    # Agent queries all entities with type OffstreetParking in A and checks for a successful response not containing the name attribute.
    ${response}=    Query Entities    entity_types=OffstreetParking    broker_url=${broker_A_url}    context=${ngsild_test_suite_context}
    ${response}=    Query Entities
    ...    entity_types=OffStreetParking
    ...    broker_url=${broker_A_url}
    ...    context=${ngsild_test_suite_context}
    Check Response Status Code    200    ${response.status_code}
    @{entities_A}=    Set Variable   ${response.json()}
    ${first_payload}=    Get From List   ${entities_A}    0
    ${second_payload}=    Get From List   ${entities_A}    1
    Should Not Contain    ${first_payload}   name
    Should Not Contain    ${second_payload}    name

    #Agent queries all entities with type OffstreetParking in B, C and D
    ${response}=    Query Entities    entity_types=OffStreetParking    broker_url=${broker_B_url}    context=${ngsild_test_suite_context}
    @{entities_B}=    Set Variable    ${response.json()}
    ${first_B_payload}=    Get From List   ${entities_B}    0
    ${second_B_payload}=    Get From List   ${entities_B}    1

    ${response}=    Query Entities    entity_types=OffStreetParking    broker_url=${broker_C_url}    context=${ngsild_test_suite_context}
    @{entities_C}=    Set Variable    ${response.json()}
    ${C_payload}=    Get From List   ${entities_C}    0

    ${response}=    Query Entities    entity_types=OffStreetParking    broker_url=${broker_D_url}    context=${ngsild_test_suite_context}
    @{entities_D}=    Set Variable    ${response.json()}
    ${D_payload}=    Get From List   ${entities_D}    0
    
    #Agent checks that OffStreetParking:1 in A has the same availableSpotsNumber and totalSpotsNumber as the one in B and the same location attribute found in C. The OffStreetParking:2 entity in A contains the attributes of both OffStreetParking:2 availableSpotsNumber and totalSpotsNumber in C and the same location found in D.
    Should Be Equal    ${first_payload}[availableSpotsNumber]    ${first_b2_payload}[availableSpotsNumber]
    Should Be Equal    ${first_payload}[totalSpotsNumber]    ${first_b2_payload}[totalSpotsNumber]
    Should Be Equal    ${first_payload}[location]    ${b3_payload}[location]

    Should Be Equal    ${second_payload}[availableSpotsNumber]    ${second_B_payload}[availableSpotsNumber]
    Should Be Equal    ${second_payload}[totalSpotsNumber]    ${second_B_payload}[totalSpotsNumber]
    Should Be Equal    ${second_payload}[location]    ${D_payload}[location]
    ${entity_ids}=    Create List    ${first_entity_id}    ${second_entity_id}
    Check Response Body Containing Entities URIS set to    ${entity_ids}    ${response.json()}

    ${first_expected}=    Load Entity    ${first_entity_no_location_payload_filename}    ${first_entity_id}
    ${first_location_source}=    Load Entity    ${first_full_entity_payload_filename}    ${first_entity_id}
    Remove From Dictionary    ${first_expected}    @context    name
    Set To Dictionary    ${first_expected}    location=${first_location_source}[location]
    ${first_entity}=    Get Value From JSON    ${response.json()}    $[?(@.id=='${first_entity_id}')]
    Should Be Equal    ${first_entity}[0]    ${first_expected}

    ${second_expected}=    Load Entity    ${second_entity_no_location_payload_filename}    ${second_entity_id}
    ${second_location_source}=    Load Entity    ${location_name_payload_filename}    ${second_entity_id}
    Remove From Dictionary    ${second_expected}    @context    name
    Set To Dictionary    ${second_expected}    location=${second_location_source}[location]
    ${second_entity}=    Get Value From JSON    ${response.json()}    $[?(@.id=='${second_entity_id}')]
    Should Be Equal    ${second_entity}[0]    ${second_expected}


*** Keywords ***
Setup Initial Context Source Registrations
    Set Test Variable    ${first_entity_id}    urn:ngsi-ld:OffStreetParking:1
    Set Test Variable    ${second_entity_id}    urn:ngsi-ld:OffStreetParking:2

    ${entity_id}=    Generate Random Parking Entity Id
    Set Suite Variable    ${entity_id}
    ${second_entity_id}=    Generate Random Parking Entity Id
    Set Suite Variable    ${second_entity_id}

    ${response}=    Create Entity    ${first_entity_no_location_payload_filename}    ${entity_id}    broker_url=${broker_B_url}
    ${response}=    Create Entity
    ...    ${first_entity_no_location_payload_filename}
    ...    ${first_entity_id}
    ...    broker_url=${broker_B_url}
    Check Response Status Code    201    ${response.status_code}
    ${response}=    Create Entity    ${second_entity_no_location_payload_filename}    ${second_entity_id}    broker_url=${broker_B_url}
    ${response}=    Create Entity
    ...    ${second_entity_no_location_payload_filename}
    ...    ${second_entity_id}
    ...    broker_url=${broker_B_url}
    Check Response Status Code    201    ${response.status_code}
    ${response}=    Create Entity    ${first_full_entity_payload_filename}    ${entity_id}    broker_url=${broker_C_url}
    ${response}=    Create Entity
    ...    ${first_full_entity_payload_filename}
    ...    ${first_entity_id}
    ...    broker_url=${broker_C_url}
    Check Response Status Code    201    ${response.status_code}
    ${response}=    Create Entity    ${second_full_entity_payload_filename}    ${second_entity_id}    broker_url=${broker_C_url}
    ${response}=    Create Entity
    ...    ${second_full_entity_payload_filename}
    ...    ${second_entity_id}
    ...    broker_url=${broker_C_url}
    Check Response Status Code    201    ${response.status_code}
    ${response}=    Create Entity    ${location_name_payload_filename}    ${entity_id}    broker_url=${broker_D_url}
    ${response}=    Create Entity
    ...    ${location_name_payload_filename}
    ...    ${second_entity_id}
    ...    broker_url=${broker_D_url}
    Check Response Status Code    201    ${response.status_code}

    @{first_set}=    Create List
    ...    ${entity_id}
    ...    ${EMPTY}
    ...    ${inclusive_registration_payload_file_path}
    ...    inclusive
    ...    ${broker_B_url}
    ...    ${broker_A_url}

    @{second_set}=    Create List
    ...    ${second_entity_id}
    ...    ${inclusive_registration_payload_file_path}
    ...    inclusive
    ...    ${broker_C_url}
    ...    ${broker_A_url}

    @{third_set}=    Create List
    ...    ${entity_id}
    ...    ${EMPTY}
    ...    ${first_redirect_registration_payload_file_path}
    ...    redirect
    ...    ${broker_C_url}
    ...    ${broker_A_url}

    @{fourth_set}=    Create List
    ...    ${entity_id}
    ...    ${first_redirect_registration_payload_file_path}
    ...    redirect
    ...    ${broker_C_url}
    ...    ${broker_A_url}

    @{fifth_set}=    Create List
    ...    ${entity_id}
    @{third_set}=    Create List
    ...    ${EMPTY}
    ...    ${second_redirect_registration_payload_file_path}
    ...    redirect
    ...    ${broker_D_url}
    ...    ${broker_A_url}

    @{second_configuration}=    Create List    ${first_set}    ${second_set}    ${third_set}    ${fourth_set}    ${fifth_set}
    @{second_configuration}=    Create List    ${first_set}    ${second_set}    ${third_set}
    Compose IOP Configuration    ${second_configuration}

Delete Entities And Delete Registrations
    @{broker_count}=    Create List    ${broker_A_url}    ${broker_B_url}    ${broker_C_url}    ${broker_D_url}
    @{entities_to_delete}=    Create List    ${entity_id}    ${second_entity_id}
    @{entities_to_delete}=    Create List    ${first_entity_id}    ${second_entity_id}
    Delete Registrations And Entities    ${broker_count}    ${entities_to_delete}
+112 −71

File changed.

Preview size limit exceeded, changes collapsed.

+59 −47

File changed.

Preview size limit exceeded, changes collapsed.

Loading