def setUp(self): super(HostManagerTestCase, self).setUp() self.host_manager = host_manager.HostManager() self.fake_hosts = [host_manager.HostState('fake_host%s' % x) for x in range(1, 5)] # For a second scheduler service. self.host_manager_1 = host_manager.HostManager()
def test_get_filtered_objects_info_and_debug_log_none_returned(self): all_filters = [FilterA, FilterA, FilterB] fake_hosts = [ host_manager.HostState('fake_host%s' % x) for x in range(1, 4) ] filt_props = { "request_spec": { 'volume_id': fake.VOLUME_ID, 'volume_properties': { 'project_id': fake.PROJECT_ID, 'size': 2048, 'host': 'host4' } } } with mock.patch.object(base_filter, 'LOG') as mock_log: result = self.handler.get_filtered_objects(all_filters, fake_hosts, filt_props) self.assertFalse(result) msg = "with volume ID '%s'" % fake.VOLUME_ID # FilterA should leave Host1 and Host2; FilterB should leave None. exp_output = ("FilterA: (start: 3, end: 2), " "FilterA: (start: 2, end: 1)") cargs = mock_log.info.call_args[0][0] self.assertIn(msg, cargs) self.assertIn(exp_output, cargs) exp_output = ("[('FilterA', ['fake_host2', 'fake_host3']), " "('FilterA', ['fake_host3']), " + "('FilterB', None)]") cargs = mock_log.debug.call_args[0][0] self.assertIn(msg, cargs) self.assertIn(exp_output, cargs)
def test_update_from_volume_capability_nopool(self): fake_host = host_manager.HostState('host1') self.assertIsNone(fake_host.free_capacity_gb) volume_capability = { 'total_capacity_gb': 1024, 'free_capacity_gb': 512, 'provisioned_capacity_gb': 512, 'reserved_percentage': 0, 'timestamp': None } fake_host.update_from_volume_capability(volume_capability) # Backend level stats remain uninitialized self.assertEqual(0, fake_host.total_capacity_gb) self.assertIsNone(fake_host.free_capacity_gb) # Pool stats has been updated self.assertEqual(1024, fake_host.pools['_pool0'].total_capacity_gb) self.assertEqual(512, fake_host.pools['_pool0'].free_capacity_gb) self.assertEqual(512, fake_host.pools['_pool0'].provisioned_capacity_gb) # Test update for existing host state volume_capability.update(dict(total_capacity_gb=1000)) fake_host.update_from_volume_capability(volume_capability) self.assertEqual(1000, fake_host.pools['_pool0'].total_capacity_gb) # Test update for existing host state with different backend name volume_capability.update(dict(volume_backend_name='magic')) fake_host.update_from_volume_capability(volume_capability) self.assertEqual(1000, fake_host.pools['magic'].total_capacity_gb) self.assertEqual(512, fake_host.pools['magic'].free_capacity_gb) self.assertEqual(512, fake_host.pools['magic'].provisioned_capacity_gb) # 'pool0' becomes nonactive pool, and is deleted self.assertRaises(KeyError, lambda: fake_host.pools['pool0'])
def test_use_of_chance_weigher_via_host_manager(self): # ensure we don't lose any hosts when weighing with # the ChanceWeigher hm = host_manager.HostManager() fake_hosts = [host_manager.HostState('fake_host%s' % x) for x in range(1, 5)] weighed_hosts = hm.get_weighed_hosts(fake_hosts, {}, 'ChanceWeigher') self.assertEqual(4, len(weighed_hosts))
def test_update_from_volume_capability(self): fake_host = host_manager.HostState('host1') self.assertIsNone(fake_host.free_capacity_gb) volume_capability = {'total_capacity_gb': 1024, 'free_capacity_gb': 512, 'reserved_percentage': 0, 'timestamp': None} fake_host.update_from_volume_capability(volume_capability) self.assertEqual(fake_host.free_capacity_gb, 512)
def test_update_from_empty_volume_capability(self): fake_host = host_manager.HostState('host1') vol_cap = {'timestamp': None} fake_host.update_from_volume_capability(vol_cap) self.assertEqual(fake_host.total_capacity_gb, 0) self.assertEqual(fake_host.free_capacity_gb, None) # Pool stats has been updated self.assertEqual(fake_host.pools['_pool0'].total_capacity_gb, 0) self.assertEqual(fake_host.pools['_pool0'].free_capacity_gb, 0)
def test_update_from_volume_unknown_capability(self): fake_host = host_manager.HostState('host1') self.assertIsNone(fake_host.free_capacity_gb) volume_capability = {'total_capacity_gb': 'infinite', 'free_capacity_gb': 'unknown', 'reserved_percentage': 0, 'timestamp': None} fake_host.update_from_volume_capability(volume_capability) self.assertEqual(fake_host.total_capacity_gb, 'infinite') self.assertEqual(fake_host.free_capacity_gb, 'unknown')
def test_post_select_populate(self): # Test addition of certain filter props after a node is selected. retry = {'hosts': [], 'num_attempts': 1} filter_properties = {'retry': retry} sched = fakes.FakeFilterScheduler() host_state = host_manager.HostState('host') host_state.total_capacity_gb = 1024 sched._post_select_populate_filter_properties(filter_properties, host_state) self.assertEqual('host', filter_properties['retry']['hosts'][0]) self.assertEqual(1024, host_state.total_capacity_gb)
def test_update_from_volume_unknown_capability(self): fake_host = host_manager.HostState('host1') self.assertIsNone(fake_host.free_capacity_gb) volume_capability = {'total_capacity_gb': 'infinite', 'free_capacity_gb': 'unknown', 'reserved_percentage': 0, 'timestamp': None} fake_host.update_from_volume_capability(volume_capability) # Backend level stats remain uninitialized self.assertEqual(fake_host.total_capacity_gb, 0) self.assertEqual(fake_host.free_capacity_gb, None) # Pool stats has been updated self.assertEqual(fake_host.pools['_pool0'].total_capacity_gb, 'infinite') self.assertEqual(fake_host.pools['_pool0'].free_capacity_gb, 'unknown')
def test_update_from_volume_capability_with_pools(self): fake_host = host_manager.HostState('host1') self.assertIsNone(fake_host.free_capacity_gb) capability = { 'volume_backend_name': 'Local iSCSI', 'vendor_name': 'OpenStack', 'driver_version': '1.0.1', 'storage_protocol': 'iSCSI', 'pools': [{ 'pool_name': '1st pool', 'total_capacity_gb': 500, 'free_capacity_gb': 230, 'allocated_capacity_gb': 270, 'provisioned_capacity_gb': 270, 'QoS_support': 'False', 'reserved_percentage': 0, 'dying_disks': 100, 'super_hero_1': 'spider-man', 'super_hero_2': 'flash', 'super_hero_3': 'neoncat', }, { 'pool_name': '2nd pool', 'total_capacity_gb': 1024, 'free_capacity_gb': 1024, 'allocated_capacity_gb': 0, 'provisioned_capacity_gb': 0, 'QoS_support': 'False', 'reserved_percentage': 0, 'dying_disks': 200, 'super_hero_1': 'superman', 'super_hero_2': 'Hulk', }], 'timestamp': None, } fake_host.update_from_volume_capability(capability) self.assertEqual('Local iSCSI', fake_host.volume_backend_name) self.assertEqual('iSCSI', fake_host.storage_protocol) self.assertEqual('OpenStack', fake_host.vendor_name) self.assertEqual('1.0.1', fake_host.driver_version) # Backend level stats remain uninitialized self.assertEqual(0, fake_host.total_capacity_gb) self.assertIsNone(fake_host.free_capacity_gb) # Pool stats has been updated self.assertEqual(2, len(fake_host.pools)) self.assertEqual(500, fake_host.pools['1st pool'].total_capacity_gb) self.assertEqual(230, fake_host.pools['1st pool'].free_capacity_gb) self.assertEqual(270, fake_host.pools['1st pool'].provisioned_capacity_gb) self.assertEqual(1024, fake_host.pools['2nd pool'].total_capacity_gb) self.assertEqual(1024, fake_host.pools['2nd pool'].free_capacity_gb) self.assertEqual(0, fake_host.pools['2nd pool'].provisioned_capacity_gb) capability = { 'volume_backend_name': 'Local iSCSI', 'vendor_name': 'OpenStack', 'driver_version': '1.0.2', 'storage_protocol': 'iSCSI', 'pools': [ { 'pool_name': '3rd pool', 'total_capacity_gb': 10000, 'free_capacity_gb': 10000, 'allocated_capacity_gb': 0, 'provisioned_capacity_gb': 0, 'QoS_support': 'False', 'reserved_percentage': 0, }, ], 'timestamp': None, } # test update HostState Record fake_host.update_from_volume_capability(capability) self.assertEqual('1.0.2', fake_host.driver_version) # Non-active pool stats has been removed self.assertEqual(1, len(fake_host.pools)) self.assertRaises(KeyError, lambda: fake_host.pools['1st pool']) self.assertRaises(KeyError, lambda: fake_host.pools['2nd pool']) self.assertEqual(10000, fake_host.pools['3rd pool'].total_capacity_gb) self.assertEqual(10000, fake_host.pools['3rd pool'].free_capacity_gb) self.assertEqual(0, fake_host.pools['3rd pool'].provisioned_capacity_gb)
def setUp(self): super(HostManagerTestCase, self).setUp() self.host_manager = host_manager.HostManager() self.fake_hosts = [ host_manager.HostState('fake_host%s' % x) for x in range(1, 5) ]