Skip to content

Commit 902b1d8

Browse files
authored
[uss_qualifier] uss availability status: version conflict (#1137)
1 parent bdd26cb commit 902b1d8

File tree

12 files changed

+191
-9
lines changed

12 files changed

+191
-9
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,6 @@
2020
)
2121
from .subscription_simple import SubscriptionSimple as SubscriptionSimple
2222
from .subscription_validation import SubscriptionValidation as SubscriptionValidation
23+
from .uss_availability_mutation import (
24+
UssAvailabilityMutation as UssAvailabilityMutation,
25+
)

monitoring/uss_qualifier/scenarios/astm/utm/dss/fragments/availability/read.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# USS Availability Read test step fragment
22

3-
This fragment contains the steps for the USS Availability synchronization scenario
3+
This fragment contains the steps for the USS Availability scenario
44
where we confirm that a USS availability can be correctly read from a DSS instance
55

66
## 🛑 USS Availability can be requested check

monitoring/uss_qualifier/scenarios/astm/utm/dss/fragments/availability/update.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# USS Availability Read test step fragment
1+
# USS Availability Update test step fragment
22

3-
This fragment contains the steps for the USS Availability synchronization scenario
3+
This fragment contains the steps for the USS Availability scenario
44
where we confirm that a USS availability can be correctly read from a DSS instance
55

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

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

@@ -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_mutation.md">ASTM Availability DSS: USS Availability Mutation</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.UssAvailabilityMutation
151+
resources:
152+
dss: dss
153+
client_identity: utm_client_identity

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
<tr>
7676
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0100,1</a></td>
7777
<td>Implemented</td>
78-
<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>
78+
<td><a href="../../../scenarios/astm/utm/dss/uss_availability_mutation.md">ASTM Availability DSS: USS Availability Mutation</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>
7979
</tr>
8080
<tr>
8181
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0100,2</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
@@ -56,7 +56,7 @@
5656
<tr>
5757
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0100,1</a></td>
5858
<td>Implemented</td>
59-
<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>
59+
<td><a href="../../../scenarios/astm/utm/dss/uss_availability_mutation.md">ASTM Availability DSS: USS Availability Mutation</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>
6060
</tr>
6161
<tr>
6262
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0100,2</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
@@ -476,7 +476,7 @@
476476
<tr>
477477
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0100,1</a></td>
478478
<td>Implemented</td>
479-
<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>
479+
<td><a href="../../../scenarios/astm/utm/dss/uss_availability_mutation.md">ASTM Availability DSS: USS Availability Mutation</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>
480480
</tr>
481481
<tr>
482482
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0100,2</a></td>

0 commit comments

Comments
 (0)