# Copyright 2015 - Alcatel-Lucent # # 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. import logging import os from oslo_config import cfg from oslo_config import fixture as config_fixture from oslo_utils import timeutils # noinspection PyPackageRequirements from oslotest import base from testtools import matchers from testtools.matchers import HasLength from vitrage.common import config CONF = cfg.CONF IsEmpty = lambda: HasLength(0) class BaseTest(base.BaseTestCase): """Test case base class for all unit tests.""" def conf_reregister_opts(self, opts, group=None): self.conf.reset() if group in self.conf: for opt in opts: self.conf.unregister_opt(opt, group=group) self.conf.register_opts(opts, group=group) def unregister_opts(): self.conf.reset() for opt in opts: self.conf.unregister_opt(opt, group=group) self.addCleanup(unregister_opts) def setUp(self): super(BaseTest, self).setUp() self.cfg_fixture = self.useFixture( config_fixture.Config(CONF)) config.parse_config([]) logging.disable(logging.CRITICAL) self.conf = self.cfg_fixture.conf def config(self, **kw): self.cfg_fixture.config(**kw) def assert_timestamp_equal(self, first, second, msg=None): """Checks that two timestamps are equals. This relies on assertAlmostEqual to avoid rounding problem, and only checks up the first microsecond values. """ return self.assertAlmostEqual(timeutils.delta_seconds(first, second), 0.0, places=5, msg=msg) def assert_is_empty(self, obj): try: if len(obj) != 0: self.fail("%s is not empty" % type(obj)) except (TypeError, AttributeError): self.fail("%s doesn't have length" % type(obj)) def assert_is_not_empty(self, obj): try: if len(obj) == 0: self.fail("%s is empty" % type(obj)) except (TypeError, AttributeError): self.fail("%s doesn't have length" % type(obj)) def assert_graph_equal(self, g1, g2): """Checks that two graphs are equals. This relies on assertDictEqual when comparing the nodes and the edges of each graph. """ g1_nodes = g1._g.nodes g1_edges = g1._g.adj g2_nodes = g2._g.nodes g2_edges = g2._g.adj self.assertEqual(g1.num_vertices(), g2.num_vertices(), "Two graphs have different amount of nodes") self.assertEqual(g1.num_edges(), g2.num_edges(), "Two graphs have different amount of edges") for n_id in g1_nodes: self.assertDictEqual(g1_nodes.get(n_id), g2_nodes.get(n_id), "Nodes of each graph are not equal") for e_source_id in g1_edges: self.assertDictEqual(dict(g1_edges.get(e_source_id)), dict(g2_edges.get(e_source_id)), "Edges of each graph are not equal") def assert_starts_with(self, expected_prefix, observed_str, msg=None): self.assertThat(observed_str, matchers.StartsWith(expected_prefix), msg) @staticmethod def path_get(project_file=None): root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', ) ) if project_file: return os.path.join(root, project_file) else: return root