Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Integration test for bluechi-is-online node <name> --monitor #1017

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
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
9 changes: 9 additions & 0 deletions tests/bluechi_test/bluechi_is_online.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,12 @@ def system_is_online(self) -> bool:
0,
)
return result == 0

def monitor_node(self, node_name: str) -> bool:
result, output = self.run(
f"Monitoring status of node {node_name}.",
f"node {node_name} --monitor",
False,
0,
)
return result == 0
2 changes: 2 additions & 0 deletions tests/tests/tier0/bluechi-is-online-node-monitor/main.fmf
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
#
# Copyright Contributors to the Eclipse BlueChi project
#
# SPDX-License-Identifier: LGPL-2.1-or-later

import logging
import threading
from typing import Dict

from bluechi_test.config import BluechiAgentConfig, BluechiControllerConfig
from bluechi_test.machine import BluechiAgentMachine, BluechiControllerMachine
from bluechi_test.test import BluechiTest
from bluechi_test.util import Timeout

LOGGER = logging.getLogger(__name__)

NODE_FOO = "node-foo"
AGENT_ONE = "agent-one"


class MonitorResult:
def __init__(self):
self.result = None


def monitor_command(
ctrl: BluechiControllerMachine, node_name: str, monitor_result: MonitorResult
):
monitor_result.result = ctrl.bluechi_is_online.monitor_node(node_name)


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.")
monitor_result_test_one = MonitorResult()
with Timeout(2, f"Timeout while monitoring {NODE_FOO}"):
monitor_thread = threading.Thread(
target=monitor_command, args=(ctrl, NODE_FOO, monitor_result_test_one)
)

monitor_thread.start()
assert (
monitor_result_test_one.result is None
), "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_result_test_two = MonitorResult()
monitor_thread = threading.Thread(
target=monitor_command, args=(ctrl, NODE_FOO, monitor_result_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_result_test_two.result is not None
), "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)
Loading