Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ def __init__(self, container_name: str, test_context: MinifiTestContext):
self.flow_definition = MinifiFlowDefinition()
self.properties: dict[str, str] = {}
self.log_properties: dict[str, str] = {}
self.scenario_id = test_context.scenario_id

minifi_client_cert, minifi_client_key = make_cert_without_extended_usage(common_name=self.container_name, ca_cert=test_context.root_ca_cert, ca_key=test_context.root_ca_key)
self.files.append(File("/usr/local/share/certs/ca-root-nss.crt", crypto.dump_certificate(type=crypto.FILETYPE_PEM, cert=test_context.root_ca_cert)))
Expand Down Expand Up @@ -96,6 +97,15 @@ def set_log_property(self, key: str, value: str):
def enable_openssl_fips_mode(self):
self.properties["nifi.openssl.fips.support.enable"] = "true"

def fetch_flow_config_from_flow_url(self):
self.properties["nifi.c2.flow.url"] = f"http://minifi-c2-server-{self.scenario_id}:10090/c2/config?class=minifi-test-class"

def set_up_ssl_properties(self):
self.properties["nifi.remote.input.secure"] = "true"
self.properties["nifi.security.client.certificate"] = "/tmp/resources/minifi_client.crt"
self.properties["nifi.security.client.private.key"] = "/tmp/resources/minifi_client.key"
self.properties["nifi.security.client.ca.certificate"] = "/tmp/resources/root_ca.crt"

