From d6d1a38216882a3921ec0b0ebbefd79466d80736 Mon Sep 17 00:00:00 2001 From: Pradeep Kilambi Date: Mon, 18 Aug 2014 08:04:49 -0700 Subject: [PATCH] Enhance compute diskio tests to handle multi instance The existing tests assume there is only one instance. This fix enhances the compute disk io tests to account for multiple instances and their disks. This should handle coverage for the resource loop get_samples call. Change-Id: Ic78b1a628246665a7045574624b6212034b28fad --- .../tests/compute/pollsters/test_diskio.py | 66 ++++++++++++++----- 1 file changed, 48 insertions(+), 18 deletions(-) diff --git a/ceilometer/tests/compute/pollsters/test_diskio.py b/ceilometer/tests/compute/pollsters/test_diskio.py index 7e346a619..dd51fa9af 100644 --- a/ceilometer/tests/compute/pollsters/test_diskio.py +++ b/ceilometer/tests/compute/pollsters/test_diskio.py @@ -18,19 +18,44 @@ # 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 mock +from oslotest import mockpatch from ceilometer.compute import manager from ceilometer.compute.pollsters import disk from ceilometer.compute.virt import inspector as virt_inspector -from ceilometer.tests.compute.pollsters import base +import ceilometer.tests.base as base -class TestBaseDistIO(base.TestPollsterBase): +class TestBaseDiskIO(base.BaseTestCase): TYPE = 'cumulative' + def setUp(self): + super(TestBaseDiskIO, self).setUp() + + self.inspector = mock.Mock() + self.instance = self._get_fake_instances() + patch_virt = mockpatch.Patch( + 'ceilometer.compute.virt.inspector.get_hypervisor_inspector', + new=mock.Mock(return_value=self.inspector)) + self.useFixture(patch_virt) + + @staticmethod + def _get_fake_instances(): + instances = [] + for i in [1, 2]: + instance = mock.MagicMock() + instance.name = 'instance-%s' % i + setattr(instance, 'OS-EXT-SRV-ATTR:instance_name', + instance.name) + instance.id = i + instance.flavor = {'name': 'm1.small', 'id': 2, 'vcpus': 1, + 'ram': 512, 'disk': 20, 'ephemeral': 0} + instance.status = 'active' + instances.append(instance) + return instances + @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def _check_get_samples(self, factory, name): pass @@ -44,24 +69,27 @@ class TestBaseDistIO(base.TestPollsterBase): if expected_device is not None: self.assertEqual(set(expected_device), set(match[0].resource_metadata.get('device'))) - self.assertEqual(self.instance.id, match[0].resource_id) + instances = [i.id for i in self.instance] + for m in match: + self.assertIn(m.resource_id, instances) def _check_per_device_samples(self, factory, name, expected_volume, expected_device=None): - match = self._check_get_samples(factory, name, expected_count=2) + match = self._check_get_samples(factory, name, expected_count=4) match_dict = {} for m in match: match_dict[m.resource_id] = m - key = "%s-%s" % (self.instance.id, expected_device) - self.assertEqual(expected_volume, - match_dict[key].volume) - self.assertEqual(self.TYPE, match_dict[key].type) + for instance in self.instance: + key = "%s-%s" % (instance.id, expected_device) + self.assertEqual(expected_volume, + match_dict[key].volume) + self.assertEqual(self.TYPE, match_dict[key].type) - self.assertEqual(key, match_dict[key].resource_id) + self.assertEqual(key, match_dict[key].resource_id) -class TestDiskPollsters(TestBaseDistIO): +class TestDiskPollsters(TestBaseDiskIO): DISKS = [ (virt_inspector.Disk(device='vda1'), @@ -79,15 +107,16 @@ class TestDiskPollsters(TestBaseDistIO): self.inspector.inspect_disks = mock.Mock(return_value=self.DISKS) @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) - def _check_get_samples(self, factory, name, expected_count=1): + def _check_get_samples(self, factory, name, expected_count=2): pollster = factory() mgr = manager.AgentManager() cache = {} - samples = list(pollster.get_samples(mgr, cache, [self.instance])) + samples = list(pollster.get_samples(mgr, cache, self.instance)) self.assertIsNotEmpty(samples) self.assertIn(pollster.CACHE_KEY_DISK, cache) - self.assertIn(self.instance.name, cache[pollster.CACHE_KEY_DISK]) + for instance in self.instance: + self.assertIn(instance.name, cache[pollster.CACHE_KEY_DISK]) self.assertEqual(set([name]), set([s.name for s in samples])) match = [s for s in samples if s.name == name] @@ -148,7 +177,7 @@ class TestDiskPollsters(TestBaseDistIO): 'vda2') -class TestDiskRatePollsters(TestBaseDistIO): +class TestDiskRatePollsters(TestBaseDiskIO): DISKS = [ (virt_inspector.Disk(device='disk1'), @@ -165,16 +194,17 @@ class TestDiskRatePollsters(TestBaseDistIO): @mock.patch('ceilometer.pipeline.setup_pipeline', mock.MagicMock()) def _check_get_samples(self, factory, sample_name, - expected_count=1): + expected_count=2): pollster = factory() mgr = manager.AgentManager() cache = {} - samples = list(pollster.get_samples(mgr, cache, [self.instance])) + samples = list(pollster.get_samples(mgr, cache, self.instance)) self.assertIsNotEmpty(samples) self.assertIsNotNone(samples) self.assertIn(pollster.CACHE_KEY_DISK_RATE, cache) - self.assertIn(self.instance.id, cache[pollster.CACHE_KEY_DISK_RATE]) + for instance in self.instance: + self.assertIn(instance.id, cache[pollster.CACHE_KEY_DISK_RATE]) self.assertEqual(set([sample_name]), set([s.name for s in samples]))