-
Notifications
You must be signed in to change notification settings - Fork 40
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
�[200~Integration test for bluechi-is-online node <name> --monitor
Signed-off-by: nsimsolo <[email protected]>
- Loading branch information
Showing
3 changed files
with
90 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
summary: --monitor keeps monitoring as long as node is online and exits if it detects an offline state. | ||
id: 929f11ba-00ab-4c4f-8614-e1aebcbaa96d |
79 changes: 79 additions & 0 deletions
79
tests/tests/tier0/bluechi-is-online-node-monitor/test_bluechi_is_online_node_monitor.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
# | ||
# Copyright Contributors to the Eclipse BlueChi project | ||
# | ||
# SPDX-License-Identifier: LGPL-2.1-or-later | ||
import logging | ||
import threading | ||
import time | ||
from typing import Dict | ||
|
||
from bluechi_test.config import BluechiAgentConfig, BluechiControllerConfig | ||
from bluechi_test.machine import BluechiAgentMachine, BluechiControllerMachine | ||
from bluechi_test.test import BluechiTest | ||
|
||
LOGGER = logging.getLogger(__name__) | ||
|
||
NODE_FOO = "node-foo" | ||
AGENT_ONE = "agent-one" | ||
|
||
|
||
def monitor_command( | ||
ctrl: BluechiControllerMachine, node_name: str, monitor_output: list | ||
): | ||
"""Run the node --monitor command and monitor output.""" | ||
result = ctrl.bluechi_is_online.monitor_node(node_name) | ||
if not result: | ||
monitor_output.append(f"Monitoring node {node_name} failed.") | ||
|
||
|
||
def exec(ctrl: BluechiControllerMachine, nodes: Dict[str, BluechiAgentMachine]): | ||
node_foo = nodes[NODE_FOO] | ||
|
||
# Test 1: Agent and node are running, no monitor output expected | ||
LOGGER.debug("Starting NODE_FOO.") | ||
node_foo.systemctl.start_unit("bluechi-agent") | ||
|
||
monitor_output_test_one = [] | ||
monitor_thread = threading.Thread( | ||
target=monitor_command, args=(ctrl, NODE_FOO, monitor_output_test_one) | ||
) | ||
monitor_thread.start() | ||
time.sleep(2) | ||
assert ( | ||
not monitor_output_test_one | ||
), "Monitor command should not produce output when node is running." | ||
|
||
# Test 2: Stop NODE_FOO and verify monitoring detects the failure | ||
LOGGER.debug("Starting monitor thread before stopping NODE_FOO.") | ||
monitor_output_test_two = [] | ||
monitor_thread = threading.Thread( | ||
target=monitor_command, args=(ctrl, NODE_FOO, monitor_output_test_two) | ||
) | ||
monitor_thread.start() | ||
|
||
LOGGER.debug("Stopping NODE_FOO.") | ||
node_foo.systemctl.stop_unit("bluechi-agent") | ||
assert node_foo.wait_for_unit_state_to_be("bluechi-agent", "inactive") | ||
assert ( | ||
monitor_output_test_two | ||
), "Monitor command should produce output when NODE_FOO is stopped." | ||
|
||
|
||
def test_bluechi_is_online_node_monitor( | ||
bluechi_test: BluechiTest, | ||
bluechi_node_default_config: BluechiAgentConfig, | ||
bluechi_ctrl_default_config: BluechiControllerConfig, | ||
): | ||
node_foo_cfg = bluechi_node_default_config.deep_copy() | ||
node_foo_cfg.node_name = NODE_FOO | ||
|
||
agent_one_cfg = bluechi_node_default_config.deep_copy() | ||
agent_one_cfg.node_name = AGENT_ONE | ||
|
||
bluechi_ctrl_default_config.allowed_node_names = [NODE_FOO, AGENT_ONE] | ||
|
||
bluechi_test.set_bluechi_controller_config(bluechi_ctrl_default_config) | ||
bluechi_test.add_bluechi_agent_config(node_foo_cfg) | ||
bluechi_test.add_bluechi_agent_config(agent_one_cfg) | ||
|
||
bluechi_test.run(exec) |