This is an automated email from the ASF dual-hosted git repository. lordgamez pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit 6f68543e3348421bb5b15204951d05ae1f44fe0f Author: Martin Zink <[email protected]> AuthorDate: Thu Feb 5 19:42:06 2026 +0100 MINIFICPP-2711 Docker tests, missing logs if container fails to start Signed-off-by: Gabor Gyimesi <[email protected]> This closes #2131 --- .../src/minifi_test_framework/containers/container.py | 8 +++++++- .../src/minifi_test_framework/containers/http_proxy_container.py | 6 +++--- .../src/minifi_test_framework/containers/minifi_container.py | 6 +++--- .../src/minifi_test_framework/containers/nifi_container.py | 6 +++--- behave_framework/src/minifi_test_framework/steps/core_steps.py | 6 +++--- .../aws/tests/features/containers/kinesis_server_container.py | 6 +++--- extensions/aws/tests/features/containers/s3_server_container.py | 6 +++--- extensions/aws/tests/features/steps/steps.py | 2 +- .../azure/tests/features/containers/azure_server_container.py | 6 +++--- extensions/azure/tests/features/steps/steps.py | 2 +- .../tests/features/containers/couchbase_server_container.py | 6 +++--- extensions/couchbase/tests/features/steps/steps.py | 2 +- .../tests/features/containers/elastic_base_container.py | 6 +++--- .../tests/features/containers/elasticsearch_container.py | 4 ++-- .../tests/features/containers/opensearch_container.py | 4 ++-- extensions/elasticsearch/tests/features/steps/steps.py | 4 ++-- .../gcp/tests/features/containers/fake_gcs_server_container.py | 6 +++--- extensions/gcp/tests/features/steps/steps.py | 2 +- .../tests/features/containers/grafana_loki_container.py | 6 +++--- .../tests/features/containers/reverse_proxy_container.py | 6 +++--- .../kafka/tests/features/containers/kafka_server_container.py | 6 +++--- extensions/kafka/tests/features/steps/steps.py | 2 +- .../tests/features/steps/minifi_as_pod_in_kubernetes_cluster.py | 2 +- .../mqtt/tests/features/containers/mqtt_broker_container.py | 6 +++--- extensions/mqtt/tests/features/steps/steps.py | 2 +- .../opc/tests/features/containers/opc_ua_server_container.py | 6 +++--- .../prometheus/tests/features/containers/prometheus_container.py | 6 +++--- extensions/splunk/tests/features/containers/splunk_container.py | 6 +++--- extensions/splunk/tests/features/steps/steps.py | 2 +- .../sql/tests/features/containers/postgress_server_container.py | 7 ++++--- .../tests/features/containers/diag_slave_container.py | 6 +++--- .../tests/features/containers/tcp_client_container.py | 6 +++--- .../tests/features/steps/minifi_c2_server_container.py | 6 +++--- extensions/standard-processors/tests/features/steps/steps.py | 4 ++-- 34 files changed, 87 insertions(+), 80 deletions(-) diff --git a/behave_framework/src/minifi_test_framework/containers/container.py b/behave_framework/src/minifi_test_framework/containers/container.py index df9e3d79e..24f941319 100644 --- a/behave_framework/src/minifi_test_framework/containers/container.py +++ b/behave_framework/src/minifi_test_framework/containers/container.py @@ -14,6 +14,9 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from __future__ import annotations +from typing import TYPE_CHECKING + import json import logging import os @@ -29,6 +32,9 @@ from minifi_test_framework.containers.directory import Directory from minifi_test_framework.containers.file import File from minifi_test_framework.containers.host_file import HostFile +if TYPE_CHECKING: + from minifi_test_framework.core.minifi_test_context import MinifiTestContext + class Container: def __init__(self, image_name: str, container_name: str, network: Network, command: str | None = None, entrypoint: str | None = None): @@ -96,7 +102,7 @@ class Container: def is_deployed(self) -> bool: return self.container is not None - def deploy(self) -> bool: + def deploy(self, context: MinifiTestContext | None) -> bool: if self.is_deployed(): logging.info(f"Container '{self.container_name}' is already deployed.") return True diff --git a/behave_framework/src/minifi_test_framework/containers/http_proxy_container.py b/behave_framework/src/minifi_test_framework/containers/http_proxy_container.py index 202878ae3..da0cd4c2b 100644 --- a/behave_framework/src/minifi_test_framework/containers/http_proxy_container.py +++ b/behave_framework/src/minifi_test_framework/containers/http_proxy_container.py @@ -47,14 +47,14 @@ class HttpProxy(Container): super().__init__("minifi-http-proxy:latest", f"http-proxy-{test_context.scenario_id}", test_context.network) - def deploy(self): - super().deploy() + def deploy(self, context: MinifiTestContext | None) -> bool: + super().deploy(context) finished_str = "Accepting HTTP Socket connections at" return wait_for_condition( condition=lambda: finished_str in self.get_logs(), timeout_seconds=30, bail_condition=lambda: self.exited, - context=None + context=context ) def check_http_proxy_access(self, url): diff --git a/behave_framework/src/minifi_test_framework/containers/minifi_container.py b/behave_framework/src/minifi_test_framework/containers/minifi_container.py index c96e5384f..8ce0f9b68 100644 --- a/behave_framework/src/minifi_test_framework/containers/minifi_container.py +++ b/behave_framework/src/minifi_test_framework/containers/minifi_container.py @@ -62,7 +62,7 @@ class MinifiContainer(Container): self._fill_default_properties() self._fill_default_log_properties() - def deploy(self) -> bool: + def deploy(self, context: MinifiTestContext | None) -> bool: flow_config = self.flow_definition.to_yaml() logging.info(f"Deploying MiNiFi container '{self.container_name}' with flow configuration:\n{flow_config}") if self.is_fhs: @@ -80,7 +80,7 @@ class MinifiContainer(Container): resource_dir = Path(__file__).resolve().parent / "resources" / "minifi-controller" self.host_files.append(HostFile("/tmp/resources/minifi-controller/config.yml", os.path.join(resource_dir, "config.yml"))) - if not super().deploy(): + if not super().deploy(context): return False finished_str = "MiNiFi started" @@ -88,7 +88,7 @@ class MinifiContainer(Container): condition=lambda: finished_str in self.get_logs(), timeout_seconds=self.deploy_timeout_seconds, bail_condition=lambda: self.exited, - context=None) + context=context) def set_deploy_timeout_seconds(self, timeout_seconds: int): self.deploy_timeout_seconds = timeout_seconds diff --git a/behave_framework/src/minifi_test_framework/containers/nifi_container.py b/behave_framework/src/minifi_test_framework/containers/nifi_container.py index 4f6fff319..ae0f9d0f8 100644 --- a/behave_framework/src/minifi_test_framework/containers/nifi_container.py +++ b/behave_framework/src/minifi_test_framework/containers/nifi_container.py @@ -82,7 +82,7 @@ class NifiContainer(Container): self.files.append(File("/tmp/resources/nifi_client.crt", crypto.dump_certificate(type=crypto.FILETYPE_PEM, cert=nifi_client_cert))) self.files.append(File("/tmp/resources/nifi_client.key", crypto.dump_privatekey(type=crypto.FILETYPE_PEM, pkey=nifi_client_key))) - def deploy(self): + def deploy(self, context: MinifiTestContext | None) -> bool: flow_config = self.flow_definition.to_json() logging.info(f"Deploying NiFi container '{self.container_name}' with flow configuration:\n{flow_config}") buffer = io.BytesIO() @@ -93,10 +93,10 @@ class NifiContainer(Container): gzipped_bytes = buffer.getvalue() self.files.append(File("/tmp/nifi_config/flow.json.gz", gzipped_bytes)) - super().deploy() + super().deploy(context) finished_str = "Started Application in" return wait_for_condition( condition=lambda: finished_str in self.get_logs(), timeout_seconds=300, bail_condition=lambda: self.exited, - context=None) + context=context) diff --git a/behave_framework/src/minifi_test_framework/steps/core_steps.py b/behave_framework/src/minifi_test_framework/steps/core_steps.py index fc85af9c1..f9fc10c71 100644 --- a/behave_framework/src/minifi_test_framework/steps/core_steps.py +++ b/behave_framework/src/minifi_test_framework/steps/core_steps.py @@ -36,13 +36,13 @@ from minifi_test_framework.core.minifi_test_context import DEFAULT_MINIFI_CONTAI @when("all instances start up") def step_impl(context: MinifiTestContext): for container in context.containers.values(): - assert container.deploy() or container.log_app_output() + assert container.deploy(context) logging.debug("All instances started up") @when("the MiNiFi instance starts up") def step_impl(context: MinifiTestContext): - assert context.get_or_create_default_minifi_container().deploy() + assert context.get_or_create_default_minifi_container().deploy(context) logging.debug("MiNiFi instance started up") @@ -185,7 +185,7 @@ def step_impl(context: MinifiTestContext): @when('NiFi is started') def step_impl(context): - assert context.containers["nifi"].deploy() or context.containers["nifi"].log_app_output() + assert context.containers["nifi"].deploy(context) or context.containers["nifi"].log_app_output() @step("{duration} later") diff --git a/extensions/aws/tests/features/containers/kinesis_server_container.py b/extensions/aws/tests/features/containers/kinesis_server_container.py index e92b33c41..01b6dced2 100644 --- a/extensions/aws/tests/features/containers/kinesis_server_container.py +++ b/extensions/aws/tests/features/containers/kinesis_server_container.py @@ -34,14 +34,14 @@ class KinesisServerContainer(Container): self.environment.append("INITIALIZE_STREAMS=test_stream:3") self.environment.append("LOG_LEVEL=DEBUG") - def deploy(self): - super().deploy() + def deploy(self, context: MinifiTestContext | None) -> bool: + super().deploy(context) finished_str = "Starting Kinesis Plain Mock Service on port 4568" return wait_for_condition( condition=lambda: finished_str in self.get_logs(), timeout_seconds=300, bail_condition=lambda: self.exited, - context=None) + context=context) @retry_check() def check_kinesis_server_record_data(self, record_data): diff --git a/extensions/aws/tests/features/containers/s3_server_container.py b/extensions/aws/tests/features/containers/s3_server_container.py index 42ac64454..8f00b2644 100644 --- a/extensions/aws/tests/features/containers/s3_server_container.py +++ b/extensions/aws/tests/features/containers/s3_server_container.py @@ -26,14 +26,14 @@ class S3ServerContainer(Container): super().__init__("adobe/s3mock:3.12.0", f"s3-server-{test_context.scenario_id}", test_context.network) self.environment.append("initialBuckets=test_bucket") - def deploy(self): - super().deploy() + def deploy(self, context: MinifiTestContext | None) -> bool: + super().deploy(context) finished_str = "Started S3MockApplication" return wait_for_condition( condition=lambda: finished_str in self.get_logs(), timeout_seconds=60, bail_condition=lambda: self.exited, - context=None) + context=context) def check_s3_server_object_data(self, test_data): (code, output) = self.exec_run(["find", "/s3mockroot/test_bucket", "-mindepth", "1", "-maxdepth", "1", "-type", "d"]) diff --git a/extensions/aws/tests/features/steps/steps.py b/extensions/aws/tests/features/steps/steps.py index 9f40d26f3..f672a784c 100644 --- a/extensions/aws/tests/features/steps/steps.py +++ b/extensions/aws/tests/features/steps/steps.py @@ -53,7 +53,7 @@ def step_impl(context: MinifiTestContext, processor_name: str): @step('the s3 server starts up') def step_impl(context: MinifiTestContext): context.containers["s3-server"] = S3ServerContainer(context) - assert context.containers["s3-server"].deploy() + assert context.containers["s3-server"].deploy(context) @step('the object on the s3 server is "{object_data}"') diff --git a/extensions/azure/tests/features/containers/azure_server_container.py b/extensions/azure/tests/features/containers/azure_server_container.py index 8cdc3205b..4caeb786b 100644 --- a/extensions/azure/tests/features/containers/azure_server_container.py +++ b/extensions/azure/tests/features/containers/azure_server_container.py @@ -33,13 +33,13 @@ class AzureServerContainer(Container): self.azure_connection_string = "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;" \ f"BlobEndpoint=http://{azure_storage_hostname}:10000/devstoreaccount1;QueueEndpoint=http://{azure_storage_hostname}:10001/devstoreaccount1;" - def deploy(self): - super().deploy() + def deploy(self, context: MinifiTestContext | None) -> bool: + super().deploy(context) finished_str = "Azurite Queue service is successfully listening at" return wait_for_condition(condition=lambda: finished_str in self.get_logs(), timeout_seconds=15, bail_condition=lambda: self.exited, - context=None) + context=context) def check_azure_storage_server_data(self, test_data): (code, output) = self.exec_run(["find", "/data/__blobstorage__", "-type", "f"]) diff --git a/extensions/azure/tests/features/steps/steps.py b/extensions/azure/tests/features/steps/steps.py index 00cc3cc16..7e6b4f5ef 100644 --- a/extensions/azure/tests/features/steps/steps.py +++ b/extensions/azure/tests/features/steps/steps.py @@ -43,7 +43,7 @@ def step_impl(context: MinifiTestContext, processor_name: str): @step("an Azure storage server is set up") def step_impl(context): context.containers["azure-storage-server"] = AzureServerContainer(context) - assert context.containers["azure-storage-server"].deploy() + assert context.containers["azure-storage-server"].deploy(context) @then('the object on the Azure storage server is "{object_data}"') diff --git a/extensions/couchbase/tests/features/containers/couchbase_server_container.py b/extensions/couchbase/tests/features/containers/couchbase_server_container.py index 002aa9c41..f1cce4991 100644 --- a/extensions/couchbase/tests/features/containers/couchbase_server_container.py +++ b/extensions/couchbase/tests/features/containers/couchbase_server_container.py @@ -37,14 +37,14 @@ class CouchbaseServerContainer(Container): couchbase_key_content = crypto.dump_privatekey(type=crypto.FILETYPE_PEM, pkey=couchbase_key) self.files.append(File("/opt/couchbase/var/lib/couchbase/inbox/pkey.key", couchbase_key_content, permissions=0o666)) - def deploy(self): - super().deploy() + def deploy(self, context: MinifiTestContext | None) -> bool: + super().deploy(context) finished_str = "logs available in" assert wait_for_condition( condition=lambda: finished_str in self.get_logs(), timeout_seconds=30, bail_condition=lambda: self.exited, - context=None) + context=context) return self.run_post_startup_commands() def run_post_startup_commands(self): diff --git a/extensions/couchbase/tests/features/steps/steps.py b/extensions/couchbase/tests/features/steps/steps.py index 0e8ff3c56..4507765fd 100644 --- a/extensions/couchbase/tests/features/steps/steps.py +++ b/extensions/couchbase/tests/features/steps/steps.py @@ -28,7 +28,7 @@ from containers.couchbase_server_container import CouchbaseServerContainer @step("a Couchbase server is started") def step_impl(context: MinifiTestContext): context.containers["couchbase-server"] = CouchbaseServerContainer(context) - assert context.containers["couchbase-server"].deploy() + assert context.containers["couchbase-server"].deploy(context) @step("a CouchbaseClusterService controller service is set up to communicate with the Couchbase server") diff --git a/extensions/elasticsearch/tests/features/containers/elastic_base_container.py b/extensions/elasticsearch/tests/features/containers/elastic_base_container.py index 515d71aeb..5db6e61dc 100644 --- a/extensions/elasticsearch/tests/features/containers/elastic_base_container.py +++ b/extensions/elasticsearch/tests/features/containers/elastic_base_container.py @@ -23,13 +23,13 @@ class ElasticBaseContainer(Container): super().__init__(image, container_name, test_context.network) self.user = None - def deploy(self, finished_str: str): - super().deploy() + def deploy(self, context: MinifiTestContext | None, finished_str: str): + super().deploy(context) return wait_for_condition( condition=lambda: finished_str in self.get_logs(), timeout_seconds=300, bail_condition=lambda: self.exited, - context=None) + context=context) def create_doc_elasticsearch(self, index_name: str, doc_id: str) -> bool: (code, output) = self.exec_run(["/bin/bash", "-c", diff --git a/extensions/elasticsearch/tests/features/containers/elasticsearch_container.py b/extensions/elasticsearch/tests/features/containers/elasticsearch_container.py index e06458751..037711d75 100644 --- a/extensions/elasticsearch/tests/features/containers/elasticsearch_container.py +++ b/extensions/elasticsearch/tests/features/containers/elasticsearch_container.py @@ -53,8 +53,8 @@ class ElasticsearchContainer(ElasticBaseContainer): self.environment.append("ELASTIC_PASSWORD=password") - def deploy(self): - return super().deploy('"current.health":"GREEN"') + def deploy(self, context: MinifiTestContext | None) -> bool: + return super().deploy(context, '"current.health":"GREEN"') def elastic_generate_apikey(self): api_url = "https://localhost:9200/_security/api_key" diff --git a/extensions/elasticsearch/tests/features/containers/opensearch_container.py b/extensions/elasticsearch/tests/features/containers/opensearch_container.py index 23882f530..cdf5008d5 100644 --- a/extensions/elasticsearch/tests/features/containers/opensearch_container.py +++ b/extensions/elasticsearch/tests/features/containers/opensearch_container.py @@ -43,8 +43,8 @@ class OpensearchContainer(ElasticBaseContainer): features_dir = Path(__file__).resolve().parent.parent self.host_files.append(HostFile('/usr/share/opensearch/config/opensearch.yml', os.path.join(features_dir, "resources", "opensearch.yml"))) - def deploy(self): - return super().deploy('Hot-reloading of audit configuration is enabled') + def deploy(self, context: MinifiTestContext | None) -> bool: + return super().deploy(context, 'Hot-reloading of audit configuration is enabled') def add_elastic_user_to_opensearch(self): curl_cmd = [ diff --git a/extensions/elasticsearch/tests/features/steps/steps.py b/extensions/elasticsearch/tests/features/steps/steps.py index ea1e90739..d0a7a8fa4 100644 --- a/extensions/elasticsearch/tests/features/steps/steps.py +++ b/extensions/elasticsearch/tests/features/steps/steps.py @@ -30,7 +30,7 @@ from containers.opensearch_container import OpensearchContainer @step('an Elasticsearch server is set up and a single document is present with "preloaded_id" in "my_index" with "value1" in "field1"') def step_impl(context: MinifiTestContext): context.containers["elasticsearch"] = ElasticsearchContainer(context) - assert context.containers["elasticsearch"].deploy() + assert context.containers["elasticsearch"].deploy(context) assert context.containers["elasticsearch"].create_doc_elasticsearch("my_index", "preloaded_id") or context.containers["elasticsearch"].log_app_output() @@ -65,7 +65,7 @@ def step_impl(context): @given('an Opensearch server is set up and a single document is present with "preloaded_id" in "my_index" with "value1" in "field1"') def step_impl(context): context.containers["opensearch"] = OpensearchContainer(context) - context.containers["opensearch"].deploy() + context.containers["opensearch"].deploy(context) context.containers["opensearch"].add_elastic_user_to_opensearch() context.containers["opensearch"].create_doc_elasticsearch("my_index", "preloaded_id") diff --git a/extensions/gcp/tests/features/containers/fake_gcs_server_container.py b/extensions/gcp/tests/features/containers/fake_gcs_server_container.py index 132931878..a9733ba4e 100644 --- a/extensions/gcp/tests/features/containers/fake_gcs_server_container.py +++ b/extensions/gcp/tests/features/containers/fake_gcs_server_container.py @@ -26,14 +26,14 @@ class FakeGcsServerContainer(Container): command=f'-scheme http -host fake-gcs-server-{test_context.scenario_id}') self.dirs.append(Directory(path="/data/test-bucket", files={"test-file": "preloaded data\n"})) - def deploy(self): - super().deploy() + def deploy(self, context: MinifiTestContext | None) -> bool: + super().deploy(context) finished_str = "server started at http" return wait_for_condition( condition=lambda: finished_str in self.get_logs(), timeout_seconds=30, bail_condition=lambda: self.exited, - context=None) + context=context) @retry_check() def check_google_cloud_storage(self, content): diff --git a/extensions/gcp/tests/features/steps/steps.py b/extensions/gcp/tests/features/steps/steps.py index 130907e18..68deeea13 100644 --- a/extensions/gcp/tests/features/steps/steps.py +++ b/extensions/gcp/tests/features/steps/steps.py @@ -28,7 +28,7 @@ from containers.fake_gcs_server_container import FakeGcsServerContainer @step('a Google Cloud storage server is set up and a single object with contents "preloaded data" is present') def step_impl(context: MinifiTestContext): context.containers["fake-gcs-server"] = FakeGcsServerContainer(context) - assert context.containers["fake-gcs-server"].deploy() + assert context.containers["fake-gcs-server"].deploy(context) @then('an object with the content \"{content}\" is present in the Google Cloud storage') diff --git a/extensions/grafana-loki/tests/features/containers/grafana_loki_container.py b/extensions/grafana-loki/tests/features/containers/grafana_loki_container.py index 3d7e497aa..32f1cf1db 100644 --- a/extensions/grafana-loki/tests/features/containers/grafana_loki_container.py +++ b/extensions/grafana-loki/tests/features/containers/grafana_loki_container.py @@ -126,14 +126,14 @@ analytics: self.files.append(File("/etc/loki/local-config.yaml", grafana_loki_yml_content.encode(), permissions=0o644)) - def deploy(self): - super().deploy() + def deploy(self, context: MinifiTestContext | None) -> bool: + super().deploy(context) finished_str = "Loki started" return wait_for_condition( condition=lambda: finished_str in self.get_logs(), timeout_seconds=120, bail_condition=lambda: self.exited, - context=None) + context=context) @retry_check() def are_lines_present(self, lines: str, timeout: int, ssl: bool, tenant_id: str = "") -> bool: diff --git a/extensions/grafana-loki/tests/features/containers/reverse_proxy_container.py b/extensions/grafana-loki/tests/features/containers/reverse_proxy_container.py index c415f6dba..409a9b9e6 100644 --- a/extensions/grafana-loki/tests/features/containers/reverse_proxy_container.py +++ b/extensions/grafana-loki/tests/features/containers/reverse_proxy_container.py @@ -28,11 +28,11 @@ class ReverseProxyContainer(Container): "FORWARD_PORT=3100", ] - def deploy(self): - super().deploy() + def deploy(self, context: MinifiTestContext | None) -> bool: + super().deploy(context) finished_str = "start worker process" return wait_for_condition( condition=lambda: finished_str in self.get_logs(), timeout_seconds=60, bail_condition=lambda: self.exited, - context=None) + context=context) diff --git a/extensions/kafka/tests/features/containers/kafka_server_container.py b/extensions/kafka/tests/features/containers/kafka_server_container.py index 49c15a429..30073186f 100644 --- a/extensions/kafka/tests/features/containers/kafka_server_container.py +++ b/extensions/kafka/tests/features/containers/kafka_server_container.py @@ -88,14 +88,14 @@ Client { """ self.files.append(File("/opt/kafka/config/kafka_jaas.conf", jaas_config_file_content, permissions=0o644)) - def deploy(self): - super().deploy() + def deploy(self, context: MinifiTestContext | None) -> bool: + super().deploy(context) finished_str = "Kafka Server started" return wait_for_condition( condition=lambda: finished_str in self.get_logs(), timeout_seconds=60, bail_condition=lambda: self.exited, - context=None) + context=context) def create_topic(self, topic_name: str): (code, output) = self.exec_run(["/bin/sh", "-c", f"/opt/kafka/bin/kafka-topics.sh --create --topic '{topic_name}' --bootstrap-server '{self.container_name}':9092"]) diff --git a/extensions/kafka/tests/features/steps/steps.py b/extensions/kafka/tests/features/steps/steps.py index f0f15c1db..6a56b628c 100644 --- a/extensions/kafka/tests/features/steps/steps.py +++ b/extensions/kafka/tests/features/steps/steps.py @@ -66,7 +66,7 @@ def step_impl(context): def step_impl(context: MinifiTestContext): kafka_server_container = context.containers["kafka-server"] assert isinstance(kafka_server_container, KafkaServer) - assert kafka_server_container.deploy() + assert kafka_server_container.deploy(context) @step('the topic "{topic_name}" is initialized on the kafka broker') diff --git a/extensions/kubernetes/tests/features/steps/minifi_as_pod_in_kubernetes_cluster.py b/extensions/kubernetes/tests/features/steps/minifi_as_pod_in_kubernetes_cluster.py index 934c46ba4..b741b185d 100644 --- a/extensions/kubernetes/tests/features/steps/minifi_as_pod_in_kubernetes_cluster.py +++ b/extensions/kubernetes/tests/features/steps/minifi_as_pod_in_kubernetes_cluster.py @@ -24,7 +24,7 @@ class MinifiAsPodInKubernetesCluster(MinifiContainer): super().__init__(container_name, test_context) self.container = test_context.kubernetes_proxy - def deploy(self) -> bool: + def deploy(self, context: MinifiTestContext | None) -> bool: logging.debug('Setting up the kind Kubernetes cluster') self.container.write_minifi_conf_file("minifi.properties", self._get_properties_file_content()) self.container.write_minifi_conf_file("minifi-log.properties", self._get_log_properties_file_content()) diff --git a/extensions/mqtt/tests/features/containers/mqtt_broker_container.py b/extensions/mqtt/tests/features/containers/mqtt_broker_container.py index 091c12c77..b309ff309 100644 --- a/extensions/mqtt/tests/features/containers/mqtt_broker_container.py +++ b/extensions/mqtt/tests/features/containers/mqtt_broker_container.py @@ -40,14 +40,14 @@ class MqttBrokerContainer(Container): super().__init__("minifi-mqtt-broker:latest", f"mqtt-broker-{test_context.scenario_id}", test_context.network) - def deploy(self): - super().deploy() + def deploy(self, context: MinifiTestContext | None) -> bool: + super().deploy(context) finished_str = "mosquitto version [0-9\\.]+ running" return wait_for_condition( condition=lambda: re.search(finished_str, self.get_logs()), timeout_seconds=60, bail_condition=lambda: self.exited, - context=None) + context=context) def publish_mqtt_message(self, topic: str, message: str): try: diff --git a/extensions/mqtt/tests/features/steps/steps.py b/extensions/mqtt/tests/features/steps/steps.py index 39a8f4429..693d19855 100644 --- a/extensions/mqtt/tests/features/steps/steps.py +++ b/extensions/mqtt/tests/features/steps/steps.py @@ -50,7 +50,7 @@ def step_impl(context: MinifiTestContext, processor_name: str): @step("an MQTT broker is started") def step_impl(context: MinifiTestContext): context.containers["mqtt-broker"] = MqttBrokerContainer(context) - assert context.containers["mqtt-broker"].deploy() + assert context.containers["mqtt-broker"].deploy(context) @then('the MQTT broker has a log line matching "{log_line_regex}"') diff --git a/extensions/opc/tests/features/containers/opc_ua_server_container.py b/extensions/opc/tests/features/containers/opc_ua_server_container.py index 6f60384e9..3dfb4626d 100644 --- a/extensions/opc/tests/features/containers/opc_ua_server_container.py +++ b/extensions/opc/tests/features/containers/opc_ua_server_container.py @@ -25,11 +25,11 @@ class OPCUAServerContainer(Container): def __init__(self, test_context: MinifiTestContext, command: Optional[List[str]] = None): super().__init__(self.OPC_SERVER_IMAGE, f"opcua-server-{test_context.scenario_id}", test_context.network, command=command) - def deploy(self): - super().deploy() + def deploy(self, context: MinifiTestContext | None) -> bool: + super().deploy(context) finished_str = "New DiscoveryUrl added: opc.tcp://" return wait_for_condition( condition=lambda: finished_str in self.get_logs(), timeout_seconds=30, bail_condition=lambda: self.exited, - context=None) + context=context) diff --git a/extensions/prometheus/tests/features/containers/prometheus_container.py b/extensions/prometheus/tests/features/containers/prometheus_container.py index 620014f45..09053693e 100644 --- a/extensions/prometheus/tests/features/containers/prometheus_container.py +++ b/extensions/prometheus/tests/features/containers/prometheus_container.py @@ -57,14 +57,14 @@ scrape_configs: self.files.append(File("/etc/prometheus/prometheus.yml", prometheus_yml_content, permissions=0o666)) - def deploy(self): - super().deploy() + def deploy(self, context: MinifiTestContext | None) -> bool: + super().deploy(context) finished_str = "Server is ready to receive web requests." return wait_for_condition( condition=lambda: finished_str in self.get_logs(), timeout_seconds=60, bail_condition=lambda: self.exited, - context=None + context=context ) def check_metric_class_on_prometheus(self, metric_class: str) -> bool: diff --git a/extensions/splunk/tests/features/containers/splunk_container.py b/extensions/splunk/tests/features/containers/splunk_container.py index 865407a64..4106bb63e 100644 --- a/extensions/splunk/tests/features/containers/splunk_container.py +++ b/extensions/splunk/tests/features/containers/splunk_container.py @@ -49,14 +49,14 @@ splunk: self.files.append(File("/opt/splunk/etc/auth/splunk_cert.pem", splunk_cert_content.decode() + splunk_key_content.decode() + root_ca_content.decode(), permissions=0o644)) self.files.append(File("/opt/splunk/etc/auth/root_ca.pem", root_ca_content.decode(), permissions=0o644)) - def deploy(self): - super().deploy() + def deploy(self, context: MinifiTestContext | None) -> bool: + super().deploy(context) finished_str = "Ansible playbook complete, will begin streaming splunkd_stderr.log" return wait_for_condition( condition=lambda: finished_str in self.get_logs(), timeout_seconds=300, bail_condition=lambda: False, - context=None) + context=context) @retry_check() def check_splunk_event(self, query: str) -> bool: diff --git a/extensions/splunk/tests/features/steps/steps.py b/extensions/splunk/tests/features/steps/steps.py index dda17dabe..74db0b1d7 100644 --- a/extensions/splunk/tests/features/steps/steps.py +++ b/extensions/splunk/tests/features/steps/steps.py @@ -26,7 +26,7 @@ from containers.splunk_container import SplunkContainer @step("a Splunk HEC is set up and running") def step_impl(context: MinifiTestContext): context.containers["splunk"] = SplunkContainer(context) - assert context.containers["splunk"].deploy() + assert context.containers["splunk"].deploy(context) assert context.containers["splunk"].enable_splunk_hec_indexer('splunk_hec_token') or context.containers["splunk"].log_app_output() diff --git a/extensions/sql/tests/features/containers/postgress_server_container.py b/extensions/sql/tests/features/containers/postgress_server_container.py index c95f808ef..f1df20e4b 100644 --- a/extensions/sql/tests/features/containers/postgress_server_container.py +++ b/extensions/sql/tests/features/containers/postgress_server_container.py @@ -20,6 +20,7 @@ from textwrap import dedent from minifi_test_framework.containers.container import Container from minifi_test_framework.containers.docker_image_builder import DockerImageBuilder from minifi_test_framework.core.helpers import wait_for_condition +from minifi_test_framework.core.minifi_test_context import MinifiTestContext class PostgresContainer(Container): @@ -48,14 +49,14 @@ class PostgresContainer(Container): super(PostgresContainer, self).__init__("minifi-postgres-server:latest", f"postgres-server-{context.scenario_id}", context.network) self.environment = ["POSTGRES_PASSWORD=password"] - def deploy(self) -> bool: - super(PostgresContainer, self).deploy() + def deploy(self, context: MinifiTestContext | None) -> bool: + super(PostgresContainer, self).deploy(context) finished_str = "database system is ready to accept connections" return wait_for_condition( condition=lambda: finished_str in self.get_logs(), timeout_seconds=60, bail_condition=lambda: self.exited, - context=None) + context=context) def check_query_results(self, query: str, number_of_rows: int) -> bool: (code, output) = self.exec_run(["psql", "-U", "postgres", "-c", query]) diff --git a/extensions/standard-processors/tests/features/containers/diag_slave_container.py b/extensions/standard-processors/tests/features/containers/diag_slave_container.py index e4827e0f6..27b425958 100644 --- a/extensions/standard-processors/tests/features/containers/diag_slave_container.py +++ b/extensions/standard-processors/tests/features/containers/diag_slave_container.py @@ -40,14 +40,14 @@ ENV PROTOCOL=tcp super().__init__("minifi-diag-slave-tcp:latest", f"diag-slave-tcp-{test_context.scenario_id}", test_context.network) - def deploy(self): - super().deploy() + def deploy(self, context: MinifiTestContext | None) -> bool: + super().deploy(context) finished_str = "Server started up successfully." return wait_for_condition( condition=lambda: finished_str in self.get_logs(), timeout_seconds=30, bail_condition=lambda: self.exited, - context=None + context=context ) def set_value_on_plc_with_modbus(self, modbus_cmd): diff --git a/extensions/standard-processors/tests/features/containers/tcp_client_container.py b/extensions/standard-processors/tests/features/containers/tcp_client_container.py index ddffc7d4f..5da752523 100644 --- a/extensions/standard-processors/tests/features/containers/tcp_client_container.py +++ b/extensions/standard-processors/tests/features/containers/tcp_client_container.py @@ -29,12 +29,12 @@ class TcpClientContainer(Container): ) super().__init__("alpine:3.17.3", f"tcp-client-{test_context.scenario_id}", test_context.network, cmd) - def deploy(self): - super().deploy() + def deploy(self, context: MinifiTestContext | None) -> bool: + super().deploy(context) finished_str = "TCP client container started" return wait_for_condition( condition=lambda: finished_str in self.get_logs(), timeout_seconds=30, bail_condition=lambda: self.exited, - context=None + context=context ) diff --git a/extensions/standard-processors/tests/features/steps/minifi_c2_server_container.py b/extensions/standard-processors/tests/features/steps/minifi_c2_server_container.py index 6c25d7c77..75c4f4f3b 100644 --- a/extensions/standard-processors/tests/features/steps/minifi_c2_server_container.py +++ b/extensions/standard-processors/tests/features/steps/minifi_c2_server_container.py @@ -65,12 +65,12 @@ class MinifiC2Server(Container): self.host_files.append(HostFile("/opt/minifi-c2/minifi-c2-current/conf/authorizations.yaml", os.path.join(resource_dir, "authorizations.yaml"))) self.host_files.append(HostFile("/opt/minifi-c2/minifi-c2-current/conf/c2.properties", os.path.join(resource_dir, "c2.properties"))) - def deploy(self): - super().deploy() + def deploy(self, context: MinifiTestContext | None) -> bool: + super().deploy(context) finished_str = "Server Started" return wait_for_condition( condition=lambda: finished_str in self.get_logs(), timeout_seconds=60, bail_condition=lambda: self.exited, - context=None + context=context ) diff --git a/extensions/standard-processors/tests/features/steps/steps.py b/extensions/standard-processors/tests/features/steps/steps.py index 5fa17f32c..6ef8df1bb 100644 --- a/extensions/standard-processors/tests/features/steps/steps.py +++ b/extensions/standard-processors/tests/features/steps/steps.py @@ -43,7 +43,7 @@ def step_impl(context: MinifiTestContext): @step('there is an accessible PLC with modbus enabled') def step_impl(context: MinifiTestContext): modbus_container = context.containers["diag-slave-tcp"] = DiagSlave(context) - assert modbus_container.deploy() + assert modbus_container.deploy(context) @step('PLC register has been set with {modbus_cmd} command') @@ -94,7 +94,7 @@ def step_impl(context: MinifiTestContext): @given("a MiNiFi C2 server is started") def step_impl(context: MinifiTestContext): context.containers["minifi-c2-server"] = MinifiC2Server(context) - assert context.containers["minifi-c2-server"].deploy() + assert context.containers["minifi-c2-server"].deploy(context) @then("the MiNiFi C2 server logs contain the following message: \"{log_message}\" in less than {duration}")
