MINIFICPP-2718 Windows based docker tests#2133
MINIFICPP-2718 Windows based docker tests#2133martinzink wants to merge 5 commits intoapache:mainfrom
Conversation
47057e5 to
721de91
Compare
| @retry_check(max_tries=12, retry_interval=5) | ||
| @retry_check(12, 5) |
There was a problem hiding this comment.
what's the reason for this change?
There was a problem hiding this comment.
it was mismatched with the actual naming of the parameters
def retry_check(max_tries: int = 5, retry_interval_seconds: int = 1)
should I instead correct and keep the named arguments?
There was a problem hiding this comment.
I think I'd keep the named arguments, but I leave it up to you to decide which is better.
There was a problem hiding this comment.
| command = ( | ||
| f"powershell -Command \"if ((Test-Path -LiteralPath '{directory_path}' -PathType Container) " | ||
| f"-and (Get-ChildItem -LiteralPath '{directory_path}' -Force | Select-Object -First 1)) " | ||
| f"{{ exit 0 }} else {{ exit 1 }}\"" | ||
| ) | ||
|
|
||
| exit_code, _ = self.exec_run(command) |
| [tool.setuptools] | ||
| package-dir = {"" = "src"} | ||
| packages = ["minifi_test_framework"] | ||
|
|
||
| [tool.setuptools.packages.find] | ||
| where = ["src"] | ||
| include = ["minifi_test_framework*"] | ||
|
|
There was a problem hiding this comment.
this is required for wheel building
| @retry_check(max_tries=12, retry_interval=5) | ||
| @retry_check(12, 5) |
There was a problem hiding this comment.
it was mismatched with the actual naming of the parameters
def retry_check(max_tries: int = 5, retry_interval_seconds: int = 1)
should I instead correct and keep the named arguments?
e3429cc to
c04433a
Compare
There was a problem hiding this comment.
Pull request overview
This PR enables running a subset of the Behave integration test suite with Windows-based Docker containers, and refactors the test framework container abstractions to support both Linux and Windows. It also replaces the previous M2Crypto/PyOpenSSL-based SSL helpers with cryptography, improving cross-platform dependency installation.
Changes:
- Add Windows container support (new Windows container implementation, Windows MiNiFi container, and scenario tag gating via
@SUPPORTS_WINDOWS). - Refactor test containers to explicitly target Linux (
LinuxContainer) and extract controller/config helpers. - Replace SSL utilities implementation and dependencies with
cryptography, updating affected test containers accordingly.
Reviewed changes
Copilot reviewed 42 out of 44 changed files in this pull request and generated 9 comments.
Show a summary per file
| File | Description |
|---|---|
| extensions/standard-processors/tests/features/steps/steps.py | Switch SSL setup to shared helper function. |
| extensions/standard-processors/tests/features/steps/minifi_controller_steps.py | Route controller actions through a controller helper object; update retry decorator args. |
| extensions/standard-processors/tests/features/steps/minifi_c2_server_container.py | Switch to cryptography-based cert/key serialization; base class to LinuxContainer. |
| extensions/standard-processors/tests/features/replace_text.feature | Mark feature as supporting Windows. |
| extensions/standard-processors/tests/features/environment.py | Avoid Alpine image inspection on Windows host. |
| extensions/standard-processors/tests/features/core_functionality.feature | Mark feature as supporting Windows; increase timeouts. |
| extensions/standard-processors/tests/features/containers/tcp_client_container.py | Base class switched to LinuxContainer. |
| extensions/standard-processors/tests/features/containers/syslog_container.py | Base class switched to LinuxContainer. |
| extensions/standard-processors/tests/features/containers/diag_slave_container.py | Base class switched to LinuxContainer. |
| extensions/sql/tests/features/containers/postgress_server_container.py | Base class switched to LinuxContainer. |
| extensions/splunk/tests/features/containers/splunk_container.py | Base class switched to LinuxContainer; switch to cryptography dump helpers. |
| extensions/prometheus/tests/features/containers/prometheus_container.py | Base class switched to LinuxContainer; switch to cryptography dump helpers. |
| extensions/opc/tests/features/containers/opc_ua_server_container.py | Base class switched to LinuxContainer. |
| extensions/mqtt/tests/features/containers/mqtt_broker_container.py | Base class switched to LinuxContainer. |
| extensions/kafka/tests/features/containers/kafka_server_container.py | Base class switched to LinuxContainer; switch keystore/truststore material to cryptography dump helpers. |
| extensions/grafana-loki/tests/features/containers/reverse_proxy_container.py | Base class switched to LinuxContainer. |
| extensions/grafana-loki/tests/features/containers/grafana_loki_container.py | Base class switched to LinuxContainer; switch to cryptography dump helpers. |
| extensions/gcp/tests/features/containers/fake_gcs_server_container.py | Base class switched to LinuxContainer. |
| extensions/elasticsearch/tests/features/containers/opensearch_container.py | Switch to cryptography dump helpers. |
| extensions/elasticsearch/tests/features/containers/elasticsearch_container.py | Switch to cryptography dump helpers. |
| extensions/elasticsearch/tests/features/containers/elastic_base_container.py | Base class switched to LinuxContainer. |
| extensions/couchbase/tests/features/containers/couchbase_server_container.py | Base class switched to LinuxContainer; switch to cryptography dump helpers; update retry decorator arg names. |
| extensions/azure/tests/features/containers/azure_server_container.py | Base class switched to LinuxContainer. |
| extensions/aws/tests/features/containers/s3_server_container.py | Base class switched to LinuxContainer. |
| extensions/aws/tests/features/containers/kinesis_server_container.py | Base class switched to LinuxContainer. |
| docker/installed/win.Dockerfile | New Windows MiNiFi installed-image Dockerfile. |
| docker/RunBehaveTests.sh | Improve feature file collection portability (avoid mapfile). |
| behave_framework/src/minifi_test_framework/steps/configuration_steps.py | Switch from container methods to protocol helper functions. |
| behave_framework/src/minifi_test_framework/core/ssl_utils.py | Replace M2Crypto/PyOpenSSL SSL utilities with cryptography. |
| behave_framework/src/minifi_test_framework/core/minifi_test_context.py | Introduce OS-/image-based MiNiFi container selection (Windows vs Linux, FHS vs normal). |
| behave_framework/src/minifi_test_framework/core/hooks.py | Skip scenarios on Windows unless tagged SUPPORTS_WINDOWS; guard cleanup if setup didn’t run. |
| behave_framework/src/minifi_test_framework/containers/nifi_container.py | Base class switched to LinuxContainer; switch to cryptography dump helpers. |
| behave_framework/src/minifi_test_framework/containers/minifi_win_container.py | New Windows MiNiFi container implementation. |
| behave_framework/src/minifi_test_framework/containers/minifi_protocol.py | New protocol + shared property-setting helpers. |
| behave_framework/src/minifi_test_framework/containers/minifi_linux_container.py | New Linux MiNiFi container implementation (normal vs FHS deployment). |
| behave_framework/src/minifi_test_framework/containers/minifi_controller.py | New helper encapsulating minifi-controller interactions. |
| behave_framework/src/minifi_test_framework/containers/minifi_container.py | Removed monolithic MiNiFi container (replaced by linux/windows split). |
| behave_framework/src/minifi_test_framework/containers/http_proxy_container.py | Base class switched to LinuxContainer. |
| behave_framework/src/minifi_test_framework/containers/container_windows.py | New Windows container implementation for file ops + exec + log helpers. |
| behave_framework/src/minifi_test_framework/containers/container_protocol.py | New protocol defining container interface used by the framework. |
| behave_framework/src/minifi_test_framework/containers/container_linux.py | Rename/reshape base container into LinuxContainer; move shared helpers. |
| behave_framework/pyproject.toml | Bump framework version; swap SSL deps to cryptography; adjust package discovery. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This PR allows windows based docker containers to run the behave test suite with some limitations:
So this is only the MVP for this feature, but it is still a huge help for future developments especially for using it to develop external extensions using the upcoming C api. It cuts down the local verification time.
I've also replaced the previous m2crypto based ssl_utils with the industry standard cryptography, this should help with the setup on macs and windows systems (m2crypto was quite difficult to install on these systems)
Thank you for submitting a contribution to Apache NiFi - MiNiFi C++.
In order to streamline the review of the contribution we ask you
to ensure the following steps have been taken:
For all changes:
Is there a JIRA ticket associated with this PR? Is it referenced
in the commit message?
Does your PR title start with MINIFICPP-XXXX where XXXX is the JIRA number you are trying to resolve? Pay particular attention to the hyphen "-" character.
Has your PR been rebased against the latest commit within the target branch (typically main)?
Is your initial contribution a single, squashed commit?
For code changes:
For documentation related changes:
Note:
Please ensure that once the PR is submitted, you check GitHub Actions CI results for build issues and submit an update to your PR as soon as possible.