diff --git a/monitoring/uss_qualifier/configurations/README.md b/monitoring/uss_qualifier/configurations/README.md index a7f80ab6b21..ddc17ffcbf1 100644 --- a/monitoring/uss_qualifier/configurations/README.md +++ b/monitoring/uss_qualifier/configurations/README.md @@ -160,6 +160,19 @@ execution: types: [suites.astm.netrid.f3411_22a] ``` +### Skip action generators that may generate particular actions + +```yaml +execution: + skip_action_when: + - is_action_generator: + potentially_generates_any_of: + - test_scenario: + scenario_type: scenarios.interuss.mock_uss.configure_locality.ConfigureLocality + - test_suite: + suite_type: suites.astm.netrid.f3411_22a +``` + ### Only run two kinds of scenarios ```yaml diff --git a/monitoring/uss_qualifier/configurations/configuration.py b/monitoring/uss_qualifier/configurations/configuration.py index 670eabaa713..1c1b546b6bb 100644 --- a/monitoring/uss_qualifier/configurations/configuration.py +++ b/monitoring/uss_qualifier/configurations/configuration.py @@ -6,6 +6,9 @@ from monitoring.monitorlib.dicts import JSONAddress from monitoring.uss_qualifier.action_generators.definitions import GeneratorTypeName +from monitoring.uss_qualifier.action_generators.documentation.definitions import ( + PotentialGeneratedAction, +) from monitoring.uss_qualifier.reports.validation.definitions import ( ValidationConfiguration, ) @@ -47,6 +50,12 @@ class ActionGeneratorSelectionCondition(ImplicitDict): types: Optional[list[GeneratorTypeName]] """Only select action generators of the specified types.""" + potentially_generates_all_of: Optional[list[PotentialGeneratedAction]] + """Only select action generators whose list_potential_actions result contains every listed action (using exact equality). An empty list imposes no restriction.""" + + potentially_generates_any_of: Optional[list[PotentialGeneratedAction]] + """Only select action generators whose list_potential_actions result contains at least one listed action (using exact equality). An empty list selects no action generators.""" + class TestSuiteSelectionCondition(ImplicitDict): """By default, select all test suites. When specified, limit selection to specified conditions.""" diff --git a/monitoring/uss_qualifier/suites/suite.py b/monitoring/uss_qualifier/suites/suite.py index 99d940a5ee7..a7721504279 100644 --- a/monitoring/uss_qualifier/suites/suite.py +++ b/monitoring/uss_qualifier/suites/suite.py @@ -26,6 +26,9 @@ ActionGenerator, action_generator_type_from_name, ) +from monitoring.uss_qualifier.action_generators.documentation.documentation import ( + list_potential_actions_for_action_generator_definition, +) from monitoring.uss_qualifier.configurations.configuration import ( ExecutionConfiguration, FullyQualifiedCheck, @@ -634,6 +637,31 @@ def _is_selected_by( for t in f.is_action_generator.types ): return False + if ( + f.is_action_generator.potentially_generates_all_of is not None + or f.is_action_generator.potentially_generates_any_of is not None + ): + potential_actions = ( + list_potential_actions_for_action_generator_definition( + action.action_generator.definition + ) + ) + if ( + f.is_action_generator.potentially_generates_all_of is not None + and not all( + a in potential_actions + for a in f.is_action_generator.potentially_generates_all_of + ) + ): + return False + if ( + f.is_action_generator.potentially_generates_any_of is not None + and not any( + a in potential_actions + for a in f.is_action_generator.potentially_generates_any_of + ) + ): + return False result = True else: return False diff --git a/schemas/monitoring/uss_qualifier/action_generators/documentation/definitions/PotentialActionGeneratorAction.json b/schemas/monitoring/uss_qualifier/action_generators/documentation/definitions/PotentialActionGeneratorAction.json new file mode 100644 index 00000000000..c07b01bb425 --- /dev/null +++ b/schemas/monitoring/uss_qualifier/action_generators/documentation/definitions/PotentialActionGeneratorAction.json @@ -0,0 +1,24 @@ +{ + "$id": "https://github.com/interuss/monitoring/blob/main/schemas/monitoring/uss_qualifier/action_generators/documentation/definitions/PotentialActionGeneratorAction.json", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "description": "monitoring.uss_qualifier.action_generators.documentation.definitions.PotentialActionGeneratorAction, as defined in monitoring/uss_qualifier/action_generators/documentation/definitions.py", + "properties": { + "$ref": { + "description": "Path to content that replaces the $ref", + "type": "string" + }, + "generator_type": { + "description": "Type of action generator.", + "type": "string" + }, + "specification": { + "description": "Specification of action generator; format is the ActionGeneratorSpecificationType that corresponds to the `generator_type`", + "type": "object" + } + }, + "required": [ + "generator_type", + "specification" + ], + "type": "object" +} \ No newline at end of file diff --git a/schemas/monitoring/uss_qualifier/action_generators/documentation/definitions/PotentialGeneratedAction.json b/schemas/monitoring/uss_qualifier/action_generators/documentation/definitions/PotentialGeneratedAction.json new file mode 100644 index 00000000000..0e54728f8bd --- /dev/null +++ b/schemas/monitoring/uss_qualifier/action_generators/documentation/definitions/PotentialGeneratedAction.json @@ -0,0 +1,42 @@ +{ + "$id": "https://github.com/interuss/monitoring/blob/main/schemas/monitoring/uss_qualifier/action_generators/documentation/definitions/PotentialGeneratedAction.json", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "description": "monitoring.uss_qualifier.action_generators.documentation.definitions.PotentialGeneratedAction, as defined in monitoring/uss_qualifier/action_generators/documentation/definitions.py", + "properties": { + "$ref": { + "description": "Path to content that replaces the $ref", + "type": "string" + }, + "action_generator": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "PotentialActionGeneratorAction.json" + } + ] + }, + "test_scenario": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "PotentialTestScenarioAction.json" + } + ] + }, + "test_suite": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "PotentialTestSuiteAction.json" + } + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/schemas/monitoring/uss_qualifier/action_generators/documentation/definitions/PotentialTestScenarioAction.json b/schemas/monitoring/uss_qualifier/action_generators/documentation/definitions/PotentialTestScenarioAction.json new file mode 100644 index 00000000000..d597610bc76 --- /dev/null +++ b/schemas/monitoring/uss_qualifier/action_generators/documentation/definitions/PotentialTestScenarioAction.json @@ -0,0 +1,19 @@ +{ + "$id": "https://github.com/interuss/monitoring/blob/main/schemas/monitoring/uss_qualifier/action_generators/documentation/definitions/PotentialTestScenarioAction.json", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "description": "monitoring.uss_qualifier.action_generators.documentation.definitions.PotentialTestScenarioAction, as defined in monitoring/uss_qualifier/action_generators/documentation/definitions.py", + "properties": { + "$ref": { + "description": "Path to content that replaces the $ref", + "type": "string" + }, + "scenario_type": { + "description": "Type of test scenario.", + "type": "string" + } + }, + "required": [ + "scenario_type" + ], + "type": "object" +} \ No newline at end of file diff --git a/schemas/monitoring/uss_qualifier/action_generators/documentation/definitions/PotentialTestSuiteAction.json b/schemas/monitoring/uss_qualifier/action_generators/documentation/definitions/PotentialTestSuiteAction.json new file mode 100644 index 00000000000..90f9e2f3433 --- /dev/null +++ b/schemas/monitoring/uss_qualifier/action_generators/documentation/definitions/PotentialTestSuiteAction.json @@ -0,0 +1,30 @@ +{ + "$id": "https://github.com/interuss/monitoring/blob/main/schemas/monitoring/uss_qualifier/action_generators/documentation/definitions/PotentialTestSuiteAction.json", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "description": "monitoring.uss_qualifier.action_generators.documentation.definitions.PotentialTestSuiteAction, as defined in monitoring/uss_qualifier/action_generators/documentation/definitions.py", + "properties": { + "$ref": { + "description": "Path to content that replaces the $ref", + "type": "string" + }, + "suite_definition": { + "description": "Definition of test suite internal to the configuration -- specified instead of `suite_type`.", + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "../../../suites/definitions/TestSuiteDefinition.json" + } + ] + }, + "suite_type": { + "description": "Type/location of test suite. Usually expressed as the file name of the suite definition (without extension) qualified relative to the `uss_qualifier` folder", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/schemas/monitoring/uss_qualifier/configurations/configuration/ActionGeneratorSelectionCondition.json b/schemas/monitoring/uss_qualifier/configurations/configuration/ActionGeneratorSelectionCondition.json index 8f02ae97b00..b96c2005581 100644 --- a/schemas/monitoring/uss_qualifier/configurations/configuration/ActionGeneratorSelectionCondition.json +++ b/schemas/monitoring/uss_qualifier/configurations/configuration/ActionGeneratorSelectionCondition.json @@ -7,6 +7,26 @@ "description": "Path to content that replaces the $ref", "type": "string" }, + "potentially_generates_all_of": { + "description": "Only select action generators whose list_potential_actions result contains every listed action (using exact equality). An empty list imposes no restriction.", + "items": { + "$ref": "../../action_generators/documentation/definitions/PotentialGeneratedAction.json" + }, + "type": [ + "array", + "null" + ] + }, + "potentially_generates_any_of": { + "description": "Only select action generators whose list_potential_actions result contains at least one listed action (using exact equality). An empty list selects no action generators.", + "items": { + "$ref": "../../action_generators/documentation/definitions/PotentialGeneratedAction.json" + }, + "type": [ + "array", + "null" + ] + }, "types": { "description": "Only select action generators of the specified types.", "items": {