2
# Copyright 2014 NEC Corporation. All rights reserved.
4
# Licensed under the Apache License, Version 2.0 (the "License"); you may
5
# not use this file except in compliance with the License. You may obtain
6
# a copy of the License at
8
# http://www.apache.org/licenses/LICENSE-2.0
10
# Unless required by applicable law or agreed to in writing, software
11
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
# License for the specific language governing permissions and limitations
16
from stevedore import extension
17
from stevedore.tests import manager as test_manager
19
from ceilometer.network import statistics
20
from ceilometer.network.statistics import driver
21
from ceilometer.openstack.common import test
22
from ceilometer.openstack.common import timeutils
23
from ceilometer import sample
26
class TestBase(test.BaseTestCase):
28
def test_subclass_ok(self):
30
class OkSubclass(statistics._Base):
33
meter_type = sample.TYPE_GAUGE
38
def test_subclass_ng(self):
40
class NgSubclass1(statistics._Base):
41
'''meter_name is lost.'''
43
meter_type = sample.TYPE_GAUGE
46
class NgSubclass2(statistics._Base):
47
'''meter_type is lost.'''
52
class NgSubclass3(statistics._Base):
53
'''meter_unit is lost.'''
56
meter_type = sample.TYPE_GAUGE
58
self.assertRaises(TypeError, NgSubclass1)
59
self.assertRaises(TypeError, NgSubclass2)
60
self.assertRaises(TypeError, NgSubclass3)
63
class TestBaseGetSamples(test.BaseTestCase):
66
super(TestBaseGetSamples, self).setUp()
68
class FakePollster(statistics._Base):
70
meter_type = sample.TYPE_CUMULATIVE
73
self.pollster = FakePollster()
75
def _setup_ext_mgr(self, *drivers):
77
extension.Extension(str(d), None, None, d())
79
ext_mgr = test_manager.TestExtensionManager(
81
self.pollster.extension_manager = ext_mgr
83
def _make_fake_driver(self, *return_values):
84
class FakeDriver(driver.Driver):
89
def get_sample_data(self, meter_name, resource, cache):
90
if self.index >= len(return_values):
92
retval = return_values[self.index]
97
def _make_timestamps(self, count):
98
return [timeutils.isotime() for i in range(count)]
100
def _get_samples(self, *resources):
102
return [v for v in self.pollster.get_samples(self, {}, resources)]
104
def _assert_sample(self, s, volume, resource_id, resource_metadata,
106
self.assertEqual(s.name, 'foo')
107
self.assertEqual(s.type, sample.TYPE_CUMULATIVE)
108
self.assertEqual(s.unit, 'bar')
109
self.assertEqual(s.volume, volume)
110
self.assertIsNone(s.user_id)
111
self.assertIsNone(s.project_id)
112
self.assertEqual(s.resource_id, resource_id)
113
self.assertEqual(s.timestamp, timestamp)
114
self.assertEqual(s.resource_metadata, resource_metadata)
116
def test_get_samples_one_driver_one_resource(self):
117
times = self._make_timestamps(2)
118
fake_driver = self._make_fake_driver((1, 'a', {'spam': 'egg'},
120
(2, 'b', None, times[1]))
122
self._setup_ext_mgr(fake_driver)
124
samples = self._get_samples('http://foo')
126
self.assertEqual(len(samples), 1)
127
self._assert_sample(samples[0], 1, 'a', {'spam': 'egg'}, times[0])
129
def test_get_samples_one_driver_two_resource(self):
130
times = self._make_timestamps(3)
131
fake_driver = self._make_fake_driver((1, 'a', {'spam': 'egg'},
133
(2, 'b', None, times[1]),
134
(3, 'c', None, times[2]))
136
self._setup_ext_mgr(fake_driver)
138
samples = self._get_samples('http://foo', 'http://bar')
140
self.assertEqual(len(samples), 2)
141
self._assert_sample(samples[0], 1, 'a', {'spam': 'egg'}, times[2])
142
self._assert_sample(samples[1], 2, 'b', None, times[1])
144
def test_get_samples_two_driver_one_resource(self):
145
times = self._make_timestamps(4)
146
fake_driver1 = self._make_fake_driver((1, 'a', {'spam': 'egg'},
148
(2, 'b', None), times[1])
150
fake_driver2 = self._make_fake_driver((11, 'A', None, times[2]),
151
(12, 'B', None, times[3]))
153
self._setup_ext_mgr(fake_driver1, fake_driver2)
155
samples = self._get_samples('http://foo')
157
self.assertEqual(len(samples), 2)
158
self._assert_sample(samples[0], 1, 'a', {'spam': 'egg'}, times[0])
159
self._assert_sample(samples[1], 11, 'A', None, times[2])
161
def test_get_samples_multi_samples(self):
162
times = self._make_timestamps(2)
163
fake_driver = self._make_fake_driver([(1, 'a', {'spam': 'egg'},
165
(2, 'b', None, times[1])])
167
self._setup_ext_mgr(fake_driver)
169
samples = self._get_samples('http://foo')
171
self.assertEqual(len(samples), 2)
172
self._assert_sample(samples[0], 1, 'a', {'spam': 'egg'}, times[0])
173
self._assert_sample(samples[1], 2, 'b', None, times[1])
175
def test_get_samples_return_none(self):
176
fake_driver = self._make_fake_driver(None)
178
self._setup_ext_mgr(fake_driver)
180
samples = self._get_samples('http://foo')
182
self.assertEqual(len(samples), 0)