Charmed-Kubernetes/nrpe/mod/charmhelpers/tests/contrib/benchmark/test_benchmark.py

125 lines
4.5 KiB
Python

from functools import partial
from os.path import join
from tempfile import mkdtemp
from shutil import rmtree
import mock
from testtools import TestCase
# import unittest
from charmhelpers.contrib.benchmark import Benchmark, action_set # noqa
from tests.helpers import patch_open, FakeRelation
TO_PATCH = [
'in_relation_hook',
'relation_ids',
'relation_set',
'relation_get',
]
FAKE_RELATION = {
'benchmark:0': {
'benchmark/0': {
'hostname': '127.0.0.1',
'port': '1111',
'graphite_port': '2222',
'graphite_endpoint': 'http://localhost:3333',
'api_port': '4444'
}
}
}
class TestBenchmark(TestCase):
def setUp(self):
super(TestBenchmark, self).setUp()
for m in TO_PATCH:
setattr(self, m, self._patch(m))
self.fake_relation = FakeRelation(FAKE_RELATION)
# self.hook_name.return_value = 'benchmark-relation-changed'
self.relation_get.side_effect = partial(
self.fake_relation.get, rid="benchmark:0", unit="benchmark/0")
self.relation_ids.side_effect = self.fake_relation.relation_ids
def _patch(self, method):
_m = mock.patch('charmhelpers.contrib.benchmark.' + method)
m = _m.start()
self.addCleanup(_m.stop)
return m
@mock.patch('os.path.exists')
@mock.patch('subprocess.check_output')
def test_benchmark_start(self, check_output, exists):
exists.return_value = True
check_output.return_value = "data"
with patch_open() as (_open, _file):
self.assertIsNone(Benchmark.start())
# _open.assert_called_with('/etc/benchmark.conf', 'w')
COLLECT_PROFILE_DATA = '/usr/local/bin/collect-profile-data'
exists.assert_any_call(COLLECT_PROFILE_DATA)
check_output.assert_any_call([COLLECT_PROFILE_DATA])
def test_benchmark_finish(self):
with patch_open() as (_open, _file):
self.assertIsNone(Benchmark.finish())
# _open.assert_called_with('/etc/benchmark.conf', 'w')
@mock.patch('charmhelpers.contrib.benchmark.action_set')
def test_benchmark_set_composite_score(self, action_set):
self.assertTrue(Benchmark.set_composite_score(15.7, 'hits/sec', 'desc'))
action_set.assert_called_once_with('meta.composite', {'value': 15.7, 'units': 'hits/sec', 'direction': 'desc'})
@mock.patch('charmhelpers.contrib.benchmark.find_executable')
@mock.patch('charmhelpers.contrib.benchmark.subprocess.check_call')
def test_benchmark_action_set(self, check_call, find_executable):
find_executable.return_value = "/usr/bin/action-set"
self.assertTrue(action_set('foo', 'bar'))
find_executable.assert_called_once_with('action-set')
check_call.assert_called_once_with(['action-set', 'foo=bar'])
@mock.patch('charmhelpers.contrib.benchmark.find_executable')
@mock.patch('charmhelpers.contrib.benchmark.subprocess.check_call')
def test_benchmark_action_set_dict(self, check_call, find_executable):
find_executable.return_value = "/usr/bin/action-set"
self.assertTrue(action_set('baz', {'foo': 1, 'bar': 2}))
find_executable.assert_called_with('action-set')
check_call.assert_any_call(['action-set', 'baz.foo=1'])
check_call.assert_any_call(['action-set', 'baz.bar=2'])
@mock.patch('charmhelpers.contrib.benchmark.relation_ids')
@mock.patch('charmhelpers.contrib.benchmark.in_relation_hook')
def test_benchmark_init(self, in_relation_hook, relation_ids):
in_relation_hook.return_value = True
relation_ids.return_value = ['benchmark:0']
actions = ['asdf', 'foobar']
tempdir = mkdtemp(prefix=self.__class__.__name__)
self.addCleanup(rmtree, tempdir)
conf_path = join(tempdir, "benchmark.conf")
with mock.patch.object(Benchmark, "BENCHMARK_CONF", conf_path):
b = Benchmark(actions)
self.assertIsInstance(b, Benchmark)
self.assertTrue(self.relation_get.called)
self.assertTrue(self.relation_set.called)
relation_ids.assert_called_once_with('benchmark')
self.relation_set.assert_called_once_with(
relation_id='benchmark:0',
relation_settings={'benchmarks': ",".join(actions)}
)
conf_contents = open(conf_path).readlines()
for key, val in iter(FAKE_RELATION['benchmark:0']['benchmark/0'].items()):
self.assertIn("%s=%s\n" % (key, val), conf_contents)