def _fill_default_properties(self):
if self.is_fhs:
self.properties["nifi.flow.configuration.file"] = "/etc/nifi-minifi-cpp/config.yml"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -196,15 +196,15 @@ def step_impl(context: MinifiTestContext, content: str, directory: str, duration


@then('after a wait of {duration}, at least {lower_bound:d} and at most {upper_bound:d} files are produced and placed in the "{directory}" directory')
def step_impl(context, lower_bound, upper_bound, duration, directory):
def step_impl(context: MinifiTestContext, lower_bound: int, upper_bound: int, duration: str, directory: str):
duration_seconds = humanfriendly.parse_timespan(duration)
assert check_condition_after_wait(condition=lambda: context.containers[DEFAULT_MINIFI_CONTAINER_NAME].get_number_of_files(directory) >= lower_bound
and context.containers[DEFAULT_MINIFI_CONTAINER_NAME].get_number_of_files(directory) <= upper_bound,
context=context, wait_time=duration_seconds)


@then('exactly these files are in the "{directory}" directory in less than {duration}: "{contents}"')
def step_impl(context, directory, duration, contents):
def step_impl(context: MinifiTestContext, directory: str, duration: str, contents: str):
if not contents:
context.execute_steps(f'then no files are placed in the "{directory}" directory in {duration} of running time')
return
Expand All @@ -221,23 +221,23 @@ def step_impl(context, directory, duration):


@then("at least one empty file is placed in the \"{directory}\" directory in less than {duration}")
def step_impl(context, directory, duration):
def step_impl(context: MinifiTestContext, directory: str, duration: str):
timeout_in_seconds = humanfriendly.parse_timespan(duration)
assert wait_for_condition(
condition=lambda: context.containers[DEFAULT_MINIFI_CONTAINER_NAME].directory_contains_empty_file(directory),
timeout_seconds=timeout_in_seconds, bail_condition=lambda: context.containers[DEFAULT_MINIFI_CONTAINER_NAME].exited, context=context)


@then("in the \"{container_name}\" container at least one empty file is placed in the \"{directory}\" directory in less than {duration}")
def step_impl(context, container_name, directory, duration):
def step_impl(context: MinifiTestContext, container_name: str, directory: str, duration: str):
timeout_in_seconds = humanfriendly.parse_timespan(duration)
assert wait_for_condition(
condition=lambda: context.containers[container_name].directory_contains_empty_file(directory),
timeout_seconds=timeout_in_seconds, bail_condition=lambda: context.containers[container_name].exited, context=context)


@then("in the \"{container_name}\" container at least one file with minimum size of \"{size}\" is placed in the \"{directory}\" directory in less than {duration}")
def step_impl(context, container_name: str, directory: str, size: str, duration: str):
def step_impl(context: MinifiTestContext, container_name: str, directory: str, size: str, duration: str):
timeout_in_seconds = humanfriendly.parse_timespan(duration)
size_in_bytes = humanfriendly.parse_size(size)
assert wait_for_condition(
Expand All @@ -246,6 +246,6 @@ def step_impl(context, container_name: str, directory: str, size: str, duration:


@then("at least one file with minimum size of \"{size}\" is placed in the \"{directory}\" directory in less than {duration}")
def step_impl(context, directory: str, size: str, duration: str):
def step_impl(context: MinifiTestContext, directory: str, size: str, duration: str):
context.execute_steps(
f'Then in the "{DEFAULT_MINIFI_CONTAINER_NAME}" container at least one file with minimum size of "{size}" is placed in the "{directory}" directory in less than {duration}')
11 changes: 8 additions & 3 deletions behave_framework/src/minifi_test_framework/steps/core_steps.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,15 +100,20 @@ def step_impl(context: MinifiTestContext):


@given("OpenSSL FIPS mode is enabled in MiNiFi")
def step_impl(context):
def step_impl(context: MinifiTestContext):
context.get_or_create_default_minifi_container().enable_openssl_fips_mode()


@step("the http proxy server is set up")
def step_impl(context):
def step_impl(context: MinifiTestContext):
context.containers["http-proxy"] = HttpProxy(context)


@step("a NiFi container is set up")
def step_impl(context):
def step_impl(context: MinifiTestContext):
context.containers["nifi"] = NifiContainer(context)


@given("flow configuration path is set up in flow url property")
def step_impl(context: MinifiTestContext):
context.get_or_create_default_minifi_container().fetch_flow_config_from_flow_url()
28 changes: 0 additions & 28 deletions docker/test/integration/cluster/ContainerStore.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
from .containers.SyslogTcpClientContainer import SyslogTcpClientContainer
from .containers.MinifiAsPodInKubernetesCluster import MinifiAsPodInKubernetesCluster
from .containers.PrometheusContainer import PrometheusContainer
from .containers.MinifiC2ServerContainer import MinifiC2ServerContainer
from .FeatureContext import FeatureContext


Expand Down Expand Up @@ -172,24 +171,6 @@ def acquire_container(self, context, container_name: str, engine='minifi-cpp', c
image_store=self.image_store,
command=command,
ssl=True))
elif engine == "minifi-c2-server":
return self.containers.setdefault(container_name,
MinifiC2ServerContainer(feature_context=feature_context,
name=container_name,
vols=self.vols,
network=self.network,
image_store=self.image_store,
command=command,
ssl=False))
elif engine == "minifi-c2-server-ssl":
return self.containers.setdefault(container_name,
MinifiC2ServerContainer(feature_context=feature_context,
name=container_name,
vols=self.vols,
network=self.network,
image_store=self.image_store,
command=command,
ssl=True))
else:
raise Exception('invalid flow engine: \'%s\'' % engine)

Expand Down Expand Up @@ -231,15 +212,6 @@ def restart_container(self, container_name):
def enable_provenance_repository_in_minifi(self):
self.minifi_options.enable_provenance = True

def enable_c2_in_minifi(self):
self.minifi_options.enable_c2 = True

def enable_c2_with_ssl_in_minifi(self):
self.minifi_options.enable_c2_with_ssl = True

def fetch_flow_config_from_c2_url_in_minifi(self):
self.minifi_options.use_flow_config_from_url = True

def set_ssl_context_properties_in_minifi(self):
self.minifi_options.set_ssl_context_properties = True

Expand Down
112 changes: 0 additions & 112 deletions docker/test/integration/cluster/containers/MinifiC2ServerContainer.py

This file was deleted.

31 changes: 2 additions & 29 deletions docker/test/integration/cluster/containers/MinifiContainer.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,6 @@

class MinifiOptions:
def __init__(self):
self.enable_c2 = False
self.enable_c2_with_ssl = False
self.enable_provenance = False
self.enable_prometheus = False
self.enable_prometheus_with_ssl = False
Expand All @@ -39,7 +37,6 @@ def __init__(self):
self.remove_python_requirements_txt = False
self.use_nifi_python_processors_without_dependencies = False
self.config_format = "json"
self.use_flow_config_from_url = False
self.set_ssl_context_properties = False
self.enable_log_metrics_publisher = False
self.enable_example_minifi_python_processors = False
Expand Down Expand Up @@ -133,25 +130,6 @@ def _create_properties(self):
f.write("nifi.database.content.repository.directory.default={minifi_home}/content_repository\n".format(minifi_home=MinifiContainer.MINIFI_LOCATIONS.minifi_home))
f.write("nifi.python.processor.dir={minifi_home}/minifi-python\n".format(minifi_home=MinifiContainer.MINIFI_LOCATIONS.minifi_home))

if self.options.enable_c2:
f.write("nifi.c2.enable=true\n")
f.write(f"nifi.c2.rest.url=http://minifi-c2-server-{self.feature_context.id}:10090/c2/config/heartbeat\n")
f.write(f"nifi.c2.rest.url.ack=http://minifi-c2-server-{self.feature_context.id}:10090/c2/config/acknowledge\n")
f.write(f"nifi.c2.flow.base.url=http://minifi-c2-server-{self.feature_context.id}:10090/c2/config/\n")
f.write("nifi.c2.root.classes=DeviceInfoNode,AgentInformation,FlowInformation,AssetInformation\n")
f.write("nifi.c2.full.heartbeat=false\n")
f.write("nifi.c2.agent.class=minifi-test-class\n")
f.write("nifi.c2.agent.identifier=minifi-test-id\n")
elif self.options.enable_c2_with_ssl:
f.write("nifi.c2.enable=true\n")
f.write(f"nifi.c2.rest.url=https://minifi-c2-server-{self.feature_context.id}:10090/c2/config/heartbeat\n")
f.write(f"nifi.c2.rest.url.ack=https://minifi-c2-server-{self.feature_context.id}:10090/c2/config/acknowledge\n")
f.write(f"nifi.c2.flow.base.url=https://minifi-c2-server-{self.feature_context.id}:10090/c2/config/\n")
f.write("nifi.c2.root.classes=DeviceInfoNode,AgentInformation,FlowInformation,AssetInformation\n")
f.write("nifi.c2.full.heartbeat=false\n")
f.write("nifi.c2.agent.class=minifi-test-class\n")
f.write("nifi.c2.agent.identifier=minifi-test-id\n")

if self.options.set_ssl_context_properties:
f.write("nifi.remote.input.secure=true\n")
f.write("nifi.security.client.certificate=/tmp/resources/minifi_client.crt\n")
Expand Down Expand Up @@ -180,9 +158,6 @@ def _create_properties(self):
if metrics_publisher_classes:
f.write("nifi.metrics.publisher.class=" + ",".join(metrics_publisher_classes) + "\n")

if self.options.use_flow_config_from_url:
f.write(f"nifi.c2.flow.url=http://minifi-c2-server-{self.feature_context.id}:10090/c2/config?class=minifi-test-class\n")

if self.options.use_nifi_python_processors_with_virtualenv or self.options.remove_python_requirements_txt or self.options.use_nifi_python_processors_without_dependencies:
f.write("nifi.python.virtualenv.directory={minifi_python_venv_parent}/venv\n".format(minifi_python_venv_parent=MinifiContainer.MINIFI_LOCATIONS.minifi_python_venv_parent))
elif self.options.use_nifi_python_processors_with_virtualenv_packages_installed:
Expand All @@ -198,10 +173,8 @@ def _create_properties(self):

def _setup_config(self):
self._create_properties()
if not self.options.use_flow_config_from_url:
self._create_config()
self.vols[os.path.join(self.container_specific_config_dir, 'config.yml')] = {"bind": MinifiContainer.MINIFI_LOCATIONS.config_path, "mode": "rw"}

self._create_config()
self.vols[os.path.join(self.container_specific_config_dir, 'config.yml')] = {"bind": MinifiContainer.MINIFI_LOCATIONS.config_path, "mode": "rw"}
self.vols[os.path.join(self.container_specific_config_dir, 'minifi.properties')] = {"bind": MinifiContainer.MINIFI_LOCATIONS.properties_path, "mode": "rw"}
self.vols[os.path.join(self.container_specific_config_dir, 'minifi-log.properties')] = {"bind": MinifiContainer.MINIFI_LOCATIONS.log_properties_path, "mode": "rw"}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,6 @@ def acquire_container(self, context, name, engine='minifi-cpp', command=None):
def acquire_transient_minifi(self, context, name, engine='minifi-cpp'):
return self.cluster.acquire_transient_minifi(context=context, name=name, engine=engine)

def start_minifi_c2_server(self, context):
self.cluster.acquire_container(context=context, name="minifi-c2-server", engine="minifi-c2-server")
self.cluster.deploy_container('minifi-c2-server')
assert self.cluster.wait_for_container_startup_to_finish('minifi-c2-server') or self.cluster.log_app_output()

def start_nifi(self, context):
self.cluster.acquire_container(context=context, name='nifi', engine='nifi')
self.cluster.deploy_container('nifi')
Expand Down
Loading
Loading