diff --git a/monitoring/uss_qualifier/scenarios/astm/netrid/common/dss_interoperability.py b/monitoring/uss_qualifier/scenarios/astm/netrid/common/dss_interoperability.py index b9f2b629d0..47592fd0fd 100644 --- a/monitoring/uss_qualifier/scenarios/astm/netrid/common/dss_interoperability.py +++ b/monitoring/uss_qualifier/scenarios/astm/netrid/common/dss_interoperability.py @@ -1,8 +1,8 @@ +import datetime import ipaddress import socket import uuid from dataclasses import dataclass -import datetime from enum import Enum from typing import List, Dict, Optional from urllib.parse import urlparse @@ -429,6 +429,7 @@ def step5(self): subscription notification requests""" isa_1 = self._context["isa_1"] + sub_1_0 = self._context["sub_1_0"] with self.check( "Can get ISA from primary DSS", [self._dss_primary.participant_id] @@ -439,15 +440,58 @@ def step5(self): with self.check( "Can modify ISA in primary DSS", [self._dss_primary.participant_id] ) as check: - mutated_isa = self._dss_primary.put_isa( + mutated_isa_primary = self._dss_primary.put_isa( check, isa_id=isa_1.uuid, isa_version=isa_1.version, + do_not_notify="https://testdummy.interuss.org", **_default_params(datetime.timedelta(seconds=SHORT_WAIT_SEC)), ) - isa_1.version = mutated_isa.dss_query.isa.version + isa_1.version = mutated_isa_primary.dss_query.isa.version + + subs_to_notify_primary = [] + for subscriber in mutated_isa_primary.subscribers: + for s in subscriber.raw.subscriptions: + subs_to_notify_primary.append(s.subscription_id) + + with self.check( + "ISA modification on primary DSS triggers subscription notification requests", + [self._dss_primary.participant_id], + ) as check: + if sub_1_0.uuid not in subs_to_notify_primary: + check.record_failed( + summary=f"Subscription {sub_1_0.uuid} was not notified of ISA modification", + details=f"Subscription {sub_1_0.uuid} was created on the primary DSS and should have been notified of the ISA modification that happened on the primary DSS, but was not.", + ) - # TODO: Implement "ISA modification triggers subscription notification requests check" + for sec_dss in self._dss_others: + with self.check( + "Can modify ISA on secondary DSS", + [sec_dss.participant_id], + ) as check: + mutated_isa_sec = self._dss_primary.put_isa( + check, + isa_id=isa_1.uuid, + isa_version=isa_1.version, + do_not_notify="https://testdummy.interuss.org", + **_default_params(datetime.timedelta(seconds=SHORT_WAIT_SEC)), + ) + isa_1.version = mutated_isa_sec.dss_query.isa.version + + subs_to_notify_sec = [] + for subscriber in mutated_isa_primary.subscribers: + for s in subscriber.raw.subscriptions: + subs_to_notify_sec.append(s.subscription_id) + + with self.check( + "ISA modification on secondary DSS triggers subscription notification requests", + [self._dss_primary.participant_id], + ) as check: + if sub_1_0.uuid not in subs_to_notify_sec: + check.record_failed( + summary=f"Subscription {sub_1_0.uuid} was not notified of ISA modification", + details=f"Subscription {sub_1_0.uuid} was created on the primary DSS and should have been notified of the ISA modification that happened on the primary DSS, but was not.", + ) def step6(self): """Can delete all Subscription in primary DSS""" diff --git a/monitoring/uss_qualifier/scenarios/astm/netrid/v19/dss_interoperability.md b/monitoring/uss_qualifier/scenarios/astm/netrid/v19/dss_interoperability.md index 0be76b5bc2..4efec6734c 100644 --- a/monitoring/uss_qualifier/scenarios/astm/netrid/v19/dss_interoperability.md +++ b/monitoring/uss_qualifier/scenarios/astm/netrid/v19/dss_interoperability.md @@ -160,12 +160,18 @@ Qualitatively proves: ISA[*P*] modified with proper response, all Subscription[i **[astm.f3411.v19.DSS0130,A2-6-1,1b](../../../../requirements/astm/f3411/v19.md)** -#### ISA modification triggers subscription notification requests check - -TODO: Implement +#### ⚠️ ISA modification on primary DSS triggers subscription notification requests check **[astm.f3411.v19.DSS0130,A2-6-1,3c](../../../../requirements/astm/f3411/v19.md)** +#### 🛑 Can modify ISA on secondary DSS check + +**[astm.f3411.v19.DSS0130,A2-6-1,1b](../../../../requirements/astm/f3411/v19.md)** + +#### ⚠️ ISA modification on secondary DSS triggers subscription notification requests check + +**[astm.f3411.v19.DSS0130,A2-6-1,3c](../../../../requirements/astm/f3411/v19.md)** and **[astm.f3411.v19.DSS0130,2,e](../../../../requirements/astm/f3411/v19.md)** + ### S6 test step Action: USS2@DSS*P*: DELETE Subscription[*n*] diff --git a/monitoring/uss_qualifier/scenarios/astm/netrid/v22a/dss_interoperability.md b/monitoring/uss_qualifier/scenarios/astm/netrid/v22a/dss_interoperability.md index caa30a9b9c..2eff3fe90b 100644 --- a/monitoring/uss_qualifier/scenarios/astm/netrid/v22a/dss_interoperability.md +++ b/monitoring/uss_qualifier/scenarios/astm/netrid/v22a/dss_interoperability.md @@ -159,12 +159,18 @@ Qualitatively proves: ISA[*P*] modified with proper response, all Subscription[i **[astm.f3411.v22a.DSS0130,A2-6-1,1b](../../../../requirements/astm/f3411/v22a.md)** -#### ISA modification triggers subscription notification requests check - -TODO: Implement +#### ⚠️ ISA modification on primary DSS triggers subscription notification requests check **[astm.f3411.v22a.DSS0130,A2-6-1,3c](../../../../requirements/astm/f3411/v22a.md)** +#### 🛑 Can modify ISA on secondary DSS check + +**[astm.f3411.v22a.DSS0130,A2-6-1,1b](../../../../requirements/astm/f3411/v22a.md)** + +#### ⚠️ ISA modification on secondary DSS triggers subscription notification requests check + +**[astm.f3411.v22a.DSS0130,A2-6-1,3c](../../../../requirements/astm/f3411/v22a.md)** and **[astm.f3411.v22a.DSS0130,2,e](../../../../requirements/astm/f3411/v22a.md)** + ### S6 test step Action: USS2@DSS*P*: DELETE Subscription[*n*] diff --git a/monitoring/uss_qualifier/suites/astm/netrid/f3411_19.md b/monitoring/uss_qualifier/suites/astm/netrid/f3411_19.md index 89bab93543..d29423b5f7 100644 --- a/monitoring/uss_qualifier/suites/astm/netrid/f3411_19.md +++ b/monitoring/uss_qualifier/suites/astm/netrid/f3411_19.md @@ -21,7 +21,7 @@