From 25a31e493f8ce556d654d9e4fbc9ccd888e53eb3 Mon Sep 17 00:00:00 2001 From: camila Date: Thu, 10 Feb 2022 10:37:43 -0300 Subject: [PATCH 1/7] Add: new test:agent in neverConnected to new group --- tests/system/__init__.py | 4 +- .../test_cluster/test_agent_groups/common.py | 17 ++- ...t_assign_agent_never_connected_to_group.py | 115 ++++++++++++++++++ 3 files changed, 128 insertions(+), 8 deletions(-) create mode 100644 tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py diff --git a/tests/system/__init__.py b/tests/system/__init__.py index 0bced65235..085ea61134 100644 --- a/tests/system/__init__.py +++ b/tests/system/__init__.py @@ -31,7 +31,7 @@ def remove_cluster_agents(wazuh_master, agents_list, host_manager): agent_id = get_agent_id(host_manager) while (agent_id != ''): host_manager.get_host(wazuh_master).ansible("command", f'{WAZUH_PATH}/bin/manage_agents -r {agent_id}', - check=False) + check=False) agent_id = get_agent_id(host_manager) for agent in agents_list: host_manager.control_service(host=agent, service='wazuh', state="stopped") @@ -70,5 +70,5 @@ def check_agent_groups(agent_id, group_to_check, hosts_list, host_manager): def check_agent_status(agent_id, agent_name, agent_ip, status, host_manager, hosts_list): # Check the agent has the expected status (never_connected, pending, active, disconnected) for host in hosts_list: - data= get_agents_in_cluster(host, host_manager) + data = get_agents_in_cluster(host, host_manager) assert f"{agent_id} {agent_name} {agent_ip} {status}" in data diff --git a/tests/system/test_cluster/test_agent_groups/common.py b/tests/system/test_cluster/test_agent_groups/common.py index 443bb5197c..bc050e48af 100644 --- a/tests/system/test_cluster/test_agent_groups/common.py +++ b/tests/system/test_cluster/test_agent_groups/common.py @@ -7,7 +7,8 @@ from wazuh_testing.tools import WAZUH_PATH from system import get_agent_id -def register_agent(agent, agent_manager, host_manager): + +def register_agent(agent, agent_manager, host_manager, id_group=''): agent_ip = host_manager.run_command(agent, f'hostname -i') agent_name = "Agent-" + str(time.time()) @@ -16,10 +17,14 @@ def register_agent(agent, agent_manager, host_manager): host_manager.add_block_to_file(host=agent, path=f"{WAZUH_PATH}/etc/ossec.conf", after="
", before="
", replace=manager_ip) - # Add agent to Master/Worker using agent-auth tool - host_manager.run_command(agent, - f'{WAZUH_PATH}/bin/agent-auth -m {manager_ip} -A {agent_name} -I {agent_ip}') + # Add agent to Master/Worker using agent-auth tool + if(id_group == ''): + host_manager.run_command(agent, + f'{WAZUH_PATH}/bin/agent-auth -m {manager_ip} -A {agent_name} -I {agent_ip}') + else: + host_manager.run_command(agent, + f'{WAZUH_PATH}/bin/agent-auth -m {manager_ip} -A {agent_name} -I {agent_ip} -G {id_group}') agent_id = get_agent_id(host_manager) - - return [agent_ip, agent_id, agent_name, manager_ip] \ No newline at end of file + + return [agent_ip, agent_id, agent_name, manager_ip] diff --git a/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py b/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py new file mode 100644 index 0000000000..1e70eb7879 --- /dev/null +++ b/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py @@ -0,0 +1,115 @@ +""" +copyright: Copyright (C) 2015-2022, Wazuh Inc. + Created by Wazuh, Inc. . + This program is free software; you can redistribute it and/or modify it under the terms of GPLv2 +type: system +brief: Check that when an agent with status never_connected, pointing to a master/worker node is + registered using agent-auth with a group the change is sync with the cluster. +tier: 0 +modules: + - cluster +components: + - manager + - agent +path: /tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py +daemons: + - wazuh-db + - wazuh-clusterd +os_platform: + - linux +os_version: + - Arch Linux + - Amazon Linux 2 + - Amazon Linux 1 + - CentOS 8 + - CentOS 7 + - CentOS 6 + - Ubuntu Focal + - Ubuntu Bionic + - Ubuntu Xenial + - Ubuntu Trusty + - Debian Buster + - Debian Stretch + - Debian Jessie + - Debian Wheezy + - Red Hat 8 + - Red Hat 7 + - Red Hat 6 +references: + - https://github.com/wazuh/wazuh-qa/issues/2508 +tags: + - cluster +""" + + +import os + +import pytest +from wazuh_testing.tools.system import HostManager +from system import (check_agent_groups, check_agent_status, clean_cluster_logs, + check_keys_file, delete_group_of_agents, + remove_cluster_agents) +from common import register_agent + + +# Hosts +test_infra_managers = ["wazuh-master", "wazuh-worker1", "wazuh-worker2"] +test_infra_agents = ["wazuh-agent1"] + +inventory_path = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), + 'provisioning', 'enrollment_cluster', 'inventory.yml') +host_manager = HostManager(inventory_path) +local_path = os.path.dirname(os.path.abspath(__file__)) +tmp_path = os.path.join(local_path, 'tmp') +id_group = 'group_test' + + +@pytest.fixture(scope='function') +def clean_environment(): + + clean_cluster_logs(test_infra_agents + test_infra_managers, host_manager) + + yield + # Remove the agent once the test has finished + remove_cluster_agents(test_infra_managers[0], test_infra_agents, host_manager) + + +@pytest.mark.parametrize("agent_target", ['wazuh-master', 'wazuh-worker1']) +def test_assign_agent_to_a_group(agent_target, clean_environment): + ''' + description: Check that when an agent with status never_connected, pointing to a master/worker node is + registered using agent-auth with a group the change is sync with the cluster. + wazuh_min_version: 4.4.0 + parameters: + - agent_target: + type: string + brief: name of the host where the agent will register + - clean_enviroment: + type: fixture + brief: Reset the wazuh log files at the start of the test. Remove all registered agents from master. + assertions: + - Verify that after registering the agent key file exists in all nodes. + - Verify that after registering the agent appears as never_connected in all nodes. + - Verify that after registering it has the 'group_test' group assigned. + expected_output: + - The agent 'Agent_name' with ID 'Agent_id' belongs to groups: group_test." + ''' + + # Create group with agent_groups + host_manager.run_command(test_infra_managers[0], f"/var/ossec/bin/agent_groups -q -a -g {id_group}") + + # Register agent with agent-auth + agent_ip, agent_id, agent_name, manager_ip = register_agent(test_infra_agents[0], agent_target, + host_manager, id_group) + + # Check that agent status is never_connected in cluster + check_agent_status(agent_id, agent_name, agent_ip, 'never_connected', host_manager, test_infra_managers) + + # Check that agent has group set to group_test on Managers + check_agent_groups(agent_id, id_group, test_infra_managers, host_manager) + + # Check that agent has client key file + assert check_keys_file(test_infra_agents[0], host_manager) + + # Delete group of agent + delete_group_of_agents('wazuh-master', 'group_test', host_manager) From e075a1e51f281ab80b9912b6b853d313ecd7278c Mon Sep 17 00:00:00 2001 From: camila Date: Wed, 9 Mar 2022 10:33:32 -0300 Subject: [PATCH 2/7] Add try finally block --- .../test_cluster/test_agent_groups/common.py | 1 - ...t_assign_agent_never_connected_to_group.py | 28 ++++++++++--------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/tests/system/test_cluster/test_agent_groups/common.py b/tests/system/test_cluster/test_agent_groups/common.py index 6c3a87906c..435934d184 100644 --- a/tests/system/test_cluster/test_agent_groups/common.py +++ b/tests/system/test_cluster/test_agent_groups/common.py @@ -25,7 +25,6 @@ def register_agent(agent, agent_manager, host_manager, id_group=''): host_manager.run_command(agent, f'{WAZUH_PATH}/bin/agent-auth -m {manager_ip} -A {agent_name} -I {agent_ip} -G {id_group}') - agent_id = get_id_from_agent(agent, host_manager) return [agent_ip, agent_id, agent_name, manager_ip] diff --git a/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py b/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py index 1e70eb7879..a670759b59 100644 --- a/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py +++ b/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py @@ -95,21 +95,23 @@ def test_assign_agent_to_a_group(agent_target, clean_environment): - The agent 'Agent_name' with ID 'Agent_id' belongs to groups: group_test." ''' - # Create group with agent_groups - host_manager.run_command(test_infra_managers[0], f"/var/ossec/bin/agent_groups -q -a -g {id_group}") + try: + # Create group with agent_groups + host_manager.run_command(test_infra_managers[0], f"/var/ossec/bin/agent_groups -q -a -g {id_group}") - # Register agent with agent-auth - agent_ip, agent_id, agent_name, manager_ip = register_agent(test_infra_agents[0], agent_target, - host_manager, id_group) + # Register agent with agent-auth + agent_ip, agent_id, agent_name, manager_ip = register_agent(test_infra_agents[0], agent_target, + host_manager, id_group) - # Check that agent status is never_connected in cluster - check_agent_status(agent_id, agent_name, agent_ip, 'never_connected', host_manager, test_infra_managers) + # Check that agent status is never_connected in cluster + check_agent_status(agent_id, agent_name, agent_ip, 'never_connected', host_manager, test_infra_managers) - # Check that agent has group set to group_test on Managers - check_agent_groups(agent_id, id_group, test_infra_managers, host_manager) + # Check that agent has group set to group_test on Managers + check_agent_groups(agent_id, id_group, test_infra_managers, host_manager) - # Check that agent has client key file - assert check_keys_file(test_infra_agents[0], host_manager) + # Check that agent has client key file + assert check_keys_file(test_infra_agents[0], host_manager) - # Delete group of agent - delete_group_of_agents('wazuh-master', 'group_test', host_manager) + finally: + # Delete group of agent + delete_group_of_agents('wazuh-master', 'group_test', host_manager) From b110583a728e9c7310a22ac5e00d46fc957c583e Mon Sep 17 00:00:00 2001 From: camila Date: Wed, 9 Mar 2022 10:36:20 -0300 Subject: [PATCH 3/7] Fx: replace strnig with variable --- .../test_assign_agent_never_connected_to_group.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py b/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py index a670759b59..d0e947aadc 100644 --- a/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py +++ b/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py @@ -114,4 +114,4 @@ def test_assign_agent_to_a_group(agent_target, clean_environment): finally: # Delete group of agent - delete_group_of_agents('wazuh-master', 'group_test', host_manager) + delete_group_of_agents('wazuh-master', id_group, host_manager) From ffe6819088d83d04130b6e8581407d45c76b3130 Mon Sep 17 00:00:00 2001 From: Deblintrake09 Date: Fri, 11 Mar 2022 15:32:03 -0300 Subject: [PATCH 4/7] rf: extract clean_enviroment fixture and fix docu --- ...t_assign_agent_never_connected_to_group.py | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py b/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py index d0e947aadc..0f9c3acaca 100644 --- a/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py +++ b/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py @@ -40,16 +40,13 @@ tags: - cluster """ - - import os import pytest -from wazuh_testing.tools.system import HostManager -from system import (check_agent_groups, check_agent_status, clean_cluster_logs, - check_keys_file, delete_group_of_agents, - remove_cluster_agents) + from common import register_agent +from system import check_agent_groups, check_agent_status, check_keys_file, delete_group_of_agents +from wazuh_testing.tools.system import HostManager # Hosts @@ -64,18 +61,12 @@ id_group = 'group_test' -@pytest.fixture(scope='function') -def clean_environment(): - - clean_cluster_logs(test_infra_agents + test_infra_managers, host_manager) - - yield - # Remove the agent once the test has finished - remove_cluster_agents(test_infra_managers[0], test_infra_agents, host_manager) - - +# Tests +@pytest.mark.parametrize("test_infra_managers",[test_infra_managers]) +@pytest.mark.parametrize("test_infra_agents",[test_infra_agents]) +@pytest.mark.parametrize("host_manager",[host_manager]) @pytest.mark.parametrize("agent_target", ['wazuh-master', 'wazuh-worker1']) -def test_assign_agent_to_a_group(agent_target, clean_environment): +def test_assign_agent_to_a_group(agent_target, clean_environment, test_infra_managers, test_infra_agents, host_manager): ''' description: Check that when an agent with status never_connected, pointing to a master/worker node is registered using agent-auth with a group the change is sync with the cluster. @@ -87,6 +78,15 @@ def test_assign_agent_to_a_group(agent_target, clean_environment): - clean_enviroment: type: fixture brief: Reset the wazuh log files at the start of the test. Remove all registered agents from master. + - test_infra_managers + type: List + brief: list of manager hosts in enviroment + - test_infra_managers + type: List + brief: list of agent hosts in enviroment + - host_manager + type: HostManager object + brief: handles connection the enviroment's hosts. assertions: - Verify that after registering the agent key file exists in all nodes. - Verify that after registering the agent appears as never_connected in all nodes. From 68b80ef98cef5995cd4474a3245209f6e641f9b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Carmelo=20Micalizzi?= Date: Mon, 14 Mar 2022 16:12:34 -0300 Subject: [PATCH 5/7] rf: remove hardcoded value --- .../test_assign_agent_never_connected_to_group.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py b/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py index 0f9c3acaca..199d2124db 100644 --- a/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py +++ b/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py @@ -41,11 +41,11 @@ - cluster """ import os - import pytest from common import register_agent -from system import check_agent_groups, check_agent_status, check_keys_file, delete_group_of_agents +from system import (check_agent_groups, check_agent_status, check_keys_file, delete_group_of_agents, + AGENT_STATUS_NEVER_CONNECTED) from wazuh_testing.tools.system import HostManager @@ -104,13 +104,13 @@ def test_assign_agent_to_a_group(agent_target, clean_environment, test_infra_man host_manager, id_group) # Check that agent status is never_connected in cluster - check_agent_status(agent_id, agent_name, agent_ip, 'never_connected', host_manager, test_infra_managers) + check_agent_status(agent_id, agent_name, agent_ip, AGENT_STATUS_NEVER_CONNECTED, host_manager, test_infra_managers) # Check that agent has group set to group_test on Managers check_agent_groups(agent_id, id_group, test_infra_managers, host_manager) # Check that agent has client key file - assert check_keys_file(test_infra_agents[0], host_manager) + assert check_keys_file(test_infra_agents[0], host_manager), f'Did not find the expected keys generated in the master node.' finally: # Delete group of agent From 178c6b82056cae6b20bddd3ce9e7f3afafe7bc82 Mon Sep 17 00:00:00 2001 From: Deblintrake09 Date: Tue, 15 Mar 2022 10:38:32 -0300 Subject: [PATCH 6/7] rf: extract error message as callback --- tests/system/__init__.py | 2 ++ .../test_assign_agent_never_connected_to_group.py | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/system/__init__.py b/tests/system/__init__.py index ddbdf9d14a..4300f59e5a 100644 --- a/tests/system/__init__.py +++ b/tests/system/__init__.py @@ -14,6 +14,8 @@ AGENT_NO_GROUPS = 'Null' +# Error Messages +ERR_MSG_CLIENT_KEYS_IN_MASTER_NOT_FOUND = f'Did not find the expected keys generated in the master node.' diff --git a/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py b/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py index 199d2124db..b85f0f1469 100644 --- a/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py +++ b/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py @@ -45,7 +45,7 @@ from common import register_agent from system import (check_agent_groups, check_agent_status, check_keys_file, delete_group_of_agents, - AGENT_STATUS_NEVER_CONNECTED) + AGENT_STATUS_NEVER_CONNECTED, ERR_MSG_CLIENT_KEYS_IN_MASTER_NOT_FOUND) from wazuh_testing.tools.system import HostManager @@ -110,7 +110,7 @@ def test_assign_agent_to_a_group(agent_target, clean_environment, test_infra_man check_agent_groups(agent_id, id_group, test_infra_managers, host_manager) # Check that agent has client key file - assert check_keys_file(test_infra_agents[0], host_manager), f'Did not find the expected keys generated in the master node.' + assert check_keys_file(test_infra_agents[0], host_manager), ERR_MSG_CLIENT_KEYS_IN_MASTER_NOT_FOUND finally: # Delete group of agent From 6ebaa75cc7c1dabda79845f95aad3c080dd4385d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Carmelo=20Micalizzi?= Date: Tue, 15 Mar 2022 15:59:28 -0300 Subject: [PATCH 7/7] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Dámaris --- .../test_assign_agent_never_connected_to_group.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py b/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py index b85f0f1469..91d1ce6353 100644 --- a/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py +++ b/tests/system/test_cluster/test_agent_groups/test_assign_agent_never_connected_to_group.py @@ -81,7 +81,7 @@ def test_assign_agent_to_a_group(agent_target, clean_environment, test_infra_man - test_infra_managers type: List brief: list of manager hosts in enviroment - - test_infra_managers + - test_infra_agents type: List brief: list of agent hosts in enviroment - host_manager