Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Subscriptions unchanged after rejected request test step fragment

This test step fragment validates that a request to create or mutate an operational intent reference that was rejected
because of a conflict did not create, modify or delete any subscription, including implicit subscriptions.

The subscriptions owned by the client within the planning area are queried before and after the rejected request, and compared.
If either query fails, the comparison is skipped.

## ⚠️ Successful subscription search query check

**[astm.f3548.v21.DSS0005,5](../../../../../../requirements/astm/f3548/v21.md)** requires the implementation of the DSS endpoint to allow callers to retrieve the subscriptions they created.

## ⚠️ Rejected request did not create or modify subscriptions check

A request to create or mutate an operational intent reference that is rejected because of missing OVNs is not expected to have any effect.
In particular, the DSS is not expected to create an implicit subscription requested by such a request, nor to expand
an existing implicit subscription to cover the rejected operational intent reference.

If the subscriptions owned by the client differ before and after the rejected request, the DSS fails to properly manage
implicit subscriptions and is in violation of **[astm.f3548.v21.DSS0005,1](../../../../../../requirements/astm/f3548/v21.md)**.
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,8 @@ This step will validate the response body for the `HTTP 409` error response from

Checks that an attempt to create an OIR without specifying the OVNs of the already existing and overlapping OIRs fails.

#### [Subscriptions are unchanged](fragments/sub/unchanged_after_conflict.md)

### Attempt valid OIR creation overlapping with both OIRs test step

This test step will attempt to create an operational intent reference that intersects with both of the previously created OIRs,
Expand Down Expand Up @@ -141,4 +143,17 @@ The expectation is that the DSS will require the missing OVN.

#### [Non de-conflicted mutation request fails](fragments/oir/crud/update_conflict.md)

### Attempt mutation requiring expansion of the implicit subscription test step

This test step attempts to mutate the third operational intent reference so that it ends 10 minutes later, while:
- specifying, as its subscription, the implicit subscription that was created along with it, and
- omitting the OVNs of the two other operational intent references in the `key` field.

The mutated operational intent reference would end after its implicit subscription, which the DSS would therefore need to expand.
Because the OVNs are missing, the DSS is expected to reject the request, and to leave the implicit subscription unchanged.

#### [Non de-conflicted mutation request fails](fragments/oir/crud/update_conflict.md)

#### [Subscriptions are unchanged](fragments/sub/unchanged_after_conflict.md)

## [Cleanup](./clean_workspace_op_intents_during_cleanup.md)
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

from monitoring.monitorlib import fetch, schema_validation
from monitoring.monitorlib.fetch import QueryError
from monitoring.monitorlib.fetch.scd import FetchedSubscriptions
from monitoring.monitorlib.schema_validation import F3548_21
from monitoring.prober.infrastructure import register_resource_type
from monitoring.uss_qualifier.resources import PlanningAreaResource
Expand Down Expand Up @@ -218,6 +219,7 @@ def _attempt_update_expect_conflict(
base_url=oir_params.uss_base_url,
oi_id=oir_id,
ovn=ovn,
subscription_id=oir_params.get("subscription_id"),
)
self.record_query(q)
check.record_failed(
Expand Down Expand Up @@ -280,9 +282,11 @@ def _steps_attempt_create_overlapping_oir(self):
)

self.begin_test_step("Attempt OIR creation overlapping with both OIRs")
subs_before = self._query_own_subs()
self._attempt_creation_expect_conflict(
third_oir_id, conflict_both, [first_oir.id, second_oir.id]
)
self._check_subscriptions_unchanged(subs_before)
self.end_test_step()

# Finally, we create the third OIR with the correct key, so we may try to mutate it at the next step
Expand Down Expand Up @@ -404,6 +408,74 @@ def _steps_attempt_mutation_to_cause_overlap(self):
)
self.end_test_step()

# Try to extend the third OIR beyond the end of the second one without providing the conflicting OVNs
expand_implicit_sub = self._planning_area.get_new_operational_intent_ref_params(
key=[],
state=oir_to_mutate.state,
uss_base_url=oir_to_mutate.uss_base_url,
time_start=oir_to_mutate.time_start.value.datetime,
time_end=oir_to_mutate.time_end.value.datetime + timedelta(minutes=10),
subscription_id=oir_to_mutate.subscription_id,
)

