diff --git a/tuskar_ui/infrastructure/roles/tests.py b/tuskar_ui/infrastructure/roles/tests.py
index 1a2640690..9f86118d3 100644
--- a/tuskar_ui/infrastructure/roles/tests.py
+++ b/tuskar_ui/infrastructure/roles/tests.py
@@ -158,6 +158,6 @@ class RolesTest(test.BaseAdminViewTests):
self.assertEqual(len(mock_patch.call_args_list), 1)
args = mock_patch.call_args_list[0][0]
- self.assertEqual(args[1], plan.id)
+ self.assertEqual(args[1], plan.id)
self.assertEqual(args[2], {'Controller-1::Flavor': u'flavor-1',
'Controller-1::Image': u'2'})
diff --git a/tuskar_ui/utils/tests.py b/tuskar_ui/utils/tests.py
index f03718bb8..545c28e99 100644
--- a/tuskar_ui/utils/tests.py
+++ b/tuskar_ui/utils/tests.py
@@ -13,8 +13,12 @@
# under the License.
import collections
+import datetime
+
+import mock
from tuskar_ui.test import helpers
+from tuskar_ui.utils import metering
from tuskar_ui.utils import utils
@@ -72,3 +76,132 @@ class UtilsTests(helpers.TestCase):
self.assertEqual(ret, 0)
ret = utils.safe_int_cast(object())
self.assertEqual(ret, 0)
+
+
+class MeteringTests(helpers.TestCase):
+ def test_query_data(self):
+ Meter = collections.namedtuple('Meter', 'name unit')
+ request = 'request'
+ from_date = datetime.datetime(2015, 1, 1, 13, 45)
+ to_date = datetime.datetime(2015, 1, 2, 13, 45)
+ with mock.patch(
+ 'openstack_dashboard.api.ceilometer.meter_list',
+ return_value=[Meter('foo.bar', u'µD')],
+ ), mock.patch(
+ 'openstack_dashboard.api.ceilometer.CeilometerUsage',
+ return_value=mock.MagicMock(**{
+ 'resource_aggregates_with_statistics.return_value': 'plonk',
+ }),
+ ):
+ ret = metering.query_data(request, from_date, to_date,
+ 'all', 'foo.bar')
+ self.assertEqual(ret, ('plonk', u'µD'))
+
+ def test_url_part(self):
+ ret = metering.url_part('foo_bar_baz', True)
+ self.assertTrue('meter=foo_bar_baz' in ret)
+ self.assertTrue('barchart=True' in ret)
+ ret = metering.url_part('foo_bar_baz', False)
+ self.assertTrue('meter=foo_bar_baz' in ret)
+ self.assertFalse('barchart=True' in ret)
+
+ def test_get_meter_name(self):
+ ret = metering.get_meter_name('foo.bar.baz')
+ self.assertEqual(ret, 'foo_bar_baz')
+
+ def test_get_meters(self):
+ ret = metering.get_meters(['foo.bar', 'foo.baz'])
+ self.assertEqual(ret, [('foo.bar', 'foo_bar'), ('foo.baz', 'foo_baz')])
+
+ def test_get_barchart_stats(self):
+ series = [
+ {'data': [{'x': 1, 'y': 1}, {'x': 4, 'y': 4}]},
+ {'data': [{'x': 2, 'y': 2}, {'x': 5, 'y': 5}]},
+ {'data': [{'x': 3, 'y': 3}, {'x': 6, 'y': 6}]},
+ ]
+ # Arrogance is measured in IT in micro-Dijkstras, µD.
+ average, used, tooltip_average = metering.get_barchart_stats(series,
+ u'µD')
+ self.assertEqual(average, 2)
+ self.assertEqual(used, 4)
+ self.assertEqual(tooltip_average, u'Average 2 µD
From: 1, to: 4')
+
+ def test_create_json_output(self):
+ ret = metering.create_json_output([], False, u'µD', None, None)
+ self.assertEqual(ret, {
+ 'series': [],
+ 'settings': {
+ 'higlight_last_point': True,
+ 'axes_x': False,
+ 'axes_y': True,
+ 'xMin': '',
+ 'renderer': 'StaticAxes',
+ 'xMax': '',
+ 'axes_y_label': False,
+ 'auto_size': False,
+ 'auto_resize': False,
+ },
+ })
+
+ series = [
+ {'data': [{'x': 1, 'y': 1}, {'x': 4, 'y': 4}]},
+ {'data': [{'x': 2, 'y': 2}, {'x': 5, 'y': 5}]},
+ {'data': [{'x': 3, 'y': 3}, {'x': 6, 'y': 6}]},
+ ]
+ ret = metering.create_json_output(series, True, u'µD', None, None)
+ self.assertEqual(ret, {
+ 'series': series,
+ 'stats': {
+ 'average': 2,
+ 'used': 4,
+ 'tooltip_average': u'Average 2 µD
From: 1, to: 4',
+ },
+ 'settings': {
+ 'yMin': 0,
+ 'yMax': 100,
+ 'higlight_last_point': True,
+ 'axes_x': False,
+ 'axes_y': True,
+ 'bar_chart_settings': {
+ 'color_scale_domain': [0, 80, 80, 100],
+ 'orientation': 'vertical',
+ 'color_scale_range': [
+ '#0000FF',
+ '#0000FF',
+ '#FF0000',
+ '#FF0000',
+ ],
+ 'width': 30,
+ 'average_color_scale_domain': [0, 100],
+ 'used_label_placement': 'left',
+ 'average_color_scale_range': ['#0000FF', '#0000FF'],
+ },
+ 'xMin': '',
+ 'renderer': 'StaticAxes',
+ 'xMax': '',
+ 'axes_y_label': False,
+ 'auto_size': False,
+ 'auto_resize': False,
+ },
+ })
+
+ def test_get_nodes_stats(self):
+ request = 'request'
+ with mock.patch(
+ 'tuskar_ui.utils.metering.create_json_output',
+ return_value='',
+ ) as create_json_output, mock.patch(
+ 'tuskar_ui.utils.metering.query_data',
+ return_value=([], u'µD'),
+ ), mock.patch(
+ 'openstack_dashboard.utils.metering.series_for_meter',
+ return_value=[],
+ ), mock.patch(
+ 'openstack_dashboard.utils.metering.calc_date_args',
+ return_value=('from date', 'to date'),
+ ):
+ ret = metering.get_nodes_stats(request, 'abc', 'foo.bar')
+ self.assertEqual(ret, '')
+ self.assertEqual(create_json_output.call_args_list, [
+ mock.call([], None, u'µD', 'from date', 'to date')
+ ])