Skip to content

Commit b85bedd

Browse files
committed
[uss_qualifier] uss availability status: version conflict
1 parent ff1af7d commit b85bedd

File tree

11 files changed

+189
-13
lines changed

11 files changed

+189
-13
lines changed

monitoring/uss_qualifier/scenarios/astm/utm/dss/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,4 @@
2020
)
2121
from .subscription_simple import SubscriptionSimple as SubscriptionSimple
2222
from .subscription_validation import SubscriptionValidation as SubscriptionValidation
23+
from .uss_availability_simple import UssAvaiabilitySimple as UssAvaiabilitySimple

monitoring/uss_qualifier/scenarios/astm/utm/dss/synchronization/uss_availability_synchronization.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def __init__(
4646
"""
4747
super().__init__()
4848
scopes_primary = {
49-
Scope.AvailabilityArbitration: "Set and read USS availability states"
49+
Scope.AvailabilityArbitration: "set and read USS availability states"
5050
}
5151
scopes_read = {Scope.StrategicCoordination: "read USS availability states"}
5252

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# ASTM Availability DSS: USS Availability Simple test scenario
2+
3+
## Overview
4+
5+
Verifies the behavior of a DSS for simple interactions pertaining to USS availability status.
6+
7+
## Resources
8+
9+
### dss
10+
11+
[`DSSInstanceResource`](../../../../resources/astm/f3548/v21/dss.py) the DSS instance through which entities are created, modified and deleted.
12+
13+
### client_identity
14+
15+
[`ClientIdentityResource`](../../../../resources/communications/client_identity.py) the client identity that will be used to report the availability status.
16+
17+
## Setup test case
18+
19+
### [Declare USS as available at DSS test step](../set_uss_available.md)
20+
21+
## Update requires correct version test case
22+
23+
Test DSS behavior when update requests are not providing the required version.
24+
25+
### Attempt update with missing version test step
26+
27+
This step verifies that an existing USS availability status cannot be mutated with a missing version.
28+
29+
#### 🛑 Request to update USS availability status with empty version fails check
30+
31+
If the DSS under test allows the qualifier to update the USS availability status with a request that provided an empty version, it is in violation of **[astm.f3548.v21.DSS0100,1](../../../../requirements/astm/f3548/v21.md)**
32+
33+
### Attempt update with incorrect version test step
34+
35+
This step verifies that an existing OIR cannot be mutated with an incorrect OVN.
36+
37+
#### 🛑 Request to update USS availability status with incorrect version fails check
38+
39+
If the DSS under test allows the qualifier to update the USS availability status with a request that provided an incorrect version,
40+
it is in violation of **[astm.f3548.v21.DSS0005,1](../../../../requirements/astm/f3548/v21.md)**
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
from uas_standards.astm.f3548.v21.constants import Scope
2+
3+
from monitoring.monitorlib.fetch import QueryError
4+
from monitoring.uss_qualifier.resources.astm.f3548.v21.dss import (
5+
DSSInstance,
6+
DSSInstanceResource,
7+
)
8+
from monitoring.uss_qualifier.resources.communications import ClientIdentityResource
9+
from monitoring.uss_qualifier.scenarios.astm.utm.test_steps import set_uss_available
10+
from monitoring.uss_qualifier.scenarios.scenario import TestScenario
11+
from monitoring.uss_qualifier.suites.suite import ExecutionContext
12+
13+
14+
class UssAvaiabilitySimple(TestScenario):
15+
"""
16+
A scenario that verifies that USS availability status cannot be updated with the incorrect version.
17+
"""
18+
19+
_dss: DSSInstance
20+
21+
_uss_id: str
22+
23+
def __init__(
24+
self,
25+
dss: DSSInstanceResource,
26+
client_identity: ClientIdentityResource,
27+
):
28+
"""
29+
Args:
30+
dss: dss to test
31+
id_generator: will let us generate specific identifiers
32+
client_identity: tells us the identity we should expect as an entity's manager
33+
"""
34+
super().__init__()
35+
scopes: dict[str, str] = {
36+
Scope.AvailabilityArbitration: "read and set availability for a USS"
37+
}
38+
39+
self._dss = dss.get_instance(scopes)
40+
self._pid = [self._dss.participant_id]
41+
42+
self._uss_id = client_identity.subject()
43+
44+
def run(self, context: ExecutionContext):
45+
self._current_version = None
46+
47+
self.begin_test_scenario(context)
48+
49+
self.begin_test_case("Setup")
50+
self._step_declare_uss_available()
51+
self.end_test_case()
52+
53+
self.begin_test_case("Update requires correct version")
54+
self._step_attempt_update_missing_version()
55+
self._step_attempt_update_incorrect_version()
56+
self.end_test_case()
57+
58+
def _step_declare_uss_available(self):
59+
self.begin_test_step("Declare USS as available at DSS")
60+
self._current_version = set_uss_available(
61+
self,
62+
self._dss,
63+
self._uss_id,
64+
)
65+
self.end_test_step()
66+
67+
def _step_attempt_update_missing_version(self):
68+
self.begin_test_step("Attempt update with missing version")
69+
with self.check(
70+
"Request to update USS availability status with empty version fails",
71+
self._pid,
72+
) as check:
73+
try:
74+
_, q = self._dss.set_uss_availability(
75+
self._uss_id,
76+
False,
77+
"",
78+
)
79+
self.record_query(q)
80+
# We don't expect the reach this point:
81+
check.record_failed(
82+
summary="Set USS availability with missing version was not expected to succeed",
83+
details=f"Was expecting an HTTP 409 response because of an missing version, but got {q.status_code} instead",
84+
query_timestamps=[q.request.timestamp],
85+
)
86+
except QueryError as qe:
87+
self.record_queries(qe.queries)
88+
if qe.cause_status_code == 409:
89+
# The spec explicitly requests a 409 response code for incorrect OVNs.
90+
pass
91+
else:
92+
check.record_failed(
93+
summary="Set USS availability with missing version failed for unexpected reason",
94+
details=f"Was expecting an HTTP 409 response because of an missing version, but got {qe.cause_status_code} instead",
95+
query_timestamps=qe.query_timestamps,
96+
)
97+
self.end_test_step()
98+
99+
def _step_attempt_update_incorrect_version(self):
100+
self.begin_test_step("Attempt update with incorrect version")
101+
with self.check(
102+
"Request to update USS availability status with empty version fails",
103+
self._pid,
104+
) as check:
105+
try:
106+
_, q = self._dss.set_uss_availability(
107+
self._uss_id,
108+
False,
109+
"ThisIsAnIncorrectVersion",
110+
)
111+
self.record_query(q)
112+
# We don't expect the reach this point:
113+
check.record_failed(
114+
summary="Set USS availability with incorrect version was not expected to succeed",
115+
details=f"Was expecting an HTTP 409 response because of an incorrect version, but got {q.status_code} instead",
116+
query_timestamps=[q.request.timestamp],
117+
)
118+
except QueryError as qe:
119+
self.record_queries(qe.queries)
120+
if qe.cause_status_code == 409:
121+
# The spec explicitly requests a 409 response code for incorrect OVNs.
122+
pass
123+
else:
124+
check.record_failed(
125+
summary="Set USS availability with incorrect version failed for unexpected reason",
126+
details=f"Was expecting an HTTP 409 response because of an incorrect version, but got {qe.cause_status_code} instead",
127+
query_timestamps=qe.query_timestamps,
128+
)
129+
self.end_test_step()

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
18. Scenario: [ASTM UTM DSS: Direct datastore access](../../../scenarios/astm/utm/dss/datastore_access.md) ([`scenarios.astm.utm.dss.DatastoreAccess`](../../../scenarios/astm/utm/dss/datastore_access.py))
2525
19. Scenario: [OVN Request Optional Extension to ASTM F3548-21](../../../scenarios/interuss/ovn_request/dss_ovn_request.md) ([`scenarios.interuss.ovn_request.DSSOVNRequest`](../../../scenarios/interuss/ovn_request/dss_ovn_request.py))
2626
20. Scenario: [ASTM SCD DSS: Report](../../../scenarios/astm/utm/dss/report.md) ([`scenarios.astm.utm.dss.Report`](../../../scenarios/astm/utm/dss/report.py))
27+
21. Scenario: [ASTM Availability DSS: USS Availability Simple](../../../scenarios/astm/utm/dss/uss_availability_simple.md) ([`scenarios.astm.utm.dss.UssAvaiabilitySimple`](../../../scenarios/astm/utm/dss/uss_availability_simple.py))
2728

2829
## [Checked requirements](../../README.md#checked-requirements)
2930

@@ -38,7 +39,7 @@
3839
<td rowspan="52" style="vertical-align:top;"><a href="../../../requirements/astm/f3548/v21.md">astm<br>.f3548<br>.v21</a></td>
3940
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0005,1</a></td>
4041
<td>Implemented</td>
41-
<td><a href="../../../scenarios/astm/utm/dss/op_intent_ref_access_control.md">ASTM F3548-21 UTM DSS Operational Intent Reference Access Control</a><br><a href="../../../scenarios/astm/utm/dss/op_intent_ref_state_transitions.md">ASTM F3548-21 UTM DSS Operational Intent Reference State Transitions</a><br><a href="../../../scenarios/astm/utm/dss/oir_implicit_sub_handling.md">ASTM SCD DSS: Implicit Subscription handling</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/oir_explicit_sub_handling.md">ASTM SCD DSS: Operational Intent Explicit Subscription handling</a><br><a href="../../../scenarios/astm/utm/dss/op_intent_ref_key_validation.md">ASTM SCD DSS: Operational Intent Reference Key Validation</a><br><a href="../../../scenarios/astm/utm/dss/op_intent_ref_simple.md">ASTM SCD DSS: Operational Intent Reference Simple</a><br><a href="../../../scenarios/astm/utm/dss/synchronization/op_intent_ref_synchronization.md">ASTM SCD DSS: Operational Intent Reference Synchronization</a><br><a href="../../../scenarios/astm/utm/dss/subscription_interactions_deletion.md">ASTM SCD DSS: Subscription and entity deletion interaction</a><br><a href="../../../scenarios/astm/utm/dss/subscription_interactions.md">ASTM SCD DSS: Subscription and entity interaction</a><br><a href="../../../scenarios/interuss/ovn_request/dss_ovn_request.md">OVN Request Optional Extension to ASTM F3548-21</a></td>
42+
<td><a href="../../../scenarios/astm/utm/dss/uss_availability_simple.md">ASTM Availability DSS: USS Availability Simple</a><br><a href="../../../scenarios/astm/utm/dss/op_intent_ref_access_control.md">ASTM F3548-21 UTM DSS Operational Intent Reference Access Control</a><br><a href="../../../scenarios/astm/utm/dss/op_intent_ref_state_transitions.md">ASTM F3548-21 UTM DSS Operational Intent Reference State Transitions</a><br><a href="../../../scenarios/astm/utm/dss/oir_implicit_sub_handling.md">ASTM SCD DSS: Implicit Subscription handling</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/oir_explicit_sub_handling.md">ASTM SCD DSS: Operational Intent Explicit Subscription handling</a><br><a href="../../../scenarios/astm/utm/dss/op_intent_ref_key_validation.md">ASTM SCD DSS: Operational Intent Reference Key Validation</a><br><a href="../../../scenarios/astm/utm/dss/op_intent_ref_simple.md">ASTM SCD DSS: Operational Intent Reference Simple</a><br><a href="../../../scenarios/astm/utm/dss/synchronization/op_intent_ref_synchronization.md">ASTM SCD DSS: Operational Intent Reference Synchronization</a><br><a href="../../../scenarios/astm/utm/dss/subscription_interactions_deletion.md">ASTM SCD DSS: Subscription and entity deletion interaction</a><br><a href="../../../scenarios/astm/utm/dss/subscription_interactions.md">ASTM SCD DSS: Subscription and entity interaction</a><br><a href="../../../scenarios/interuss/ovn_request/dss_ovn_request.md">OVN Request Optional Extension to ASTM F3548-21</a></td>
4243
</tr>
4344
<tr>
4445
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0005,2</a></td>
@@ -73,7 +74,7 @@
7374
<tr>
7475
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0100,1</a></td>
7576
<td>Implemented</td>
76-
<td><a href="../../../scenarios/astm/utm/dss/authentication/authentication_validation.md">ASTM SCD DSS: Interfaces authentication</a><br><a href="../../../scenarios/astm/utm/dss/synchronization/uss_availability_synchronization.md">ASTM SCD DSS: USS Availability Synchronization</a></td>
77+
<td><a href="../../../scenarios/astm/utm/dss/uss_availability_simple.md">ASTM Availability DSS: USS Availability Simple</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/synchronization/uss_availability_synchronization.md">ASTM SCD DSS: USS Availability Synchronization</a></td>
7778
</tr>
7879
<tr>
7980
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0100,2</a></td>

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,3 +146,8 @@ actions:
146146
scenario_type: scenarios.astm.utm.dss.Report
147147
resources:
148148
dss: dss
149+
- test_scenario:
150+
scenario_type: scenarios.astm.utm.dss.UssAvaiabilitySimple
151+
resources:
152+
dss: dss
153+
client_identity: utm_client_identity

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
<td rowspan="81" style="vertical-align:top;"><a href="../../../requirements/astm/f3548/v21.md">astm<br>.f3548<br>.v21</a></td>
4343
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0005,1</a></td>
4444
<td>Implemented</td>
45-
<td><a href="../../../scenarios/astm/utm/prep_planners.md">ASTM F3548 flight planners preparation</a><br><a href="../../../scenarios/astm/utm/dss/op_intent_ref_access_control.md">ASTM F3548-21 UTM DSS Operational Intent Reference Access Control</a><br><a href="../../../scenarios/astm/utm/dss/op_intent_ref_state_transitions.md">ASTM F3548-21 UTM DSS Operational Intent Reference State Transitions</a><br><a href="../../../scenarios/astm/utm/dss/oir_implicit_sub_handling.md">ASTM SCD DSS: Implicit Subscription handling</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/oir_explicit_sub_handling.md">ASTM SCD DSS: Operational Intent Explicit Subscription handling</a><br><a href="../../../scenarios/astm/utm/dss/op_intent_ref_key_validation.md">ASTM SCD DSS: Operational Intent Reference Key Validation</a><br><a href="../../../scenarios/astm/utm/dss/op_intent_ref_simple.md">ASTM SCD DSS: Operational Intent Reference Simple</a><br><a href="../../../scenarios/astm/utm/dss/synchronization/op_intent_ref_synchronization.md">ASTM SCD DSS: Operational Intent Reference Synchronization</a><br><a href="../../../scenarios/astm/utm/dss/subscription_interactions_deletion.md">ASTM SCD DSS: Subscription and entity deletion interaction</a><br><a href="../../../scenarios/astm/utm/dss/subscription_interactions.md">ASTM SCD DSS: Subscription and entity interaction</a><br><a href="../../../scenarios/astm/utm/nominal_planning/conflict_equal_priority_not_permitted/conflict_equal_priority_not_permitted.md">Nominal planning: not permitted conflict with equal priority</a><br><a href="../../../scenarios/interuss/ovn_request/dss_ovn_request.md">OVN Request Optional Extension to ASTM F3548-21</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><br><a href="../../../scenarios/astm/utm/nominal_planning/solo_happy_path.md">Solo happy path</a></td>
45+
<td><a href="../../../scenarios/astm/utm/dss/uss_availability_simple.md">ASTM Availability DSS: USS Availability Simple</a><br><a href="../../../scenarios/astm/utm/prep_planners.md">ASTM F3548 flight planners preparation</a><br><a href="../../../scenarios/astm/utm/dss/op_intent_ref_access_control.md">ASTM F3548-21 UTM DSS Operational Intent Reference Access Control</a><br><a href="../../../scenarios/astm/utm/dss/op_intent_ref_state_transitions.md">ASTM F3548-21 UTM DSS Operational Intent Reference State Transitions</a><br><a href="../../../scenarios/astm/utm/dss/oir_implicit_sub_handling.md">ASTM SCD DSS: Implicit Subscription handling</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/oir_explicit_sub_handling.md">ASTM SCD DSS: Operational Intent Explicit Subscription handling</a><br><a href="../../../scenarios/astm/utm/dss/op_intent_ref_key_validation.md">ASTM SCD DSS: Operational Intent Reference Key Validation</a><br><a href="../../../scenarios/astm/utm/dss/op_intent_ref_simple.md">ASTM SCD DSS: Operational Intent Reference Simple</a><br><a href="../../../scenarios/astm/utm/dss/synchronization/op_intent_ref_synchronization.md">ASTM SCD DSS: Operational Intent Reference Synchronization</a><br><a href="../../../scenarios/astm/utm/dss/subscription_interactions_deletion.md">ASTM SCD DSS: Subscription and entity deletion interaction</a><br><a href="../../../scenarios/astm/utm/dss/subscription_interactions.md">ASTM SCD DSS: Subscription and entity interaction</a><br><a href="../../../scenarios/astm/utm/nominal_planning/conflict_equal_priority_not_permitted/conflict_equal_priority_not_permitted.md">Nominal planning: not permitted conflict with equal priority</a><br><a href="../../../scenarios/interuss/ovn_request/dss_ovn_request.md">OVN Request Optional Extension to ASTM F3548-21</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><br><a href="../../../scenarios/astm/utm/nominal_planning/solo_happy_path.md">Solo happy path</a></td>
4646
</tr>
4747
<tr>
4848
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0005,2</a></td>
@@ -77,7 +77,7 @@
7777
<tr>
7878
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0100,1</a></td>
7979
<td>Implemented</td>
80-
<td><a href="../../../scenarios/astm/utm/dss/authentication/authentication_validation.md">ASTM SCD DSS: Interfaces authentication</a><br><a href="../../../scenarios/astm/utm/dss/synchronization/uss_availability_synchronization.md">ASTM SCD DSS: USS Availability Synchronization</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>
80+
<td><a href="../../../scenarios/astm/utm/dss/uss_availability_simple.md">ASTM Availability DSS: USS Availability Simple</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/synchronization/uss_availability_synchronization.md">ASTM SCD DSS: USS Availability Synchronization</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>
8181
</tr>
8282
<tr>
8383
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0100,2</a></td>

0 commit comments

Comments
 (0)