diff --git a/monitoring/monitorlib/fetch/__init__.py b/monitoring/monitorlib/fetch/__init__.py index 74a0f44841..ee6e4610bb 100644 --- a/monitoring/monitorlib/fetch/__init__.py +++ b/monitoring/monitorlib/fetch/__init__.py @@ -459,6 +459,26 @@ def __init__(self, msg: str, queries: Optional[Union[Query, List[Query]]] = None else: self.queries = queries + @property + def last_status_code(self) -> int: + """Returns the status code of the last query present in this QueryError, + or 999 if this error contains no queries.""" + if len(self.queries) == 0: + return 999 + return self.queries[-1].status_code + + @property + def query_timestamps(self) -> List[datetime.datetime]: + """Returns the timestamps of all queries present in this QueryError.""" + return [q.request.timestamp for q in self.queries] + + @property + def last_query(self) -> Optional[Query]: + """Returns the last query present in this QueryError, or None if this error contains no queries.""" + if len(self.queries) == 0: + return None + return self.queries[-1] + @property def stacktrace(self) -> str: return stacktrace_string(self) diff --git a/monitoring/monitorlib/schema_validation.py b/monitoring/monitorlib/schema_validation.py index 8865e09914..8be19ed7b7 100644 --- a/monitoring/monitorlib/schema_validation.py +++ b/monitoring/monitorlib/schema_validation.py @@ -58,6 +58,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 d543476a4f..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: 380 +# 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/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 ed1e46c50f..ab93e62ecb 100644 --- a/monitoring/uss_qualifier/scenarios/astm/utm/dss/__init__.py +++ b/monitoring/uss_qualifier/scenarios/astm/utm/dss/__init__.py @@ -1,3 +1,4 @@ from .subscription_validation import SubscriptionValidation from .subscription_simple import SubscriptionSimple from .crdb_access import CRDBAccess +from .op_intent_ref_key_validation import OIRKeyValidation 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..870f49ac35 --- /dev/null +++ b/monitoring/uss_qualifier/scenarios/astm/utm/dss/op_intent_ref_key_validation.py @@ -0,0 +1,428 @@ +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), + ) + + # 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), + ) + + 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.last_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.last_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.last_query) + conflicting_query = qe.last_query + + 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.last_query) + conflicting_query = qe.last_query + + 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, + ) + + 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, + ) + + 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, + ) + + 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.last_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, + ) + + # 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, + ) + + # 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 1df3720f41..050531e0fa 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 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: 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 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: 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 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: 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 Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation DSS0015 @@ -86,6 +87,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 + 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..c51b28f1e7 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.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 e87ee41956..7097cdcda7 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 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: 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 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: 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 Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation DSS0015 @@ -105,6 +105,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 + 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..c4db0b35f5 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: diff --git a/monitoring/uss_qualifier/suites/faa/uft/message_signing.md b/monitoring/uss_qualifier/suites/faa/uft/message_signing.md index f21a93d9ed..1f24ed6e8e 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 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: 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 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: 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 Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation DSS0015 @@ -88,6 +88,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 + 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..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 1fb77d6395..b606909023 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 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: 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 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: 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 Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation DSS0015 @@ -473,6 +473,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 + DSS0300 Implemented diff --git a/monitoring/uss_qualifier/suites/uspace/flight_auth.md b/monitoring/uss_qualifier/suites/uspace/flight_auth.md index 524de3c54c..f0d9059e7f 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 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: 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 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: 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 Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation DSS0015 @@ -89,6 +89,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 + DSS0300 Implemented diff --git a/monitoring/uss_qualifier/suites/uspace/required_services.md b/monitoring/uss_qualifier/suites/uspace/required_services.md index c24c5e1eba..0cec8ee019 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 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: 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 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: 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 Key Validation
ASTM SCD DSS: Subscription Simple
ASTM SCD DSS: Subscription Synchronization
ASTM SCD DSS: Subscription Validation DSS0015 @@ -524,6 +524,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 + DSS0300 Implemented