1515# limitations under the License.
1616#
1717
18- from behave import step
18+ import humanfriendly
19+ from behave import step , then
1920
2021from minifi_test_framework .steps import checking_steps # noqa: F401
2122from minifi_test_framework .steps import configuration_steps # noqa: F401
2223from minifi_test_framework .steps import core_steps # noqa: F401
2324from minifi_test_framework .steps import flow_building_steps # noqa: F401
2425from minifi_test_framework .core .minifi_test_context import MinifiTestContext
26+ from minifi_test_framework .core .helpers import wait_for_condition
2527from syslog_container import SyslogContainer
2628from diag_slave_container import DiagSlave
2729from tcp_client_container import TcpClientContainer
30+ from minifi_c2_server_container import MinifiC2Server
2831
2932
3033@step ("a Syslog client with TCP protocol is setup to send logs to minifi" )
@@ -51,3 +54,52 @@ def step_impl(context: MinifiTestContext, modbus_cmd: str):
5154@step ('a TCP client is set up to send a test TCP message to minifi' )
5255def step_impl (context : MinifiTestContext ):
5356 context .containers ["tcp-client" ] = TcpClientContainer (context )
57+
58+
59+ @given ("C2 is enabled in MiNiFi" )
60+ def step_impl (context : MinifiTestContext ):
61+ context .get_or_create_default_minifi_container ().set_property ("nifi.c2.enable" , "true" )
62+ context .get_or_create_default_minifi_container ().set_property ("nifi.c2.rest.url" , f"http://minifi-c2-server-{ context .scenario_id } :10090/c2/config/heartbeat" )
63+ context .get_or_create_default_minifi_container ().set_property ("nifi.c2.rest.url.ack" , f"http://minifi-c2-server-{ context .scenario_id } :10090/c2/config/acknowledge" )
64+ context .get_or_create_default_minifi_container ().set_property ("nifi.c2.flow.base.url" , f"http://minifi-c2-server-{ context .scenario_id } :10090/c2/config/" )
65+ context .get_or_create_default_minifi_container ().set_property ("nifi.c2.root.classes" , "DeviceInfoNode,AgentInformation,FlowInformation,AssetInformation" )
66+ context .get_or_create_default_minifi_container ().set_property ("nifi.c2.full.heartbeat" , "false" )
67+ context .get_or_create_default_minifi_container ().set_property ("nifi.c2.agent.class" , "minifi-test-class" )
68+ context .get_or_create_default_minifi_container ().set_property ("nifi.c2.agent.identifier" , "minifi-test-id" )
69+
70+
71+ @given ("ssl properties are set up for MiNiFi C2 server" )
72+ def step_impl (context : MinifiTestContext ):
73+ context .get_or_create_default_minifi_container ().set_property ("nifi.c2.enable" , "true" )
74+ context .get_or_create_default_minifi_container ().set_property ("nifi.c2.rest.url" , f"https://minifi-c2-server-{ context .scenario_id } :10090/c2/config/heartbeat" )
75+ context .get_or_create_default_minifi_container ().set_property ("nifi.c2.rest.url.ack" , f"https://minifi-c2-server-{ context .scenario_id } :10090/c2/config/acknowledge" )
76+ context .get_or_create_default_minifi_container ().set_property ("nifi.c2.flow.base.url" , f"https://minifi-c2-server-{ context .scenario_id } :10090/c2/config/" )
77+ context .get_or_create_default_minifi_container ().set_property ("nifi.c2.root.classes" , "DeviceInfoNode,AgentInformation,FlowInformation,AssetInformation" )
78+ context .get_or_create_default_minifi_container ().set_property ("nifi.c2.full.heartbeat" , "false" )
79+ context .get_or_create_default_minifi_container ().set_property ("nifi.c2.agent.class" , "minifi-test-class" )
80+ context .get_or_create_default_minifi_container ().set_property ("nifi.c2.agent.identifier" , "minifi-test-id" )
81+ context .get_or_create_default_minifi_container ().set_up_ssl_properties ()
82+
83+
84+ @given ("a MiNiFi C2 server is set up" )
85+ def step_impl (context : MinifiTestContext ):
86+ context .containers ["minifi-c2-server" ] = MinifiC2Server (context )
87+
88+
89+ @given ("a MiNiFi C2 server is set up with SSL" )
90+ def step_impl (context : MinifiTestContext ):
91+ context .containers ["minifi-c2-server" ] = MinifiC2Server (context , ssl = True )
92+
93+
94+ @given ("a MiNiFi C2 server is started" )
95+ def step_impl (context : MinifiTestContext ):
96+ context .containers ["minifi-c2-server" ] = MinifiC2Server (context )
97+ assert context .containers ["minifi-c2-server" ].deploy ()
98+
99+
100+ @then ("the MiNiFi C2 server logs contain the following message: \" {log_message}\" in less than {duration}" )
101+ def step_impl (context : MinifiTestContext , log_message : str , duration : str ):
102+ duration_seconds = humanfriendly .parse_timespan (duration )
103+ assert wait_for_condition (condition = lambda : log_message in context .containers ["minifi-c2-server" ].get_logs (),
104+ timeout_seconds = duration_seconds , bail_condition = lambda : context .containers ["minifi-c2-server" ].exited ,
105+ context = context )
0 commit comments