-
Notifications
You must be signed in to change notification settings - Fork 20
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
13 changed files
with
225 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
from .dss import DSSInstanceResource | ||
from .dss import DSSInstanceResource, DSSInstancesResource |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
31 changes: 31 additions & 0 deletions
31
monitoring/uss_qualifier/scenarios/astm/utm/dss_interoperability.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
# ASTM F3548-21 UTM DSS interoperability test scenario | ||
|
||
## Overview | ||
|
||
TODO: Complete with details once we check more than the prerequisites. | ||
|
||
This scenario currently only checks that all specified DSS instances are publicly addressable and reachable. | ||
|
||
## Resources | ||
|
||
### primary_dss_instance | ||
|
||
A resources.astm.f3548.v21.DSSInstanceResource containing the "primary" DSS instance for this scenario. | ||
|
||
### all_dss_instances | ||
|
||
A resources.astm.f3548.v21.DSSInstancesResource containing at least two DSS instances complying with ASTM F3548-21. | ||
|
||
## Prerequisites test case | ||
|
||
### Test environment requirements test step | ||
|
||
#### DSS instance is publicly addressable check | ||
|
||
As per **[astm.f3548.v21.DSS0300](../../../requirements/astm/f3548/v21.md)** the DSS instance should be publicly addressable. | ||
As such, this check will fail if the resolved IP of the DSS host is a private IP address, unless that is explicitly | ||
expected. | ||
|
||
#### DSS instance is reachable check | ||
As per **[astm.f3548.v21.DSS0300](../../../requirements/astm/f3548/v21.md)** the DSS instance should be publicly addressable. | ||
As such, this check will fail if the DSS is not reachable with a dummy query. |
97 changes: 97 additions & 0 deletions
97
monitoring/uss_qualifier/scenarios/astm/utm/dss_interoperability.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
import ipaddress | ||
import socket | ||
import time | ||
import uuid | ||
from dataclasses import dataclass | ||
import datetime | ||
from enum import Enum | ||
from typing import List, Dict, Optional | ||
from urllib.parse import urlparse | ||
|
||
import s2sphere | ||
from uas_standards.astm.f3548.v21.api import Volume4D, Volume3D, Polygon, LatLngPoint | ||
|
||
from monitoring.monitorlib.fetch.rid import ISA | ||
from monitoring.uss_qualifier.common_data_definitions import Severity | ||
from monitoring.uss_qualifier.resources.astm.f3548.v21.dss import ( | ||
DSSInstancesResource, | ||
DSSInstanceResource, | ||
DSSInstance, | ||
) | ||
from monitoring.uss_qualifier.scenarios.astm.netrid.dss_wrapper import DSSWrapper | ||
from monitoring.uss_qualifier.scenarios.scenario import TestScenario | ||
|
||
VERTICES: List[LatLngPoint] = [ | ||
LatLngPoint(lng=130.6205, lat=-23.6558), | ||
LatLngPoint(lng=130.6301, lat=-23.6898), | ||
LatLngPoint(lng=130.6700, lat=-23.6709), | ||
LatLngPoint(lng=130.6466, lat=-23.6407), | ||
] | ||
SHORT_WAIT_SEC = 5 | ||
|
||
|
||
class DSSInteroperability( | ||
TestScenario | ||
): # TODO needed to extend TestScenario instead of GenericTestScenario otherwise `make format` is unhappy | ||
_dss_primary: DSSInstance | ||
_dss_others: List[DSSInstance] | ||
|
||
def __init__( | ||
self, | ||
primary_dss_instance: DSSInstanceResource, | ||
all_dss_instances: DSSInstancesResource, | ||
): | ||
super().__init__() | ||
self._dss_primary = primary_dss_instance.dss | ||
self._dss_others = [ | ||
dss | ||
for dss in all_dss_instances.dss_instances | ||
if not dss.is_same_as(primary_dss_instance.dss) | ||
] | ||
|
||
def run(self): | ||
|
||
# self.record_note( | ||
# "dss_instances", | ||
# f"Provided DSS instances: {[self._dss_primary] + self._dss_others}", | ||
# ) | ||
self.begin_test_scenario() | ||
|
||
self.begin_test_case("Prerequisites") | ||
|
||
self.begin_test_step("Test environment requirements") | ||
self._test_env_reqs() | ||
self.end_test_step() | ||
|
||
self.end_test_case() | ||
|
||
self.end_test_scenario() | ||
|
||
def _test_env_reqs(self): | ||
for dss in [self._dss_primary] + self._dss_others: | ||
with self.check( | ||
"DSS instance is publicly addressable", [dss.participant_id] | ||
) as check: | ||
parsed_url = urlparse(dss.base_url) | ||
ip_addr = socket.gethostbyname(parsed_url.hostname) | ||
|
||
if dss.has_private_address: | ||
self.record_note( | ||
f"{dss.participant_id}_private_address", | ||
f"DSS instance (URL: {dss.base_url}, netloc: {parsed_url.netloc}, resolved IP: {ip_addr}) is declared as explicitly having a private address, skipping check", | ||
) | ||
elif ipaddress.ip_address(ip_addr).is_private: | ||
check.record_failed( | ||
summary=f"DSS host {parsed_url.netloc} is not publicly addressable", | ||
severity=Severity.Medium, | ||
participants=[dss.participant_id], | ||
details=f"DSS (URL: {dss.base_url}, netloc: {parsed_url.netloc}, resolved IP: {ip_addr}) is not publicly addressable", | ||
) | ||
|
||
with self.check("DSS instance is reachable", [dss.participant_id]) as check: | ||
# dummy search query | ||
dss.find_op_intent( | ||
extent=Volume4D( | ||
volume=Volume3D(outline_polygon=Polygon(vertices=VERTICES)) | ||
) | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters