From e7b7570b3df2e506e3ba036caa8cbae379416db6 Mon Sep 17 00:00:00 2001 From: Julien Perrochet Date: Mon, 11 Mar 2024 11:03:47 +0100 Subject: [PATCH] DSS0210 OIR Awareness (key must be correct) --- monitoring/prober/infrastructure.py | 2 +- .../dev/f3548_self_contained.yaml | 1 + .../configurations/dev/message_signing.yaml | 1 + .../scenarios/astm/utm/dss/__init__.py | 1 + .../dss/fragments/oir/crud/create_conflict.md | 23 + .../dss/fragments/oir/crud/update_conflict.md | 23 + .../utm/dss/op_intent_ref_key_validation.md | 144 ++++++ .../utm/dss/op_intent_ref_key_validation.py | 451 ++++++++++++++++++ .../suites/astm/utm/dss_probing.md | 35 +- .../suites/astm/utm/dss_probing.yaml | 8 + .../uss_qualifier/suites/astm/utm/f3548_21.md | 18 +- .../suites/astm/utm/f3548_21.yaml | 3 + .../suites/faa/uft/message_signing.md | 18 +- .../suites/faa/uft/message_signing.yaml | 2 + .../suites/interuss/dss/all_tests.md | 18 +- .../suites/interuss/dss/all_tests.yaml | 2 + .../suites/uspace/flight_auth.md | 18 +- .../suites/uspace/flight_auth.yaml | 2 + .../suites/uspace/required_services.md | 18 +- .../suites/uspace/required_services.yaml | 1 + 20 files changed, 756 insertions(+), 33 deletions(-) create mode 100644 monitoring/uss_qualifier/scenarios/astm/utm/dss/fragments/oir/crud/create_conflict.md create mode 100644 monitoring/uss_qualifier/scenarios/astm/utm/dss/fragments/oir/crud/update_conflict.md create mode 100644 monitoring/uss_qualifier/scenarios/astm/utm/dss/op_intent_ref_key_validation.md create mode 100644 monitoring/uss_qualifier/scenarios/astm/utm/dss/op_intent_ref_key_validation.py diff --git a/monitoring/prober/infrastructure.py b/monitoring/prober/infrastructure.py index 95e3aac299..cb4045a0fc 100644 --- a/monitoring/prober/infrastructure.py +++ b/monitoring/prober/infrastructure.py @@ -100,7 +100,7 @@ def wrapper_default_scope(*args, **kwargs): resource_type_code_descriptions: Dict[ResourceType, str] = {} -# Next code: 381 +# Next code: 385 def register_resource_type(code: int, description: str) -> ResourceType: """Register that the specified code refers to the described resource. diff --git a/monitoring/uss_qualifier/configurations/dev/f3548_self_contained.yaml b/monitoring/uss_qualifier/configurations/dev/f3548_self_contained.yaml index c5a5b232fd..067e7f1c76 100644 --- a/monitoring/uss_qualifier/configurations/dev/f3548_self_contained.yaml +++ b/monitoring/uss_qualifier/configurations/dev/f3548_self_contained.yaml @@ -14,6 +14,7 @@ v1: # Mapping of to resources: id_generator: id_generator + utm_client_identity: utm_client_identity test_env_version_providers: test_env_version_providers prod_env_version_providers: prod_env_version_providers flight_planners: flight_planners diff --git a/monitoring/uss_qualifier/configurations/dev/message_signing.yaml b/monitoring/uss_qualifier/configurations/dev/message_signing.yaml index 56ccd5028b..f59feedc10 100644 --- a/monitoring/uss_qualifier/configurations/dev/message_signing.yaml +++ b/monitoring/uss_qualifier/configurations/dev/message_signing.yaml @@ -59,6 +59,7 @@ v1: dss: scd_dss dss_instances: scd_dss_instances id_generator: id_generator + utm_client_identity: utm_client_identity second_utm_auth: second_utm_auth planning_area: che_planning_area problematically_big_area: che_problematically_big_area diff --git a/monitoring/uss_qualifier/scenarios/astm/utm/dss/__init__.py b/monitoring/uss_qualifier/scenarios/astm/utm/dss/__init__.py index 47a422e5d9..6a588d14b3 100644 --- a/monitoring/uss_qualifier/scenarios/astm/utm/dss/__init__.py +++ b/monitoring/uss_qualifier/scenarios/astm/utm/dss/__init__.py @@ -4,3 +4,4 @@ from .op_intent_ref_access_control import OpIntentReferenceAccessControl from .dss_interoperability import DSSInteroperability from .report import Report +from .op_intent_ref_key_validation import OIRKeyValidation diff --git a/monitoring/uss_qualifier/scenarios/astm/utm/dss/fragments/oir/crud/create_conflict.md b/monitoring/uss_qualifier/scenarios/astm/utm/dss/fragments/oir/crud/create_conflict.md new file mode 100644 index 0000000000..f3642e568f --- /dev/null +++ b/monitoring/uss_qualifier/scenarios/astm/utm/dss/fragments/oir/crud/create_conflict.md @@ -0,0 +1,23 @@ +# Conflict on operational intent reference creation test step fragment + +This test step fragment validates that requests for operational intent reference creation that +don't show that they have been de-conflicted are rejected with the proper error. + +## 🛑 Create operational intent reference with missing OVN fails check + +If the DSS allows the creation of an operational intent reference that is missing the required OVNs for other entities that exist in its geo-temporal vicinity, +it is in violation of **[astm.f3548.v21.DSS0005,1](../../../../../../../requirements/astm/f3548/v21.md)** and **[astm.f3548.v21.DSS0210,A2-7-2,2a](../../../../../../../requirements/astm/f3548/v21.md)** + +## 🛑 Failure response due to conflict has proper format check + +The DSS is expected to return a `HTTP 409` error response when the creation of an operational intent reference fails due to a conflict. +This response is expected to conform to the OpenAPI spec that is part of **[astm.f3548.v21.DSS0005,1](../../../../../../../requirements/astm/f3548/v21.md)**. + +Should this not be the case, then the DSS is in violation of the aforementioned requirement. + +## 🛑 Failure response due to conflict contains conflicting OIRs check + +If the DSS returns a `HTTP 409` error response due to a conflict, and the response body contains a `missing_operational_intents` field, +this field is expected to contain the conflicting OVNs. + +If the field exists but does not contain the conflicting OVNs, then the DSS is in violation of **[astm.f3548.v21.DSS0005,1](../../../../../../../requirements/astm/f3548/v21.md)**. diff --git a/monitoring/uss_qualifier/scenarios/astm/utm/dss/fragments/oir/crud/update_conflict.md b/monitoring/uss_qualifier/scenarios/astm/utm/dss/fragments/oir/crud/update_conflict.md new file mode 100644 index 0000000000..42c3c491db --- /dev/null +++ b/monitoring/uss_qualifier/scenarios/astm/utm/dss/fragments/oir/crud/update_conflict.md @@ -0,0 +1,23 @@ +# Conflict on operational intent reference update test step fragment + +This test step fragment validates that requests for operational intent references updates that +don't show that they have been de-conflicted are rejected with the proper error. + +## 🛑 Mutate operational intent reference with missing OVN fails check + +If the DSS allows the mutation of an operational intent reference that is missing the required OVNs for other entities that exist in its geo-temporal vicinity, +it is in violation of **[astm.f3548.v21.DSS0005,1](../../../../../../../requirements/astm/f3548/v21.md)** and **[astm.f3548.v21.DSS0210,A2-7-2,2b](../../../../../../../requirements/astm/f3548/v21.md)** + +## 🛑 Failure response due to conflict has proper format check + +The DSS is expected to return a `HTTP 409` error response when the creation of an operational intent reference fails due to a conflict. +This response is expected to conform to the OpenAPI spec that is part of **[astm.f3548.v21.DSS0005,1](../../../../../../../requirements/astm/f3548/v21.md)**. + +Should this not be the case, then the DSS is in violation of the aforementioned requirement. + +## 🛑 Failure response due to conflict contains conflicting OIRs check + +If the DSS returns a `HTTP 409` error response due to a conflict, and the response body contains a `missing_operational_intents` field, +this field is expected to contain the conflicting OVNs. + +If the field exists but does not contain the conflicting OVNs, then the DSS is in violation of **[astm.f3548.v21.DSS0005,1](../../../../../../../requirements/astm/f3548/v21.md)**. diff --git a/monitoring/uss_qualifier/scenarios/astm/utm/dss/op_intent_ref_key_validation.md b/monitoring/uss_qualifier/scenarios/astm/utm/dss/op_intent_ref_key_validation.md new file mode 100644 index 0000000000..3f37478184 --- /dev/null +++ b/monitoring/uss_qualifier/scenarios/astm/utm/dss/op_intent_ref_key_validation.md @@ -0,0 +1,144 @@ +# ASTM SCD DSS: Operational Intent Reference Key Validation test scenario + +## Overview + +Verifies that a DSS requires from a client creating or updating operational intent references that they +provide all OVNs for all currently relevant entities. + +## Resources + +### dss + +[`DSSInstanceResource`](../../../../resources/astm/f3548/v21/dss.py) the DSS instance through which entities are created, modified and deleted. + +### id_generator + +[`IDGeneratorResource`](../../../../resources/interuss/id_generator.py) providing the base entity ID for this scenario. + +### client_identity + +[`ClientIdentityResource`](../../../../resources/communications/client_identity.py) the client identity that will be used to create and update operational intent references. + +### planning_area + +[`PlanningAreaResource`](../../../../resources/astm/f3548/v21/planning_area.py) describes the 3D volume in which operational intent references will be created. + +## Setup test case + +### [Ensure clean workspace test step](./clean_workspace.md) + +This step ensures that no entities with the known test IDs exists in the DSS. + +## Key validation on creation test case + +This test case will create multiple operational intent references and verify that the `key` field +of the parameters to create or update an operational intent reference is properly validated. + +That is: the DSS should require that the client provides the OVNs for each entity that is in the vicinity, +both geographically and temporally, of the client's operational intent reference. + +### Create first OIR test step + +This step creates one operational intent references. As no other operational intent reference is present, +the `key` field may remain empty. + +#### 🛑 First operational intent reference in area creation query succeeds check + +With no potentially conflicting entity present, the DSS is expected to allow the creation of an operational intent without +the client specifying any OVN in the `key` field. + +If the DSS rejects a well-formed request to create the operational intent reference, it is in violation of **[astm.f3548.v21.DSS0005,1](../../../../requirements/astm/f3548/v21.md)**. + +### Create second non-overlapping OIR test step + +This step creates a second operational intent references that does not overlap in time with the first, and +should therefore not require any entry in the `key` field. + +#### 🛑 Second, non-overlapping operational intent reference creation succeeds check + +With a single existing OIR in the area that is not overlapping in time, the DSS is expected to allow the creation of an operational intent without +the client specifying any OVN in the `key` field. + +If the DSS rejects a well-formed request to create the operational intent reference, it is in violation of **[astm.f3548.v21.DSS0005,1](../../../../requirements/astm/f3548/v21.md)**. + +### Attempt OIR creation overlapping with first OIR test step + +This test step will attempt to create an operational intent reference that intersects with the first of the previously created OIR, +and expect the DSS to require its OVN to be provided in the `key` field. + +This step will validate the response body for the `HTTP 409` error response from the DSS when it contains the optional `missing_operational_intents` field. + +#### [Non de-conflicted request fails](fragments/oir/crud/create_conflict.md) + +Checks that an attempt to create an OIR without specifying the OVN of the already existing and overlapping OIR fails. + +### Attempt OIR creation overlapping with second OIR test step + +This test step will attempt to create an operational intent reference that intersects with the second of the previously created OIR, +and expect the DSS to require its OVN to be provided in the `key` field. + +This step will validate the response body for the `HTTP 409` error response from the DSS when it contains the optional `missing_operational_intents` field. + +#### [Non de-conflicted request fails](fragments/oir/crud/create_conflict.md) + +Checks that an attempt to create an OIR without specifying the OVN of the already existing and overlapping OIR fails. + +### Attempt OIR creation overlapping with both OIRs test step + +This test step will attempt to create an operational intent reference that intersects with both of the previously created OIRs, +and expect the DSS to require their OVNs to be provided in the `key` field. + +This step will validate the response body for the `HTTP 409` error response from the DSS when it contains the optional `missing_operational_intents` field. + +#### [Non de-conflicted creation request fails](fragments/oir/crud/create_conflict.md) + +Checks that an attempt to create an OIR without specifying the OVNs of the already existing and overlapping OIRs fails. + +### Attempt valid OIR creation overlapping with both OIRs test step + +This test step will attempt to create an operational intent reference that intersects with both of the previously created OIRs, +while providing the required OVNs in the `key` field. + +After this test step succeeds, three OIRs are expected to exist in the DSS, with one intersecting with the two others. + +#### 🛑 Create operational intent reference with proper OVNs succeeds check + +If the DSS prevents the creation of an operational intent reference that is providing all required OVNs for other entities that exist in its geo-temporal vicinity, +it is in violation of **[astm.f3548.v21.DSS0005,1](../../../../requirements/astm/f3548/v21.md)**. + +## Key validation on mutation test case + +This test case will update multiple operational intent references and verify that the `key` field +of the parameters to create or update an operational intent reference is properly validated. + +That is: the DSS should require that the client provides the OVNs for each entity that is in the vicinity, +both geographically and temporally, of the client's operational intent reference. + +### Attempt mutation with both OVNs missing test step + +This test step will attempt to mutate the third previously created operational intent reference so that it keeps overlapping with the others, +while omitting their OVNs in the `key` field. + +The expectation is that the DSS will require the two missing OVNs. + +#### [Non de-conflicted mutation request fails](fragments/oir/crud/update_conflict.md) + +### Attempt mutation with first OVN missing test step + +This test step will attempt to mutate the third previously created operational intent reference so that it keeps overlapping with the others, +while omitting the first OVN in the `key` field. + +The expectation is that the DSS will require the missing OVN. + +#### [Non de-conflicted mutation request fails](fragments/oir/crud/update_conflict.md) + +### Attempt mutation to overlap with the first OIR test step + +This test step will attempt to mutate the third previously created operational intent reference so that it overlaps with the first one, +while omitting the first OVN in the `key` field. + +The expectation is that the DSS will require the missing OVN. + +#### [Non de-conflicted mutation request fails](fragments/oir/crud/update_conflict.md) + +## [Cleanup](./clean_workspace.md) diff --git a/monitoring/uss_qualifier/scenarios/astm/utm/dss/op_intent_ref_key_validation.py b/monitoring/uss_qualifier/scenarios/astm/utm/dss/op_intent_ref_key_validation.py new file mode 100644 index 0000000000..9ffb9c1df3 --- /dev/null +++ b/monitoring/uss_qualifier/scenarios/astm/utm/dss/op_intent_ref_key_validation.py @@ -0,0 +1,451 @@ +from datetime import datetime, timedelta +from typing import Dict, List + +from uas_standards.astm.f3548.v21.api import ( + EntityID, + OperationalIntentReference, + OperationalIntentState, + AirspaceConflictResponse, +) +from uas_standards.astm.f3548.v21.constants import Scope + +from monitoring.monitorlib import fetch, schema_validation +from monitoring.monitorlib.fetch import QueryError +from monitoring.monitorlib.geotemporal import Volume4D +from monitoring.monitorlib.schema_validation import F3548_21 +from monitoring.prober.infrastructure import register_resource_type +from monitoring.uss_qualifier.resources.astm.f3548.v21 import PlanningAreaResource +from monitoring.uss_qualifier.resources.astm.f3548.v21.dss import ( + DSSInstanceResource, + DSSInstance, +) +from monitoring.uss_qualifier.resources.communications import ClientIdentityResource +from monitoring.uss_qualifier.resources.interuss.id_generator import IDGeneratorResource +from monitoring.uss_qualifier.scenarios.astm.utm.dss import test_step_fragments +from monitoring.uss_qualifier.scenarios.scenario import ( + TestScenario, + PendingCheck, +) +from monitoring.uss_qualifier.suites.suite import ExecutionContext + + +class OIRKeyValidation(TestScenario): + """ + A scenario that checks that Operational Intent references cannot be created or updated + if the client does not provide all relevant OVNs in the key field. + + Note that this currently only uses Operational intents: constraint references + will be added at a later stage. + """ + + # We will be using three IDs for the OIRs + OIR_TYPES = [ + register_resource_type(382, "Operational Intent Reference, starting now"), + register_resource_type( + 383, "Operational Intent Reference, non-overlapping with the previous one" + ), + register_resource_type( + 384, "Operational Intent Reference, overlapping with the two previous ones" + ), + ] + + _dss: DSSInstance + + _oir_ids: List[EntityID] + + # Keep track of the current OIR state + _current_oirs: Dict[EntityID, OperationalIntentReference] + + def __init__( + self, + dss: DSSInstanceResource, + id_generator: IDGeneratorResource, + client_identity: ClientIdentityResource, + planning_area: PlanningAreaResource, + ): + """ + Args: + dss: dss to test + id_generator: will let us generate specific identifiers + client_identity: Provides the identity of the client that will be used to create the OIRs + planning_area: An Area to use for the tests. It should be an area for which the DSS is responsible, + but has no other requirements. + """ + super().__init__() + scopes = { + Scope.StrategicCoordination: "create and delete operational intent references" + } + # This is an UTMClientSession + self._dss = dss.get_instance(scopes) + self._pid = [self._dss.participant_id] + + self._oir_ids = [id_generator.id_factory.make_id(t) for t in self.OIR_TYPES] + + self._expected_manager = client_identity.subject() + + self._planning_area = planning_area.specification + + self._planning_area_volume4d = Volume4D( + volume=self._planning_area.volume, + ) + + def run(self, context: ExecutionContext): + self.begin_test_scenario(context) + self._setup_case() + + self.begin_test_case("Key validation on creation") + self._steps_create_non_overlapping_oirs() + self._steps_attempt_create_overlapping_oir() + self.end_test_case() + + self.begin_test_case("Key validation on mutation") + self._steps_attempt_mutation_to_cause_overlap() + self.end_test_case() + + self.end_test_scenario() + + def _steps_create_non_overlapping_oirs(self): + """Creates two non-overlapping OIRs. They use the same planning area but are separated by time.""" + + # First OIR starts in the recent past and extends 20 minutes into the future + first_oir_params = self._planning_area.get_new_operational_intent_ref_params( + key=[], + state=OperationalIntentState.Accepted, + uss_base_url=self._planning_area.base_url, + time_start=datetime.now() - timedelta(seconds=10), + time_end=datetime.now() + timedelta(minutes=20), + subscription_id=None, + ) + + # The second OIR will be for the same area, but starting one hour after the first one ends + second_oir_params = self._planning_area.get_new_operational_intent_ref_params( + key=[], + state=OperationalIntentState.Accepted, + uss_base_url=self._planning_area.base_url, + time_start=datetime.now() + timedelta(hours=1, minutes=20), + time_end=datetime.now() + timedelta(hours=1, minutes=40), + subscription_id=None, + ) + + self.begin_test_step("Create first OIR") + with self.check( + "First operational intent reference in area creation query succeeds", + self._pid, + ) as check: + try: + first_oir, subs, query = self._dss.put_op_intent( + extents=first_oir_params.extents, + key=first_oir_params.key, + state=first_oir_params.state, + base_url=first_oir_params.uss_base_url, + oi_id=self._oir_ids[0], + ) + self.record_query(query) + self._current_oirs[first_oir.id] = first_oir + except QueryError as qe: + self.record_queries(qe.queries) + check.record_failed( + summary="Could not create first operational intent reference", + details=f"Failed to create first operational intent reference with error code {qe.cause_status_code}: {qe.msg}", + query_timestamps=qe.query_timestamps, + ) + self.end_test_step() + self.begin_test_step("Create second non-overlapping OIR") + with self.check( + "Second, non-overlapping operational intent reference creation succeeds", + self._pid, + ) as check: + try: + second_oir, subs, query = self._dss.put_op_intent( + extents=second_oir_params.extents, + key=second_oir_params.key, + state=second_oir_params.state, + base_url=second_oir_params.uss_base_url, + oi_id=self._oir_ids[1], + ) + self.record_query(query) + self._current_oirs[second_oir.id] = second_oir + except QueryError as qe: + self.record_queries(qe.queries) + check.record_failed( + summary="Could not create second non-overlapping operational intent reference", + details=f"Failed to create second operational intent reference with error code {qe.cause_status_code}: {qe.msg}", + query_timestamps=qe.query_timestamps, + ) + self.end_test_step() + + def _attempt_creation_expect_conflict( + self, oir_id: EntityID, oir_params, conflicting_ids: List[EntityID] + ): + with self.check( + "Create operational intent reference with missing OVN fails", self._pid + ) as check: + try: + _, subs, q = self._dss.put_op_intent( + extents=oir_params.extents, + key=oir_params.key, + state=oir_params.state, + base_url=oir_params.uss_base_url, + oi_id=oir_id, + ) + self.record_query(q) + check.record_failed( + summary="Operational intent reference with OVN missing in key was created", + details=f"Was expecting an HTTP 409 response because of a conflict with OIR {conflicting_ids}, but got a successful response ({q.status_code}) instead", + query_timestamps=[q.request.timestamp], + ) + return + except QueryError as qe: + self.record_queries(qe.queries) + _expect_conflict_code(check, conflicting_ids, qe.cause) + conflicting_query = qe.cause + + self._validate_conflict_response(conflicting_ids, conflicting_query) + + def _attempt_update_expect_conflict( + self, + oir_id: EntityID, + oir_params, + conflicting_ids: List[EntityID], + ovn: EntityID, + ): + with self.check( + "Mutate operational intent reference with missing OVN fails", self._pid + ) as check: + try: + _, subs, q = self._dss.put_op_intent( + extents=oir_params.extents, + key=oir_params.key, + state=oir_params.state, + base_url=oir_params.uss_base_url, + oi_id=oir_id, + ovn=ovn, + ) + self.record_query(q) + check.record_failed( + summary="Operational intent reference with OVN missing in key was mutated", + details=f"Was expecting an HTTP 409 response because of a conflict with OIR {conflicting_ids}, but got a successful response ({q.status_code}) instead", + query_timestamps=[q.request.timestamp], + ) + return + except QueryError as qe: + self.record_queries(qe.queries) + _expect_conflict_code(check, conflicting_ids, qe.cause) + conflicting_query = qe.cause + + self._validate_conflict_response(conflicting_ids, conflicting_query) + + def _steps_attempt_create_overlapping_oir(self): + first_oir = self._current_oirs[self._oir_ids[0]] + second_oir = self._current_oirs[self._oir_ids[1]] + + # ID for the next OIR we will attempt to create + third_oir_id = self._oir_ids[2] + + conflict_first = self._planning_area.get_new_operational_intent_ref_params( + key=[], + state=OperationalIntentState.Accepted, + uss_base_url=self._planning_area.base_url, + time_start=first_oir.time_start.value.datetime, + time_end=first_oir.time_end.value.datetime, + subscription_id=None, + ) + + self.begin_test_step("Attempt OIR creation overlapping with first OIR") + self._attempt_creation_expect_conflict( + third_oir_id, conflict_first, [first_oir.id] + ) + self.end_test_step() + + conflict_second = self._planning_area.get_new_operational_intent_ref_params( + key=[], + state=OperationalIntentState.Accepted, + uss_base_url=self._planning_area.base_url, + time_start=second_oir.time_start.value.datetime, + time_end=second_oir.time_end.value.datetime, + subscription_id=None, + ) + + self.begin_test_step("Attempt OIR creation overlapping with second OIR") + self._attempt_creation_expect_conflict( + third_oir_id, conflict_second, [second_oir.id] + ) + self.end_test_step() + + conflict_both = self._planning_area.get_new_operational_intent_ref_params( + key=[], + state=OperationalIntentState.Accepted, + uss_base_url=self._planning_area.base_url, + time_start=first_oir.time_start.value.datetime, + time_end=second_oir.time_end.value.datetime, + subscription_id=None, + ) + + self.begin_test_step("Attempt OIR creation overlapping with both OIRs") + self._attempt_creation_expect_conflict( + third_oir_id, conflict_both, [first_oir.id, second_oir.id] + ) + self.end_test_step() + + # Finally, we create the third OIR with the correct key, so we may try to mutate it at the next step + conflict_both.key = [first_oir.ovn, second_oir.ovn] + + self.begin_test_step("Attempt valid OIR creation overlapping with both OIRs") + with self.check( + "Create operational intent reference with proper OVNs succeeds", self._pid + ) as check: + try: + third_oir, subs, q = self._dss.put_op_intent( + extents=conflict_both.extents, + key=conflict_both.key, + state=conflict_both.state, + base_url=conflict_both.uss_base_url, + oi_id=third_oir_id, + ) + self.record_query(q) + except QueryError as qe: + self.record_queries(qe.queries) + check.record_failed( + summary="Could not create operational intent reference with valid parameters", + details=f"Failed to create third operational intent reference with error code {qe.cause_status_code}: {qe.msg}", + query_timestamps=qe.query_timestamps, + ) + return + self.end_test_step() + + self._current_oirs[third_oir.id] = third_oir + + def _validate_conflict_response( + self, conflicting_ids: List[EntityID], query: fetch.Query + ): + """Checks that the conflict response body is as specified. + If the missing_operational_intents field is defined, its content is checked against the list of passed conflicting ids.""" + + with self.check( + "Failure response due to conflict has proper format", self._pid + ) as check: + errors = schema_validation.validate( + F3548_21.OpenAPIPath, + F3548_21.AirspaceConflictResponse, + query.response.json, + ) + if errors: + check.record_failed( + summary="Conflict response body did not match OpenAPI schema", + details=f"The following errors were found: {errors}", + query_timestamps=[query.request.timestamp], + ) + + # Expected to succeed if the previous check passed + parsed_response = query.parse_json_result(AirspaceConflictResponse) + + # The OpenAPI spec does not seem to force implementations to return the missing operational intents: + # hence we only validate the content of that field if it is provided + if "missing_operational_intents" in parsed_response: + with self.check( + "Failure response due to conflict contains conflicting OIRs", self._pid + ) as check: + missing_oir_ids = [ + o.id for o in parsed_response.missing_operational_intents + ] + for expected_conflict_id in conflicting_ids: + if expected_conflict_id not in missing_oir_ids: + check.record_failed( + summary="Expected conflicting OIR ID not in conflict response", + details=f"Expected to find OIR ID {expected_conflict_id} in the missing operational intents list, but it was not found", + query_timestamps=[query.request.timestamp], + ) + + def _steps_attempt_mutation_to_cause_overlap(self): + first_oir = self._current_oirs[self._oir_ids[0]] + second_oir = self._current_oirs[self._oir_ids[1]] + # We try to change the base URL, all else remains equal + oir_to_mutate = self._current_oirs[self._oir_ids[2]] + change_base_url = self._planning_area.get_new_operational_intent_ref_params( + key=[], + state=oir_to_mutate.state, + uss_base_url=oir_to_mutate.uss_base_url + "/mutated", + time_start=oir_to_mutate.time_start.value.datetime, + time_end=oir_to_mutate.time_end.value.datetime, + subscription_id=None, + ) + + # If both OVns are missing: + self.begin_test_step("Attempt mutation with both OVNs missing") + self._attempt_update_expect_conflict( + oir_to_mutate.id, + change_base_url, + [first_oir.id, second_oir.id], + oir_to_mutate.ovn, + ) + self.end_test_step() + + # If the first OVN is missing: + self.begin_test_step("Attempt mutation with first OVN missing") + change_base_url.key = [second_oir.ovn] + self._attempt_update_expect_conflict( + oir_to_mutate.id, change_base_url, [first_oir.id], oir_to_mutate.ovn + ) + self.end_test_step() + + # Try to overlap only with the first one + conflict_with_first = self._planning_area.get_new_operational_intent_ref_params( + key=[], + state=oir_to_mutate.state, + uss_base_url=oir_to_mutate.uss_base_url, + time_start=first_oir.time_start.value.datetime, + time_end=first_oir.time_end.value.datetime, + subscription_id=None, + ) + + # We expect to conflict only with the first one + self.begin_test_step("Attempt mutation to overlap with the first OIR") + self._attempt_update_expect_conflict( + oir_to_mutate.id, conflict_with_first, [first_oir.id], oir_to_mutate.ovn + ) + self.end_test_step() + + def _setup_case(self): + self.begin_test_case("Setup") + # Multiple runs of the scenario seem to rely on the same instance of it: + # thus we need to reset the state of the scenario before running it. + self._current_oirs = {} + self.begin_test_step("Ensure clean workspace") + self._ensure_clean_workspace_step() + self.end_test_step() + self.end_test_case() + + def _ensure_clean_workspace_step(self): + + # Delete any active OIR we might own + test_step_fragments.cleanup_active_oirs( + self, + self._dss, + self._planning_area_volume4d.to_f3548v21(), + self._expected_manager, + ) + + # Make sure the OIR IDs we are going to use are available + for oir_id in self._oir_ids: + test_step_fragments.cleanup_op_intent(self, self._dss, oir_id) + + # Also drop any subs we might own and that could interfere + test_step_fragments.cleanup_active_subs( + self, self._dss, self._planning_area_volume4d.to_f3548v21() + ) + + def cleanup(self): + self.begin_cleanup() + self._ensure_clean_workspace_step() + self.end_cleanup() + + +def _expect_conflict_code( + check: PendingCheck, conflicting_ids: List[EntityID], query: fetch.Query +): + if query.status_code != 409: + check.record_failed( + summary="OIR Creation failed for the unexpected reason", + details=f"Was expecting an HTTP 409 response because of a conflict with OIR {conflicting_ids}, but got a {query.status_code} instead", + query_timestamps=[query.request.timestamp], + ) diff --git a/monitoring/uss_qualifier/suites/astm/utm/dss_probing.md b/monitoring/uss_qualifier/suites/astm/utm/dss_probing.md index aa77032f43..125ada8d33 100644 --- a/monitoring/uss_qualifier/suites/astm/utm/dss_probing.md +++ b/monitoring/uss_qualifier/suites/astm/utm/dss_probing.md @@ -4,14 +4,15 @@ ## [Actions](../../README.md#actions) -1. Scenario: [ASTM SCD DSS: Interfaces authentication](../../../scenarios/astm/utm/dss/authentication/authentication_validation.md) ([`scenarios.astm.utm.dss.authentication.AuthenticationValidation`](../../../scenarios/astm/utm/dss/authentication/authentication_validation.py)) -2. Scenario: [ASTM SCD DSS: Subscription Simple](../../../scenarios/astm/utm/dss/subscription_simple.md) ([`scenarios.astm.utm.dss.SubscriptionSimple`](../../../scenarios/astm/utm/dss/subscription_simple.py)) -3. Scenario: [ASTM SCD DSS: Subscription Validation](../../../scenarios/astm/utm/dss/subscription_validation.md) ([`scenarios.astm.utm.dss.SubscriptionValidation`](../../../scenarios/astm/utm/dss/subscription_validation.py)) -4. Scenario: [ASTM F3548-21 UTM DSS Operational Intent Reference Access Control](../../../scenarios/astm/utm/dss/op_intent_ref_access_control.md) ([`scenarios.astm.utm.dss.OpIntentReferenceAccessControl`](../../../scenarios/astm/utm/dss/op_intent_ref_access_control.py)) -5. Scenario: [ASTM F3548-21 UTM DSS interoperability](../../../scenarios/astm/utm/dss/dss_interoperability.md) ([`scenarios.astm.utm.dss.DSSInteroperability`](../../../scenarios/astm/utm/dss/dss_interoperability.py)) -6. Scenario: [ASTM SCD DSS: Subscription Synchronization](../../../scenarios/astm/utm/dss/synchronization/subscription_synchronization.md) ([`scenarios.astm.utm.dss.synchronization.SubscriptionSynchronization`](../../../scenarios/astm/utm/dss/synchronization/subscription_synchronization.py)) -7. Scenario: [ASTM UTM DSS: Direct CRDB access](../../../scenarios/astm/utm/dss/crdb_access.md) ([`scenarios.astm.utm.dss.CRDBAccess`](../../../scenarios/astm/utm/dss/crdb_access.py)) -8. Scenario: [ASTM SCD DSS: Report](../../../scenarios/astm/utm/dss/report.md) ([`scenarios.astm.utm.dss.Report`](../../../scenarios/astm/utm/dss/report.py)) +1. Scenario: [ASTM SCD DSS: Operational Intent Reference Key Validation](../../../scenarios/astm/utm/dss/op_intent_ref_key_validation.md) ([`scenarios.astm.utm.dss.OIRKeyValidation`](../../../scenarios/astm/utm/dss/op_intent_ref_key_validation.py)) +2. Scenario: [ASTM SCD DSS: Interfaces authentication](../../../scenarios/astm/utm/dss/authentication/authentication_validation.md) ([`scenarios.astm.utm.dss.authentication.AuthenticationValidation`](../../../scenarios/astm/utm/dss/authentication/authentication_validation.py)) +3. Scenario: [ASTM SCD DSS: Subscription Simple](../../../scenarios/astm/utm/dss/subscription_simple.md) ([`scenarios.astm.utm.dss.SubscriptionSimple`](../../../scenarios/astm/utm/dss/subscription_simple.py)) +4. Scenario: [ASTM SCD DSS: Subscription Validation](../../../scenarios/astm/utm/dss/subscription_validation.md) ([`scenarios.astm.utm.dss.SubscriptionValidation`](../../../scenarios/astm/utm/dss/subscription_validation.py)) +5. Scenario: [ASTM F3548-21 UTM DSS Operational Intent Reference Access Control](../../../scenarios/astm/utm/dss/op_intent_ref_access_control.md) ([`scenarios.astm.utm.dss.OpIntentReferenceAccessControl`](../../../scenarios/astm/utm/dss/op_intent_ref_access_control.py)) +6. Scenario: [ASTM F3548-21 UTM DSS interoperability](../../../scenarios/astm/utm/dss/dss_interoperability.md) ([`scenarios.astm.utm.dss.DSSInteroperability`](../../../scenarios/astm/utm/dss/dss_interoperability.py)) +7. Scenario: [ASTM SCD DSS: Subscription Synchronization](../../../scenarios/astm/utm/dss/synchronization/subscription_synchronization.md) ([`scenarios.astm.utm.dss.synchronization.SubscriptionSynchronization`](../../../scenarios/astm/utm/dss/synchronization/subscription_synchronization.py)) +8. Scenario: [ASTM UTM DSS: Direct CRDB access](../../../scenarios/astm/utm/dss/crdb_access.md) ([`scenarios.astm.utm.dss.CRDBAccess`](../../../scenarios/astm/utm/dss/crdb_access.py)) +9. Scenario: [ASTM SCD DSS: Report](../../../scenarios/astm/utm/dss/report.md) ([`scenarios.astm.utm.dss.Report`](../../../scenarios/astm/utm/dss/report.py)) ## [Checked requirements](../../README.md#checked-requirements) @@ -23,20 +24,20 @@ Checked in - astm
.f3548
.v21
+ astm
.f3548
.v21
DSS0005,1 Implemented - ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation + ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation DSS0005,2 Implemented - ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation + ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation DSS0005,5 Implemented - ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation + ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation DSS0015 @@ -108,6 +109,16 @@ Implemented ASTM SCD DSS: Subscription Synchronization + + DSS0210,A2-7-2,2a + Implemented + ASTM SCD DSS: Operational Intent Reference Key Validation + + + DSS0210,A2-7-2,2b + Implemented + ASTM SCD DSS: Operational Intent Reference Key Validation + DSS0210,A2-7-2,7 Implemented diff --git a/monitoring/uss_qualifier/suites/astm/utm/dss_probing.yaml b/monitoring/uss_qualifier/suites/astm/utm/dss_probing.yaml index f91516fd35..0a2c935513 100644 --- a/monitoring/uss_qualifier/suites/astm/utm/dss_probing.yaml +++ b/monitoring/uss_qualifier/suites/astm/utm/dss_probing.yaml @@ -1,6 +1,7 @@ name: DSS testing for ASTM NetRID F3548-21 resources: dss: resources.astm.f3548.v21.DSSInstanceResource + utm_client_identity: resources.communications.ClientIdentityResource second_utm_auth: resources.communications.AuthAdapterResource? all_dss_instances: resources.astm.f3548.v21.DSSInstancesResource? dss_crdb_cluster: resources.interuss.crdb.CockroachDBClusterResource? @@ -9,6 +10,13 @@ resources: planning_area: resources.astm.f3548.v21.PlanningAreaResource problematically_big_area: resources.VerticesResource actions: + - test_scenario: + scenario_type: scenarios.astm.utm.dss.OIRKeyValidation + resources: + dss: dss + id_generator: id_generator + client_identity: utm_client_identity + planning_area: planning_area - test_scenario: scenario_type: scenarios.astm.utm.dss.authentication.AuthenticationValidation resources: diff --git a/monitoring/uss_qualifier/suites/astm/utm/f3548_21.md b/monitoring/uss_qualifier/suites/astm/utm/f3548_21.md index 1e9959bc3e..fa3df5ca5f 100644 --- a/monitoring/uss_qualifier/suites/astm/utm/f3548_21.md +++ b/monitoring/uss_qualifier/suites/astm/utm/f3548_21.md @@ -35,20 +35,20 @@ Checked in - astm
.f3548
.v21
+ astm
.f3548
.v21
DSS0005,1 Implemented - ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation
Off-Nominal planning: down USS
Off-Nominal planning: down USS with equal priority conflicts not permitted + ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation
Off-Nominal planning: down USS
Off-Nominal planning: down USS with equal priority conflicts not permitted DSS0005,2 Implemented - ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation
Awareness of relevant operational intents
Data Validation of GET operational intents by USS
Nominal planning: conflict with higher priority
Nominal planning: not permitted conflict with equal priority
Off-Nominal planning: down USS
Off-Nominal planning: down USS with equal priority conflicts not permitted
Validation of operational intents + ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation
Awareness of relevant operational intents
Data Validation of GET operational intents by USS
Nominal planning: conflict with higher priority
Nominal planning: not permitted conflict with equal priority
Off-Nominal planning: down USS
Off-Nominal planning: down USS with equal priority conflicts not permitted
Validation of operational intents DSS0005,5 Implemented - ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation + ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation DSS0015 @@ -125,6 +125,16 @@ Implemented ASTM SCD DSS: Subscription Synchronization + + DSS0210,A2-7-2,2a + Implemented + ASTM SCD DSS: Operational Intent Reference Key Validation + + + DSS0210,A2-7-2,2b + Implemented + ASTM SCD DSS: Operational Intent Reference Key Validation + DSS0210,A2-7-2,7 Implemented diff --git a/monitoring/uss_qualifier/suites/astm/utm/f3548_21.yaml b/monitoring/uss_qualifier/suites/astm/utm/f3548_21.yaml index 88cbe33c9f..e4590f5af5 100644 --- a/monitoring/uss_qualifier/suites/astm/utm/f3548_21.yaml +++ b/monitoring/uss_qualifier/suites/astm/utm/f3548_21.yaml @@ -15,6 +15,7 @@ resources: second_utm_auth: resources.communications.AuthAdapterResource? mock_uss: resources.interuss.mock_uss.client.MockUSSResource? id_generator: resources.interuss.IDGeneratorResource + utm_client_identity: resources.communications.ClientIdentityResource planning_area: resources.astm.f3548.v21.PlanningAreaResource problematically_big_area: resources.VerticesResource system_identity: resources.versioning.SystemIdentityResource? @@ -49,6 +50,7 @@ actions: second_utm_auth: second_utm_auth? flight_intents: non_conflicting_flights id_generator: id_generator + utm_client_identity: utm_client_identity planning_area: planning_area problematically_big_area: problematically_big_area specification: @@ -62,6 +64,7 @@ actions: dss_crdb_cluster: dss_crdb_cluster? flight_intents: flight_intents id_generator: id_generator + utm_client_identity: utm_client_identity planning_area: planning_area problematically_big_area: problematically_big_area on_failure: Continue diff --git a/monitoring/uss_qualifier/suites/faa/uft/message_signing.md b/monitoring/uss_qualifier/suites/faa/uft/message_signing.md index 51ff8f2706..1fe40b7e9d 100644 --- a/monitoring/uss_qualifier/suites/faa/uft/message_signing.md +++ b/monitoring/uss_qualifier/suites/faa/uft/message_signing.md @@ -18,20 +18,20 @@ Checked in - astm
.f3548
.v21
+ astm
.f3548
.v21
DSS0005,1 Implemented - ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation
Off-Nominal planning: down USS
Off-Nominal planning: down USS with equal priority conflicts not permitted + ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation
Off-Nominal planning: down USS
Off-Nominal planning: down USS with equal priority conflicts not permitted DSS0005,2 Implemented - ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation
Awareness of relevant operational intents
Data Validation of GET operational intents by USS
Nominal planning: conflict with higher priority
Nominal planning: not permitted conflict with equal priority
Off-Nominal planning: down USS
Off-Nominal planning: down USS with equal priority conflicts not permitted
Validation of operational intents + ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation
Awareness of relevant operational intents
Data Validation of GET operational intents by USS
Nominal planning: conflict with higher priority
Nominal planning: not permitted conflict with equal priority
Off-Nominal planning: down USS
Off-Nominal planning: down USS with equal priority conflicts not permitted
Validation of operational intents DSS0005,5 Implemented - ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation + ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation DSS0015 @@ -108,6 +108,16 @@ Implemented ASTM SCD DSS: Subscription Synchronization + + DSS0210,A2-7-2,2a + Implemented + ASTM SCD DSS: Operational Intent Reference Key Validation + + + DSS0210,A2-7-2,2b + Implemented + ASTM SCD DSS: Operational Intent Reference Key Validation + DSS0210,A2-7-2,7 Implemented diff --git a/monitoring/uss_qualifier/suites/faa/uft/message_signing.yaml b/monitoring/uss_qualifier/suites/faa/uft/message_signing.yaml index f3a4766e2b..6483275157 100644 --- a/monitoring/uss_qualifier/suites/faa/uft/message_signing.yaml +++ b/monitoring/uss_qualifier/suites/faa/uft/message_signing.yaml @@ -11,6 +11,7 @@ resources: priority_preemption_flights: resources.flight_planning.FlightIntentsResource invalid_flight_intents: resources.flight_planning.FlightIntentsResource id_generator: resources.interuss.IDGeneratorResource + utm_client_identity: resources.communications.ClientIdentityResource second_utm_auth: resources.communications.AuthAdapterResource? planning_area: resources.astm.f3548.v21.PlanningAreaResource problematically_big_area: resources.VerticesResource @@ -35,6 +36,7 @@ actions: dss_instances: dss_instances dss_crdb_cluster: dss_crdb_cluster? id_generator: id_generator + utm_client_identity: utm_client_identity second_utm_auth: second_utm_auth planning_area: planning_area problematically_big_area: problematically_big_area diff --git a/monitoring/uss_qualifier/suites/interuss/dss/all_tests.md b/monitoring/uss_qualifier/suites/interuss/dss/all_tests.md index f805a4a36e..2a79192400 100644 --- a/monitoring/uss_qualifier/suites/interuss/dss/all_tests.md +++ b/monitoring/uss_qualifier/suites/interuss/dss/all_tests.md @@ -408,20 +408,20 @@ ASTM NetRID DSS: Concurrent Requests
ASTM NetRID DSS: ISA Expiry
ASTM NetRID DSS: ISA Subscription Interactions
ASTM NetRID DSS: Simple ISA
ASTM NetRID DSS: Submitted ISA Validations
ASTM NetRID DSS: Subscription Simple
ASTM NetRID DSS: Subscription Validation
ASTM NetRID DSS: Token Validation - astm
.f3548
.v21
+ astm
.f3548
.v21
DSS0005,1 Implemented - ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation + ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation DSS0005,2 Implemented - ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation + ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation DSS0005,5 Implemented - ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation + ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation DSS0015 @@ -493,6 +493,16 @@ Implemented ASTM SCD DSS: Subscription Synchronization + + DSS0210,A2-7-2,2a + Implemented + ASTM SCD DSS: Operational Intent Reference Key Validation + + + DSS0210,A2-7-2,2b + Implemented + ASTM SCD DSS: Operational Intent Reference Key Validation + DSS0210,A2-7-2,7 Implemented diff --git a/monitoring/uss_qualifier/suites/interuss/dss/all_tests.yaml b/monitoring/uss_qualifier/suites/interuss/dss/all_tests.yaml index 5072e9f954..49ab5333cb 100644 --- a/monitoring/uss_qualifier/suites/interuss/dss/all_tests.yaml +++ b/monitoring/uss_qualifier/suites/interuss/dss/all_tests.yaml @@ -23,6 +23,7 @@ actions: second_utm_auth: second_utm_auth? flight_intents: flight_intents id_generator: id_generator + utm_client_identity: utm_client_identity planning_area: planning_area problematically_big_area: problematically_big_area specification: @@ -36,6 +37,7 @@ actions: dss_crdb_cluster: dss_crdb_cluster? flight_intents: flight_intents id_generator: id_generator + utm_client_identity: utm_client_identity planning_area: planning_area problematically_big_area: problematically_big_area on_failure: Continue diff --git a/monitoring/uss_qualifier/suites/uspace/flight_auth.md b/monitoring/uss_qualifier/suites/uspace/flight_auth.md index 1613c6fe67..e9e412e5f2 100644 --- a/monitoring/uss_qualifier/suites/uspace/flight_auth.md +++ b/monitoring/uss_qualifier/suites/uspace/flight_auth.md @@ -19,20 +19,20 @@ Checked in - astm
.f3548
.v21
+ astm
.f3548
.v21
DSS0005,1 Implemented - ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation
Off-Nominal planning: down USS
Off-Nominal planning: down USS with equal priority conflicts not permitted + ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation
Off-Nominal planning: down USS
Off-Nominal planning: down USS with equal priority conflicts not permitted DSS0005,2 Implemented - ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation
Awareness of relevant operational intents
Data Validation of GET operational intents by USS
Nominal planning: conflict with higher priority
Nominal planning: not permitted conflict with equal priority
Off-Nominal planning: down USS
Off-Nominal planning: down USS with equal priority conflicts not permitted
Validation of operational intents + ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation
Awareness of relevant operational intents
Data Validation of GET operational intents by USS
Nominal planning: conflict with higher priority
Nominal planning: not permitted conflict with equal priority
Off-Nominal planning: down USS
Off-Nominal planning: down USS with equal priority conflicts not permitted
Validation of operational intents DSS0005,5 Implemented - ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation + ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation DSS0015 @@ -109,6 +109,16 @@ Implemented ASTM SCD DSS: Subscription Synchronization + + DSS0210,A2-7-2,2a + Implemented + ASTM SCD DSS: Operational Intent Reference Key Validation + + + DSS0210,A2-7-2,2b + Implemented + ASTM SCD DSS: Operational Intent Reference Key Validation + DSS0210,A2-7-2,7 Implemented diff --git a/monitoring/uss_qualifier/suites/uspace/flight_auth.yaml b/monitoring/uss_qualifier/suites/uspace/flight_auth.yaml index 20a5fe5d78..9b432fa81b 100644 --- a/monitoring/uss_qualifier/suites/uspace/flight_auth.yaml +++ b/monitoring/uss_qualifier/suites/uspace/flight_auth.yaml @@ -13,6 +13,7 @@ resources: dss_instances: resources.astm.f3548.v21.DSSInstancesResource? dss_crdb_cluster: resources.interuss.crdb.CockroachDBClusterResource? id_generator: resources.interuss.IDGeneratorResource + utm_client_identity: resources.communications.ClientIdentityResource second_utm_auth: resources.communications.AuthAdapterResource? planning_area: resources.astm.f3548.v21.PlanningAreaResource problematically_big_area: resources.VerticesResource @@ -33,6 +34,7 @@ actions: dss_instances: dss_instances dss_crdb_cluster: dss_crdb_cluster? id_generator: id_generator + utm_client_identity: utm_client_identity second_utm_auth: second_utm_auth planning_area: planning_area problematically_big_area: problematically_big_area diff --git a/monitoring/uss_qualifier/suites/uspace/required_services.md b/monitoring/uss_qualifier/suites/uspace/required_services.md index 60e1ff0ad4..ec100324ed 100644 --- a/monitoring/uss_qualifier/suites/uspace/required_services.md +++ b/monitoring/uss_qualifier/suites/uspace/required_services.md @@ -454,20 +454,20 @@ ASTM NetRID DSS: Concurrent Requests
ASTM NetRID DSS: ISA Expiry
ASTM NetRID DSS: ISA Subscription Interactions
ASTM NetRID DSS: Simple ISA
ASTM NetRID DSS: Submitted ISA Validations
ASTM NetRID DSS: Subscription Simple
ASTM NetRID DSS: Subscription Validation
ASTM NetRID DSS: Token Validation - astm
.f3548
.v21
+ astm
.f3548
.v21
DSS0005,1 Implemented - ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation
Off-Nominal planning: down USS
Off-Nominal planning: down USS with equal priority conflicts not permitted + ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation
Off-Nominal planning: down USS
Off-Nominal planning: down USS with equal priority conflicts not permitted DSS0005,2 Implemented - ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation
Awareness of relevant operational intents
Data Validation of GET operational intents by USS
Nominal planning: conflict with higher priority
Nominal planning: not permitted conflict with equal priority
Off-Nominal planning: down USS
Off-Nominal planning: down USS with equal priority conflicts not permitted
Validation of operational intents + ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation
Awareness of relevant operational intents
Data Validation of GET operational intents by USS
Nominal planning: conflict with higher priority
Nominal planning: not permitted conflict with equal priority
Off-Nominal planning: down USS
Off-Nominal planning: down USS with equal priority conflicts not permitted
Validation of operational intents DSS0005,5 Implemented - ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation + ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation DSS0015 @@ -544,6 +544,16 @@ Implemented ASTM SCD DSS: Subscription Synchronization + + DSS0210,A2-7-2,2a + Implemented + ASTM SCD DSS: Operational Intent Reference Key Validation + + + DSS0210,A2-7-2,2b + Implemented + ASTM SCD DSS: Operational Intent Reference Key Validation + DSS0210,A2-7-2,7 Implemented diff --git a/monitoring/uss_qualifier/suites/uspace/required_services.yaml b/monitoring/uss_qualifier/suites/uspace/required_services.yaml index 02e466a46e..d6c28bbd90 100644 --- a/monitoring/uss_qualifier/suites/uspace/required_services.yaml +++ b/monitoring/uss_qualifier/suites/uspace/required_services.yaml @@ -54,6 +54,7 @@ actions: dss_crdb_cluster: dss_crdb_cluster? id_generator: id_generator second_utm_auth: second_utm_auth? + utm_client_identity: utm_client_identity planning_area: planning_area problematically_big_area: problematically_big_area system_identity: system_identity