From 075dea4eaae4eaf942d3c76ab65ed177e6ef8fe4 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/monitorlib/schema_validation.py | 11 + monitoring/prober/infrastructure.py | 2 +- .../dev/f3548_self_contained.yaml | 1 + .../configurations/dev/message_signing.yaml | 1 + .../scenarios/astm/utm/dss/__init__.py | 1 + .../scenarios/astm/utm/dss/clean_workspace.md | 2 +- .../utm/dss/op_intent_ref_access_control.py | 5 +- .../utm/dss/op_intent_ref_key_validation.md | 118 +++++ .../utm/dss/op_intent_ref_key_validation.py | 435 ++++++++++++++++++ .../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/required_services.md | 18 +- 19 files changed, 679 insertions(+), 37 deletions(-) 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/monitorlib/schema_validation.py b/monitoring/monitorlib/schema_validation.py index 3d61fd2507..399d89ae8f 100644 --- a/monitoring/monitorlib/schema_validation.py +++ b/monitoring/monitorlib/schema_validation.py @@ -59,6 +59,17 @@ class F3548_21(str, Enum): QuerySubscriptionsResponse = "components.schemas.QuerySubscriptionsResponse" DeleteSubscriptionResponse = "components.schemas.DeleteSubscriptionResponse" + ChangeOperationalIntentReferenceResponse = ( + "components.schemas.ChangeOperationalIntentReferenceResponse" + ) + GetOperationalIntentReferenceResponse = ( + "components.schemas.GetOperationalIntentReferenceResponse" + ) + QueryOperationalIntentReferenceResponse = ( + "components.schemas.QueryOperationalIntentReferenceResponse" + ) + AirspaceConflictResponse = "components.schemas.AirspaceConflictResponse" + _openapi_content_cache: Dict[str, dict] = {} diff --git a/monitoring/prober/infrastructure.py b/monitoring/prober/infrastructure.py index 95e3aac299..348dd28670 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: 383 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/clean_workspace.md b/monitoring/uss_qualifier/scenarios/astm/utm/dss/clean_workspace.md index bfa594d92b..e381ad462e 100644 --- a/monitoring/uss_qualifier/scenarios/astm/utm/dss/clean_workspace.md +++ b/monitoring/uss_qualifier/scenarios/astm/utm/dss/clean_workspace.md @@ -12,7 +12,7 @@ If an existing operational intent reference cannot directly be queried by its ID A client with valid credentials should be allowed to search for operational intents in a given area. Otherwise, the DSS is not in compliance with **[astm.f3548.v21.DSS0005,2](../../../../requirements/astm/f3548/v21.md)**. -## 🛑 Operational intent references can be deleted by their owner check +## 🛑 Operational intent reference removed check If an existing operational intent cannot be deleted when providing the proper ID and OVN, the DSS implementation 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_access_control.py b/monitoring/uss_qualifier/scenarios/astm/utm/dss/op_intent_ref_access_control.py index 7597ff3996..e8a3f47b75 100644 --- a/monitoring/uss_qualifier/scenarios/astm/utm/dss/op_intent_ref_access_control.py +++ b/monitoring/uss_qualifier/scenarios/astm/utm/dss/op_intent_ref_access_control.py @@ -196,9 +196,8 @@ def _clean_known_op_intents_ids(self): query_timestamps=[q.request.timestamp], ) if q.response.status_code != 404: - with self.check( - "Operational intent references can be deleted by their owner", self._pid - ) as check: + + with self.check("Operational intent reference removed", self._pid) as check: try: (_, notifs, dq) = self._dss_separate_creds.delete_op_intent( self._oid_2, oi_ref.ovn 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..d65c70e8ad --- /dev/null +++ b/monitoring/uss_qualifier/scenarios/astm/utm/dss/op_intent_ref_key_validation.md @@ -0,0 +1,118 @@ +# 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 ID exists in the DSS. + +## Key Validation 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 provide the OVNs for each entity that is in the vicinity, +both geographically and temporally, of the client's operational intent reference. + +### Create non-overlapping OIRs test step + +This first test step creates two operational intent references that do not overlap in time, and +should therefore both not require any entry in the `key` field. + +#### 🛑 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)**. + +#### 🛑 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 creation of overlapping OIRs test step + +This test step will attempt to create various operational intent references that intersect with either one or both of the previously created ones, +and expect the DSS to require the relevant OVNs to be provided in the `key` field. + +Note that this step will optionally validate the response body of for `HTTP 409` error responses from the DSS when these contain the expected `missing_operational_intents` field. + +At the end of this step, the DSS is expected to have accepted the creation of 3 operational intent references. + +#### 🛑 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)**. + +#### 🛑 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)**. + +### Attempt mutation of operational intent reference to cause an overlap test step + +This test step will attempt to mutate an existing operational intent reference so that it overlaps with an existing one. + +The expectation is that the DSS will require the relevant OVNs to be provided in the `key` field. + +#### 🛑 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)**. + + +## [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..e4034005db --- /dev/null +++ b/monitoring/uss_qualifier/scenarios/astm/utm/dss/op_intent_ref_key_validation.py @@ -0,0 +1,435 @@ +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. + """ + + SUB_TYPE = register_resource_type(382, "Operational Intent Reference") + + _dss: DSSInstance + + # Base identifier for the OIR that will be created + _base_oir_id: EntityID + + _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._base_oir_id = id_generator.id_factory.make_id(self.SUB_TYPE) + + # We will be using three IDs for the OIRs + self._oir_ids = [self._base_oir_id[:-1] + f"{i}" for i in range(3)] + + self._expected_manager = client_identity.subscriber() + + 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") + + self.begin_test_step("Create non-overlapping OIRs") + self._step_create_non_overlapping_oirs() + self.end_test_step() + + self.begin_test_step("Attempt creation of overlapping OIRs") + self._step_attempt_create_overlapping_oir() + self.end_test_step() + + # Confirm that the required OIRs were created + if len(self._current_oirs) == 3: + self.begin_test_step( + "Attempt mutation of operational intent reference to cause an overlap" + ) + self._step_attempt_mutation_to_cause_overlap() + self.end_test_step() + else: + self.record_note( + "oir_mutation", "Skipping mutation step: expected OIR is missing" + ) + + self.end_test_case() + self.end_test_scenario() + + def _step_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, + ) + + 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._current_oirs[first_oir.id] = first_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._current_oirs[second_oir.id] = second_oir + + def _attempt_creation_expect_conflict( + self, 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=self._oir_ids[2], + ) + 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_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=self._oir_ids[2], + 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 _step_attempt_create_overlapping_oir(self): + first_oir = self._current_oirs[self._oir_ids[0]] + second_oir = self._current_oirs[self._oir_ids[1]] + + 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._attempt_creation_expect_conflict(conflict_first, [first_oir.id]) + + 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._attempt_creation_expect_conflict(conflict_second, [second_oir.id]) + + 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._attempt_creation_expect_conflict( + conflict_both, [first_oir.id, second_oir.id] + ) + + # 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] + + 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=self._oir_ids[2], + ) + 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._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], + ) + # Return in case the severity does not stop the test + return + + 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 _step_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._attempt_update_expect_conflict( + change_base_url, [first_oir.id, second_oir.id], oir_to_mutate.ovn + ) + + # If the first OVN is missing: + change_base_url.key = [second_oir.ovn] + self._attempt_update_expect_conflict( + change_base_url, [first_oir.id], oir_to_mutate.ovn + ) + + # 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._attempt_update_expect_conflict( + conflict_with_first, [first_oir.id], oir_to_mutate.ovn + ) + + 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 4f3808a99a..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 6e085e6431..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 b8cadbc982..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 f4ed5d0281..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 7811acce4b..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/required_services.md b/monitoring/uss_qualifier/suites/uspace/required_services.md index baa4184c53..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