youtubebeat/vendor/github.com/elastic/beats/heartbeat/tests/system/heartbeat.py

77 lines
2.1 KiB
Python

import os
import sys
import BaseHTTPServer
import threading
import nose.tools
sys.path.append(os.path.join(os.path.dirname(
__file__), '../../../libbeat/tests/system'))
from beat.beat import TestCase
class BaseTest(TestCase):
@classmethod
def setUpClass(self):
self.beat_name = "heartbeat"
self.beat_path = os.path.abspath(
os.path.join(os.path.dirname(__file__), "../../"))
super(BaseTest, self).setUpClass()
def start_server(self, content, status_code):
class HTTPHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(status_code)
self.send_header('Content-Type', 'application/json')
self.end_headers()
self.wfile.write(content)
server = BaseHTTPServer.HTTPServer(('localhost', 0), HTTPHandler)
thread = threading.Thread(target=server.serve_forever)
thread.start()
return server
@staticmethod
def http_cfg(url):
return """
- type: http
schedule: "@every 1s"
timeout: 3s
urls: ["{url}"]
"""[1:-1].format(url=url)
@staticmethod
def tcp_cfg(*hosts):
host_str = ", ".join('"' + host + '"' for host in hosts)
return """
- type: tcp
schedule: "@every 1s"
timeout: 3s
hosts: [{host_str}]
"""[1:-1].format(host_str=host_str)
def last_output_line(self):
return self.read_output()[-1]
def write_dyn_config(self, filename, cfg):
with open(self.monitors_dir() + filename, 'w') as f:
f.write(cfg)
def monitors_dir(self):
return self.working_dir + "/monitors.d/"
def assert_last_status(self, status):
nose.tools.eq_(self.last_output_line()["monitor.status"], status)
def setup_dynamic(self, extra_beat_args=[]):
os.mkdir(self.monitors_dir())
self.render_config_template(
reload=True,
reload_path=self.monitors_dir() + "*.yml",
flush_min_events=1,
)
self.proc = self.start_beat(extra_args=extra_beat_args)