diff --git a/.basedpyright/baseline.json b/.basedpyright/baseline.json index 71e300ef4ce..3409449a3b5 100644 --- a/.basedpyright/baseline.json +++ b/.basedpyright/baseline.json @@ -13366,16 +13366,6 @@ } } ], - "./monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/generic.py": [ - { - "code": "reportArgumentType", - "range": { - "startColumn": 16, - "endColumn": 31, - "lineCount": 1 - } - } - ], "./monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/oir_api_validator.py": [ { "code": "reportArgumentType", diff --git a/monitoring/uss_qualifier/configurations/dev/message_signing.yaml b/monitoring/uss_qualifier/configurations/dev/message_signing.yaml index a332659b6eb..89404bca8a2 100644 --- a/monitoring/uss_qualifier/configurations/dev/message_signing.yaml +++ b/monitoring/uss_qualifier/configurations/dev/message_signing.yaml @@ -80,4 +80,4 @@ v1: pass_condition: elements: count: - equal_to: 6 # 2 DatastoreAccess, 1 PoolInfo, 1 GetSystemVersions, 1 MakeUssReport, 1 EvaluateSystemVersions + equal_to: 7 # 2 DatastoreAccess, 1 PoolInfo, 1 GetSystemVersions, 1 SCDAuthenticationValidation, 1 MakeUssReport, 1 EvaluateSystemVersions diff --git a/monitoring/uss_qualifier/resources/astm/f3548/v21/uss.py b/monitoring/uss_qualifier/resources/astm/f3548/v21/uss.py new file mode 100644 index 00000000000..da6793eba61 --- /dev/null +++ b/monitoring/uss_qualifier/resources/astm/f3548/v21/uss.py @@ -0,0 +1,15 @@ +from dataclasses import dataclass + +from monitoring.monitorlib.infrastructure import UTMClientSession + + +@dataclass(frozen=True) +class USSInstance: + participant_id: str + """Participant responsible for this USS instance""" + + base_url: str + """Base URL for the USS instance according to the ASTM F3548-21 API""" + + client: UTMClientSession + """Requests session that enables easy access to ASTM-specified UTM endpoints""" diff --git a/monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/generic.py b/monitoring/uss_qualifier/scenarios/astm/utm/auth_validator.py similarity index 57% rename from monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/generic.py rename to monitoring/uss_qualifier/scenarios/astm/utm/auth_validator.py index 7a39afa1f2e..765db652137 100644 --- a/monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/generic.py +++ b/monitoring/uss_qualifier/scenarios/astm/utm/auth_validator.py @@ -1,46 +1,59 @@ +from typing import Protocol + from uas_standards.astm.f3548.v21.constants import Scope from monitoring.monitorlib import fetch, schema_validation from monitoring.monitorlib.auth import InvalidTokenSignatureAuth from monitoring.monitorlib.infrastructure import ( + UTMClientSession, utm_client_session_factory, ) from monitoring.monitorlib.schema_validation import F3548_21 -from monitoring.uss_qualifier.resources.astm.f3548.v21.dss import DSSInstance from monitoring.uss_qualifier.scenarios.scenario import TestScenario +class AuthValidationTarget(Protocol): + @property + def participant_id(self) -> str: ... + + @property + def base_url(self) -> str: ... + + @property + def client(self) -> UTMClientSession: ... + + class GenericAuthValidator: """ - Utility class for common DSS authentication validation requirements. + Utility class for common authentication validation requirements. """ def __init__( self, scenario: TestScenario, - dss: DSSInstance, + target: AuthValidationTarget, valid_scope: Scope, ): - self._pid = dss.participant_id + self._pid = target.participant_id self._scenario = scenario - self._authenticated_session = dss.client + self._authenticated_session = target.client self._invalid_token_session = utm_client_session_factory.get_session( - dss.base_url, auth_adapter=InvalidTokenSignatureAuth() + target.base_url, auth_adapter=InvalidTokenSignatureAuth() ) self._no_auth_session = utm_client_session_factory.get_session( - dss.base_url, auth_adapter=None + target.base_url, auth_adapter=None ) self._valid_scope = valid_scope def query_no_auth(self, **query_kwargs) -> fetch.Query: - """Issue a query to the DSS without any credentials being passed""" + """Issue a query to the authentication target without any credentials being passed""" q = fetch.query_and_describe(client=self._no_auth_session, **query_kwargs) self._scenario.record_query(q) return q def query_invalid_token(self, **query_kwargs) -> fetch.Query: """ - Issue a query to the DSS with an invalid token signature, but a valid token. + Issue a query to the authentication target with an invalid token signature, but a well-formed token. An appropriate scope is provided. """ q = fetch.query_and_describe( @@ -53,16 +66,15 @@ def query_invalid_token(self, **query_kwargs) -> fetch.Query: def query_missing_scope(self, **query_kwargs) -> fetch.Query: """ - Issue a query to the DSS with a valid token, but omits specifying a scope. + Issue a query to the authentication target with a valid token, but omits specifying a scope. """ q = fetch.query_and_describe(client=self._authenticated_session, **query_kwargs) self._scenario.record_query(q) return q - def query_wrong_scope(self, scope: str, **query_kwargs) -> fetch.Query: + def query_with_scope(self, scope: str, **query_kwargs) -> fetch.Query: """ - Issue a query to the DSS with a valid token, but with a scope that is not allowed - to perform the operation. + Issue a query to the authentication target with a valid token for the supplied scope. Note that the auth adapter needs to be able to request a token with this scope. """ q = fetch.query_and_describe( @@ -75,7 +87,7 @@ def query_wrong_scope(self, scope: str, **query_kwargs) -> fetch.Query: def query_valid_auth(self, **query_kwargs) -> fetch.Query: """ - Issue a query to the DSS with valid credentials. + Issue a query to the authentication target with valid credentials. """ q = fetch.query_and_describe( client=self._authenticated_session, @@ -91,15 +103,23 @@ def verify_4xx_response(self, q: fetch.Query): with self._scenario.check( "Unauthorized requests return the proper error message body", self._pid ) as check: - errors = schema_validation.validate( - F3548_21.OpenAPIPath, - F3548_21.ErrorResponse, - q.response.json, - ) - if errors: + if q.response.json is None: check.record_failed( - summary="Unexpected error response body", - details=f"Response body for {q.request.method} query to {q.request.url} failed validation: {errors}, " - f"body content was: {q.response.json}", + summary="Error response body is not JSON", + details=f"Response body for {q.request.method} query to {q.request.url} is not valid JSON, " + f"body content was {q.response.get('body', '')!r}", query_timestamps=[q.request.timestamp], ) + else: + errors = schema_validation.validate( + F3548_21.OpenAPIPath, + F3548_21.ErrorResponse, + q.response.json, + ) + if errors: + check.record_failed( + summary="Unexpected error response body", + details=f"Response body for {q.request.method} query to {q.request.url} failed validation: {errors}, " + f"body content was: {q.response.json}", + query_timestamps=[q.request.timestamp], + ) diff --git a/monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/authentication_validation.py b/monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/authentication_validation.py index 52df92d2a2a..3a423c0dd6e 100644 --- a/monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/authentication_validation.py +++ b/monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/authentication_validation.py @@ -15,6 +15,9 @@ from monitoring.uss_qualifier.resources.interuss.id_generator import IDGeneratorResource from monitoring.uss_qualifier.resources.planning_area import PlanningAreaResource from monitoring.uss_qualifier.resources.resource import MissingResourceError +from monitoring.uss_qualifier.scenarios.astm.utm.auth_validator import ( + GenericAuthValidator, +) from monitoring.uss_qualifier.scenarios.astm.utm.dss import test_step_fragments from monitoring.uss_qualifier.scenarios.astm.utm.dss.authentication.availability_api_validator import ( AvailabilityAuthValidator, @@ -22,9 +25,6 @@ from monitoring.uss_qualifier.scenarios.astm.utm.dss.authentication.cr_api_validator import ( ConstraintRefAuthValidator, ) -from monitoring.uss_qualifier.scenarios.astm.utm.dss.authentication.generic import ( - GenericAuthValidator, -) from monitoring.uss_qualifier.scenarios.astm.utm.dss.authentication.oir_api_validator import ( OperationalIntentRefAuthValidator, ) @@ -40,7 +40,7 @@ class AuthenticationValidation(TestScenario): A scenario that verifies that the DSS properly authenticates requests to all its endpoints, and properly validates the scopes of the requests depending on the action being performed. - Note that this scenario does not verif that a DSS only allows an entity owner to mutate or delete them: + Note that this scenario does not verify that a DSS only allows an entity owner to mutate or delete them: this is covered in other scenarios. """ diff --git a/monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/availability_api_validator.py b/monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/availability_api_validator.py index fe1cf6b3827..c6b7cfccaec 100644 --- a/monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/availability_api_validator.py +++ b/monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/availability_api_validator.py @@ -10,7 +10,7 @@ from monitoring.monitorlib.fetch import QueryError, QueryType from monitoring.monitorlib.infrastructure import UTMClientSession from monitoring.uss_qualifier.resources.astm.f3548.v21.dss import DSSInstance -from monitoring.uss_qualifier.scenarios.astm.utm.dss.authentication.generic import ( +from monitoring.uss_qualifier.scenarios.astm.utm.auth_validator import ( GenericAuthValidator, ) from monitoring.uss_qualifier.scenarios.scenario import PendingCheck, TestScenario @@ -113,7 +113,7 @@ def _verify_read(self): # Valid credentials but wrong scope: if self._test_wrong_scope: - wrong_scope_q = self._gen_val.query_wrong_scope( + wrong_scope_q = self._gen_val.query_with_scope( scope=self._test_wrong_scope, **query_kwargs ) with self._scenario.check( @@ -226,7 +226,7 @@ def _verify_set(self): # Valid credentials but wrong scope: if self._test_wrong_scope: - wrong_scope_q = self._gen_val.query_wrong_scope( + wrong_scope_q = self._gen_val.query_with_scope( scope=self._test_wrong_scope, **query_kwargs ) with self._scenario.check( diff --git a/monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/cr_api_validator.py b/monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/cr_api_validator.py index 9ecef2b1f1a..499fa4184a2 100644 --- a/monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/cr_api_validator.py +++ b/monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/cr_api_validator.py @@ -17,7 +17,7 @@ from monitoring.monitorlib.infrastructure import UTMClientSession from monitoring.uss_qualifier.resources import PlanningAreaResource from monitoring.uss_qualifier.resources.astm.f3548.v21.dss import DSSInstance -from monitoring.uss_qualifier.scenarios.astm.utm.dss.authentication.generic import ( +from monitoring.uss_qualifier.scenarios.astm.utm.auth_validator import ( GenericAuthValidator, ) from monitoring.uss_qualifier.scenarios.scenario import PendingCheck, TestScenario @@ -137,7 +137,7 @@ def _verify_cr_creation(self): # Valid credentials but wrong scope: if self._test_wrong_scope: - wrong_scope_q = self._gen_val.query_wrong_scope( + wrong_scope_q = self._gen_val.query_with_scope( scope=self._test_wrong_scope, **query_kwargs ) with self._scenario.check( @@ -232,7 +232,7 @@ def _verify_cr_get(self): # Valid credentials but wrong scope if self._test_wrong_scope: - query_wrong_scope = self._gen_val.query_wrong_scope( + query_wrong_scope = self._gen_val.query_with_scope( scope=self._test_wrong_scope, **query_kwargs ) with self._scenario.check( @@ -328,7 +328,7 @@ def _verify_cr_mutation(self): self._gen_val.verify_4xx_response(no_scope_q) if self._test_wrong_scope: - wrong_scope_q = self._gen_val.query_wrong_scope( + wrong_scope_q = self._gen_val.query_with_scope( scope=self._test_wrong_scope, **query_kwargs ) with self._scenario.check( @@ -415,7 +415,7 @@ def _verify_cr_deletion(self): self._gen_val.verify_4xx_response(no_scope_q) if self._test_wrong_scope: - wrong_scope_q = self._gen_val.query_wrong_scope( + wrong_scope_q = self._gen_val.query_with_scope( scope=self._test_wrong_scope, **query_kwargs ) with self._scenario.check( @@ -506,7 +506,7 @@ def _verify_cr_search(self): self._gen_val.verify_4xx_response(no_scope_q) if self._test_wrong_scope: - wrong_scope_q = self._gen_val.query_wrong_scope( + wrong_scope_q = self._gen_val.query_with_scope( scope=self._test_wrong_scope, **query_kwargs ) with self._scenario.check( diff --git a/monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/oir_api_validator.py b/monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/oir_api_validator.py index d5d68838181..74d03f9a9b3 100644 --- a/monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/oir_api_validator.py +++ b/monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/oir_api_validator.py @@ -17,7 +17,7 @@ from monitoring.monitorlib.infrastructure import UTMClientSession from monitoring.uss_qualifier.resources import PlanningAreaResource from monitoring.uss_qualifier.resources.astm.f3548.v21.dss import DSSInstance -from monitoring.uss_qualifier.scenarios.astm.utm.dss.authentication.generic import ( +from monitoring.uss_qualifier.scenarios.astm.utm.auth_validator import ( GenericAuthValidator, ) from monitoring.uss_qualifier.scenarios.scenario import PendingCheck, TestScenario @@ -142,7 +142,7 @@ def _verify_oir_creation(self): # Valid credentials but wrong scope: if self._test_wrong_scope: - wrong_scope_q = self._gen_val.query_wrong_scope( + wrong_scope_q = self._gen_val.query_with_scope( scope=self._test_wrong_scope, **query_kwargs ) with self._scenario.check( @@ -236,7 +236,7 @@ def _verify_oir_get(self): # Valid credentials but wrong scope if self._test_wrong_scope: - query_wrong_scope = self._gen_val.query_wrong_scope( + query_wrong_scope = self._gen_val.query_with_scope( scope=self._test_wrong_scope, **query_kwargs ) with self._scenario.check( @@ -318,7 +318,7 @@ def _verify_oir_mutation(self): self._gen_val.verify_4xx_response(no_scope_q) if self._test_wrong_scope: - wrong_scope_q = self._gen_val.query_wrong_scope( + wrong_scope_q = self._gen_val.query_with_scope( scope=self._test_wrong_scope, **query_kwargs ) with self._scenario.check( @@ -405,7 +405,7 @@ def _verify_oir_deletion(self): self._gen_val.verify_4xx_response(no_scope_q) if self._test_wrong_scope: - wrong_scope_q = self._gen_val.query_wrong_scope( + wrong_scope_q = self._gen_val.query_with_scope( scope=self._test_wrong_scope, **query_kwargs ) with self._scenario.check( @@ -482,7 +482,7 @@ def _verify_oir_search(self): self._gen_val.verify_4xx_response(no_scope_q) if self._test_wrong_scope: - wrong_scope_q = self._gen_val.query_wrong_scope( + wrong_scope_q = self._gen_val.query_with_scope( scope=self._test_wrong_scope, **query_kwargs ) with self._scenario.check( diff --git a/monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/sub_api_validator.py b/monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/sub_api_validator.py index daa46e55447..f92b0979df4 100644 --- a/monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/sub_api_validator.py +++ b/monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/sub_api_validator.py @@ -14,7 +14,7 @@ from monitoring.monitorlib.mutate.scd import MutatedSubscription from monitoring.uss_qualifier.resources import PlanningAreaResource from monitoring.uss_qualifier.resources.astm.f3548.v21.dss import DSSInstance -from monitoring.uss_qualifier.scenarios.astm.utm.dss.authentication.generic import ( +from monitoring.uss_qualifier.scenarios.astm.utm.auth_validator import ( GenericAuthValidator, ) from monitoring.uss_qualifier.scenarios.scenario import PendingCheck, TestScenario @@ -143,7 +143,7 @@ def _verify_sub_creation(self): # Valid credentials but wrong scope: if self._test_wrong_scope: - wrong_scope_q = self._gen_val.query_wrong_scope( + wrong_scope_q = self._gen_val.query_with_scope( scope=self._test_wrong_scope, **query_kwargs ) with self._scenario.check( @@ -224,7 +224,7 @@ def _verify_sub_get(self): self._gen_val.verify_4xx_response(query_missing_scope) if self._test_wrong_scope: - query_wrong_scope = self._gen_val.query_wrong_scope( + query_wrong_scope = self._gen_val.query_with_scope( scope=self._test_wrong_scope, **query_kwargs ) with self._scenario.check( @@ -313,7 +313,7 @@ def _verify_sub_mutation(self): self._gen_val.verify_4xx_response(query_missing_scope) if self._test_wrong_scope: - query_wrong_scope = self._gen_val.query_wrong_scope( + query_wrong_scope = self._gen_val.query_with_scope( scope=self._test_wrong_scope, **query_kwargs ) with self._scenario.check( @@ -399,7 +399,7 @@ def _verify_sub_deletion(self): self._gen_val.verify_4xx_response(query_missing_scope) if self._test_wrong_scope: - query_wrong_scope = self._gen_val.query_wrong_scope( + query_wrong_scope = self._gen_val.query_with_scope( scope=self._test_wrong_scope, **query_kwargs ) with self._scenario.check( @@ -495,7 +495,7 @@ def _verify_sub_search(self): self._gen_val.verify_4xx_response(query_missing_scope) if self._test_wrong_scope: - query_wrong_scope = self._gen_val.query_wrong_scope( + query_wrong_scope = self._gen_val.query_with_scope( scope=self._test_wrong_scope, **query_kwargs ) with self._scenario.check( diff --git a/monitoring/uss_qualifier/scenarios/astm/utm/uss_authentication/__init__.py b/monitoring/uss_qualifier/scenarios/astm/utm/uss_authentication/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/monitoring/uss_qualifier/scenarios/astm/utm/uss_authentication/endpoint_auth_validator.py b/monitoring/uss_qualifier/scenarios/astm/utm/uss_authentication/endpoint_auth_validator.py new file mode 100644 index 00000000000..da7fd80a737 --- /dev/null +++ b/monitoring/uss_qualifier/scenarios/astm/utm/uss_authentication/endpoint_auth_validator.py @@ -0,0 +1,141 @@ +from uas_standards.astm.f3548.v21.constants import Scope + +from monitoring.uss_qualifier.scenarios.astm.utm.auth_validator import ( + AuthValidationTarget, + GenericAuthValidator, +) +from monitoring.uss_qualifier.scenarios.scenario import TestScenario + + +class EndpointAuthValidator: + """ + Verifies authentication and authorization of a single endpoint by issuing requests with + missing credentials (expect 401), invalid credentials (expect 401), an incorrect scope + (expect 403), and each valid scope (expect anything other than 401 or 403). + + Each rejected request is also checked for a valid ErrorResponse body. + + Checks for valid scopes are only performed when `test_valid_credentials` is True. + + The calling scenario's documentation must declare these checks in the current test step: + * " with missing credentials" + * " with invalid credentials" + * " with an incorrect scope" + * "Unauthorized requests return the proper error message body" + * " with valid credentials" (when test_valid_credentials is True) + """ + + def __init__( + self, + scenario: TestScenario, + operation_name: str, + auth_target: AuthValidationTarget, + client_scopes: set[str], + valid_scopes: list[Scope], + query_kwargs: dict, + test_valid_credentials: bool = False, + ): + if not valid_scopes: + raise ValueError("valid_scopes must not be empty") + generic_validator = GenericAuthValidator( + scenario, + auth_target, + valid_scopes[0], + ) + self._scenario = scenario + self._operation_name = operation_name + self._generic_validator = generic_validator + self._pid = auth_target.participant_id + self._client_scopes = client_scopes + self._valid_scopes = valid_scopes + self._query_kwargs = query_kwargs + self._test_valid_credentials = test_valid_credentials + + def verify_endpoint_authentication(self): + """Executes each auth scenario for missing, invalid, incorrectly scoped, and valid credentials""" + self._verify_missing_credentials() + self._verify_invalid_credentials() + self._verify_incorrect_scope() + if self._test_valid_credentials: + for scope in self._valid_scopes: + self._verify_valid_credentials(scope) + + def _verify_missing_credentials(self): + query = self._generic_validator.query_no_auth(**self._query_kwargs) + with self._scenario.check( + f"{self._operation_name} with missing credentials", + self._pid, + ) as check: + if query.status_code != 401: + check.record_failed( + summary=f"Expected 401, got {query.status_code}", + query_timestamps=[query.request.timestamp], + ) + self._generic_validator.verify_4xx_response(query) + + def _verify_invalid_credentials(self): + query = self._generic_validator.query_invalid_token(**self._query_kwargs) + with self._scenario.check( + f"{self._operation_name} with invalid credentials", + self._pid, + ) as check: + if query.status_code != 401: + check.record_failed( + summary=f"Expected 401, got {query.status_code}", + query_timestamps=[query.request.timestamp], + ) + self._generic_validator.verify_4xx_response(query) + + def _verify_incorrect_scope(self): + scope = self._find_incorrect_scope() + if scope is None: + self._scenario.record_note( + f"{self._operation_name} incorrect scope", + f"{self._operation_name}: no incorrect scope available; incorrect-scope check skipped", + ) + return + + query = self._generic_validator.query_with_scope(scope, **self._query_kwargs) + with self._scenario.check( + f"{self._operation_name} with an incorrect scope", + self._pid, + ) as check: + if query.status_code != 403: + check.record_failed( + summary=f"Expected 403, got {query.status_code}", + query_timestamps=[query.request.timestamp], + ) + self._generic_validator.verify_4xx_response(query) + + def _verify_valid_credentials(self, scope: Scope): + if scope not in self._client_scopes: + self._scenario.record_note( + f"{self._operation_name} valid scope {scope.value}", + "scope not available; valid-scope check skipped", + ) + return + + query = self._generic_validator.query_with_scope(scope, **self._query_kwargs) + with self._scenario.check( + f"{self._operation_name} with valid credentials", + self._pid, + ) as check: + if query.status_code in (401, 403): + check.record_failed( + summary=f"Valid credentials with scope {scope.value} were rejected with {query.status_code}", + query_timestamps=[query.request.timestamp], + ) + + def _find_incorrect_scope(self) -> str | None: + return self._find_incorrect_f3548_scope() or self._find_incorrect_other_scope() + + def _find_incorrect_f3548_scope(self) -> str | None: + for scope in sorted(Scope): + if scope not in self._valid_scopes and scope.value in self._client_scopes: + return scope.value + + def _find_incorrect_other_scope(self) -> str | None: + valid_scopes = {s.value for s in self._valid_scopes} + for scope in sorted(self._client_scopes): + if scope != "" and scope not in valid_scopes: + return scope diff --git a/monitoring/uss_qualifier/scenarios/astm/utm/uss_authentication/scd_authentication_validation.md b/monitoring/uss_qualifier/scenarios/astm/utm/uss_authentication/scd_authentication_validation.md new file mode 100644 index 00000000000..dfb2a27739e --- /dev/null +++ b/monitoring/uss_qualifier/scenarios/astm/utm/uss_authentication/scd_authentication_validation.md @@ -0,0 +1,108 @@ +# ASTM SCD USS: Interfaces authentication test scenario + +## Overview + +Ensures that a USS rejects improperly-authenticated requests to the strategic coordination endpoints required by **[astm.f3548.v21.USS0105,1](../../../../requirements/astm/f3548/v21.md)**, **[astm.f3548.v21.USS0105,3](../../../../requirements/astm/f3548/v21.md)**, and **[astm.f3548.v21.USS0105,4](../../../../requirements/astm/f3548/v21.md)**. + +## Resources + +### tested_uss + +[`FlightPlannerResource`](../../../../resources/flight_planning/flight_planners.py) for the USS under test. + +### utm_auth + +[`AuthAdapterResource`](../../../../resources/communications/auth_adapter.py) used to obtain credentials when acting as a USS to call the endpoints of the USS under test. + +### dss + +[`DSSInstanceResource`](../../../../resources/astm/f3548/v21/dss.py) used to find the operational intent reference created by the USS under test, which provides the USS base URL. + +### flight_intents + +[`FlightIntentsResource`](../../../../resources/flight_planning/flight_intents_resource.py) providing `flight_1`, a nominal flight planned by the USS under test so that its base URL can be discovered. + +## Setup test case + +This test case sets up the rest of the scenario by collecting the USS base URL for the USS under test. + +### Successfully plan flight test step + +uss_qualifier instructs the USS under test to plan a flight, queries the DSS for the resulting operational intent reference, and records the USS base URL from that reference for use in the rest of this scenario. + +#### [Plan successfully](../../../flight_planning/plan_flight_intent.md) + +#### [Validate operational intent is shared](../validate_shared_operational_intent.md) + +## Endpoint authorization test case + +This test case ensures that the USS properly authenticates requests to its strategic coordination endpoints. + +### Get operational intent details authentication test step + +uss_qualifier queries the USS under test's getOperationalIntentDetails endpoint for an arbitrary operational intent ID using several kinds of credentials not permitted by [the OpenAPI specification](https://github.com/astm-utm/Protocol/blob/v1.0.0/utm.yaml#L3471-L3473). + +#### ⚠️ Get operational intent details with missing credentials check + +If the USS under test allows the fetching of operational intent details without any credentials being presented, it is in violation of **[astm.f3548.v21.USS0105,1](../../../../requirements/astm/f3548/v21.md)**. + +#### ⚠️ Get operational intent details with invalid credentials check + +If the USS under test allows the fetching of operational intent details with credentials that are well-formed but invalid, it is in violation of **[astm.f3548.v21.USS0105,1](../../../../requirements/astm/f3548/v21.md)**. + +#### ⚠️ Get operational intent details with an incorrect scope check + +If the USS under test allows the fetching of operational intent details with valid credentials but an incorrect scope, it is in violation of **[astm.f3548.v21.USS0105,1](../../../../requirements/astm/f3548/v21.md)**. + +#### ⚠️ Unauthorized requests return the proper error message body check + +If, for any of the rejected requests above, the USS under test does not return a proper error message body, it fails to properly implement the OpenAPI specification that is part of **[astm.f3548.v21.USS0105,1](../../../../requirements/astm/f3548/v21.md)**. + +### Notify operational intent details changed authentication test step + +uss_qualifier sends the USS under test's notifyOperationalIntentDetailsChanged endpoint a notification that an arbitrary operational intent was removed, using several kinds of credentials not permitted by [the OpenAPI specification](https://github.com/astm-utm/Protocol/blob/v1.0.0/utm.yaml#L3610-L3612). + +#### ⚠️ Notify operational intent details changed with missing credentials check + +If the USS under test accepts an operational intent details change notification without any credentials being presented, it is in violation of **[astm.f3548.v21.USS0105,3](../../../../requirements/astm/f3548/v21.md)**. + +#### ⚠️ Notify operational intent details changed with invalid credentials check + +If the USS under test accepts an operational intent details change notification with credentials that are well-formed but invalid, it is in violation of **[astm.f3548.v21.USS0105,3](../../../../requirements/astm/f3548/v21.md)**. + +#### ⚠️ Notify operational intent details changed with an incorrect scope check + +If the USS under test accepts an operational intent details change notification with valid credentials but an incorrect scope, it is in violation of **[astm.f3548.v21.USS0105,3](../../../../requirements/astm/f3548/v21.md)**. + +#### ⚠️ Unauthorized requests return the proper error message body check + +If, for any of the rejected requests above, the USS under test does not return a proper error message body, it fails to properly implement the OpenAPI specification that is part of **[astm.f3548.v21.USS0105,3](../../../../requirements/astm/f3548/v21.md)**. + +### Make USS report authentication test step + +uss_qualifier submits a dummy report to the USS under test's makeUssReport endpoint using several kinds of credentials, both permitted and not permitted by [the OpenAPI specification](https://github.com/astm-utm/Protocol/blob/v1.0.0/utm.yaml#L3822-L3832). + +#### ⚠️ Make USS report with missing credentials check + +If the USS under test accepts a request to make a USS report without any credentials being presented, it is in violation of **[astm.f3548.v21.USS0105,4](../../../../requirements/astm/f3548/v21.md)**. + +#### ⚠️ Make USS report with invalid credentials check + +If the USS under test accepts a request to make a USS report with credentials that are well-formed but invalid, it is in violation of **[astm.f3548.v21.USS0105,4](../../../../requirements/astm/f3548/v21.md)**. + +#### ⚠️ Make USS report with an incorrect scope check + +If the USS under test accepts a request to make a USS report with valid credentials but an incorrect scope, it is in violation of **[astm.f3548.v21.USS0105,4](../../../../requirements/astm/f3548/v21.md)**. + +#### ⚠️ Unauthorized requests return the proper error message body check + +If, for any of the rejected requests above, the USS under test does not return a proper error message body, it fails to properly implement the OpenAPI specification that is part of **[astm.f3548.v21.USS0105,4](../../../../requirements/astm/f3548/v21.md)**. + +#### ⚠️ Make USS report with valid credentials check + +If the USS under test rejects a request to make a USS report with a 401 or 403 when valid credentials with an appropriate scope are presented, it is in violation of **[astm.f3548.v21.USS0105,4](../../../../requirements/astm/f3548/v21.md)**. + +## Cleanup + +### ⚠️ Successful flight deletion check +**[interuss.automated_testing.flight_planning.DeleteFlightSuccess](../../../../requirements/interuss/automated_testing/flight_planning.md)** diff --git a/monitoring/uss_qualifier/scenarios/astm/utm/uss_authentication/scd_authentication_validation.py b/monitoring/uss_qualifier/scenarios/astm/utm/uss_authentication/scd_authentication_validation.py new file mode 100644 index 00000000000..5e8c05bf4d7 --- /dev/null +++ b/monitoring/uss_qualifier/scenarios/astm/utm/uss_authentication/scd_authentication_validation.py @@ -0,0 +1,247 @@ +import uuid + +import arrow +from implicitdict import StringBasedDateTime +from uas_standards.astm.f3548.v21.api import ( + OPERATIONS, + ErrorReport, + ExchangeRecord, + ExchangeRecordRecorderRole, + OperationalIntentReference, + OperationID, + PutOperationalIntentDetailsParameters, + SubscriptionState, + Time, +) +from uas_standards.astm.f3548.v21.constants import Scope + +from monitoring.monitorlib.clients.flight_planning.flight_info import ( + AirspaceUsageState, + UasState, +) +from monitoring.monitorlib.clients.flight_planning.flight_info_template import ( + FlightInfoTemplate, +) +from monitoring.monitorlib.fetch import QueryType +from monitoring.monitorlib.infrastructure import ( + utm_client_session_factory, +) +from monitoring.uss_qualifier.resources.astm.f3548.v21.dss import ( + DSSInstanceResource, +) +from monitoring.uss_qualifier.resources.astm.f3548.v21.uss import ( + USSInstance, +) +from monitoring.uss_qualifier.resources.communications import AuthAdapterResource +from monitoring.uss_qualifier.resources.flight_planning import ( + FlightIntentsResource, + FlightPlannerResource, +) +from monitoring.uss_qualifier.resources.flight_planning.flight_intent_validation import ( + ExpectedFlightIntent, + validate_flight_intent_templates, +) +from monitoring.uss_qualifier.scenarios.astm.utm.test_steps import ( + OpIntentValidator, +) +from monitoring.uss_qualifier.scenarios.astm.utm.uss_authentication.endpoint_auth_validator import ( + EndpointAuthValidator, +) +from monitoring.uss_qualifier.scenarios.flight_planning.test_steps import ( + cleanup_flights, + plan_flight, +) +from monitoring.uss_qualifier.scenarios.scenario import ( + ScenarioCannotContinueError, + TestScenario, +) +from monitoring.uss_qualifier.suites.suite import ExecutionContext + + +class SCDAuthenticationValidation(TestScenario): + """ + A scenario that verifies that a USS properly authenticates requests to the + strategic coordination endpoints required by ASTM F3548-21 USS0105,1, 3, + and 4 with the appropriate status code and error response body. + """ + + def __init__( + self, + tested_uss: FlightPlannerResource, + utm_auth: AuthAdapterResource, + dss: DSSInstanceResource, + flight_intents: FlightIntentsResource, + ): + super().__init__() + self.tested_uss = tested_uss + self.utm_auth = utm_auth + self.flight_1 = self._init_flight_template(flight_intents=flight_intents) + self.dss = dss.get_instance( + { + Scope.StrategicCoordination: "search for operational intent references to obtain USS base URL" + } + ) + self.utm_auth.assert_scopes_available( + scopes_required={ + Scope.StrategicCoordination: "act as a peer USS calling the USS under test" + }, + consumer_name=f"{self.__class__.__name__} test scenario", + ) + + def _init_flight_template( + self, flight_intents: FlightIntentsResource + ) -> FlightInfoTemplate: + templates = flight_intents.get_flight_intents() + expected_flight_intents = [ + ExpectedFlightIntent( + "flight_1", + "Flight 1", + usage_state=AirspaceUsageState.Planned, + uas_state=UasState.Nominal, + ), + ] + try: + validate_flight_intent_templates(templates, expected_flight_intents) + except ValueError as e: + raise ValueError( + f"`{self.me()}` TestScenario requirements for flight_intents not met: {e}" + ) + return templates["flight_1"] + + def run(self, context: ExecutionContext): + self.begin_test_scenario(context) + self.record_note("Tested USS", self.tested_uss.participant_id) + + self.begin_test_case("Setup") + self.begin_test_step("Successfully plan flight") + oi_ref = self._resolve_oi_ref() + uss = self._resolve_uss(oi_ref) + self.record_note("USS base URL", uss.base_url) + self.end_test_step() + self.end_test_case() + + self.begin_test_case("Endpoint authorization") + + self.begin_test_step("Get operational intent details authentication") + self._verify_get_oi_details(uss) + self.end_test_step() + + self.begin_test_step("Notify operational intent details changed authentication") + self._verify_notify_oi_details_changed(uss) + self.end_test_step() + + self.begin_test_step("Make USS report authentication") + self._verify_make_uss_report(uss) + self.end_test_step() + + self.end_test_case() + + self.end_test_scenario() + + def _resolve_oi_ref(self) -> OperationalIntentReference | None: + flight = self.flight_1.resolve(self.time_context.evaluate_now()) + with OpIntentValidator( + self, + self.tested_uss.client, + self.dss, + flight.basic_information.area.bounding_volume.to_f3548v21(), + ) as validator: + _, _, as_planned = plan_flight( + self, + self.tested_uss.client, + flight, + ) + return validator.expect_shared(as_planned) + + def _resolve_uss(self, oi_ref: OperationalIntentReference | None) -> USSInstance: + if oi_ref is None: + raise ScenarioCannotContinueError( + "Could not find the operational intent reference created by the USS under test" + ) + + base_url = oi_ref.uss_base_url + return USSInstance( + participant_id=self.tested_uss.participant_id, + base_url=base_url, + client=utm_client_session_factory.get_session( + base_url, self.utm_auth.adapter + ), + ) + + def _verify_get_oi_details(self, uss: USSInstance): + op = OPERATIONS[OperationID.GetOperationalIntentDetails] + EndpointAuthValidator( + scenario=self, + operation_name="Get operational intent details", + auth_target=uss, + client_scopes=self.utm_auth.scopes, + valid_scopes=[Scope.StrategicCoordination], + query_kwargs=dict( + verb=op.verb, + url=op.path.format(entityid=str(uuid.uuid4())), + query_type=QueryType.F3548v21USSGetOperationalIntentDetails, + participant_id=uss.participant_id, + ), + ).verify_endpoint_authentication() + + def _verify_notify_oi_details_changed(self, uss: USSInstance): + op = OPERATIONS[OperationID.NotifyOperationalIntentDetailsChanged] + EndpointAuthValidator( + scenario=self, + operation_name="Notify operational intent details changed", + auth_target=uss, + client_scopes=self.utm_auth.scopes, + valid_scopes=[Scope.StrategicCoordination], + query_kwargs=dict( + verb=op.verb, + url=op.path, + query_type=QueryType.F3548v21USSNotifyOperationalIntentDetailsChanged, + participant_id=uss.participant_id, + json=PutOperationalIntentDetailsParameters( + operational_intent_id=str(uuid.uuid4()), + subscriptions=[ + SubscriptionState( + subscription_id=str(uuid.uuid4()), + notification_index=0, + ) + ], + ), + ), + ).verify_endpoint_authentication() + + def _verify_make_uss_report(self, uss: USSInstance): + op = OPERATIONS[OperationID.MakeUssReport] + EndpointAuthValidator( + scenario=self, + operation_name="Make USS report", + auth_target=uss, + client_scopes=self.utm_auth.scopes, + test_valid_credentials=True, + valid_scopes=[ + Scope.StrategicCoordination, + Scope.ConstraintManagement, + Scope.ConstraintProcessing, + Scope.ConformanceMonitoringForSituationalAwareness, + Scope.AvailabilityArbitration, + ], + query_kwargs=dict( + verb=op.verb, + url=op.path, + query_type=QueryType.F3548v21USSMakeUssReport, + participant_id=uss.participant_id, + json=ErrorReport( + exchange=ExchangeRecord( + url=(uss.base_url + op.path), + method=op.verb, + recorder_role=ExchangeRecordRecorderRole.Client, + request_time=Time(value=StringBasedDateTime(arrow.utcnow())), + problem="This is a dummy record created by the USS qualifier's authentication tests. This failure is expected.", + ), + ), + ), + ).verify_endpoint_authentication() + + def cleanup(self): + self.begin_cleanup() + cleanup_flights(self, [self.tested_uss.client]) + self.end_cleanup() diff --git a/monitoring/uss_qualifier/suites/astm/utm/f3548_21.md b/monitoring/uss_qualifier/suites/astm/utm/f3548_21.md index 70649e62721..7b7135cc137 100644 --- a/monitoring/uss_qualifier/suites/astm/utm/f3548_21.md +++ b/monitoring/uss_qualifier/suites/astm/utm/f3548_21.md @@ -20,13 +20,15 @@ 9. Action generator: [`action_generators.flight_planning.FlightPlannerCombinations`](../../../action_generators/flight_planning/planner_combinations.py) 1. Scenario: [Awareness of relevant operational intents](../../../scenarios/astm/utm/subscription_notifications/receive_notifications_for_awareness/receive_notifications_for_awareness.md) ([`scenarios.astm.utm.subscription_notifications.ReceiveNotificationsForAwareness`](../../../scenarios/astm/utm/subscription_notifications/receive_notifications_for_awareness/receive_notifications_for_awareness.py)) 10. Action generator: [`action_generators.flight_planning.FlightPlannerCombinations`](../../../action_generators/flight_planning/planner_combinations.py) - 1. Scenario: [Off-Nominal planning: down USS](../../../scenarios/astm/utm/off_nominal_planning/down_uss.md) ([`scenarios.astm.utm.DownUSS`](../../../scenarios/astm/utm/off_nominal_planning/down_uss.py)) + 1. Scenario: [ASTM SCD USS: Interfaces authentication](../../../scenarios/astm/utm/uss_authentication/scd_authentication_validation.md) ([`scenarios.astm.utm.uss_authentication.scd_authentication_validation.SCDAuthenticationValidation`](../../../scenarios/astm/utm/uss_authentication/scd_authentication_validation.py)) 11. Action generator: [`action_generators.flight_planning.FlightPlannerCombinations`](../../../action_generators/flight_planning/planner_combinations.py) + 1. Scenario: [Off-Nominal planning: down USS](../../../scenarios/astm/utm/off_nominal_planning/down_uss.md) ([`scenarios.astm.utm.DownUSS`](../../../scenarios/astm/utm/off_nominal_planning/down_uss.py)) +12. Action generator: [`action_generators.flight_planning.FlightPlannerCombinations`](../../../action_generators/flight_planning/planner_combinations.py) 1. Scenario: [Off-Nominal planning: down USS with equal priority conflicts not permitted](../../../scenarios/astm/utm/off_nominal_planning/down_uss_equal_priority_not_permitted.md) ([`scenarios.astm.utm.DownUSSEqualPriorityNotPermitted`](../../../scenarios/astm/utm/off_nominal_planning/down_uss_equal_priority_not_permitted.py)) -12. Scenario: [ASTM F3548 flight planners preparation](../../../scenarios/astm/utm/prep_planners.md) ([`scenarios.astm.utm.PrepareFlightPlanners`](../../../scenarios/astm/utm/prep_planners.py)) -13. Scenario: [ASTM F3548 makeUssReport](../../../scenarios/astm/utm/make_uss_report.md) ([`scenarios.astm.utm.make_uss_report.MakeUssReport`](../../../scenarios/astm/utm/make_uss_report.py)) -14. Scenario: [ASTM F3548-21 evaluate system versions](../../../scenarios/astm/utm/versioning/evaluate_system_versions.md) ([`scenarios.astm.utm.versioning.evaluate_system_versions.EvaluateSystemVersions`](../../../scenarios/astm/utm/versioning/evaluate_system_versions.py)) -15. Scenario: [ASTM F3548 UTM aggregate checks](../../../scenarios/astm/utm/aggregate_checks.md) ([`scenarios.astm.utm.AggregateChecks`](../../../scenarios/astm/utm/aggregate_checks.py)) +13. Scenario: [ASTM F3548 flight planners preparation](../../../scenarios/astm/utm/prep_planners.md) ([`scenarios.astm.utm.PrepareFlightPlanners`](../../../scenarios/astm/utm/prep_planners.py)) +14. Scenario: [ASTM F3548 makeUssReport](../../../scenarios/astm/utm/make_uss_report.md) ([`scenarios.astm.utm.make_uss_report.MakeUssReport`](../../../scenarios/astm/utm/make_uss_report.py)) +15. Scenario: [ASTM F3548-21 evaluate system versions](../../../scenarios/astm/utm/versioning/evaluate_system_versions.md) ([`scenarios.astm.utm.versioning.evaluate_system_versions.EvaluateSystemVersions`](../../../scenarios/astm/utm/versioning/evaluate_system_versions.py)) +16. Scenario: [ASTM F3548 UTM aggregate checks](../../../scenarios/astm/utm/aggregate_checks.md) ([`scenarios.astm.utm.AggregateChecks`](../../../scenarios/astm/utm/aggregate_checks.py)) ## [Checked requirements](../../README.md#checked-requirements) @@ -46,7 +48,7 @@ DSS0005,2 Implemented - ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM F3548-21 UTM DSS Operational Intent Reference State Transitions
ASTM SCD DSS: Implicit Subscription handling
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Explicit Subscription handling
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Operational Intent Reference Simple
ASTM SCD DSS: Operational Intent Reference Synchronization
ASTM SCD DSS: Subscription and entity deletion interaction
ASTM SCD DSS: Subscription and entity interaction
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
OVN Request Optional Extension to ASTM F3548-21
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 F3548-21 UTM DSS Operational Intent Reference State Transitions
ASTM SCD DSS: Implicit Subscription handling
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Explicit Subscription handling
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Operational Intent Reference Simple
ASTM SCD DSS: Operational Intent Reference Synchronization
ASTM SCD DSS: Subscription and entity deletion interaction
ASTM SCD DSS: Subscription and entity interaction
ASTM SCD USS: Interfaces authentication
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
OVN Request Optional Extension to ASTM F3548-21
Off-Nominal planning: down USS
Off-Nominal planning: down USS with equal priority conflicts not permitted
Validation of operational intents DSS0005,3 @@ -331,17 +333,17 @@ OPIN0015 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents OPIN0020 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents OPIN0025 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents OPIN0030 @@ -441,27 +443,27 @@ USS0005 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents USS0105,1 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents USS0105,2 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents USS0105,3 Implemented - Awareness of relevant operational intents + ASTM SCD USS: Interfaces authentication
Awareness of relevant operational intents USS0105,4 Implemented - ASTM F3548 makeUssReport + ASTM F3548 makeUssReport
ASTM SCD USS: Interfaces authentication interuss
.automated_testing
.flight_planning
@@ -472,17 +474,17 @@ DeleteFlightSuccess Implemented - 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 SCD USS: Interfaces authentication
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 ExpectedBehavior Implemented - 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 SCD USS: Interfaces authentication
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 FlightCoveredByOperationalIntent Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents ImplementAPI diff --git a/monitoring/uss_qualifier/suites/astm/utm/f3548_21.yaml b/monitoring/uss_qualifier/suites/astm/utm/f3548_21.yaml index e3cc86b2efb..b61dfa6fb2b 100644 --- a/monitoring/uss_qualifier/suites/astm/utm/f3548_21.yaml +++ b/monitoring/uss_qualifier/suites/astm/utm/f3548_21.yaml @@ -196,6 +196,27 @@ actions: roles: - tested_uss on_failure: Continue +- action_generator: + generator_type: action_generators.flight_planning.FlightPlannerCombinations + resources: + flight_planners: flight_planners + utm_auth: utm_auth? + dss: dss + non_conflicting_flights: non_conflicting_flights + specification: + action_to_repeat: + test_scenario: + scenario_type: scenarios.astm.utm.uss_authentication.scd_authentication_validation.SCDAuthenticationValidation + resources: + tested_uss: tested_uss + utm_auth: utm_auth + dss: dss + flight_intents: non_conflicting_flights + on_failure: Continue + flight_planners_source: flight_planners + roles: + - tested_uss + on_failure: Continue - action_generator: generator_type: action_generators.flight_planning.FlightPlannerCombinations resources: diff --git a/monitoring/uss_qualifier/suites/faa/uft/message_signing.md b/monitoring/uss_qualifier/suites/faa/uft/message_signing.md index b2841ca3dd3..69cc3424fff 100644 --- a/monitoring/uss_qualifier/suites/faa/uft/message_signing.md +++ b/monitoring/uss_qualifier/suites/faa/uft/message_signing.md @@ -26,7 +26,7 @@ DSS0005,2 Implemented - ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM F3548-21 UTM DSS Operational Intent Reference State Transitions
ASTM SCD DSS: Implicit Subscription handling
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Explicit Subscription handling
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Operational Intent Reference Simple
ASTM SCD DSS: Operational Intent Reference Synchronization
ASTM SCD DSS: Subscription and entity deletion interaction
ASTM SCD DSS: Subscription and entity interaction
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
OVN Request Optional Extension to ASTM F3548-21
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 F3548-21 UTM DSS Operational Intent Reference State Transitions
ASTM SCD DSS: Implicit Subscription handling
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Explicit Subscription handling
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Operational Intent Reference Simple
ASTM SCD DSS: Operational Intent Reference Synchronization
ASTM SCD DSS: Subscription and entity deletion interaction
ASTM SCD DSS: Subscription and entity interaction
ASTM SCD USS: Interfaces authentication
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
OVN Request Optional Extension to ASTM F3548-21
Off-Nominal planning: down USS
Off-Nominal planning: down USS with equal priority conflicts not permitted
Validation of operational intents DSS0005,3 @@ -311,17 +311,17 @@ OPIN0015 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents OPIN0020 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents OPIN0025 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents OPIN0030 @@ -421,27 +421,27 @@ USS0005 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents USS0105,1 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents USS0105,2 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents USS0105,3 Implemented - Awareness of relevant operational intents + ASTM SCD USS: Interfaces authentication
Awareness of relevant operational intents USS0105,4 Implemented - ASTM F3548 makeUssReport + ASTM F3548 makeUssReport
ASTM SCD USS: Interfaces authentication interuss
.automated_testing
.flight_planning
@@ -452,17 +452,17 @@ DeleteFlightSuccess Implemented - 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 SCD USS: Interfaces authentication
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 ExpectedBehavior Implemented - 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 SCD USS: Interfaces authentication
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 FlightCoveredByOperationalIntent Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents ImplementAPI diff --git a/monitoring/uss_qualifier/suites/uspace/flight_auth.md b/monitoring/uss_qualifier/suites/uspace/flight_auth.md index 9627440b25c..5059532c32a 100644 --- a/monitoring/uss_qualifier/suites/uspace/flight_auth.md +++ b/monitoring/uss_qualifier/suites/uspace/flight_auth.md @@ -27,7 +27,7 @@ DSS0005,2 Implemented - ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM F3548-21 UTM DSS Operational Intent Reference State Transitions
ASTM SCD DSS: Implicit Subscription handling
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Explicit Subscription handling
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Operational Intent Reference Simple
ASTM SCD DSS: Operational Intent Reference Synchronization
ASTM SCD DSS: Subscription and entity deletion interaction
ASTM SCD DSS: Subscription and entity interaction
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
OVN Request Optional Extension to ASTM F3548-21
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 F3548-21 UTM DSS Operational Intent Reference State Transitions
ASTM SCD DSS: Implicit Subscription handling
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Explicit Subscription handling
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Operational Intent Reference Simple
ASTM SCD DSS: Operational Intent Reference Synchronization
ASTM SCD DSS: Subscription and entity deletion interaction
ASTM SCD DSS: Subscription and entity interaction
ASTM SCD USS: Interfaces authentication
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
OVN Request Optional Extension to ASTM F3548-21
Off-Nominal planning: down USS
Off-Nominal planning: down USS with equal priority conflicts not permitted
Validation of operational intents DSS0005,3 @@ -312,17 +312,17 @@ OPIN0015 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents OPIN0020 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents OPIN0025 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents OPIN0030 @@ -422,27 +422,27 @@ USS0005 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents USS0105,1 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents USS0105,2 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents USS0105,3 Implemented - Awareness of relevant operational intents + ASTM SCD USS: Interfaces authentication
Awareness of relevant operational intents USS0105,4 Implemented - ASTM F3548 makeUssReport + ASTM F3548 makeUssReport
ASTM SCD USS: Interfaces authentication interuss
.automated_testing
.flight_planning
@@ -453,17 +453,17 @@ DeleteFlightSuccess Implemented - Awareness of relevant operational intents
Data Validation of GET operational intents by USS
Flight authorisation validation
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 SCD USS: Interfaces authentication
Awareness of relevant operational intents
Data Validation of GET operational intents by USS
Flight authorisation validation
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 ExpectedBehavior Implemented - Awareness of relevant operational intents
Data Validation of GET operational intents by USS
Flight authorisation validation
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 SCD USS: Interfaces authentication
Awareness of relevant operational intents
Data Validation of GET operational intents by USS
Flight authorisation validation
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 FlightCoveredByOperationalIntent Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents ImplementAPI diff --git a/monitoring/uss_qualifier/suites/uspace/required_services.md b/monitoring/uss_qualifier/suites/uspace/required_services.md index a0b9fa5f17c..bc5f7f19f2b 100644 --- a/monitoring/uss_qualifier/suites/uspace/required_services.md +++ b/monitoring/uss_qualifier/suites/uspace/required_services.md @@ -637,7 +637,7 @@ DSS0005,2 Implemented - ASTM F3548 flight planners preparation
ASTM F3548-21 UTM DSS Operational Intent Reference Access Control
ASTM F3548-21 UTM DSS Operational Intent Reference State Transitions
ASTM SCD DSS: Implicit Subscription handling
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Explicit Subscription handling
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Operational Intent Reference Simple
ASTM SCD DSS: Operational Intent Reference Synchronization
ASTM SCD DSS: Subscription and entity deletion interaction
ASTM SCD DSS: Subscription and entity interaction
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
OVN Request Optional Extension to ASTM F3548-21
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 F3548-21 UTM DSS Operational Intent Reference State Transitions
ASTM SCD DSS: Implicit Subscription handling
ASTM SCD DSS: Interfaces authentication
ASTM SCD DSS: Operational Intent Explicit Subscription handling
ASTM SCD DSS: Operational Intent Reference Key Validation
ASTM SCD DSS: Operational Intent Reference Simple
ASTM SCD DSS: Operational Intent Reference Synchronization
ASTM SCD DSS: Subscription and entity deletion interaction
ASTM SCD DSS: Subscription and entity interaction
ASTM SCD USS: Interfaces authentication
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
OVN Request Optional Extension to ASTM F3548-21
Off-Nominal planning: down USS
Off-Nominal planning: down USS with equal priority conflicts not permitted
Validation of operational intents DSS0005,3 @@ -922,17 +922,17 @@ OPIN0015 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents OPIN0020 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents OPIN0025 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents OPIN0030 @@ -1032,27 +1032,27 @@ USS0005 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents USS0105,1 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents USS0105,2 Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents USS0105,3 Implemented - Awareness of relevant operational intents + ASTM SCD USS: Interfaces authentication
Awareness of relevant operational intents USS0105,4 Implemented - ASTM F3548 makeUssReport + ASTM F3548 makeUssReport
ASTM SCD USS: Interfaces authentication interuss
.automated_testing
.flight_planning
@@ -1063,17 +1063,17 @@ DeleteFlightSuccess Implemented - Awareness of relevant operational intents
Data Validation of GET operational intents by USS
Flight authorisation validation
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 SCD USS: Interfaces authentication
Awareness of relevant operational intents
Data Validation of GET operational intents by USS
Flight authorisation validation
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 ExpectedBehavior Implemented - Awareness of relevant operational intents
Data Validation of GET operational intents by USS
Flight authorisation validation
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 SCD USS: Interfaces authentication
Awareness of relevant operational intents
Data Validation of GET operational intents by USS
Flight authorisation validation
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 FlightCoveredByOperationalIntent Implemented - 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
Validation of operational intents + ASTM SCD USS: Interfaces authentication
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
Validation of operational intents ImplementAPI