From c91381444531145149f684860caf6c4ac984c6aa Mon Sep 17 00:00:00 2001 From: Guangyu Suo Date: Sun, 15 Sep 2013 12:21:18 +0800 Subject: [PATCH] Add source field to Meter model Just like Sample model, we should also add source field to Meter model to identify where the meter comes from. Change-Id: I2381d67f84692bfc7d167c2b0d90bfa32b845f00 Fixes: Bug #1225583 --- ceilometer/api/controllers/v2.py | 6 +- tests/api/v2/test_list_meters_scenarios.py | 73 +++++++++++++++++++--- 2 files changed, 70 insertions(+), 9 deletions(-) diff --git a/ceilometer/api/controllers/v2.py b/ceilometer/api/controllers/v2.py index ee4fc4d5c..8b93299d2 100644 --- a/ceilometer/api/controllers/v2.py +++ b/ceilometer/api/controllers/v2.py @@ -446,7 +446,7 @@ class Sample(_Base): """ source = wtypes.text - "An identity source ID" + "The ID of the source that identifies where the sample comes from" counter_name = wtypes.text "The name of the meter" @@ -770,6 +770,9 @@ class Meter(_Base): user_id = wtypes.text "The ID of the user who last triggered an update to the resource" + source = wtypes.text + "The ID of the source that identifies where the meter comes from" + meter_id = wtypes.text "The unique identifier for the meter" @@ -787,6 +790,7 @@ class Meter(_Base): resource_id='bd9431c1-8d69-4ad3-803a-8d4a6b89fd36', project_id='35b17138-b364-4e6a-a131-8f3099c5be68', user_id='efd87807-12d2-4b38-9c70-5f5c2ac427ff', + source='openstack', ) diff --git a/tests/api/v2/test_list_meters_scenarios.py b/tests/api/v2/test_list_meters_scenarios.py index 78c282e41..99bbe2b2b 100644 --- a/tests/api/v2/test_list_meters_scenarios.py +++ b/tests/api/v2/test_list_meters_scenarios.py @@ -131,7 +131,7 @@ class TestListMeters(FunctionalTest, 'size': 0, 'util': 0.58, 'is_public': True}, - source='test_source')]: + source='test_source1')]: msg = rpc.meter_message_from_counter( cnt, cfg.CONF.publisher_rpc.metering_secret) @@ -147,6 +147,8 @@ class TestListMeters(FunctionalTest, 'resource-id4'])) self.assertEqual(set(r['name'] for r in data), set(['meter.test', 'meter.mine'])) + self.assertEqual(set(r['source'] for r in data), + set(['test_source', 'test_source1'])) def test_list_meters_with_dict_metadata(self): data = self.get_json('/meters/meter.mine', @@ -288,8 +290,24 @@ class TestListMeters(FunctionalTest, data = self.get_json('/meters', q=[{'field': 'resource_id', 'value': 'resource-id', }]) - ids = set(r['name'] for r in data) - self.assertEqual(set(['meter.test']), ids) + nids = set(r['name'] for r in data) + self.assertEqual(set(['meter.test']), nids) + + sids = set(r['source'] for r in data) + self.assertEqual(set(['test_source']), sids) + + def test_with_resource_and_source(self): + data = self.get_json('/meters', q=[{'field': 'resource_id', + 'value': 'resource-id4', + }, + {'field': 'source', + 'value': 'test_source1', + }]) + nids = set(r['name'] for r in data) + self.assertEqual(set(['meter.mine']), nids) + + sids = set(r['source'] for r in data) + self.assertEqual(set(['test_source1']), sids) def test_with_resource_and_metadata_query(self): data = self.get_json('/meters/meter.mine', @@ -311,11 +329,13 @@ class TestListMeters(FunctionalTest, data = self.get_json('/meters', q=[{'field': 'source', 'value': 'test_source', }]) - ids = set(r['resource_id'] for r in data) + rids = set(r['resource_id'] for r in data) self.assertEqual(set(['resource-id', 'resource-id2', - 'resource-id3', - 'resource-id4']), ids) + 'resource-id3']), rids) + + sids = set(r['source'] for r in data) + self.assertEqual(set(['test_source']), sids) def test_with_source_and_metadata_query(self): data = self.get_json('/meters/meter.mine', @@ -356,6 +376,25 @@ class TestListMeters(FunctionalTest, rids = set(r['resource_id'] for r in data) self.assertEqual(set(['resource-id', 'resource-id2']), rids) + sids = set(r['source'] for r in data) + self.assertEqual(set(['test_source']), sids) + + def test_with_user_and_source(self): + data = self.get_json('/meters', + q=[{'field': 'user_id', + 'value': 'user-id4', + }, + {'field': 'source', + 'value': 'test_source1', + }], + ) + + uids = set(r['user_id'] for r in data) + self.assertEqual(set(['user-id4']), uids) + + sids = set(r['source'] for r in data) + self.assertEqual(set(['test_source1']), sids) + def test_with_user_and_metadata_query(self): data = self.get_json('/meters/meter.test', q=[{'field': 'user_id', @@ -385,8 +424,26 @@ class TestListMeters(FunctionalTest, 'value': 'project-id2', }], ) - ids = set(r['resource_id'] for r in data) - self.assertEqual(set(['resource-id3', 'resource-id4']), ids) + rids = set(r['resource_id'] for r in data) + self.assertEqual(set(['resource-id3', 'resource-id4']), rids) + + sids = set(r['source'] for r in data) + self.assertEqual(set(['test_source', 'test_source1']), sids) + + def test_with_project_and_source(self): + data = self.get_json('/meters', + q=[{'field': 'project_id', + 'value': 'project-id2', + }, + {'field': 'source', + 'value': 'test_source1', + }], + ) + rids = set(r['resource_id'] for r in data) + self.assertEqual(set(['resource-id4']), rids) + + sids = set(r['source'] for r in data) + self.assertEqual(set(['test_source1']), sids) def test_with_project_and_metadata_query(self): data = self.get_json('/meters/meter.test',