From ac50fa50c88193ae050d214b9a345eb3f609509d Mon Sep 17 00:00:00 2001 From: Guillaume Boutry Date: Thu, 26 Oct 2023 10:57:43 +0200 Subject: [PATCH] Implement openstack exporter test --- .../openstack_exporter/__init__.py | 15 ++++++ .../charm_tests/openstack_exporter/tests.py | 49 +++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 zaza/openstack/charm_tests/openstack_exporter/__init__.py create mode 100644 zaza/openstack/charm_tests/openstack_exporter/tests.py diff --git a/zaza/openstack/charm_tests/openstack_exporter/__init__.py b/zaza/openstack/charm_tests/openstack_exporter/__init__.py new file mode 100644 index 0000000..d02473d --- /dev/null +++ b/zaza/openstack/charm_tests/openstack_exporter/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2020 Canonical Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Collection of code for setting up and testing openstack exporter.""" diff --git a/zaza/openstack/charm_tests/openstack_exporter/tests.py b/zaza/openstack/charm_tests/openstack_exporter/tests.py new file mode 100644 index 0000000..70740df --- /dev/null +++ b/zaza/openstack/charm_tests/openstack_exporter/tests.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 + +# Copyright 2020 Canonical Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Encapsulate Openstack Exporter testing.""" + +import requests +import zaza.charm_lifecycle.utils as lifecycle_utils +import zaza.model +import zaza.openstack.charm_tests.test_utils as test_utils + + +class OpenstackExporterTest(test_utils.OpenStackBaseTest): + """Class for Openstack Exporter tests.""" + + @classmethod + def setUpClass(cls): + """Run class setup for running hacluster tests.""" + cls.model_name = zaza.model.get_juju_model() + cls.test_config = lifecycle_utils.get_charm_config(fatal=False) + + @staticmethod + def get_internal_ips(application, model_name): + """Return the internal ip addresses an application.""" + status = zaza.model.get_status(model_name=model_name) + units = status["applications"][application]["units"] + return [v.address for v in units.values()] + + def get_openstack_exporter_ips(self): + """Return the internal ip addresses of the openstack exporter units.""" + return self.get_internal_ips("openstack-exporter", self.model_name) + + def test_openstack_exporter(self): + """Test gathering metrics from openstack exporter.""" + for ip in self.get_openstack_exporter_ips(): + response = requests.get(f"http://{ip}:9180/metrics") + response.raise_for_status()