|
1 | 1 | import json |
| 2 | +import os |
| 3 | +import pytest |
| 4 | +import requests |
| 5 | +import semver |
| 6 | +import shutil |
2 | 7 | import unittest |
3 | 8 | import yaml |
4 | 9 |
|
| 10 | +from elasticsearch import Elasticsearch |
5 | 11 | from beat.beat import INTEGRATION_TESTS |
6 | 12 |
|
7 | 13 | # Fail if the exported index pattern is larger than 10MiB |
@@ -87,3 +93,43 @@ def test_export_config(self): |
87 | 93 | output = self.run_export_cmd("config") |
88 | 94 | yml = yaml.load(output, Loader=yaml.FullLoader) |
89 | 95 | assert isinstance(yml, dict) |
| 96 | + |
| 97 | +class TestDashboardMixin: |
| 98 | + |
| 99 | + @unittest.skipUnless(INTEGRATION_TESTS, "integration test") |
| 100 | + @pytest.mark.timeout(5*60, func_only=True) |
| 101 | + def test_dashboards(self): |
| 102 | + """ |
| 103 | + Test that the dashboards can be loaded with `setup --dashboards` |
| 104 | + """ |
| 105 | + if not self.is_saved_object_api_available(): |
| 106 | + raise unittest.SkipTest( |
| 107 | + "Kibana Saved Objects API is used since 7.15") |
| 108 | + |
| 109 | + shutil.copytree(self.kibana_dir(), os.path.join(self.working_dir, "kibana")) |
| 110 | + |
| 111 | + es = Elasticsearch([self.get_elasticsearch_url()]) |
| 112 | + self.render_config_template( |
| 113 | + elasticsearch={"host": self.get_elasticsearch_url()}, |
| 114 | + kibana={"host": self.get_kibana_url()}, |
| 115 | + ) |
| 116 | + exit_code = self.run_beat(extra_args=["setup", "--dashboards"]) |
| 117 | + |
| 118 | + assert exit_code == 0, 'Error output: ' + self.get_log() |
| 119 | + assert self.log_contains("Kibana dashboards successfully loaded.") |
| 120 | + |
| 121 | + def is_saved_object_api_available(self): |
| 122 | + kibana_semver = semver.VersionInfo.parse(self.get_version()) |
| 123 | + return semver.VersionInfo.parse("7.14.0") <= kibana_semver |
| 124 | + |
| 125 | + def get_version(self): |
| 126 | + url = self.get_kibana_url() + "/api/status" |
| 127 | + |
| 128 | + r = requests.get(url) |
| 129 | + body = r.json() |
| 130 | + version = body["version"]["number"] |
| 131 | + |
| 132 | + return version |
| 133 | + |
| 134 | + def kibana_dir(self): |
| 135 | + return os.path.join(self.beat_path, "build", "kibana") |
0 commit comments