Skip to content

Commit a29e31d

Browse files
committed
[netrid] Check response validity when calling all_flights
1 parent bac22cb commit a29e31d

File tree

8 files changed

+114
-34
lines changed

8 files changed

+114
-34
lines changed

monitoring/uss_qualifier/scenarios/astm/netrid/common/misbehavior.py

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -178,18 +178,39 @@ def poll_func(rect: LatLngRect) -> bool:
178178
poll_func,
179179
)
180180

181+
def _is_area_too_large(self, rect: s2sphere.LatLngRect) -> bool:
182+
diagonal_km = (
183+
rect.lo().get_distance(rect.hi()).degrees * geo.EARTH_CIRCUMFERENCE_KM / 360
184+
)
185+
return diagonal_km > self._rid_version.max_diagonal_km
186+
181187
def _fetch_flights_from_dss(self, rect: LatLngRect) -> dict[str, TelemetryMapping]:
182188
# We grab all flights from the SPs (which we know how to reach by first querying the DSS).
183189
# This is authenticated and is expected to succeed
184190
# TODO: Add the following requests to the documentation. Possibly split it as a test step.
185-
sp_observation = rid.all_flights(
186-
rect,
187-
include_recent_positions=True,
188-
get_details=False,
189-
rid_version=self._rid_version,
190-
session=self._dss.client,
191-
dss_participant_id=self._dss.participant_id,
192-
)
191+
192+
with self.check("ISA query", [self._dss.participant_id]) as check:
193+
sp_observation = rid.all_flights(
194+
rect,
195+
include_recent_positions=True,
196+
get_details=False,
197+
rid_version=self._rid_version,
198+
session=self._dss.client,
199+
dss_participant_id=self._dss.participant_id,
200+
)
201+
202+
self.record_queries(sp_observation.queries)
203+
204+
if not sp_observation.success and not self._is_area_too_large(rect):
205+
check.record_failed(
206+
summary="Could not query ISAs from DSS",
207+
details=f"Query to {self._dss.participant_id}'s DSS at failed: {', '.join(sp_observation.errors)}",
208+
query_timestamps=[
209+
query.request.initiated_at.datetime
210+
for query in sp_observation.queries
211+
if query.request.initiated_at
212+
],
213+
)
193214