self.begin_test_step(
"Attempt mutation requiring expansion of the implicit subscription"
)
subs_before = self._query_own_subs()
assert oir_to_mutate.ovn is not None
self._attempt_update_expect_conflict(
oir_to_mutate.id,
expand_implicit_sub,
[first_oir.id, second_oir.id],
oir_to_mutate.ovn,
)
self._check_subscriptions_unchanged(subs_before)
self.end_test_step()

def _query_own_subs(self) -> FetchedSubscriptions | None:
"""Queries the subscriptions owned by the client in the planning area.
Returns None if the query failed."""
query = self._dss.query_subscriptions(
self._planning_area_volume4d.to_f3548v21()
)
self.record_query(query)
with self.check("Successful subscription search query", self._pid) as check:
if query.status_code != 200:
check.record_failed(
summary="Could not query subscriptions",
details=f"When attempting to query subscriptions from the DSS, received {query.status_code}",
query_timestamps=[query.request.timestamp],
)
return None
return query

def _check_subscriptions_unchanged(self, query_before: FetchedSubscriptions | None):
"""Checks that the subscriptions owned by the client are the same as before a rejected request.
The check is skipped if the subscriptions could not be queried before or after the request."""
if query_before is None:
return
query = self._query_own_subs()
if query is None:
return
subs_before = {s.id: s.version for s in query_before.subscriptions.values()}
subs_after = {s.id: s.version for s in query.subscriptions.values()}
with self.check(
"Rejected request did not create or modify subscriptions", self._pid
) as check:
created = subs_after.keys() - subs_before.keys()
deleted = subs_before.keys() - subs_after.keys()
modified = {
sub_id
for sub_id in subs_before.keys() & subs_after.keys()
if subs_before[sub_id] != subs_after[sub_id]
}
if created or deleted or modified:
check.record_failed(
summary="Subscriptions changed by rejected request",
details=f"The request was rejected because of a conflict, but subscriptions were changed: created {created}, deleted {deleted}, modified {modified}",
query_timestamps=[query.request.timestamp],
)

def _setup_case(self):
self.begin_test_case("Setup")
self.begin_test_step("Ensure clean workspace")
Expand Down
2 changes: 1 addition & 1 deletion monitoring/uss_qualifier/suites/astm/utm/dss_probing.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
<tr>
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0005,5</a></td>
<td>Implemented</td>
<td><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/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/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></td>
<td><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/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/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></td>
</tr>
<tr>
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0015</a></td>
Expand Down
2 changes: 1 addition & 1 deletion monitoring/uss_qualifier/suites/astm/utm/f3548_21.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@
<tr>
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0005,5</a></td>
<td>Implemented</td>
<td><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/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/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></td>
<td><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/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/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></td>
</tr>
<tr>
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0015</a></td>
Expand Down
2 changes: 1 addition & 1 deletion monitoring/uss_qualifier/suites/faa/uft/message_signing.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
<tr>
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0005,5</a></td>
<td>Implemented</td>
<td><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/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/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></td>
<td><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/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/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></td>
</tr>
<tr>
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0015</a></td>
Expand Down
2 changes: 1 addition & 1 deletion monitoring/uss_qualifier/suites/interuss/dss/all_tests.md
Original file line number Diff line number Diff line change
Expand Up @@ -461,7 +461,7 @@
<tr>
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0005,5</a></td>
<td>Implemented</td>
<td><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/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/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></td>
<td><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/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/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></td>
</tr>
<tr>
<td><a href="../../../requirements/astm/f3548/v21.md">DSS0015</a></td>
Expand Down
2 changes: 1 addition & 1 deletion monitoring/uss_qualifier/suites/uspace/flight_auth.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
<tr>
<td><a href="../../requirements/astm/f3548/v21.md">DSS0005,5</a></td>
<td>Implemented</td>
<td><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/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/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></td>
<td><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/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/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></td>
</tr>
<tr>
<td><a href="../../requirements/astm/f3548/v21.md">DSS0015</a></td>
Expand Down
Loading
Loading