Skip to content

Commit 6c6b032

Browse files
committed
Implement comments
1 parent c221ddf commit 6c6b032

File tree

11 files changed

+45
-31
lines changed

11 files changed

+45
-31
lines changed

monitoring/monitorlib/schema_validation.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ class F3411_22a(str, Enum):
5050

5151
class F3548_21(str, Enum):
5252
OpenAPIPath = "interfaces/astm-utm/Protocol/utm.yaml"
53+
ErrorResponse = "components.schemas.ErrorResponse"
5354
GetOperationalIntentDetailsResponse = (
5455
"components.schemas.GetOperationalIntentDetailsResponse"
5556
)

monitoring/uss_qualifier/resources/astm/f3548/v21/dss.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,9 @@ def __init__(
446446
def can_use_scope(self, scope: str) -> bool:
447447
return scope in self._auth_adapter.scopes
448448

449+
def get_authorized_scopes(self) -> Set[str]:
450+
return self._auth_adapter.scopes.copy()
451+
449452
def get_instance(self, scopes_required: Dict[str, str]) -> DSSInstance:
450453
"""Get a client object ready to be used.
451454

monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/authentication_validation.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,12 @@ for multiple scopes (so that a wrong scope may be used in place of the correct o
1717

1818
This scenario will check for the scope's availability and transparently ignore checks that can't be conducted.
1919

20-
The scopes the scenario is expected to be allowed to use are:
20+
Required scopes for running this scenario:
2121

2222
- `utm.strategic_coordination`
23+
24+
Optional scopes that will allow the scenario to provide additional coverage:
25+
2326
- `utm.availability_arbitration`
2427
- `""` (empty string)
2528

monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/authentication_validation.py

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import random
12
from datetime import datetime, timedelta
23

34
from uas_standards.astm.f3548.v21.constants import (
@@ -28,10 +29,11 @@
2829

2930
class AuthenticationValidation(TestScenario):
3031
"""
31-
A scenario that verifies that the DSS properly authenticates requests to all its endpoints.
32+
A scenario that verifies that the DSS properly authenticates requests to all its endpoints,
33+
and properly validates the scopes of the requests depending on the action being performed.
3234
33-
This scenario does not (yet) cover anything related to authorization: this first version
34-
is intended to cover DSS0210,A2-7-2,7
35+
Note that this scenario does not verif that a DSS only allows an entity owner to modify the:
36+
this is covered in other scenarios.
3537
"""
3638

3739
SUB_TYPE = register_resource_type(
@@ -58,22 +60,28 @@ def __init__(
5860
"""
5961
super().__init__()
6062
scopes = {Scope.StrategicCoordination: "create and delete subscriptions"}
61-
# We use the AvailabilityArbitration scope as the 'wrong' scope for some tests
62-
# this checks if we are allowed to use it
63-
self._wrong_scope = None
64-
if dss.can_use_scope(Scope.AvailabilityArbitration):
63+
# Note: .get_instance needs to be called before .get_authorized_scopes to
64+
# guarantee that the returned scopes are available for use.
65+
self._dss = dss.get_instance(scopes)
66+
67+
# For the 'wrong' scope we pick anything from the available scopes that isn't the SCD or empty scope:
68+
available_scopes = dss.get_authorized_scopes()
69+
available_scopes.discard(Scope.StrategicCoordination)
70+
available_scopes.discard("")
71+
72+
self._wrong_scope = (
73+
random.choice(list(available_scopes)) if available_scopes else None
74+
)
75+
if self._wrong_scope:
6576
scopes[
66-
Scope.AvailabilityArbitration
77+
self._wrong_scope
6778
] = "Attempt to query subscriptions with wrong scope"
68-
self._wrong_scope = Scope.AvailabilityArbitration
6979

7080
self._test_missing_scope = False
7181
if dss.can_use_scope(""):
7282
scopes[""] = "Attempt to query subscriptions with missing scope"
7383
self._test_missing_scope = True
7484

75-
# This is an UTMClientSession
76-
self._dss = dss.get_instance(scopes)
7785
self._pid = [self._dss.participant_id]
7886
self._test_id = id_generator.id_factory.make_id(self.SUB_TYPE)
7987
self._planning_area = planning_area.specification

monitoring/uss_qualifier/scenarios/astm/utm/dss/authentication/generic.py

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
from uas_standards.astm.f3548.v21.constants import Scope
22

3-
from monitoring.monitorlib import fetch
3+
from monitoring.monitorlib import fetch, schema_validation
44
from monitoring.monitorlib.auth import InvalidTokenSignatureAuth
55
from monitoring.monitorlib.infrastructure import UTMClientSession
6+
from monitoring.monitorlib.schema_validation import F3548_21
67
from monitoring.uss_qualifier.resources.astm.f3548.v21.dss import DSSInstance
78
from monitoring.uss_qualifier.scenarios.scenario import TestScenario
89

@@ -39,7 +40,7 @@ def query_invalid_token(self, **query_kwargs) -> fetch.Query:
3940
"""
4041
q = fetch.query_and_describe(
4142
client=self._invalid_token_session,
42-
scope=Scope.StrategicCoordination,
43+
scope=self._valid_scope,
4344
**query_kwargs,
4445
)
4546
self._scenario.record_query(q)
@@ -80,22 +81,20 @@ def query_valid_auth(self, **query_kwargs) -> fetch.Query:
8081
return q
8182

8283
def verify_4xx_response(self, q: fetch.Query):
83-
"""Verifies that the passed query response's body is a valid ErrorResponse:
84-
it is either empty or contains a single 'message' field, as per the OpenAPI spec.
84+
"""Verifies that the passed query response's body is a valid ErrorResponse, as per the OpenAPI spec."""
8585

86-
Note that 409 responses to Operational Intent Reference mutations will contain more fields,
87-
these are not handled here.
88-
"""
8986
with self._scenario.check(
9087
"Unauthorized requests return the proper error message body"
9188
) as check:
92-
if len(q.response.json) == 0:
93-
return
94-
elif len(q.response.json) == 1 and "message" in q.response.json:
95-
return
96-
else:
89+
errors = schema_validation.validate(
90+
F3548_21.OpenAPIPath,
91+
F3548_21.ErrorResponse,
92+
q.response.json,
93+
)
94+
if errors:
9795
check.record_failed(
9896
summary="Unexpected error response body",
99-
details=f"Response body for {q.request.method} query to {q.request.url} should be empty or contain a single 'message' field. Was: {q.response.json}",
97+
details=f"Response body for {q.request.method} query to {q.request.url} failed validation: {errors}, "
98+
f"body content was: {q.response.json}",
10099
query_timestamps=[q.request.timestamp],
101100
)

monitoring/uss_qualifier/suites/astm/utm/dss_probing.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
<th><a href="../../README.md#checked-in">Checked in</a></th>
2323
</tr>
2424
<tr>
25-
<td rowspan="16" style="vertical-align:top;"><a href="../../../requirements/astm/f3548/v21.md">astm<br>.f3548<br>.v21</a></td>
25+
<td rowspan="17" style="vertical-align:top;"><a href="../../../requirements/astm/f3548/v21.md">astm<br>.f3548<br>.v21</a></td>
2626
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0005,1</a></td>
2727
<td>Implemented</td>
2828
<td><a href="../../../scenarios/astm/utm/op_intent_ref_access_control.md">ASTM F3548-21 UTM DSS Operational Intent Reference Access Control</a><br><a href="../../../scenarios/astm/utm/dss/authentication/authentication_validation.md">ASTM SCD DSS: Interfaces authentication</a><br><a href="../../../scenarios/astm/utm/dss/subscription_simple.md">ASTM SCD DSS: Subscription Simple</a><br><a href="../../../scenarios/astm/utm/dss/synchronization/subscription_synchronization.md">ASTM SCD DSS: Subscription Synchronization</a><br><a href="../../../scenarios/astm/utm/dss/subscription_validation.md">ASTM SCD DSS: Subscription Validation</a></td>

monitoring/uss_qualifier/suites/astm/utm/f3548_21.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
<th><a href="../../README.md#checked-in">Checked in</a></th>
3636
</tr>
3737
<tr>
38-
<td rowspan="42" style="vertical-align:top;"><a href="../../../requirements/astm/f3548/v21.md">astm<br>.f3548<br>.v21</a></td>
38+
<td rowspan="43" style="vertical-align:top;"><a href="../../../requirements/astm/f3548/v21.md">astm<br>.f3548<br>.v21</a></td>
3939
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0005,1</a></td>
4040
<td>Implemented</td>
4141
<td><a href="../../../scenarios/astm/utm/prep_planners.md">ASTM F3548 flight planners preparation</a><br><a href="../../../scenarios/astm/utm/op_intent_ref_access_control.md">ASTM F3548-21 UTM DSS Operational Intent Reference Access Control</a><br><a href="../../../scenarios/astm/utm/dss/authentication/authentication_validation.md">ASTM SCD DSS: Interfaces authentication</a><br><a href="../../../scenarios/astm/utm/dss/subscription_simple.md">ASTM SCD DSS: Subscription Simple</a><br><a href="../../../scenarios/astm/utm/dss/synchronization/subscription_synchronization.md">ASTM SCD DSS: Subscription Synchronization</a><br><a href="../../../scenarios/astm/utm/dss/subscription_validation.md">ASTM SCD DSS: Subscription Validation</a><br><a href="../../../scenarios/astm/utm/off_nominal_planning/down_uss.md">Off-Nominal planning: down USS</a><br><a href="../../../scenarios/astm/utm/off_nominal_planning/down_uss_equal_priority_not_permitted.md">Off-Nominal planning: down USS with equal priority conflicts not permitted</a></td>

monitoring/uss_qualifier/suites/faa/uft/message_signing.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<th><a href="../../README.md#checked-in">Checked in</a></th>
1919
</tr>
2020
<tr>
21-
<td rowspan="42" style="vertical-align:top;"><a href="../../../requirements/astm/f3548/v21.md">astm<br>.f3548<br>.v21</a></td>
21+
<td rowspan="43" style="vertical-align:top;"><a href="../../../requirements/astm/f3548/v21.md">astm<br>.f3548<br>.v21</a></td>
2222
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0005,1</a></td>
2323
<td>Implemented</td>
2424
<td><a href="../../../scenarios/astm/utm/prep_planners.md">ASTM F3548 flight planners preparation</a><br><a href="../../../scenarios/astm/utm/op_intent_ref_access_control.md">ASTM F3548-21 UTM DSS Operational Intent Reference Access Control</a><br><a href="../../../scenarios/astm/utm/dss/authentication/authentication_validation.md">ASTM SCD DSS: Interfaces authentication</a><br><a href="../../../scenarios/astm/utm/dss/subscription_simple.md">ASTM SCD DSS: Subscription Simple</a><br><a href="../../../scenarios/astm/utm/dss/synchronization/subscription_synchronization.md">ASTM SCD DSS: Subscription Synchronization</a><br><a href="../../../scenarios/astm/utm/dss/subscription_validation.md">ASTM SCD DSS: Subscription Validation</a><br><a href="../../../scenarios/astm/utm/off_nominal_planning/down_uss.md">Off-Nominal planning: down USS</a><br><a href="../../../scenarios/astm/utm/off_nominal_planning/down_uss_equal_priority_not_permitted.md">Off-Nominal planning: down USS with equal priority conflicts not permitted</a></td>

monitoring/uss_qualifier/suites/interuss/dss/all_tests.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,7 @@
408408
<td><a href="../../../scenarios/astm/netrid/v22a/dss/heavy_traffic_concurrent.md">ASTM NetRID DSS: Concurrent Requests</a><br><a href="../../../scenarios/astm/netrid/v22a/dss/isa_expiry.md">ASTM NetRID DSS: ISA Expiry</a><br><a href="../../../scenarios/astm/netrid/v22a/dss/isa_subscription_interactions.md">ASTM NetRID DSS: ISA Subscription Interactions</a><br><a href="../../../scenarios/astm/netrid/v22a/dss/isa_simple.md">ASTM NetRID DSS: Simple ISA</a><br><a href="../../../scenarios/astm/netrid/v22a/dss/isa_validation.md">ASTM NetRID DSS: Submitted ISA Validations</a><br><a href="../../../scenarios/astm/netrid/v22a/dss/subscription_simple.md">ASTM NetRID DSS: Subscription Simple</a><br><a href="../../../scenarios/astm/netrid/v22a/dss/subscription_validation.md">ASTM NetRID DSS: Subscription Validation</a><br><a href="../../../scenarios/astm/netrid/v22a/dss/token_validation.md">ASTM NetRID DSS: Token Validation</a></td>
409409
</tr>
410410
<tr>
411-
<td rowspan="16" style="vertical-align:top;"><a href="../../../requirements/astm/f3548/v21.md">astm<br>.f3548<br>.v21</a></td>
411+
<td rowspan="17" style="vertical-align:top;"><a href="../../../requirements/astm/f3548/v21.md">astm<br>.f3548<br>.v21</a></td>
412412
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0005,1</a></td>
413413
<td>Implemented</td>
414414
<td><a href="../../../scenarios/astm/utm/op_intent_ref_access_control.md">ASTM F3548-21 UTM DSS Operational Intent Reference Access Control</a><br><a href="../../../scenarios/astm/utm/dss/authentication/authentication_validation.md">ASTM SCD DSS: Interfaces authentication</a><br><a href="../../../scenarios/astm/utm/dss/subscription_simple.md">ASTM SCD DSS: Subscription Simple</a><br><a href="../../../scenarios/astm/utm/dss/synchronization/subscription_synchronization.md">ASTM SCD DSS: Subscription Synchronization</a><br><a href="../../../scenarios/astm/utm/dss/subscription_validation.md">ASTM SCD DSS: Subscription Validation</a></td>

monitoring/uss_qualifier/suites/uspace/flight_auth.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<th><a href="../README.md#checked-in">Checked in</a></th>
2020
</tr>
2121
<tr>
22-
<td rowspan="42" style="vertical-align:top;"><a href="../../requirements/astm/f3548/v21.md">astm<br>.f3548<br>.v21</a></td>
22+
<td rowspan="43" style="vertical-align:top;"><a href="../../requirements/astm/f3548/v21.md">astm<br>.f3548<br>.v21</a></td>
2323
<td><a href="../../requirements/astm/f3548/v21.md">DSS0005,1</a></td>
2424
<td>Implemented</td>
2525
<td><a href="../../scenarios/astm/utm/prep_planners.md">ASTM F3548 flight planners preparation</a><br><a href="../../scenarios/astm/utm/op_intent_ref_access_control.md">ASTM F3548-21 UTM DSS Operational Intent Reference Access Control</a><br><a href="../../scenarios/astm/utm/dss/authentication/authentication_validation.md">ASTM SCD DSS: Interfaces authentication</a><br><a href="../../scenarios/astm/utm/dss/subscription_simple.md">ASTM SCD DSS: Subscription Simple</a><br><a href="../../scenarios/astm/utm/dss/synchronization/subscription_synchronization.md">ASTM SCD DSS: Subscription Synchronization</a><br><a href="../../scenarios/astm/utm/dss/subscription_validation.md">ASTM SCD DSS: Subscription Validation</a><br><a href="../../scenarios/astm/utm/off_nominal_planning/down_uss.md">Off-Nominal planning: down USS</a><br><a href="../../scenarios/astm/utm/off_nominal_planning/down_uss_equal_priority_not_permitted.md">Off-Nominal planning: down USS with equal priority conflicts not permitted</a></td>

monitoring/uss_qualifier/suites/uspace/required_services.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@
454454
<td><a href="../../scenarios/astm/netrid/v22a/dss/heavy_traffic_concurrent.md">ASTM NetRID DSS: Concurrent Requests</a><br><a href="../../scenarios/astm/netrid/v22a/dss/isa_expiry.md">ASTM NetRID DSS: ISA Expiry</a><br><a href="../../scenarios/astm/netrid/v22a/dss/isa_subscription_interactions.md">ASTM NetRID DSS: ISA Subscription Interactions</a><br><a href="../../scenarios/astm/netrid/v22a/dss/isa_simple.md">ASTM NetRID DSS: Simple ISA</a><br><a href="../../scenarios/astm/netrid/v22a/dss/isa_validation.md">ASTM NetRID DSS: Submitted ISA Validations</a><br><a href="../../scenarios/astm/netrid/v22a/dss/subscription_simple.md">ASTM NetRID DSS: Subscription Simple</a><br><a href="../../scenarios/astm/netrid/v22a/dss/subscription_validation.md">ASTM NetRID DSS: Subscription Validation</a><br><a href="../../scenarios/astm/netrid/v22a/dss/token_validation.md">ASTM NetRID DSS: Token Validation</a></td>
455455
</tr>
456456
<tr>
457-
<td rowspan="42" style="vertical-align:top;"><a href="../../requirements/astm/f3548/v21.md">astm<br>.f3548<br>.v21</a></td>
457+
<td rowspan="43" style="vertical-align:top;"><a href="../../requirements/astm/f3548/v21.md">astm<br>.f3548<br>.v21</a></td>
458458
<td><a href="../../requirements/astm/f3548/v21.md">DSS0005,1</a></td>
459459
<td>Implemented</td>
460460
<td><a href="../../scenarios/astm/utm/prep_planners.md">ASTM F3548 flight planners preparation</a><br><a href="../../scenarios/astm/utm/op_intent_ref_access_control.md">ASTM F3548-21 UTM DSS Operational Intent Reference Access Control</a><br><a href="../../scenarios/astm/utm/dss/authentication/authentication_validation.md">ASTM SCD DSS: Interfaces authentication</a><br><a href="../../scenarios/astm/utm/dss/subscription_simple.md">ASTM SCD DSS: Subscription Simple</a><br><a href="../../scenarios/astm/utm/dss/synchronization/subscription_synchronization.md">ASTM SCD DSS: Subscription Synchronization</a><br><a href="../../scenarios/astm/utm/dss/subscription_validation.md">ASTM SCD DSS: Subscription Validation</a><br><a href="../../scenarios/astm/utm/off_nominal_planning/down_uss.md">Off-Nominal planning: down USS</a><br><a href="../../scenarios/astm/utm/off_nominal_planning/down_uss_equal_priority_not_permitted.md">Off-Nominal planning: down USS with equal priority conflicts not permitted</a></td>

0 commit comments

Comments
 (0)