194215
mapping_by_injection_id = (
195216
display_data_evaluator.map_fetched_to_injected_flights(
@@ -198,7 +219,6 @@ def _fetch_flights_from_dss(self, rect: LatLngRect) -> dict[str, TelemetryMappin
198219
self._query_cache,
199220
)
200221
)
201-
self.record_queries(sp_observation.queries)
202222

203223
return mapping_by_injection_id
204224

monitoring/uss_qualifier/scenarios/astm/netrid/display_data_evaluator.py

Lines changed: 57 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -275,23 +275,38 @@ def evaluate_system_instantaneously(
275275
self._test_scenario.begin_test_step("Service Provider polling")
276276

277277
# Observe Service Provider with uss_qualifier acting as a Display Provider
278-
sp_observation = all_flights(
279-
rect,
280-
include_recent_positions=True,
281-
get_details=True,
282-
rid_version=self._rid_version,
283-
session=self._dss.client,
284-
dss_participant_id=self._dss.participant_id,
285-
)
278+
with self._test_scenario.check(
279+
"ISA query", [self._dss.participant_id]
280+
) as check:
281+
sp_observation = all_flights(
282+
rect,
283+
include_recent_positions=True,
284+
get_details=True,
285+
rid_version=self._rid_version,
286+
session=self._dss.client,
287+
dss_participant_id=self._dss.participant_id,
288+
)
289+
290+
for q in sp_observation.queries:
291+
self._test_scenario.record_query(q)
292+
293+
if not sp_observation.success and not self._is_area_too_large(rect):
294+
check.record_failed(
295+
summary="Could not query ISAs from DSS",
296+
details=f"Query to {self._dss.participant_id}'s DSS at failed: {', '.join(sp_observation.errors)}",
297+
query_timestamps=[
298+
query.request.initiated_at.datetime
299+
for query in sp_observation.queries
300+
if query.request.initiated_at
301+
],
302+
)
286303

287304
# map observed flights to injected flight and attribute participant ID
288305
mapping_by_injection_id = map_fetched_to_injected_flights(
289306
self._injected_flights,
290307
list(sp_observation.uss_flight_queries.values()),
291308
self._query_cache,
292309
)
293-
for q in sp_observation.queries:
294-
self._test_scenario.record_query(q)
295310

296311
# Evaluate observations
297312
self._evaluate_sp_observation(rect, sp_observation, mapping_by_injection_id)
@@ -325,6 +340,12 @@ def evaluate_system_instantaneously(
325340
# TODO: If bounding rect is smaller than area-too-large threshold, expand slightly above area-too-large threshold and re-observe
326341
self._test_scenario.end_test_step()
327342

343+
def _is_area_too_large(self, rect: s2sphere.LatLngRect) -> bool:
344+
diagonal_km = (
345+
rect.lo().get_distance(rect.hi()).degrees * geo.EARTH_CIRCUMFERENCE_KM / 360
346+
)
347+
return diagonal_km > self._rid_version.max_diagonal_km
348+
328349
def _evaluate_observation(
329350
self,
330351
observer: RIDSystemObserver,
@@ -336,7 +357,7 @@ def _evaluate_observation(
336357
diagonal_km = (
337358
rect.lo().get_distance(rect.hi()).degrees * geo.EARTH_CIRCUMFERENCE_KM / 360
338359
)
339-
if diagonal_km > self._rid_version.max_diagonal_km:
360+
if self._is_area_too_large(rect):
340361
self._evaluate_area_too_large_observation(
341362
observer, rect, diagonal_km, query
342363
)
@@ -1061,23 +1082,38 @@ def evaluate_disconnected_flights(
10611082
self._test_scenario.begin_test_step("Service Provider polling")
10621083

10631084
# Observe Service Provider with uss_qualifier acting as a Display Provider
1064-
sp_observation = all_flights(
1065-
rect,
1066-
include_recent_positions=True,
1067-
get_details=False,
1068-
rid_version=self._rid_version,
1069-
session=self._dss.client,
1070-
dss_participant_id=self._dss.participant_id,
1071-
)
1085+
with self._test_scenario.check(
1086+
"ISA query", [self._dss.participant_id]
1087+
) as check:
1088+
sp_observation = all_flights(
1089+
rect,
1090+
include_recent_positions=True,
1091+
get_details=False,
1092+
rid_version=self._rid_version,
1093+
session=self._dss.client,
1094+
dss_participant_id=self._dss.participant_id,
1095+
)
1096+
1097+
for q in sp_observation.queries:
1098+
self._test_scenario.record_query(q)
1099+
1100+
if not sp_observation.success:
1101+
check.record_failed(
1102+
summary="Could not query ISAs from DSS",
1103+
details=f"Query to {self._dss.participant_id}'s DSS at failed: {', '.join(sp_observation.errors)}",
1104+
query_timestamps=[
1105+
query.request.initiated_at.datetime
1106+
for query in sp_observation.queries
1107+
if query.request.initiated_at
1108+
],
1109+
)
10721110

10731111
# map observed flights to injected flight and attribute participant ID
10741112
mapping_by_injection_id = map_fetched_to_injected_flights(
10751113
self._injected_flights,
10761114
list(sp_observation.uss_flight_queries.values()),
10771115
self._query_cache,
10781116
)
1079-
for q in sp_observation.queries:
1080-
self._test_scenario.record_query(q)
10811117

10821118
# Evaluate observations
10831119
self._evaluate_sp_observation(sp_observation, mapping_by_injection_id)

monitoring/uss_qualifier/scenarios/astm/netrid/v19/misbehavior.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ This particular test requires each flight to be uniquely identifiable by its 2D
4343

4444
This step will attempt to search for flights in a rectangular area with a diagonal greater than [NetMaxDisplayAreaDiagonal] km.
4545

46+
#### ⚠️ ISA query check
47+
48+
**[interuss.f3411.dss_endpoints.SearchISAs](../../../../requirements/interuss/f3411/dss_endpoints.md)** requires a USS providing a DSS instance to implement the DSS endpoints of the OpenAPI specification. If uss_qualifier is unable to query the DSS for ISAs, this check will fail.
49+
4650
#### ⚠️ Area too large check
4751

4852
**[astm.f3411.v19.NET0250](../../../../requirements/astm/f3411/v19.md)** requires that a NetRID Service Provider rejects a request for a very large view area with a diagonal greater than *NetMaxDisplayAreaDiagonal*. If such a large view is requested and a 400 or 413 error code is not received or the response contains Remote ID data, then this check will fail.
@@ -54,6 +58,10 @@ to confirm that the requested data is indeed available to any authorized query.
5458

5559
It then repeats the exact same request without credentials, and expects this to fail.
5660

61+
#### ⚠️ ISA query check
62+
63+
**[interuss.f3411.dss_endpoints.SearchISAs](../../../../requirements/interuss/f3411/dss_endpoints.md)** requires a USS providing a DSS instance to implement the DSS endpoints of the OpenAPI specification. If uss_qualifier is unable to query the DSS for ISAs, this check will fail.
64+
5765
#### ⚠️ Missing credentials check
5866

5967
This check ensures that all requests are properly authenticated, as required by **[astm.f3411.v19.NET0210](../../../../requirements/astm/f3411/v19.md)**,
@@ -63,6 +71,10 @@ and that requests for existing flights that are executed with missing credential
6371

6472
This step is similar to unauthenticated requests, but uses incorrectly-authenticated requests instead.
6573

74+
#### ⚠️ ISA query check
75+
76+
**[interuss.f3411.dss_endpoints.SearchISAs](../../../../requirements/interuss/f3411/dss_endpoints.md)** requires a USS providing a DSS instance to implement the DSS endpoints of the OpenAPI specification. If uss_qualifier is unable to query the DSS for ISAs, this check will fail.
77+
6678
#### ⚠️ Invalid credentials check
6779
This check ensures that all requests are properly authenticated, as required by **[astm.f3411.v19.NET0210](../../../../requirements/astm/f3411/v19.md)**,
6880
and that requests for existing flights that are executed with incorrect credentials fail.

monitoring/uss_qualifier/scenarios/astm/netrid/v22a/misbehavior.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ A [`DSSInstanceResource`](../../../../resources/astm/f3411/dss.py) is required f
3030

3131
This step will attempt to search for flights in a rectangular area with a diagonal greater than [NetMaxDisplayAreaDiagonal] km.
3232

33+
#### ⚠️ ISA query check
34+
35+
**[interuss.f3411.dss_endpoints.SearchISAs](../../../../requirements/interuss/f3411/dss_endpoints.md)** requires a USS providing a DSS instance to implement the DSS endpoints of the OpenAPI specification. If uss_qualifier is unable to query the DSS for ISAs, this check will fail.
36+
3337
#### ⚠️ Area too large check
3438

3539
**[astm.f3411.v22a.NET0250](../../../../requirements/astm/f3411/v22a.md)** requires that a NetRID Service Provider rejects a request for a very large view area with a diagonal greater than *NetMaxDisplayAreaDiagonal*. If such a large view is requested and a 400 or 413 error code is not received or the response contains Remote ID data, then this check will fail.
@@ -41,6 +45,10 @@ to confirm that the requested data is indeed available to any authorized query.
4145

4246
It then repeats the exact same request without credentials, and expects this to fail.
4347

48+
#### ⚠️ ISA query check
49+
50+
**[interuss.f3411.dss_endpoints.SearchISAs](../../../../requirements/interuss/f3411/dss_endpoints.md)** requires a USS providing a DSS instance to implement the DSS endpoints of the OpenAPI specification. If uss_qualifier is unable to query the DSS for ISAs, this check will fail.
51+
4452
#### ⚠️ Missing credentials check
4553

4654
This check ensures that all requests are properly authenticated, as required by **[astm.f3411.v22a.NET0210](../../../../requirements/astm/f3411/v22a.md)**,
@@ -50,6 +58,10 @@ and that requests for existing flights that are executed with missing credential
5058

5159
This step is similar to unauthenticated requests, but uses incorrectly-authenticated requests instead.
5260

61+
#### ⚠️ ISA query check
62+
63+
**[interuss.f3411.dss_endpoints.SearchISAs](../../../../requirements/interuss/f3411/dss_endpoints.md)** requires a USS providing a DSS instance to implement the DSS endpoints of the OpenAPI specification. If uss_qualifier is unable to query the DSS for ISAs, this check will fail.
64+
5365
#### ⚠️ Invalid credentials check
5466

5567
This check ensures that all requests are properly authenticated, as required by **[astm.f3411.v22a.NET0210](../../../../requirements/astm/f3411/v22a.md)**,

monitoring/uss_qualifier/suites/astm/netrid/f3411_19.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -561,7 +561,7 @@
561561
<tr>
562562
<td><a href="../../../requirements/interuss/f3411/dss_endpoints.md">SearchISAs</a></td>
563563
<td>Implemented</td>
564-
<td><a href="../../../scenarios/astm/netrid/v19/dss/heavy_traffic_concurrent.md">ASTM NetRID DSS: Concurrent Requests</a><br><a href="../../../scenarios/astm/netrid/v19/dss/isa_expiry.md">ASTM NetRID DSS: ISA Expiry</a><br><a href="../../../scenarios/astm/netrid/v19/dss/isa_simple.md">ASTM NetRID DSS: Simple ISA</a><br><a href="../../../scenarios/astm/netrid/v19/dss/token_validation.md">ASTM NetRID DSS: Token Validation</a><br><a href="../../../scenarios/astm/netrid/v19/sp_operator_notify_slow_update.md">ASTM NetRID Service Provider operator notification under slow update rate</a><br><a href="../../../scenarios/astm/netrid/v19/networked_uas_disconnect.md">ASTM NetRID networked UAS disconnection</a><br><a href="../../../scenarios/astm/netrid/v19/nominal_behavior.md">ASTM NetRID nominal behavior</a></td>
564+
<td><a href="../../../scenarios/astm/netrid/v19/dss/heavy_traffic_concurrent.md">ASTM NetRID DSS: Concurrent Requests</a><br><a href="../../../scenarios/astm/netrid/v19/dss/isa_expiry.md">ASTM NetRID DSS: ISA Expiry</a><br><a href="../../../scenarios/astm/netrid/v19/dss/isa_simple.md">ASTM NetRID DSS: Simple ISA</a><br><a href="../../../scenarios/astm/netrid/v19/dss/token_validation.md">ASTM NetRID DSS: Token Validation</a><br><a href="../../../scenarios/astm/netrid/v19/misbehavior.md">ASTM NetRID SP clients misbehavior handling</a><br><a href="../../../scenarios/astm/netrid/v19/sp_operator_notify_slow_update.md">ASTM NetRID Service Provider operator notification under slow update rate</a><br><a href="../../../scenarios/astm/netrid/v19/networked_uas_disconnect.md">ASTM NetRID networked UAS disconnection</a><br><a href="../../../scenarios/astm/netrid/v19/nominal_behavior.md">ASTM NetRID nominal behavior</a></td>
565565
</tr>
566566
<tr>
567567
<td rowspan="1" style="vertical-align:top;"><a href="../../../requirements/interuss/mock_uss/hosted_instance.md">interuss<br>.mock_uss<br>.hosted_instance</a></td>

monitoring/uss_qualifier/suites/astm/netrid/f3411_22a.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -681,7 +681,7 @@
681681
<tr>
682682
<td><a href="../../../requirements/interuss/f3411/dss_endpoints.md">SearchISAs</a></td>
683683
<td>Implemented</td>
684-
<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_simple.md">ASTM NetRID DSS: Simple ISA</a><br><a href="../../../scenarios/astm/netrid/v22a/dss/token_validation.md">ASTM NetRID DSS: Token Validation</a><br><a href="../../../scenarios/astm/netrid/v22a/sp_operator_notify_slow_update.md">ASTM NetRID Service Provider operator notification under slow update rate</a><br><a href="../../../scenarios/astm/netrid/v22a/networked_uas_disconnect.md">ASTM NetRID networked UAS disconnection</a><br><a href="../../../scenarios/astm/netrid/v22a/nominal_behavior.md">ASTM NetRID nominal behavior</a></td>
684+
<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_simple.md">ASTM NetRID DSS: Simple ISA</a><br><a href="../../../scenarios/astm/netrid/v22a/dss/token_validation.md">ASTM NetRID DSS: Token Validation</a><br><a href="../../../scenarios/astm/netrid/v22a/misbehavior.md">ASTM NetRID SP clients misbehavior handling</a><br><a href="../../../scenarios/astm/netrid/v22a/sp_operator_notify_slow_update.md">ASTM NetRID Service Provider operator notification under slow update rate</a><br><a href="../../../scenarios/astm/netrid/v22a/networked_uas_disconnect.md">ASTM NetRID networked UAS disconnection</a><br><a href="../../../scenarios/astm/netrid/v22a/nominal_behavior.md">ASTM NetRID nominal behavior</a></td>
685685
</tr>
686686
<tr>
687687
<td rowspan="1" style="vertical-align:top;"><a href="../../../requirements/interuss/mock_uss/hosted_instance.md">interuss<br>.mock_uss<br>.hosted_instance</a></td>

monitoring/uss_qualifier/suites/uspace/network_identification.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -673,7 +673,7 @@
673673
<tr>
674674
<td><a href="../../requirements/interuss/f3411/dss_endpoints.md">SearchISAs</a></td>
675675
<td>Implemented</td>
676-
<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_simple.md">ASTM NetRID DSS: Simple ISA</a><br><a href="../../scenarios/astm/netrid/v22a/dss/token_validation.md">ASTM NetRID DSS: Token Validation</a><br><a href="../../scenarios/astm/netrid/v22a/sp_operator_notify_slow_update.md">ASTM NetRID Service Provider operator notification under slow update rate</a><br><a href="../../scenarios/astm/netrid/v22a/networked_uas_disconnect.md">ASTM NetRID networked UAS disconnection</a><br><a href="../../scenarios/astm/netrid/v22a/nominal_behavior.md">ASTM NetRID nominal behavior</a></td>
676+
<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_simple.md">ASTM NetRID DSS: Simple ISA</a><br><a href="../../scenarios/astm/netrid/v22a/dss/token_validation.md">ASTM NetRID DSS: Token Validation</a><br><a href="../../scenarios/astm/netrid/v22a/misbehavior.md">ASTM NetRID SP clients misbehavior handling</a><br><a href="../../scenarios/astm/netrid/v22a/sp_operator_notify_slow_update.md">ASTM NetRID Service Provider operator notification under slow update rate</a><br><a href="../../scenarios/astm/netrid/v22a/networked_uas_disconnect.md">ASTM NetRID networked UAS disconnection</a><br><a href="../../scenarios/astm/netrid/v22a/nominal_behavior.md">ASTM NetRID nominal behavior</a></td>
677677
</tr>
678678
<tr>
679679
<td rowspan="1" style="vertical-align:top;"><a href="../../requirements/interuss/mock_uss/hosted_instance.md">interuss<br>.mock_uss<br>.hosted_instance</a></td>

0 commit comments

Comments
 (0)