def test_deactivate_unused_hypervisors(self): model = self.fake_cluster.generate_scenario_1() fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(model) strategy = SmartStrategy() strategy.ceilometer = mock.MagicMock( statistic_aggregation=fake_metrics.mock_get_statistics) h1 = model.get_hypervisor_from_id('Node_0') h2 = model.get_hypervisor_from_id('Node_1') vm_uuid = 'VM_0' strategy.deactivate_unused_hypervisors(model) self.assertEqual(0, len(strategy.solution.actions)) # Migrate VM to free the hypervisor strategy.add_migration(vm_uuid, h1, h2, model) strategy.deactivate_unused_hypervisors(model) expected = { 'action_type': 'change_nova_service_state', 'input_parameters': { 'state': 'down', 'resource_id': 'Node_0' } } self.assertEqual(2, len(strategy.solution.actions)) self.assertEqual(expected, strategy.solution.actions[1])
def test_get_relative_cluster_utilization(self): model = self.fake_cluster.generate_scenario_1() fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(model) strategy = SmartStrategy() strategy.ceilometer = mock.MagicMock( statistic_aggregation=fake_metrics.mock_get_statistics) cru = strategy.get_relative_cluster_utilization(model) expected_cru = {'cpu': 0.05, 'disk': 0.05, 'ram': 0.0234375} self.assertEqual(expected_cru, cru)
def test_get_relative_hypervisor_utilization(self): model = self.fake_cluster.generate_scenario_1() fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(model) strategy = SmartStrategy() strategy.ceilometer = mock.MagicMock( statistic_aggregation=fake_metrics.mock_get_statistics) hypervisor = model.get_hypervisor_from_id('Node_0') rhu = strategy.get_relative_hypervisor_utilization(hypervisor, model) expected_rhu = {'disk': 0.04, 'ram': 0.015625, 'cpu': 0.025} self.assertEqual(expected_rhu, rhu)
def test_get_hypervisor_capacity(self): cluster = self.fake_cluster.generate_scenario_1() fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(cluster) strategy = SmartStrategy() strategy.ceilometer = mock.MagicMock( statistic_aggregation=fake_metrics.mock_get_statistics) node_0 = cluster.get_hypervisor_from_id("Node_0") node_util = dict(cpu=40, ram=64, disk=250) self.assertEqual(node_util, strategy.get_hypervisor_capacity(node_0, cluster))
def test_get_vm_utilization(self): cluster = self.fake_cluster.generate_scenario_1() fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(cluster) strategy = SmartStrategy() strategy.ceilometer = mock.MagicMock( statistic_aggregation=fake_metrics.mock_get_statistics) vm_0 = cluster.get_vm_from_id("VM_0") vm_util = dict(cpu=1.0, ram=1, disk=10) self.assertEqual(vm_util, strategy.get_vm_utilization(vm_0.uuid, cluster))
def test_offload_phase(self): model = self.fake_cluster.generate_scenario_1() fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(model) strategy = SmartStrategy() strategy.ceilometer = mock.MagicMock( statistic_aggregation=fake_metrics.mock_get_statistics) cc = {'cpu': 1.0, 'ram': 1.0, 'disk': 1.0} strategy.offload_phase(model, cc) expected = [] self.assertEqual(expected, strategy.solution.actions)
def test_strategy2(self): model = self.fake_cluster.generate_scenario_3() fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(model) strategy = SmartStrategy() strategy.ceilometer = mock.MagicMock( statistic_aggregation=fake_metrics.mock_get_statistics) h1 = model.get_hypervisor_from_id('Node_0') h2 = model.get_hypervisor_from_id('Node_1') cc = {'cpu': 1.0, 'ram': 1.0, 'disk': 1.0} strategy.offload_phase(model, cc) expected = [{ 'action_type': 'migrate', 'input_parameters': { 'dst_hypervisor': h2, 'migration_type': 'live', 'resource_id': 'VM_6', 'src_hypervisor': h1 } }, { 'action_type': 'migrate', 'input_parameters': { 'dst_hypervisor': h2, 'migration_type': 'live', 'resource_id': 'VM_7', 'src_hypervisor': h1 } }, { 'action_type': 'migrate', 'input_parameters': { 'dst_hypervisor': h2, 'migration_type': 'live', 'resource_id': 'VM_8', 'src_hypervisor': h1 } }] self.assertEqual(expected, strategy.solution.actions) strategy.consolidation_phase(model, cc) expected.append({ 'action_type': 'migrate', 'input_parameters': { 'dst_hypervisor': h1, 'migration_type': 'live', 'resource_id': 'VM_7', 'src_hypervisor': h2 } }) self.assertEqual(expected, strategy.solution.actions) strategy.optimize_solution(model) del expected[3] del expected[1] self.assertEqual(expected, strategy.solution.actions)
def test_vm_fits(self): model = self.fake_cluster.generate_scenario_1() fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(model) strategy = SmartStrategy() strategy.ceilometer = mock.MagicMock( statistic_aggregation=fake_metrics.mock_get_statistics) h = model.get_hypervisor_from_id('Node_1') vm_uuid = 'VM_0' cc = {'cpu': 1.0, 'ram': 1.0, 'disk': 1.0} res = strategy.vm_fits(vm_uuid, h, model, cc) self.assertEqual(True, res) cc = {'cpu': 0.025, 'ram': 1.0, 'disk': 1.0} res = strategy.vm_fits(vm_uuid, h, model, cc) self.assertEqual(False, res)
def test_deactivate_hypervisor(self): model = self.fake_cluster.generate_scenario_1() fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(model) strategy = SmartStrategy() strategy.ceilometer = mock.MagicMock( statistic_aggregation=fake_metrics.mock_get_statistics) h = model.get_hypervisor_from_id('Node_0') strategy.deactivate_hypervisor(h) expected = [{ 'action_type': 'change_nova_service_state', 'input_parameters': { 'state': 'down', 'resource_id': 'Node_0' } }] self.assertEqual(expected, strategy.solution.actions)
def test_strategy(self): model = self.fake_cluster.generate_scenario_2() fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(model) strategy = SmartStrategy() strategy.ceilometer = mock.MagicMock( statistic_aggregation=fake_metrics.mock_get_statistics) h1 = model.get_hypervisor_from_id('Node_0') h2 = model.get_hypervisor_from_id('Node_1') cc = {'cpu': 1.0, 'ram': 1.0, 'disk': 1.0} strategy.offload_phase(model, cc) strategy.consolidation_phase(model, cc) strategy.optimize_solution(model) strategy.deactivate_unused_hypervisors(model) dst_hyp = strategy.solution.actions[0]['input_parameters'][ 'dst_hypervisor'] expected = [{ 'action_type': 'migrate', 'input_parameters': { 'dst_hypervisor': dst_hyp, 'src_hypervisor': h1, 'migration_type': 'live', 'resource_id': 'VM_3' } }, { 'action_type': 'migrate', 'input_parameters': { 'dst_hypervisor': dst_hyp, 'src_hypervisor': h1, 'migration_type': 'live', 'resource_id': 'VM_1' } }, { 'action_type': 'change_nova_service_state', 'input_parameters': { 'state': 'down', 'resource_id': 'Node_3' } }, { 'action_type': 'change_nova_service_state', 'input_parameters': { 'state': 'down', 'resource_id': 'Node_2' } }] self.assertEqual(expected, strategy.solution.actions)
def test_is_overloaded(self): strategy = SmartStrategy() model = self.fake_cluster.generate_scenario_1() fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(model) strategy.ceilometer = mock.MagicMock( statistic_aggregation=fake_metrics.mock_get_statistics) h1 = model.get_hypervisor_from_id('Node_0') cc = {'cpu': 1.0, 'ram': 1.0, 'disk': 1.0} res = strategy.is_overloaded(h1, model, cc) self.assertEqual(False, res) cc = {'cpu': 0.025, 'ram': 1.0, 'disk': 1.0} res = strategy.is_overloaded(h1, model, cc) self.assertEqual(False, res) cc = {'cpu': 0.024, 'ram': 1.0, 'disk': 1.0} res = strategy.is_overloaded(h1, model, cc) self.assertEqual(True, res)
def test_add_migration(self): model = self.fake_cluster.generate_scenario_1() fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(model) strategy = SmartStrategy() strategy.ceilometer = mock.MagicMock( statistic_aggregation=fake_metrics.mock_get_statistics) h1 = model.get_hypervisor_from_id('Node_0') h2 = model.get_hypervisor_from_id('Node_1') vm_uuid = 'VM_0' strategy.add_migration(vm_uuid, h1, h2, model) self.assertEqual(1, len(strategy.solution.actions)) expected = { 'action_type': 'migrate', 'input_parameters': { 'dst_hypervisor': h2, 'src_hypervisor': h1, 'migration_type': 'live', 'resource_id': vm_uuid } } self.assertEqual(expected, strategy.solution.actions[0])
def test_consolidation_phase(self): model = self.fake_cluster.generate_scenario_1() fake_metrics = faker_metrics_collector.FakeCeilometerMetrics(model) strategy = SmartStrategy() strategy.ceilometer = mock.MagicMock( statistic_aggregation=fake_metrics.mock_get_statistics) h1 = model.get_hypervisor_from_id('Node_0') h2 = model.get_hypervisor_from_id('Node_1') vm_uuid = 'VM_0' cc = {'cpu': 1.0, 'ram': 1.0, 'disk': 1.0} strategy.consolidation_phase(model, cc) expected = [{ 'action_type': 'migrate', 'input_parameters': { 'dst_hypervisor': h2, 'src_hypervisor': h1, 'migration_type': 'live', 'resource_id': vm_uuid } }] self.assertEqual(expected, strategy.solution.actions)