-
Notifications
You must be signed in to change notification settings - Fork 32
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1312 from wazuh/1251_logcollector_reconnect_time
Logcollector integration tests T0: reconnect_time option
- Loading branch information
Showing
10 changed files
with
241 additions
and
16 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
29 changes: 29 additions & 0 deletions
29
docs/tests/integration/test_logcollector/test_reconnect_time.md
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,29 @@ | ||
# Test reconnect time | ||
|
||
## Overview | ||
|
||
Check if Wazuh Windows agent reconnect to Windows event log channels using the specified `reconnect_time` | ||
option. These tests will disable Windows event log service and check that expected warning debugs are generated. | ||
Then, system time is changed using `reconnect_time` value. After that, Wazuh should generate reconnect time debug log. | ||
|
||
## Objective | ||
|
||
- To confirm `reconnect_time` option works correctly. | ||
- To confirm that Wazuh detect when Windows event log service is up. | ||
- To confirm that Wazuh detect when Windows event log service is down. | ||
- To confirm that Wazuh can reconnect to Windows event log service. | ||
|
||
## General info | ||
|
||
|Tier | Number of tests | Time spent | | ||
|:--:|:--:|:--:| | ||
| 0 | 9 | 1m4s | | ||
|
||
## Expected behavior | ||
|
||
- Fail if Wazuh agent does not reconnect to Windows event log at the time specified by `reconnect_time`. | ||
- Fail if Wazuh agent does not generate a debug message when the Windows event log is down. | ||
|
||
## Code documentation | ||
|
||
::: tests.integration.test_logcollector.test_reconnect_time.test_reconnect_time |
3 changes: 0 additions & 3 deletions
3
...vulnerability_detector/test_feeds/archlinux/test_extra_fields_archlinux_feed.md
This file was deleted.
Oops, something went wrong.
3 changes: 3 additions & 0 deletions
3
...t_vulnerability_detector/test_feeds/archlinux/test_extra_tags_archlinux_feed.md
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,3 @@ | ||
## Code documentation | ||
|
||
::: tests.integration.test_vulnerability_detector.test_feeds.archlinux.test_extra_tags_archlinux_feed |
3 changes: 0 additions & 3 deletions
3
...lnerability_detector/test_feeds/archlinux/test_missing_fields_archlinux_feed.md
This file was deleted.
Oops, something went wrong.
3 changes: 3 additions & 0 deletions
3
...vulnerability_detector/test_feeds/archlinux/test_missing_tags_archlinux_feed.md
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,3 @@ | ||
## Code documentation | ||
|
||
::: tests.integration.test_vulnerability_detector.test_feeds.archlinux.test_missing_tags_archlinux_feed |
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
13 changes: 13 additions & 0 deletions
13
tests/integration/test_logcollector/test_reconnect_time/data/wazuh_reconnect_time.yaml
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,13 @@ | ||
- tags: | ||
- test_reconnect_time | ||
apply_to_modules: | ||
- test_reconnect_time | ||
sections: | ||
- section: localfile | ||
elements: | ||
- location: | ||
value: LOCATION | ||
- log_format: | ||
value: LOG_FORMAT | ||
- reconnect_time: | ||
value: RECONNECT_TIME |
120 changes: 120 additions & 0 deletions
120
tests/integration/test_logcollector/test_reconnect_time/test_reconnect_time.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,120 @@ | ||
# Copyright (C) 2015-2021, Wazuh Inc. | ||
# Created by Wazuh, Inc. <[email protected]>. | ||
# This program is free software; you can redistribute it and/or modify it under the terms of GPLv2 | ||
import os | ||
import pytest | ||
from datetime import timedelta, datetime | ||
import time | ||
import sys | ||
from wazuh_testing.tools.configuration import load_wazuh_configurations | ||
from wazuh_testing import global_parameters, logger | ||
from wazuh_testing.tools.time import TimeMachine | ||
import wazuh_testing.logcollector as logcollector | ||
from wazuh_testing.tools.time import time_to_seconds | ||
import wazuh_testing.tools.services as services | ||
|
||
pytestmark = [pytest.mark.win32, pytest.mark.tier(level=0)] | ||
|
||
local_internal_options = { | ||
'logcollector.remote_commands': 1, | ||
'logcollector.debug': 2, | ||
'monitord.rotate_log': 0 | ||
} | ||
|
||
# Configuration | ||
test_data_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'data') | ||
configurations_path = os.path.join(test_data_path, 'wazuh_reconnect_time.yaml') | ||
|
||
timeout_callback_reconnect_time = 30 | ||
|
||
parameters = [ | ||
{'LOCATION': 'Application', 'LOG_FORMAT': 'eventchannel', 'RECONNECT_TIME': '5s'}, | ||
{'LOCATION': 'Security', 'LOG_FORMAT': 'eventchannel', 'RECONNECT_TIME': '5s'}, | ||
{'LOCATION': 'System', 'LOG_FORMAT': 'eventchannel', 'RECONNECT_TIME': '5s'}, | ||
{'LOCATION': 'Application', 'LOG_FORMAT': 'eventchannel', 'RECONNECT_TIME': '40m'}, | ||
{'LOCATION': 'Security', 'LOG_FORMAT': 'eventchannel', 'RECONNECT_TIME': '40m'}, | ||
{'LOCATION': 'System', 'LOG_FORMAT': 'eventchannel', 'RECONNECT_TIME': '40m'}, | ||
{'LOCATION': 'Application', 'LOG_FORMAT': 'eventchannel', 'RECONNECT_TIME': '20h'}, | ||
{'LOCATION': 'Security', 'LOG_FORMAT': 'eventchannel', 'RECONNECT_TIME': '20h'}, | ||
{'LOCATION': 'System', 'LOG_FORMAT': 'eventchannel', 'RECONNECT_TIME': '20h'}, | ||
|
||
] | ||
metadata = [ | ||
{'location': 'Application', 'log_format': 'eventchannel', 'reconnect_time': '5s'}, | ||
{'location': 'Security', 'log_format': 'eventchannel', 'reconnect_time': '5s'}, | ||
{'location': 'System', 'log_format': 'eventchannel', 'reconnect_time': '5s'}, | ||
{'location': 'Application', 'log_format': 'eventchannel', 'reconnect_time': '40m'}, | ||
{'location': 'Security', 'log_format': 'eventchannel', 'reconnect_time': '40m'}, | ||
{'location': 'System', 'log_format': 'eventchannel', 'reconnect_time': '40m'}, | ||
{'location': 'Application', 'log_format': 'eventchannel', 'reconnect_time': '20h'}, | ||
{'location': 'Security', 'log_format': 'eventchannel', 'reconnect_time': '20h'}, | ||
{'location': 'System', 'log_format': 'eventchannel', 'reconnect_time': '20h'}, | ||
] | ||
configurations = load_wazuh_configurations(configurations_path, __name__, | ||
params=parameters, | ||
metadata=metadata) | ||
configuration_ids = [f"{x['LOCATION'], x['LOG_FORMAT'], x['RECONNECT_TIME']}" for x in parameters] | ||
|
||
|
||
@pytest.fixture(scope="module", params=configurations, ids=configuration_ids) | ||
def get_configuration(request): | ||
"""Get configurations from the module.""" | ||
return request.param | ||
|
||
|
||
@pytest.fixture(scope="module") | ||
def get_local_internal_options(): | ||
"""Get configurations from the module.""" | ||
return local_internal_options | ||
|
||
|
||
def test_reconnect_time(get_local_internal_options, configure_local_internal_options, get_configuration, | ||
configure_environment, restart_logcollector): | ||
"""Check if reconnect_time value works properly | ||
Ensure correspond debug logs are generated when Windows event log service stop. Also, when event log service is | ||
restarted, `wazuh-agent` should reconnect to it using reconnect_time value. | ||
""" | ||
|
||
config = get_configuration['metadata'] | ||
|
||
if time_to_seconds(config['reconnect_time']) >= timeout_callback_reconnect_time: | ||
pytest.xfail("Expected fail: https://github.com/wazuh/wazuh/issues/8580") | ||
|
||
log_callback = logcollector.callback_eventchannel_analyzing(config['location']) | ||
wazuh_log_monitor.start(timeout=global_parameters.default_timeout, callback=log_callback, | ||
error_message=logcollector.GENERIC_CALLBACK_ERROR_ANALYZING_EVENTCHANNEL) | ||
|
||
services.control_event_log_service('stop') | ||
|
||
log_callback = logcollector.callback_event_log_service_down(config['location']) | ||
wazuh_log_monitor.start(timeout=30, callback=log_callback, | ||
error_message=logcollector.GENERIC_CALLBACK_ERROR_ANALYZING_EVENTCHANNEL) | ||
|
||
log_callback = logcollector.callback_trying_to_reconnect(config['location'], | ||
time_to_seconds(config['reconnect_time'])) | ||
wazuh_log_monitor.start(timeout=30, callback=log_callback, | ||
error_message=logcollector.GENERIC_CALLBACK_ERROR_ANALYZING_EVENTCHANNEL) | ||
|
||
services.control_event_log_service('start') | ||
|
||
time.sleep(1) | ||
|
||
if time_to_seconds(config['reconnect_time']) >= timeout_callback_reconnect_time: | ||
before = str(datetime.now()) | ||
seconds_to_travel = time_to_seconds(config['reconnect_time']) / 2 | ||
TimeMachine.travel_to_future(timedelta(seconds=seconds_to_travel)) | ||
logger.debug(f"Changing the system clock from {before} to {datetime.now()}") | ||
|
||
log_callback = logcollector.callback_reconnect_eventchannel(config['location']) | ||
|
||
before = str(datetime.now()) | ||
|
||
if time_to_seconds(config['reconnect_time']) >= timeout_callback_reconnect_time: | ||
TimeMachine.travel_to_future(timedelta(seconds=(seconds_to_travel))) | ||
logger.debug(f"Changing the system clock from {before} to {datetime.now()}") | ||
|
||
wazuh_log_monitor.start(timeout=30, callback=log_callback, | ||
error_message=logcollector.GENERIC_CALLBACK_ERROR_COMMAND_MONITORING) | ||
|
||
TimeMachine.time_rollback() |