Skip to content

Commit

Permalink
[uss_qualifier/scenarios/netrid/nominal_behavior] Add checks for UA t…
Browse files Browse the repository at this point in the history
…ype in SP (NET0260)
  • Loading branch information
mickmis committed Dec 16, 2024
1 parent 3f6b88a commit 58d213e
Show file tree
Hide file tree
Showing 8 changed files with 134 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import datetime
import math
from typing import List, Optional

Expand Down Expand Up @@ -47,11 +48,20 @@ def __init__(

def evaluate_sp_flight(
self,
injected_flight: injection.TestFlight,
observed_flight: Flight,
participant_id: ParticipantID,
query_timestamp: datetime.datetime,
):
"""Implements fragment documented in `common_dictionary_evaluator_sp_flight.md`."""

self._evaluate_ua_type(
injected_flight.get("aircraft_type"),
observed_flight.aircraft_type,
[participant_id],
query_timestamp,
)

self._evaluate_operational_status(
observed_flight.operational_status,
[participant_id],
Expand Down Expand Up @@ -651,3 +661,77 @@ def _evaluate_operational_status(
key="skip_reason",
message=f"Unsupported version {self._rid_version}: skipping Operational Status evaluation",
)

def _evaluate_ua_type(
self,
injected_val: Optional[str],
observed_val: Optional[str],
participants: List[ParticipantID],
query_timestamp: datetime.datetime,
):
with self._test_scenario.check(
"UA type is present and consistent with injected one",
participants,
) as check:
if observed_val is None:
check.record_failed(
"UA type is missing",
details="USS did not return any UA type",
query_timestamps=[query_timestamp],
)
elif not observed_val:
check.record_failed(
"UA type is empty",
details="USS returned an empty UA type",
query_timestamps=[query_timestamp],
)

equivalent = {injection.UAType.HybridLift, injection.UAType.VTOL}
if injected_val is None:
if observed_val != injection.UAType.NotDeclared:
check.record_failed(
"UA type is inconsistent, expected 'NotDeclared' since no value was injected",
details=f"USS returned the UA type {observed_val}, yet no value was injected, which should have been mapped to 'NotDeclared'.",
query_timestamps=[query_timestamp],
)

elif injected_val in equivalent:
if observed_val not in equivalent:
check.record_failed(
"UA type is inconsistent with injected value",
details=f"USS returned the UA type {observed_val}, yet the value {injected_val} was injected, given that {equivalent} are equivalent .",
query_timestamps=[query_timestamp],
)

elif injected_val != observed_val:
check.record_failed(
"UA type is inconsistent with injected value",
details=f"USS returned the UA type {observed_val}, yet the value {injected_val} was injected.",
query_timestamps=[query_timestamp],
)

with self._test_scenario.check(
"UA type is consistent with Common Data Dictionary",
participants,
) as check:
try:
injection.UAType(observed_val)
except ValueError:
check.record_failed(
"UA type is invalid",
details=f"USS returned an invalid UA type: {observed_val}.",
query_timestamps=[query_timestamp],
)

if (
self._rid_version == RIDVersion.f3411_19
and observed_val == injection.UAType.HybridLift
) or (
self._rid_version == RIDVersion.f3411_22a
and observed_val == injection.UAType.VTOL
):
check.record_failed(
"UA type is inconsistent RID version",
details=f"USS returned the UA type {observed_val} which is not supported by the RID version used ({self._rid_version}).",
query_timestamps=[query_timestamp],
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import math
from dataclasses import dataclass
from typing import List, Optional, Dict, Union, Set, Tuple, cast
from typing import List, Optional, Dict, Union, Set, Tuple

import arrow
import s2sphere
Expand Down Expand Up @@ -890,6 +890,7 @@ def _evaluate_normal_sp_observation(

for mapping in mappings.values():
participant_id = mapping.injected_flight.uss_participant_id
injected_flight = mapping.injected_flight.flight
observed_flight = mapping.observed_flight.flight
flights_queries = [
q
Expand All @@ -901,6 +902,7 @@ def _evaluate_normal_sp_observation(
f"Found {len(flights_queries)} flights queries (instead of the expected 1) for flight {mapping.observed_flight.id} corresponding to injection ID {mapping.injected_flight.flight.injection_id} for {participant_id}"
)
flights_query = flights_queries[0]
query_timestamp = flights_query.query.request.timestamp

# Verify that flights queries returned correctly-formatted data
errors = schema_validation.validate(
Expand All @@ -920,7 +922,7 @@ def _evaluate_normal_sp_observation(
f"At {e.json_path} in the response: {e.message}"
for e in errors
),
query_timestamps=[flights_query.query.request.timestamp],
query_timestamps=[query_timestamp],
)

# Check recent positions timings
Expand All @@ -935,8 +937,10 @@ def _evaluate_normal_sp_observation(

# Check flight consistency with common data dictionary
self._common_dictionary_evaluator.evaluate_sp_flight(
injected_flight,
observed_flight,
participant_id,
query_timestamp,
)

# Check that required fields are present and match for any observed flights matching injected flights
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@

This fragment is implemented in `common_dictionary_evaluator.py:RIDCommonDictionaryEvaluator.evaluate_sp_flight`.

## ⚠️ UA type is present and consistent with injected one check

**[astm.f3411.v19.NET0260,Table1,3](../../../../requirements/astm/f3411/v19.md)** requires that relevant Remote ID data, consistent with the common data dictionary, be reported by the Service Provider.
The UA type being a required field, this check will fail if it is missing or if it inconsistent with the injected value.

## ⚠️ UA type is consistent with Common Data Dictionary check

**[astm.f3411.v19.NET0260,Table1,3](../../../../requirements/astm/f3411/v19.md)** requires that relevant Remote ID data, consistent with the common data dictionary, be reported by the Service Provider.
This check will fail if the observed UA type has an invalid value.

## Service Provider altitude check

**[astm.f3411.v19.NET0260,Table1,11](../../../../requirements/astm/f3411/v19.md)** requires that relevant Remote ID data, consistent with the common data dictionary, be reported by the Service Provider. Injected flight data had known altitudes, but the altitude reported by the Service Provider did not match those known altitudes.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@

This fragment is implemented in `common_dictionary_evaluator.py:RIDCommonDictionaryEvaluator.evaluate_sp_flight`.

## ⚠️ UA type is present and consistent with injected one check

**[astm.f3411.v22a.NET0260,Table1,2](../../../../requirements/astm/f3411/v22a.md)** requires that relevant Remote ID data, consistent with the common data dictionary, be reported by the Service Provider.
The UA type being a required field, this check will fail if it is missing or if it inconsistent with the injected value.

## ⚠️ UA type is consistent with Common Data Dictionary check

**[astm.f3411.v22a.NET0260,Table1,2](../../../../requirements/astm/f3411/v22a.md)** requires that relevant Remote ID data, consistent with the common data dictionary, be reported by the Service Provider.
This check will fail if the observed UA type has an invalid value.

## Service Provider altitude check

**[astm.f3411.v22a.NET0260,Table1,12](../../../../requirements/astm/f3411/v22a.md)** requires that relevant Remote ID data, consistent with the common data dictionary, be reported by the Service Provider. Injected flight data had known altitudes, but the altitude reported by the Service Provider did not match those known altitudes.
Expand Down
7 changes: 6 additions & 1 deletion monitoring/uss_qualifier/suites/astm/netrid/f3411_19.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
<th><a href="../../README.md#checked-in">Checked in</a></th>
</tr>
<tr>
<td rowspan="75" style="vertical-align:top;"><a href="../../../requirements/astm/f3411/v19.md">astm<br>.f3411<br>.v19</a></td>
<td rowspan="76" style="vertical-align:top;"><a href="../../../requirements/astm/f3411/v19.md">astm<br>.f3411<br>.v19</a></td>
<td><a href="../../../requirements/astm/f3411/v19.md">DSS0010</a></td>
<td>Implemented</td>
<td><a href="../../../scenarios/astm/netrid/v19/dss/token_validation.md">ASTM NetRID DSS: Token Validation</a></td>
Expand Down Expand Up @@ -311,6 +311,11 @@
<td>Implemented</td>
<td><a href="../../../scenarios/astm/netrid/v19/nominal_behavior.md">ASTM NetRID nominal behavior</a></td>
</tr>
<tr>
<td><a href="../../../requirements/astm/f3411/v19.md">NET0260,Table1,3</a></td>
<td>Implemented</td>
<td><a href="../../../scenarios/astm/netrid/v19/nominal_behavior.md">ASTM NetRID nominal behavior</a></td>
</tr>
<tr>
<td><a href="../../../requirements/astm/f3411/v19.md">NET0260,Table1,5</a></td>
<td>Implemented</td>
Expand Down
7 changes: 6 additions & 1 deletion monitoring/uss_qualifier/suites/astm/netrid/f3411_22a.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
<th><a href="../../README.md#checked-in">Checked in</a></th>
</tr>
<tr>
<td rowspan="100" style="vertical-align:top;"><a href="../../../requirements/astm/f3411/v22a.md">astm<br>.f3411<br>.v22a</a></td>
<td rowspan="101" style="vertical-align:top;"><a href="../../../requirements/astm/f3411/v22a.md">astm<br>.f3411<br>.v22a</a></td>
<td><a href="../../../requirements/astm/f3411/v22a.md">DSS0010</a></td>
<td>Implemented</td>
<td><a href="../../../scenarios/astm/netrid/v22a/dss/token_validation.md">ASTM NetRID DSS: Token Validation</a></td>
Expand Down Expand Up @@ -321,6 +321,11 @@
<td>Implemented</td>
<td><a href="../../../scenarios/astm/netrid/v22a/nominal_behavior.md">ASTM NetRID nominal behavior</a></td>
</tr>
<tr>
<td><a href="../../../requirements/astm/f3411/v22a.md">NET0260,Table1,2</a></td>
<td>Implemented</td>
<td><a href="../../../scenarios/astm/netrid/v22a/nominal_behavior.md">ASTM NetRID nominal behavior</a></td>
</tr>
<tr>
<td><a href="../../../requirements/astm/f3411/v22a.md">NET0260,Table1,20</a></td>
<td>Implemented</td>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<th><a href="../README.md#checked-in">Checked in</a></th>
</tr>
<tr>
<td rowspan="100" style="vertical-align:top;"><a href="../../requirements/astm/f3411/v22a.md">astm<br>.f3411<br>.v22a</a></td>
<td rowspan="101" style="vertical-align:top;"><a href="../../requirements/astm/f3411/v22a.md">astm<br>.f3411<br>.v22a</a></td>
<td><a href="../../requirements/astm/f3411/v22a.md">DSS0010</a></td>
<td>Implemented</td>
<td><a href="../../scenarios/astm/netrid/v22a/dss/token_validation.md">ASTM NetRID DSS: Token Validation</a></td>
Expand Down Expand Up @@ -317,6 +317,11 @@
<td>Implemented</td>
<td><a href="../../scenarios/astm/netrid/v22a/nominal_behavior.md">ASTM NetRID nominal behavior</a></td>
</tr>
<tr>
<td><a href="../../requirements/astm/f3411/v22a.md">NET0260,Table1,2</a></td>
<td>Implemented</td>
<td><a href="../../scenarios/astm/netrid/v22a/nominal_behavior.md">ASTM NetRID nominal behavior</a></td>
</tr>
<tr>
<td><a href="../../requirements/astm/f3411/v22a.md">NET0260,Table1,20</a></td>
<td>Implemented</td>
Expand Down
7 changes: 6 additions & 1 deletion monitoring/uss_qualifier/suites/uspace/required_services.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<th><a href="../README.md#checked-in">Checked in</a></th>
</tr>
<tr>
<td rowspan="100" style="vertical-align:top;"><a href="../../requirements/astm/f3411/v22a.md">astm<br>.f3411<br>.v22a</a></td>
<td rowspan="101" style="vertical-align:top;"><a href="../../requirements/astm/f3411/v22a.md">astm<br>.f3411<br>.v22a</a></td>
<td><a href="../../requirements/astm/f3411/v22a.md">DSS0010</a></td>
<td>Implemented</td>
<td><a href="../../scenarios/astm/netrid/v22a/dss/token_validation.md">ASTM NetRID DSS: Token Validation</a></td>
Expand Down Expand Up @@ -318,6 +318,11 @@
<td>Implemented</td>
<td><a href="../../scenarios/astm/netrid/v22a/nominal_behavior.md">ASTM NetRID nominal behavior</a></td>
</tr>
<tr>
<td><a href="../../requirements/astm/f3411/v22a.md">NET0260,Table1,2</a></td>
<td>Implemented</td>
<td><a href="../../scenarios/astm/netrid/v22a/nominal_behavior.md">ASTM NetRID nominal behavior</a></td>
</tr>
<tr>
<td><a href="../../requirements/astm/f3411/v22a.md">NET0260,Table1,20</a></td>
<td>Implemented</td>
Expand Down

0 comments on commit 58d213e

Please sign in to comment.