youtubebeat/vendor/github.com/elastic/beats/libbeat/tests/system/test_cmd.py

232 lines
8.2 KiB
Python

from base import BaseTest
from nose.plugins.attrib import attr
from elasticsearch import Elasticsearch, TransportError
import logging
import os
import shutil
import unittest
INTEGRATION_TESTS = os.environ.get('INTEGRATION_TESTS', False)
class TestCommands(BaseTest):
"""
Test beat subcommands
"""
def setUp(self):
super(BaseTest, self).setUp()
self.elasticsearch_url = self.get_elasticsearch_url()
print("Using elasticsearch: {}".format(self.elasticsearch_url))
self.es = Elasticsearch([self.elasticsearch_url])
logging.getLogger("urllib3").setLevel(logging.WARNING)
logging.getLogger("elasticsearch").setLevel(logging.ERROR)
def test_version(self):
"""
Test version command
"""
exit_code = self.run_beat(
extra_args=["version"], logging_args=["-v", "-d", "*"])
assert exit_code == 0
assert self.log_contains("mockbeat") is True
assert self.log_contains("version") is True
assert self.log_contains("9.9.9") is True
@unittest.skipUnless(INTEGRATION_TESTS, "integration test")
@attr('integration')
def test_setup_template(self):
"""
Test setup -template command
"""
# Delete any existing template
try:
self.es.indices.delete_template('mockbeat-*')
except:
pass
assert len(self.es.cat.templates(name='mockbeat-*', h='name')) == 0
shutil.copy(self.beat_path + "/_meta/config.yml",
os.path.join(self.working_dir, "libbeat.yml"))
shutil.copy(self.beat_path + "/fields.yml",
os.path.join(self.working_dir, "fields.yml"))
exit_code = self.run_beat(
logging_args=["-v", "-d", "*"],
extra_args=["setup",
"-template",
"-path.config", self.working_dir,
"-E", "output.elasticsearch.hosts=['" + self.get_host() + "']"],
config="libbeat.yml")
assert exit_code == 0
assert len(self.es.cat.templates(name='mockbeat-*', h='name')) > 0
@unittest.skipUnless(INTEGRATION_TESTS, "integration test")
@attr('integration')
def test_setup_flag(self):
"""
Test --setup flag on run command
"""
# Delete any existing template
try:
self.es.indices.delete_template('mockbeat-*')
except:
pass
assert len(self.es.cat.templates(name='mockbeat-*', h='name')) == 0
shutil.copy(self.beat_path + "/_meta/config.yml",
os.path.join(self.working_dir, "libbeat.yml"))
shutil.copy(self.beat_path + "/fields.yml",
os.path.join(self.working_dir, "fields.yml"))
proc = self.start_beat(
extra_args=["--setup",
"--path.config", self.working_dir,
"-E", "setup.dashboards.file=" +
os.path.join(self.beat_path, "tests", "files", "testbeat-dashboards.zip"),
"-E", "setup.dashboards.beat=testbeat",
"-E", "setup.kibana.protocol=http",
"-E", "setup.kibana.host=" + self.get_kibana_host(),
"-E", "setup.kibana.port=" + self.get_kibana_port(),
"-E", "output.elasticsearch.hosts=['" + self.get_host() + "']"],
config="libbeat.yml")
self.wait_until(lambda: self.es.cat.templates(name='mockbeat-*', h='name') > 0)
self.wait_until(lambda: self.log_contains("Kibana dashboards successfully loaded"))
proc.check_kill_and_wait()
@unittest.skipUnless(INTEGRATION_TESTS, "integration test")
@attr('integration')
def test_test_config(self):
"""
Test test config command
"""
self.render_config_template("mockbeat",
os.path.join(self.working_dir, "libbeat.yml"))
exit_code = self.run_beat(
logging_args=[],
extra_args=["test", "config"],
config="libbeat.yml")
assert exit_code == 0
assert self.log_contains("Config OK")
def test_test_bad_config(self):
"""
Test test config command with bad config
"""
exit_code = self.run_beat(
logging_args=[],
extra_args=["test", "config"],
config="libbeat-missing.yml")
assert exit_code == 1
assert self.log_contains("Config OK") is False
def test_export_config(self):
"""
Test export config works
"""
self.render_config_template("mockbeat",
os.path.join(self.working_dir,
"libbeat.yml"),
metrics_period=1234)
exit_code = self.run_beat(
logging_args=[],
extra_args=["export", "config"],
config="libbeat.yml")
assert exit_code == 0
assert self.log_contains("filename: mockbeat")
assert self.log_contains("period: 1234")
def test_export_config_environment_variable(self):
"""
Test export config works but doesn"t expose environment variable.
"""
self.render_config_template("mockbeat",
os.path.join(self.working_dir,
"libbeat.yml"),
metrics_period="${METRIC_PERIOD}")
exit_code = self.run_beat(
logging_args=[],
extra_args=["export", "config"],
config="libbeat.yml", env={'METRIC_PERIOD': '1234'})
assert exit_code == 0
assert self.log_contains("filename: mockbeat")
assert self.log_contains("period: ${METRIC_PERIOD}")
def test_export_template(self):
"""
Test export template works
"""
self.render_config_template("mockbeat",
os.path.join(self.working_dir,
"mockbeat.yml"),
fields=os.path.join(self.working_dir, "fields.yml"))
shutil.copy(self.beat_path + "/fields.yml",
os.path.join(self.working_dir, "fields.yml"))
exit_code = self.run_beat(
logging_args=[],
extra_args=["export", "template"],
config="mockbeat.yml")
assert exit_code == 0
assert self.log_contains('"mockbeat-9.9.9-*"')
assert self.log_contains('"codec": "best_compression"')
@unittest.skipUnless(INTEGRATION_TESTS, "integration test")
@attr('integration')
def test_test_output(self):
"""
Test test output works
"""
self.render_config_template("mockbeat",
os.path.join(self.working_dir,
"mockbeat.yml"),
elasticsearch={"hosts": '["{}"]'.format(self.get_host())})
exit_code = self.run_beat(
extra_args=["test", "output"],
config="mockbeat.yml")
assert exit_code == 0
assert self.log_contains('parse url... OK')
assert self.log_contains('TLS... WARN secure connection disabled')
assert self.log_contains('talk to server... OK')
def test_test_wrong_output(self):
"""
Test test wrong output works
"""
self.render_config_template("mockbeat",
os.path.join(self.working_dir,
"mockbeat.yml"),
elasticsearch={"hosts": '["badhost:9200"]'})
exit_code = self.run_beat(
extra_args=["test", "output"],
config="mockbeat.yml")
assert exit_code == 1
assert self.log_contains('parse url... OK')
assert self.log_contains('dns lookup... ERROR')
def get_host(self):
return os.getenv('ES_HOST', 'localhost') + ':' + os.getenv('ES_PORT', '9200')
def get_kibana_host(self):
return os.getenv('KIBANA_HOST', 'localhost')
def get_kibana_port(self):
return os.getenv('KIBANA_PORT', '5601')