199 lines
6.6 KiB
Python
199 lines
6.6 KiB
Python
import os
|
|
import shutil
|
|
import metricbeat
|
|
|
|
|
|
class TestCommands(metricbeat.BaseTest):
|
|
"""
|
|
Test metricbeat subcommands
|
|
"""
|
|
|
|
def setUp(self):
|
|
super(TestCommands, self).setUp()
|
|
|
|
# Enable modules reload with default paths
|
|
self.render_config_template(reload=True)
|
|
os.mkdir(self.working_dir + "/modules.d")
|
|
|
|
def test_modules_list(self):
|
|
"""
|
|
Test modules list command
|
|
"""
|
|
self.touch(self.working_dir + "/modules.d/enabled.yml")
|
|
self.touch(self.working_dir + "/modules.d/disabled.yml.disabled")
|
|
|
|
exit_code = self.run_beat(logging_args=None,
|
|
extra_args=["modules", "list"])
|
|
|
|
assert exit_code == 0
|
|
assert "Enabled:\nenabled" in self.get_log()
|
|
assert "Disabled:\ndisabled" in self.get_log()
|
|
|
|
# Add one more disabled module
|
|
self.touch(self.working_dir + "/modules.d/disabled2.yml.disabled")
|
|
exit_code = self.run_beat(logging_args=None,
|
|
extra_args=["modules", "list"])
|
|
|
|
assert exit_code == 0
|
|
assert "Enabled:\nenabled" in self.get_log()
|
|
assert "Disabled:\ndisabled\ndisabled2" in self.get_log()
|
|
|
|
def test_modules_enable(self):
|
|
"""
|
|
Test modules enable command
|
|
"""
|
|
self.touch(self.working_dir + "/modules.d/enabled.yml")
|
|
self.touch(self.working_dir + "/modules.d/disabled1.yml.disabled")
|
|
self.touch(self.working_dir + "/modules.d/disabled2.yml.disabled")
|
|
self.touch(self.working_dir + "/modules.d/disabled3.yml.disabled")
|
|
|
|
# Enable one module
|
|
exit_code = self.run_beat(
|
|
extra_args=["modules", "enable", "disabled1"])
|
|
assert exit_code == 0
|
|
|
|
assert self.log_contains("Enabled disabled1")
|
|
assert os.path.exists(self.working_dir + "/modules.d/disabled1.yml")
|
|
assert not os.path.exists(
|
|
self.working_dir + "/modules.d/disabled1.yml.disabled")
|
|
assert os.path.exists(
|
|
self.working_dir + "/modules.d/disabled2.yml.disabled")
|
|
assert os.path.exists(
|
|
self.working_dir + "/modules.d/disabled3.yml.disabled")
|
|
|
|
# Enable several modules at once:
|
|
exit_code = self.run_beat(
|
|
extra_args=["modules", "enable", "disabled2", "disabled3"])
|
|
assert exit_code == 0
|
|
|
|
assert self.log_contains("Enabled disabled2")
|
|
assert self.log_contains("Enabled disabled3")
|
|
assert os.path.exists(self.working_dir + "/modules.d/disabled2.yml")
|
|
assert os.path.exists(self.working_dir + "/modules.d/disabled3.yml")
|
|
assert not os.path.exists(
|
|
self.working_dir + "/modules.d/disabled2.yml.disabled")
|
|
assert not os.path.exists(
|
|
self.working_dir + "/modules.d/disabled3.yml.disabled")
|
|
|
|
def test_modules_disable(self):
|
|
"""
|
|
Test modules disable command
|
|
"""
|
|
self.touch(self.working_dir + "/modules.d/enabled1.yml")
|
|
self.touch(self.working_dir + "/modules.d/enabled2.yml")
|
|
self.touch(self.working_dir + "/modules.d/enabled3.yml")
|
|
self.touch(self.working_dir + "/modules.d/disabled2.yml.disabled")
|
|
|
|
# Disable one module
|
|
exit_code = self.run_beat(
|
|
extra_args=["modules", "disable", "enabled1"])
|
|
assert exit_code == 0
|
|
|
|
assert self.log_contains("Disabled enabled1")
|
|
assert os.path.exists(
|
|
self.working_dir + "/modules.d/enabled1.yml.disabled")
|
|
assert not os.path.exists(self.working_dir + "/modules.d/enabled1.yml")
|
|
assert os.path.exists(self.working_dir + "/modules.d/enabled2.yml")
|
|
assert os.path.exists(self.working_dir + "/modules.d/enabled3.yml")
|
|
|
|
# Disable several modules at once:
|
|
exit_code = self.run_beat(
|
|
extra_args=["modules", "disable", "enabled2", "enabled3"])
|
|
assert exit_code == 0
|
|
|
|
assert self.log_contains("Disabled enabled2")
|
|
assert self.log_contains("Disabled enabled3")
|
|
assert os.path.exists(
|
|
self.working_dir + "/modules.d/enabled2.yml.disabled")
|
|
assert os.path.exists(
|
|
self.working_dir + "/modules.d/enabled3.yml.disabled")
|
|
assert not os.path.exists(self.working_dir + "/modules.d/enabled2.yml")
|
|
assert not os.path.exists(self.working_dir + "/modules.d/enabled3.yml")
|
|
|
|
def test_modules_test(self):
|
|
"""
|
|
Test test modules command
|
|
"""
|
|
self.write_system_yml()
|
|
|
|
exit_code = self.run_beat(
|
|
logging_args=None,
|
|
extra_args=["test", "modules"])
|
|
|
|
assert exit_code == 0
|
|
assert self.log_contains("cpu...OK")
|
|
assert self.log_contains("memory...OK")
|
|
|
|
def test_modules_test_error(self):
|
|
"""
|
|
Test test modules command with an error result
|
|
"""
|
|
self.write_system_yml()
|
|
self.write_nginx_yml()
|
|
|
|
exit_code = self.run_beat(
|
|
logging_args=None,
|
|
extra_args=["test", "modules"])
|
|
|
|
assert exit_code == 0
|
|
try:
|
|
assert any((
|
|
self.log_contains("ERROR error making http request"),
|
|
self.log_contains("ERROR timeout waiting for an event"),
|
|
))
|
|
except:
|
|
# Print log to help debugging this if error message changes
|
|
print self.get_log()
|
|
raise
|
|
assert self.log_contains("cpu...OK")
|
|
assert self.log_contains("memory...OK")
|
|
|
|
def test_modules_test_filter_no_result(self):
|
|
"""
|
|
Test test modules command filter by module (no result)
|
|
"""
|
|
self.write_system_yml()
|
|
|
|
exit_code = self.run_beat(
|
|
logging_args=None,
|
|
extra_args=["test", "modules", "apache"])
|
|
|
|
assert exit_code == 0
|
|
assert not self.log_contains("OK")
|
|
|
|
def test_modules_test_filter(self):
|
|
"""
|
|
Test test modules command filter by metricset
|
|
"""
|
|
self.write_system_yml()
|
|
self.write_nginx_yml()
|
|
|
|
exit_code = self.run_beat(
|
|
logging_args=None,
|
|
extra_args=["test", "modules", "system", "cpu"])
|
|
|
|
assert exit_code == 0
|
|
assert self.log_contains("cpu...OK")
|
|
assert not self.log_contains("memory...OK")
|
|
|
|
def touch(self, path):
|
|
open(path, 'a').close()
|
|
|
|
def write_system_yml(self):
|
|
with open(self.working_dir + "/modules.d/system.yml", "wb") as f:
|
|
f.write("""
|
|
- module: system
|
|
period: 10s
|
|
metricsets:
|
|
- cpu
|
|
- memory""")
|
|
|
|
def write_nginx_yml(self):
|
|
with open(self.working_dir + "/modules.d/nginx.yml", "wb") as f:
|
|
f.write("""
|
|
- module: nginx
|
|
period: 10s
|
|
hosts: ["errorhost:80"]
|
|
metricsets:
|
|
- stubstatus""")
|