youtubebeat/vendor/github.com/elastic/beats/metricbeat/tests/system/test_http.py

80 lines
2.3 KiB
Python

import os
import metricbeat
import unittest
from nose.plugins.attrib import attr
import requests
import time
HTTP_FIELDS = metricbeat.COMMON_FIELDS + ["http"]
class Test(metricbeat.BaseTest):
COMPOSE_SERVICES = ['http']
@unittest.skipUnless(metricbeat.INTEGRATION_TESTS, "integration test")
def test_json(self):
"""
http json metricset test
"""
self.render_config_template(modules=[{
"name": "http",
"metricsets": ["json"],
"hosts": [self.get_host()],
"period": "5s",
"namespace": "test",
}])
proc = self.start_beat()
self.wait_until(lambda: self.output_lines() > 0)
proc.check_kill_and_wait()
self.assert_no_logged_warnings()
output = self.read_output_json()
self.assertEqual(len(output), 1)
evt = output[0]
assert evt["http"]["test"]["hello"] == "world"
# Delete dynamic namespace part for fields comparison
del evt["http"]["test"]
self.assertItemsEqual(self.de_dot(HTTP_FIELDS), evt.keys(), evt)
self.assert_fields_are_documented(evt)
def test_server(self):
"""
http server metricset test
"""
port = 8082
host = "localhost"
self.render_config_template(modules=[{
"name": "http",
"metricsets": ["server"],
"port": port,
"host": host,
}])
proc = self.start_beat()
self.wait_until(lambda: self.log_contains("Starting http server on "))
requests.post("http://" + host + ":" + str(port),
json={'hello': 'world'}, headers={'Content-Type': 'application/json'})
self.wait_until(lambda: self.output_lines() > 0)
proc.check_kill_and_wait()
self.assert_no_logged_warnings()
output = self.read_output_json()
self.assertEqual(len(output), 1)
evt = output[0]
assert evt["http"]["server"]["hello"] == "world"
# Delete dynamic namespace part for fields comparison
del evt["http"]["server"]
self.assertItemsEqual(self.de_dot(HTTP_FIELDS), evt.keys(), evt)
self.assert_fields_are_documented(evt)
def get_host(self):
return "http://" + os.getenv('HTTP_HOST', 'localhost') + ':' + os.getenv('HTTP_PORT', '8080')