From c4be07f9d7dbbb43f89a7756f2505f350284b87a Mon Sep 17 00:00:00 2001 From: Julien Perrochet Date: Fri, 23 Feb 2024 14:22:56 +0100 Subject: [PATCH] DSS0210,2 sync entity references PR comment integration --- monitoring/monitorlib/schema_validation.py | 10 + monitoring/prober/infrastructure.py | 2 +- .../dev/f3548_self_contained.yaml | 1 + .../configurations/dev/message_signing.yaml | 1 + .../resources/astm/f3548/v21/planning_area.py | 4 +- .../scenarios/astm/utm/dss/clean_workspace.md | 4 +- .../astm/utm/dss/remove_op_intent.md | 7 - .../astm/utm/dss/synchronization/__init__.py | 1 + .../op_intent_ref_synchronization.md | 148 ++++++ .../op_intent_ref_synchronization.py | 484 ++++++++++++++++++ .../astm/utm/dss/test_step_fragments.py | 29 +- .../scenarios/astm/utm/prep_planners.md | 2 +- .../suites/astm/netrid/f3411_22a.yaml | 1 + .../suites/astm/utm/dss_probing.md | 46 +- .../suites/astm/utm/dss_probing.yaml | 9 + .../uss_qualifier/suites/astm/utm/f3548_21.md | 33 +- .../suites/astm/utm/f3548_21.yaml | 3 + .../suites/faa/uft/message_signing.md | 33 +- .../suites/faa/uft/message_signing.yaml | 2 + .../suites/interuss/dss/all_tests.md | 33 +- .../suites/interuss/dss/all_tests.yaml | 2 + .../suites/uspace/flight_auth.md | 33 +- .../suites/uspace/flight_auth.yaml | 2 + .../suites/uspace/required_services.md | 33 +- .../suites/uspace/required_services.yaml | 1 + 25 files changed, 880 insertions(+), 44 deletions(-) delete mode 100644 monitoring/uss_qualifier/scenarios/astm/utm/dss/remove_op_intent.md create mode 100644 monitoring/uss_qualifier/scenarios/astm/utm/dss/synchronization/op_intent_ref_synchronization.md create mode 100644 monitoring/uss_qualifier/scenarios/astm/utm/dss/synchronization/op_intent_ref_synchronization.py diff --git a/monitoring/monitorlib/schema_validation.py b/monitoring/monitorlib/schema_validation.py index 4e79bf0c00..282462faaa 100644 --- a/monitoring/monitorlib/schema_validation.py +++ b/monitoring/monitorlib/schema_validation.py @@ -58,6 +58,16 @@ 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" + ) + _openapi_content_cache: Dict[str, dict] = {} diff --git a/monitoring/prober/infrastructure.py b/monitoring/prober/infrastructure.py index d543476a4f..1aadafa3b6 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: 380 +# Next code: 382 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 c55511801d..d6e8cc7f20 100644 --- a/monitoring/uss_qualifier/configurations/dev/f3548_self_contained.yaml +++ b/monitoring/uss_qualifier/configurations/dev/f3548_self_contained.yaml @@ -24,6 +24,7 @@ v1: dss_instances: dss_instances mock_uss: mock_uss second_utm_auth: second_utm_auth + utm_client_identity: utm_client_identity planning_area: planning_area problematically_big_area: problematically_big_area diff --git a/monitoring/uss_qualifier/configurations/dev/message_signing.yaml b/monitoring/uss_qualifier/configurations/dev/message_signing.yaml index 56ccd5028b..a81f809f53 100644 --- a/monitoring/uss_qualifier/configurations/dev/message_signing.yaml +++ b/monitoring/uss_qualifier/configurations/dev/message_signing.yaml @@ -60,6 +60,7 @@ v1: dss_instances: scd_dss_instances id_generator: id_generator second_utm_auth: second_utm_auth + utm_client_identity: utm_client_identity planning_area: che_planning_area problematically_big_area: che_problematically_big_area execution: diff --git a/monitoring/uss_qualifier/resources/astm/f3548/v21/planning_area.py b/monitoring/uss_qualifier/resources/astm/f3548/v21/planning_area.py index 77fda09f73..1ea999e48c 100644 --- a/monitoring/uss_qualifier/resources/astm/f3548/v21/planning_area.py +++ b/monitoring/uss_qualifier/resources/astm/f3548/v21/planning_area.py @@ -11,7 +11,7 @@ ImplicitSubscriptionParameters, ) -from monitoring.monitorlib.geo import make_latlng_rect, Volume3D +from monitoring.monitorlib.geo import LatLngPoint, make_latlng_rect, Volume3D, Polygon from monitoring.monitorlib.geotemporal import Volume4D from monitoring.monitorlib.temporal import Time from monitoring.uss_qualifier.resources.astm.f3548.v21.subscription_params import ( @@ -74,9 +74,11 @@ def get_new_operational_intent_ref_params( ) -> PutOperationalIntentReferenceParameters: """ Builds a PutOperationalIntentReferenceParameters object that can be used against the DSS OIR API. + The extents contained in these parameters contain a single 4DVolume, which may not be entirely realistic, but is sufficient in situations where the content of the OIR is irrelevant as long as it is valid, such as for testing authentication or parameter validation. + Note that this method allows building inconsistent parameters. """ return PutOperationalIntentReferenceParameters( 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..cfc486249c 100644 --- a/monitoring/uss_qualifier/scenarios/astm/utm/dss/clean_workspace.md +++ b/monitoring/uss_qualifier/scenarios/astm/utm/dss/clean_workspace.md @@ -4,8 +4,8 @@ This page describes the content of a common test step that ensures a clean works ## 🛑 Operational intent references can be queried by ID check -If an existing operational intent reference cannot directly be queried by its ID, the DSS implementation is in violation of -**[astm.f3548.v21.DSS0005,1](../../../../requirements/astm/f3548/v21.md)**. +If an existing operational intent reference cannot directly be queried by its ID, or if for a non-existing one the DSS replies with a status code different than 404, +the DSS implementation is in violation of **[astm.f3548.v21.DSS0005,1](../../../../requirements/astm/f3548/v21.md)**. ## 🛑 Operational intent references can be searched for check diff --git a/monitoring/uss_qualifier/scenarios/astm/utm/dss/remove_op_intent.md b/monitoring/uss_qualifier/scenarios/astm/utm/dss/remove_op_intent.md deleted file mode 100644 index c154feaf50..0000000000 --- a/monitoring/uss_qualifier/scenarios/astm/utm/dss/remove_op_intent.md +++ /dev/null @@ -1,7 +0,0 @@ -# Remove operational intent test step fragment - -This test step fragment attempts to remove from the DSS a specific operational intent reference managed by a user whose credentials are provided to uss_qualifier. - -## 🛑 Operational intent reference removed check - -If the operational intent reference could not be removed, the DSS instance used does not meet **[astm.f3548.v21.DSS0005,1](../../../../requirements/astm/f3548/v21.md)** diff --git a/monitoring/uss_qualifier/scenarios/astm/utm/dss/synchronization/__init__.py b/monitoring/uss_qualifier/scenarios/astm/utm/dss/synchronization/__init__.py index 3ac599b519..9aa039a538 100644 --- a/monitoring/uss_qualifier/scenarios/astm/utm/dss/synchronization/__init__.py +++ b/monitoring/uss_qualifier/scenarios/astm/utm/dss/synchronization/__init__.py @@ -1 +1,2 @@ from .subscription_synchronization import SubscriptionSynchronization +from .op_intent_ref_synchronization import OIRSynchronization diff --git a/monitoring/uss_qualifier/scenarios/astm/utm/dss/synchronization/op_intent_ref_synchronization.md b/monitoring/uss_qualifier/scenarios/astm/utm/dss/synchronization/op_intent_ref_synchronization.md new file mode 100644 index 0000000000..42fed3478b --- /dev/null +++ b/monitoring/uss_qualifier/scenarios/astm/utm/dss/synchronization/op_intent_ref_synchronization.md @@ -0,0 +1,148 @@ +# ASTM SCD DSS: Operational Intent Reference Synchronization test scenario + +## Overview + +Verifies that all CRUD operations on operational intent references performed on a given DSS instance +are properly propagated to every other DSS instance participating in the deployment. + +## Resources + +### dss + +[`DSSInstanceResource`](../../../../../resources/astm/f3548/v21/dss.py) the DSS instance through which entities are created, modified and deleted. + +### other_instances + +[`DSSInstancesResource`](../../../../../resources/astm/f3548/v21/dss.py) pointing to the DSS instances used to confirm that entities are properly propagated. + +### id_generator + +[`IDGeneratorResource`](../../../../../resources/interuss/id_generator.py) providing the Subscription ID for this scenario. + +### planning_area + +[`PlanningAreaResource`](../../../../../resources/astm/f3548/v21/planning_area.py) describes the 3D volume in which subscriptions will be created. + +### client_identity + +[`ClientIdentityResource`](../../../../../resources/communications/client_identity.py) to be used for this scenario. + +## Setup test case + +### [Ensure clean workspace test step](../clean_workspace.md) + +This step ensures that no subscription with the known test ID exists in the DSS. + +## OIR synchronization test case + +This test case creates an operational intent reference on the main DSS, and verifies that it is properly synchronized to the other DSS instances. + +It then goes on to mutate and delete it, each time confirming that all other DSSes return the expected results. + +### Create OIR validation test step + +#### [Create OIR](../fragments/oir/crud/create.md) + +Verify that an operational intent reference can be created on the primary DSS. + +#### [OIR Content is correct](../fragments/oir/validate/correctness.md) + +Verify that the operational intent reference returned by the DSS under test is properly formatted and contains the expected content. + +### Query newly created OIR test step + +Query the created operational intent at every DSS provided in `dss_instances`. + +#### 🛑 Operational intent reference returned by a secondary DSS is valid and correct check + +When queried for an operational intent reference that was created via another DSS, a DSS instance is expected to provide a valid operational intent reference. + +If it does not, it is in violation of **[astm.f3548.v21.DSS0005,1](../../../../../requirements/astm/f3548/v21.md)**. + +#### [OIR is synchronized](../fragments/oir/sync.md) + +Confirm that the operational intent reference that was just created is properly synchronized across all DSS instances. + +#### [Get OIR](../fragments/oir/crud/read.md) + +Confirms that each DSS provides access to the created operational intent reference, + +#### [OIR Content is correct](../fragments/oir/validate/correctness.md) + +Verify that the operational intent reference returned by every DSS is correctly formatted and corresponds to what was created earlier. + +#### [OIR Versions are correct](../fragments/oir/validate/non_mutated.md) + +Verify that the operational intent reference's version fields are as expected. + +### Mutate OIR test step + +This test step mutates the previously created operational intent reference to verify that the DSS reacts properly: notably, it checks that the operational intent reference version is updated, +including for changes that are not directly visible, such as changing the operational intent reference's footprint. + +#### [Update OIR](../fragments/oir/crud/update.md) + +Confirm that the operational intent reference can be mutated. + +#### [Validate OIR](../fragments/oir/validate/correctness.md) + +Verify that the operational intent reference returned by the DSS is properly formatted and contains the correct content. + +#### [OIR Versions are correct](../fragments/oir/validate/mutated.md) + +Verify that the operational intent reference's version fields have been updated. + +### Query updated OIR test step + +Query the updated operational intent reference at every DSS provided in `dss_instances`. + +#### 🛑 Operational intent reference returned by a secondary DSS is valid and correct check + +When queried for an operational intent reference that was mutated via another DSS, a DSS instance is expected to provide a valid operational intent reference. + +If it does not, it is in violation of **[astm.f3548.v21.DSS0005,1](../../../../../requirements/astm/f3548/v21.md)**. + +#### [OIR is synchronized](../fragments/oir/sync.md) + +Confirm that the operational intent reference that was just mutated is properly synchronized across all DSS instances. + +#### [Get OIR](../fragments/oir/crud/read.md) + +Confirms that the operational intent reference that was just mutated can be retrieved from any DSS. + +#### [Validate OIR](../fragments/oir/validate/correctness.md) + +Verify that the operational intent reference returned by every DSS is correctly formatted and corresponds to what was mutated earlier. + +#### [OIR Versions are correct](../fragments/oir/validate/non_mutated.md) + +Verify that the operational intent reference's version fields are as expected. + +### Delete OIR test step + +Attempt to delete the operational intent reference in various ways and ensure that the DSS reacts properly. + +This also checks that the operational intent reference data returned by a successful deletion is correct. + +#### [Delete OIR](../fragments/oir/crud/delete.md) + +Confirms that an operational intent reference can be deleted. + +#### [Validate OIR](../fragments/oir/validate/correctness.md) + +Verify that the operational intent reference returned by the DSS via the deletion is properly formatted and contains the correct content. + +#### [OIR Versions are correct](../fragments/oir/validate/non_mutated.md) + +Verify that the operational intent reference's version fields are as expected. + +### Query deleted OIR test step + +Attempt to query and search for the deleted operational intent reference in various ways + +#### 🛑 Secondary DSS should not return the deleted operational intent reference check + +If a DSS returns an operational intent reference that was previously successfully deleted from the primary DSS, +either one of the primary DSS or the DSS that returned the operational intent reference is in violation of **[astm.f3548.v21.DSS0210,2a](../../../../../requirements/astm/f3548/v21.md)**. + +## [Cleanup](../clean_workspace.md) diff --git a/monitoring/uss_qualifier/scenarios/astm/utm/dss/synchronization/op_intent_ref_synchronization.py b/monitoring/uss_qualifier/scenarios/astm/utm/dss/synchronization/op_intent_ref_synchronization.py new file mode 100644 index 0000000000..5f11e10dd9 --- /dev/null +++ b/monitoring/uss_qualifier/scenarios/astm/utm/dss/synchronization/op_intent_ref_synchronization.py @@ -0,0 +1,484 @@ +from datetime import datetime, timedelta +from typing import List, Optional + +import loguru +from implicitdict import StringBasedDateTime +from uas_standards.astm.f3548.v21 import api +from uas_standards.astm.f3548.v21.api import ( + OperationalIntentReference, + PutOperationalIntentReferenceParameters, + EntityID, + OperationalIntentState, +) +from uas_standards.astm.f3548.v21.constants import Scope + +from monitoring.monitorlib.fetch import QueryError +from monitoring.monitorlib.geotemporal import Volume4D +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, + DSSInstancesResource, + 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.astm.utm.dss.validators.oir_validator import ( + OIRValidator, + TIME_TOLERANCE_SEC, +) +from monitoring.uss_qualifier.scenarios.scenario import ( + TestScenario, +) +from monitoring.uss_qualifier.suites.suite import ExecutionContext + + +class OIRSynchronization(TestScenario): + """ + A scenario that checks if multiple DSS instances properly synchronize + operational intent references. + + Not in the scope of the first version of this: + - access rights (making sure only the manager of the OIR can mutate it) + - control of the area synchronization (by doing area searches against the secondaries) + - mutation of an entity on a secondary DSS when it was created on the primary + - deletion of an entity on a secondary DSS when it was created on the primary + """ + + SUB_TYPE = register_resource_type(381, "Operational Intent Reference") + + _dss: DSSInstance + + _dss_read_instances: List[DSSInstance] + + # Base identifier for the OIR that will be created + _oir_id: EntityID + + # Base parameters used for OIR creation + _oir_params: PutOperationalIntentReferenceParameters + + # Keep track of the current OIR state + _current_oir: Optional[OperationalIntentReference] + + _expected_manager: str + + def __init__( + self, + dss: DSSInstanceResource, + other_instances: DSSInstancesResource, + id_generator: IDGeneratorResource, + client_identity: ClientIdentityResource, + planning_area: PlanningAreaResource, + ): + """ + Args: + dss: dss to test + other_instances: dss instances to be checked for proper synchronization + id_generator: will let us generate specific identifiers + client_identity: tells us the identity we should expect as an entity's manager + 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_primary = { + Scope.StrategicCoordination: "create and delete operational intent references" + } + scopes_read = {Scope.StrategicCoordination: "read operational intents"} + + self._dss = dss.get_instance(scopes_primary) + self._primary_pid = self._dss.participant_id + + self._dss_read_instances = [ + sec_dss.get_instance(scopes_read) + for sec_dss in other_instances.dss_instances + ] + + self._oir_id = id_generator.id_factory.make_id(self.SUB_TYPE) + self._expected_manager = client_identity.subscriber() + self._planning_area = planning_area.specification + + # Build a ready-to-use 4D volume with no specified time for searching + # the currently active OIRs + # TODO OIR search will be added in an upcomming PR + self._planning_area_volume4d = Volume4D( + volume=self._planning_area.volume, + ) + + self._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, + implicit_sub_base_url=None, + implicit_sub_for_constraints=None, + ) + + def run(self, context: ExecutionContext): + + # Check that we actually have at least one other DSS to test against: + if not self._dss_read_instances: + loguru.logger.warning( + "Skipping EntitySynchronization test: no other DSS instances to test against" + ) + return + + self.begin_test_scenario(context) + self._setup_case() + self.begin_test_case("OIR synchronization") + + self.begin_test_step("Create OIR validation") + self._create_oir_with_params(self._oir_params) + self.end_test_step() + + self.begin_test_step("Query newly created OIR") + self._query_secondaries_and_compare(self._oir_params) + self.end_test_step() + + self.begin_test_step("Mutate OIR") + self._test_mutate_oir_shift_time() + self.end_test_step() + + self.begin_test_step("Query updated OIR") + self._query_secondaries_and_compare(self._oir_params) + self.end_test_step() + + self.begin_test_step("Delete OIR") + self._test_delete_sub() + self.end_test_step() + + self.begin_test_step("Query deleted OIR") + self._test_get_deleted_oir() + self.end_test_step() + + self.end_test_case() + self.end_test_scenario() + + 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_oir = None + 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 ID we are going to use is available + test_step_fragments.cleanup_op_intent(self, self._dss, self._oir_id) + # Start by dropping any active subs we might own and that could interfere + test_step_fragments.cleanup_active_subs( + self, self._dss, self._planning_area_volume4d.to_f3548v21() + ) + + def _create_oir_with_params( + self, creation_params: PutOperationalIntentReferenceParameters + ): + + with self.check( + "Create operational intent reference query succeeds", [self._primary_pid] + ) as check: + try: + oir, subs, q = self._dss.put_op_intent( + extents=creation_params.extents, + key=creation_params.key, + state=creation_params.state, + base_url=creation_params.uss_base_url, + oi_id=self._oir_id, + ovn=None, + ) + self.record_query(q) + except QueryError as qe: + self.record_queries(qe.queries) + check.record_failed( + summary="Create operational intent reference failed", + details=qe.msg, + query_timestamps=qe.query_timestamps, + ) + return + + with self.check( + "Create operational intent reference response content is correct", + [self._primary_pid], + ) as check: + OIRValidator( + main_check=check, + scenario=self, + expected_manager=self._expected_manager, + participant_id=[self._primary_pid], + oir_params=creation_params, + ).validate_created_oir(self._oir_id, new_oir=q) + + self._current_oir = oir + + def _query_secondaries_and_compare( + self, expected_oir_params: PutOperationalIntentReferenceParameters + ): + for secondary_dss in self._dss_read_instances: + self._validate_oir_from_secondary( + secondary_dss=secondary_dss, + expected_oir_params=expected_oir_params, + involved_participants=list( + {self._primary_pid, secondary_dss.participant_id} + ), + ) + + def _validate_oir_from_secondary( + self, + secondary_dss: DSSInstance, + expected_oir_params: PutOperationalIntentReferenceParameters, + involved_participants: List[str], + ): + with self.check( + "Operational intent reference can be found at every DSS", + involved_participants, + ) as check: + try: + oir, q = secondary_dss.get_op_intent_reference(self._oir_id) + self.record_query(q) + except QueryError as e: + self.record_queries(e.queries) + check.record_failed( + summary="GET for operational intent reference failed", + details=f"Query for operational intent reference failed: {e.msg}", + query_timestamps=e.query_timestamps, + ) + + with self.check( + "Propagated operational intent reference contains the correct manager", + involved_participants, + ) as check: + if oir.manager != self._expected_manager: + check.record_failed( + summary="Propagated OIR has an incorrect manager", + details=f"Expected: {self._expected_manager}, Received: {oir.manager}", + query_timestamps=[q.request.timestamp], + ) + + with self.check( + "Propagated operational intent reference contains the correct USS base URL", + involved_participants, + ) as check: + if oir.uss_base_url != expected_oir_params.uss_base_url: + check.record_failed( + "Propagated OIR has an incorrect USS base URL", + details=f"Expected: {expected_oir_params.base_url}, Received: {oir.uss_base_url}", + query_timestamps=[q.request.timestamp], + ) + + with self.check( + "Propagated operational intent reference contains the correct state", + involved_participants, + ) as check: + if oir.state != expected_oir_params.state: + check.record_failed( + summary="Propagated OIR has an incorrect state", + details=f"Expected: {expected_oir_params.state}, Received: {oir.state}", + query_timestamps=[q.request.timestamp], + ) + + with self.check( + "Propagated operational intent reference contains the correct start time", + involved_participants, + ) as check: + expected_start = expected_oir_params.extents[0].time_start + if ( + abs( + oir.time_start.value.datetime - expected_start.value.datetime + ).total_seconds() + > TIME_TOLERANCE_SEC + ): + check.record_failed( + "Propagated OIR has an incorrect start time", + details=f"Expected: {expected_start}, Received: {oir.time_start}", + query_timestamps=[q.request.timestamp], + ) + + with self.check( + "Propagated operational intent reference contains the correct end time", + involved_participants, + ) as check: + expected_end = expected_oir_params.extents[-1].time_end + if ( + abs( + oir.time_end.value.datetime - expected_end.value.datetime + ).total_seconds() + > TIME_TOLERANCE_SEC + ): + check.record_failed( + "Propagated OIR has an incorrect end time", + details=f"Expected: {expected_end}, Received: {oir.time_end}", + query_timestamps=[q.request.timestamp], + ) + + with self.check( + "Operational intent reference returned by a secondary DSS is valid and correct", + [secondary_dss.participant_id], + ) as check: + # Do a full validation of the OIR as a sanity check + OIRValidator( + main_check=check, + scenario=self, + expected_manager=self._expected_manager, + participant_id=[secondary_dss.participant_id], + oir_params=expected_oir_params, + ).validate_fetched_oir( + expected_oir_id=self._oir_id, + fetched_oir=q, + expected_version=self._current_oir.version, + expected_ovn=self._current_oir.ovn, + ) + + def _test_mutate_oir_shift_time(self): + """Mutate the OIR by adding 10 seconds to its start and end times. + This is achieved by updating the first and last element of the extents. + """ + op = self._oir_params + + new_extents = self._shift_extents(op.extents, timedelta(seconds=10)) + + new_params = PutOperationalIntentReferenceParameters( + extents=new_extents, + key=op.key + [self._current_oir.ovn], + state=op.state, + uss_base_url=op.uss_base_url, + subscription_id=op.subscription_id if "subscription_id" in op else None, + new_subscription=op.new_subscription if "new_subscription" in op else None, + ) + + with self.check( + "Mutate operational intent reference query succeeds", [self._primary_pid] + ) as check: + try: + oir, subs, q = self._dss.put_op_intent( + extents=new_extents, + key=new_params.key, + state=new_params.state, + base_url=new_params.uss_base_url, + oi_id=self._oir_id, + ovn=self._current_oir.ovn, + ) + self.record_query(q) + except QueryError as qe: + self.record_queries(qe.queries) + check.record_failed( + summary="Operational intent reference mutation failed", + details=qe.msg, + query_timestamps=qe.query_timestamps, + ) + return + + with self.check( + "Mutate operational intent reference response content is correct", + [self._primary_pid], + ) as check: + OIRValidator( + main_check=check, + scenario=self, + expected_manager=self._expected_manager, + participant_id=[self._primary_pid], + oir_params=new_params, + ).validate_mutated_oir( + expected_oir_id=self._oir_id, + mutated_oir=q, + previous_ovn=self._current_oir.ovn, + previous_version=self._current_oir.version, + ) + + self._oir_params = new_params + self._current_oir = oir + + def _test_delete_sub(self): + with self.check( + "Delete operational intent reference query succeeds", [self._primary_pid] + ) as check: + try: + oir, subs, q = self._dss.delete_op_intent( + self._oir_id, self._current_oir.ovn + ) + self.record_query(q) + except QueryError as qe: + self.record_queries(qe.queries) + check.record_failed( + summary="Operational intent reference deletion on primary DSS failed", + details=qe.msg, + query_timestamps=qe.query_timestamps, + ) + return + + with self.check( + "Delete operational intent reference response content is correct", + [self._primary_pid], + ) as check: + OIRValidator( + main_check=check, + scenario=self, + expected_manager=self._expected_manager, + participant_id=[self._primary_pid], + oir_params=self._oir_params, + ).validate_deleted_oir( + expected_oir_id=self._oir_id, + deleted_oir=q, + expected_ovn=self._current_oir.ovn, + expected_version=self._current_oir.version, + ) + + self._current_oir = None + + def _test_get_deleted_oir(self): + for secondary_dss in self._dss_read_instances: + self._confirm_secondary_has_no_oir(secondary_dss) + + def _confirm_secondary_has_no_oir(self, secondary_dss: DSSInstance): + with self.check( + "Secondary DSS should not return the deleted operational intent reference", + [secondary_dss.participant_id], + ) as check: + try: + oir, q = secondary_dss.get_op_intent_reference(self._oir_id) + self.record_query(q) + status = q.status_code + q_ts = [q.request.timestamp] + except QueryError as qe: + status = qe.cause_status_code + q_ts = qe.query_timestamps[-1] + if status != 404: + check.record_failed( + "Secondary DSS still has the deleted operational intent reference", + details=f"Expected 404, received {status}", + query_timestamps=q_ts, + ) + + def _shift_extents( + self, extents: List[api.Volume4D], delta: timedelta + ) -> List[api.Volume4D]: + return [ + api.Volume4D( + volume=ext.volume, + time_start=api.Time( + value=StringBasedDateTime(ext.time_start.value.datetime + delta) + ), + time_end=api.Time( + value=StringBasedDateTime(ext.time_end.value.datetime + delta) + ), + ) + for ext in extents + ] + + def cleanup(self): + self.begin_cleanup() + self._ensure_clean_workspace_step() + self.end_cleanup() diff --git a/monitoring/uss_qualifier/scenarios/astm/utm/dss/test_step_fragments.py b/monitoring/uss_qualifier/scenarios/astm/utm/dss/test_step_fragments.py index 2fd5766144..435cb956bd 100644 --- a/monitoring/uss_qualifier/scenarios/astm/utm/dss/test_step_fragments.py +++ b/monitoring/uss_qualifier/scenarios/astm/utm/dss/test_step_fragments.py @@ -20,7 +20,8 @@ def remove_op_intent( This function implements the test step fragment described in remove_op_intent.md. """ with scenario.check( - "Operational intent reference removed", dss.participant_id + "Operational intent references can be deleted by their owner", + dss.participant_id, ) as check: try: removed_ref, subscribers_to_notify, query = dss.delete_op_intent(oi_id, ovn) @@ -37,6 +38,30 @@ def remove_op_intent( # TODO: Attempt to notify subscribers +def cleanup_op_intent( + scenario: TestScenarioType, dss: DSSInstance, oi_id: EntityID +) -> None: + """Remove the specified operational intent reference from the DSS, if it exists.""" + + with scenario.check( + "Operational intent references can be queried by ID", [dss.participant_id] + ) as check: + try: + oir, q = dss.get_op_intent_reference(oi_id) + except fetch.QueryError as e: + scenario.record_queries(e.queries) + if e.cause_status_code != 404: + check.record_failed( + summary="OIR Get query returned code different from 200 or 404", + details=e.msg, + query_timestamps=e.query_timestamps, + ) + else: + return + + remove_op_intent(scenario, dss, oi_id, oir.ovn) + + def cleanup_sub( scenario: TestScenarioType, dss: DSSInstance, sub_id: EntityID ) -> Optional[MutatedSubscription]: @@ -65,7 +90,7 @@ def cleanup_sub( if deleted_sub.status_code != 200: check.record_failed( summary=f"Could not delete subscription {sub_id}", - details=f"When attempting to delete subscription {sub_id} from the DSS, received {deleted_sub.status_code}", + details=f"When attempting to delete subscription {sub_id} from the DSS, received status {deleted_sub.status_code}: {deleted_sub.response.json}", query_timestamps=[deleted_sub.request.timestamp], ) diff --git a/monitoring/uss_qualifier/scenarios/astm/utm/prep_planners.md b/monitoring/uss_qualifier/scenarios/astm/utm/prep_planners.md index 105eab423d..f897b7c6ac 100644 --- a/monitoring/uss_qualifier/scenarios/astm/utm/prep_planners.md +++ b/monitoring/uss_qualifier/scenarios/astm/utm/prep_planners.md @@ -80,7 +80,7 @@ In addition to foreign flight planners, uss_qualifier may have left operational ### Remove uss_qualifier op intents test step -#### [Remove op intents](./dss/remove_op_intent.md) +#### [Remove op intents](./dss/clean_workspace.md) The operational intent references managed by uss_qualifier discovered in the previous test case are removed. diff --git a/monitoring/uss_qualifier/suites/astm/netrid/f3411_22a.yaml b/monitoring/uss_qualifier/suites/astm/netrid/f3411_22a.yaml index ec4066ed5b..d4114c9c5d 100644 --- a/monitoring/uss_qualifier/suites/astm/netrid/f3411_22a.yaml +++ b/monitoring/uss_qualifier/suites/astm/netrid/f3411_22a.yaml @@ -31,6 +31,7 @@ actions: utm_client_identity: utm_client_identity id_generator: id_generator isa: service_area + client_identity: utm_client_identity problematically_big_area: problematically_big_area on_failure: Continue dss_instances_source: dss_instances diff --git a/monitoring/uss_qualifier/suites/astm/utm/dss_probing.md b/monitoring/uss_qualifier/suites/astm/utm/dss_probing.md index c9d4e631c4..d65c634548 100644 --- a/monitoring/uss_qualifier/suites/astm/utm/dss_probing.md +++ b/monitoring/uss_qualifier/suites/astm/utm/dss_probing.md @@ -4,12 +4,13 @@ ## [Actions](../../README.md#actions) -1. 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)) -2. 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)) -3. Scenario: [ASTM F3548-21 UTM DSS Operational Intent Reference Access Control](../../../scenarios/astm/utm/op_intent_ref_access_control.md) ([`scenarios.astm.utm.OpIntentReferenceAccessControl`](../../../scenarios/astm/utm/op_intent_ref_access_control.py)) -4. Scenario: [ASTM F3548-21 UTM DSS interoperability](../../../scenarios/astm/utm/dss_interoperability.md) ([`scenarios.astm.utm.DSSInteroperability`](../../../scenarios/astm/utm/dss_interoperability.py)) -5. 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)) -6. 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)) +1. Scenario: [ASTM SCD DSS: Operational Intent Reference Synchronization](../../../scenarios/astm/utm/dss/synchronization/op_intent_ref_synchronization.md) ([`scenarios.astm.utm.dss.synchronization.OIRSynchronization`](../../../scenarios/astm/utm/dss/synchronization/op_intent_ref_synchronization.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/op_intent_ref_access_control.md) ([`scenarios.astm.utm.OpIntentReferenceAccessControl`](../../../scenarios/astm/utm/op_intent_ref_access_control.py)) +5. Scenario: [ASTM F3548-21 UTM DSS interoperability](../../../scenarios/astm/utm/dss_interoperability.md) ([`scenarios.astm.utm.DSSInteroperability`](../../../scenarios/astm/utm/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)) ## [Checked requirements](../../README.md#checked-requirements) @@ -21,20 +22,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: 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: Operational Intent Reference Synchronization
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: 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: Operational Intent Reference Synchronization
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: 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: Operational Intent Reference Synchronization
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation DSS0015 @@ -91,6 +92,31 @@ Implemented ASTM SCD DSS: Subscription Synchronization + + DSS0210,2a + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2b + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2c + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2d + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2f + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + DSS0300 Implemented diff --git a/monitoring/uss_qualifier/suites/astm/utm/dss_probing.yaml b/monitoring/uss_qualifier/suites/astm/utm/dss_probing.yaml index 46b4fbb4b1..969b1e8e1e 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,14 @@ resources: planning_area: resources.astm.f3548.v21.PlanningAreaResource problematically_big_area: resources.VerticesResource actions: + - test_scenario: + scenario_type: scenarios.astm.utm.dss.synchronization.OIRSynchronization + resources: + dss: dss + other_instances: all_dss_instances + id_generator: id_generator + planning_area: planning_area + client_identity: utm_client_identity - test_scenario: scenario_type: scenarios.astm.utm.dss.SubscriptionSimple resources: diff --git a/monitoring/uss_qualifier/suites/astm/utm/f3548_21.md b/monitoring/uss_qualifier/suites/astm/utm/f3548_21.md index fb9a9fec82..56be1ddb80 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: 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: Operational Intent Reference Synchronization
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: 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: Operational Intent Reference Synchronization
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: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation + ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Operational Intent Reference Synchronization
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation DSS0015 @@ -110,6 +110,31 @@ Implemented ASTM SCD DSS: Subscription Synchronization + + DSS0210,2a + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2b + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2c + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2d + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2f + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + DSS0300 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..63c863a7c8 100644 --- a/monitoring/uss_qualifier/suites/astm/utm/f3548_21.yaml +++ b/monitoring/uss_qualifier/suites/astm/utm/f3548_21.yaml @@ -13,6 +13,7 @@ resources: nominal_planning_selector: resources.flight_planning.FlightPlannerCombinationSelectorResource? priority_planning_selector: resources.flight_planning.FlightPlannerCombinationSelectorResource? second_utm_auth: resources.communications.AuthAdapterResource? + utm_client_identity: resources.communications.ClientIdentityResource mock_uss: resources.interuss.mock_uss.client.MockUSSResource? id_generator: resources.interuss.IDGeneratorResource planning_area: resources.astm.f3548.v21.PlanningAreaResource @@ -47,6 +48,7 @@ actions: dss_instances: dss_instances dss_crdb_cluster: dss_crdb_cluster? second_utm_auth: second_utm_auth? + utm_client_identity: utm_client_identity flight_intents: non_conflicting_flights id_generator: id_generator planning_area: planning_area @@ -58,6 +60,7 @@ actions: resources: dss: dss second_utm_auth: second_utm_auth? + utm_client_identity: utm_client_identity all_dss_instances: dss_instances dss_crdb_cluster: dss_crdb_cluster? flight_intents: flight_intents diff --git a/monitoring/uss_qualifier/suites/faa/uft/message_signing.md b/monitoring/uss_qualifier/suites/faa/uft/message_signing.md index b3e69423ea..5f7197977b 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: 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: Operational Intent Reference Synchronization
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: 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: Operational Intent Reference Synchronization
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: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation + ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Operational Intent Reference Synchronization
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation DSS0015 @@ -93,6 +93,31 @@ Implemented ASTM SCD DSS: Subscription Synchronization + + DSS0210,2a + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2b + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2c + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2d + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2f + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + DSS0300 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..de4f003aa7 100644 --- a/monitoring/uss_qualifier/suites/faa/uft/message_signing.yaml +++ b/monitoring/uss_qualifier/suites/faa/uft/message_signing.yaml @@ -12,6 +12,7 @@ resources: invalid_flight_intents: resources.flight_planning.FlightIntentsResource id_generator: resources.interuss.IDGeneratorResource second_utm_auth: resources.communications.AuthAdapterResource? + utm_client_identity: resources.communications.ClientIdentityResource planning_area: resources.astm.f3548.v21.PlanningAreaResource problematically_big_area: resources.VerticesResource actions: @@ -36,6 +37,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 on_failure: Continue diff --git a/monitoring/uss_qualifier/suites/interuss/dss/all_tests.md b/monitoring/uss_qualifier/suites/interuss/dss/all_tests.md index 053a6748f6..a80ed5e545 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: 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: Operational Intent Reference Synchronization
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: 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: Operational Intent Reference Synchronization
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: 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: Operational Intent Reference Synchronization
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation DSS0015 @@ -478,6 +478,31 @@ Implemented ASTM SCD DSS: Subscription Synchronization + + DSS0210,2a + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2b + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2c + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2d + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2f + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + DSS0300 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..7f9d8c42cd 100644 --- a/monitoring/uss_qualifier/suites/interuss/dss/all_tests.yaml +++ b/monitoring/uss_qualifier/suites/interuss/dss/all_tests.yaml @@ -21,6 +21,7 @@ actions: dss_instances: f3548v21_dss_instances dss_crdb_cluster: dss_crdb_cluster? second_utm_auth: second_utm_auth? + utm_client_identity: utm_client_identity flight_intents: flight_intents id_generator: id_generator planning_area: planning_area @@ -32,6 +33,7 @@ actions: resources: dss: dss second_utm_auth: second_utm_auth? + utm_client_identity: utm_client_identity all_dss_instances: dss_instances dss_crdb_cluster: dss_crdb_cluster? flight_intents: flight_intents diff --git a/monitoring/uss_qualifier/suites/uspace/flight_auth.md b/monitoring/uss_qualifier/suites/uspace/flight_auth.md index f6500b179e..158797afd8 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: 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: Operational Intent Reference Synchronization
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: 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: Operational Intent Reference Synchronization
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: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation + ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Operational Intent Reference Synchronization
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation DSS0015 @@ -94,6 +94,31 @@ Implemented ASTM SCD DSS: Subscription Synchronization + + DSS0210,2a + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2b + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2c + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2d + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2f + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + DSS0300 Implemented diff --git a/monitoring/uss_qualifier/suites/uspace/flight_auth.yaml b/monitoring/uss_qualifier/suites/uspace/flight_auth.yaml index 20a5fe5d78..1f4bf39d4e 100644 --- a/monitoring/uss_qualifier/suites/uspace/flight_auth.yaml +++ b/monitoring/uss_qualifier/suites/uspace/flight_auth.yaml @@ -14,6 +14,7 @@ resources: dss_crdb_cluster: resources.interuss.crdb.CockroachDBClusterResource? id_generator: resources.interuss.IDGeneratorResource second_utm_auth: resources.communications.AuthAdapterResource? + utm_client_identity: resources.communications.ClientIdentityResource planning_area: resources.astm.f3548.v21.PlanningAreaResource problematically_big_area: resources.VerticesResource system_identity: resources.versioning.SystemIdentityResource? @@ -34,6 +35,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? diff --git a/monitoring/uss_qualifier/suites/uspace/required_services.md b/monitoring/uss_qualifier/suites/uspace/required_services.md index 2878452b5c..b6a04ee3a8 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: 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: Operational Intent Reference Synchronization
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: 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: Operational Intent Reference Synchronization
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: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation + ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM SCD DSS: Operational Intent Reference Synchronization
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation DSS0015 @@ -529,6 +529,31 @@ Implemented ASTM SCD DSS: Subscription Synchronization + + DSS0210,2a + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2b + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2c + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2d + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + + + DSS0210,2f + Implemented + ASTM SCD DSS: Operational Intent Reference Synchronization + DSS0300 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