def test_aggregates_with_names_and_ids(self, mock_aggregate,
                                           mock_detailed_aggregate):
        allowed_nodes = []
        mock_aggregate.return_value = [
            mock.Mock(id=i, name="HA_{0}".format(i)) for i in range(2)
        ]
        mock_collection = [
            mock.Mock(id=i, hosts=['Node_{0}'.format(i)]) for i in range(2)
        ]
        mock_collection[0].name = 'HA_0'
        mock_collection[1].name = 'HA_1'

        mock_detailed_aggregate.side_effect = mock_collection

        default.DefaultScope([{
            'host_aggregates': [{
                'name': 'HA_1'
            }, {
                'id': 0
            }]
        }],
                             osc=mock.Mock())._collect_aggregates(
                                 [{
                                     'name': 'HA_1'
                                 }, {
                                     'id': 0
                                 }], allowed_nodes)
        self.assertEqual(['Node_0', 'Node_1'], allowed_nodes)
 def test_remove_nodes_from_model(self):
     model = self.fake_cluster.generate_scenario_1()
     default.DefaultScope([], osc=mock.Mock()).remove_nodes_from_model(
         ['Node_1', 'Node_2'], model)
     expected_edges = [('INSTANCE_0', 'Node_0'), ('INSTANCE_1', 'Node_0'),
                       ('INSTANCE_6', 'Node_3'), ('INSTANCE_7', 'Node_4')]
     self.assertEqual(sorted(expected_edges), sorted(model.edges()))
示例#3
0
    def test_exclude_instances_with_given_metadata(self):
        cluster = self.fake_cluster.generate_scenario_1()
        instance_metadata = [{'optimize': True}]
        instances_to_remove = set()
        default.DefaultScope(
            [], mock.Mock(),
            osc=mock.Mock()).exclude_instances_with_given_metadata(
                instance_metadata, cluster, instances_to_remove)
        self.assertEqual(sorted(['INSTANCE_' + str(i) for i in range(35)]),
                         sorted(instances_to_remove))

        instance_metadata = [{'optimize': False}]
        instances_to_remove = set()
        default.DefaultScope(
            [], mock.Mock(),
            osc=mock.Mock()).exclude_instances_with_given_metadata(
                instance_metadata, cluster, instances_to_remove)
        self.assertEqual(set(), instances_to_remove)
示例#4
0
    def test_exclude_resource(self, mock_aggregate, mock_detailed_aggregate):
        mock_aggregate.return_value = [
            mock.Mock(id=i, name="HA_{0}".format(i)) for i in range(2)
        ]
        mock_collection = [
            mock.Mock(id=i, hosts=['Node_{0}'.format(i)]) for i in range(2)
        ]
        mock_collection[0].name = 'HA_0'
        mock_collection[1].name = 'HA_1'
        mock_detailed_aggregate.side_effect = mock_collection

        resources_to_exclude = [{
            'host_aggregates': [{
                'name': 'HA_1'
            }, {
                'id': 0
            }]
        }, {
            'instances': [{
                'uuid': 'INSTANCE_1'
            }, {
                'uuid': 'INSTANCE_2'
            }]
        }, {
            'compute_nodes': [{
                'name': 'Node_2'
            }, {
                'name': 'Node_3'
            }]
        }, {
            'instance_metadata': [{
                'optimize': True
            }, {
                'optimize1': False
            }]
        }]
        instances_to_exclude = []
        nodes_to_exclude = []
        instance_metadata = []
        default.DefaultScope([], mock.Mock(),
                             osc=mock.Mock()).exclude_resources(
                                 resources_to_exclude,
                                 instances=instances_to_exclude,
                                 nodes=nodes_to_exclude,
                                 instance_metadata=instance_metadata)

        self.assertEqual(['Node_0', 'Node_1', 'Node_2', 'Node_3'],
                         sorted(nodes_to_exclude))
        self.assertEqual(['INSTANCE_1', 'INSTANCE_2'],
                         sorted(instances_to_exclude))
        self.assertEqual([{
            'optimize': True
        }, {
            'optimize1': False
        }], instance_metadata)
 def test_get_scoped_model_with_zones_and_instances(self, mock_zone_list):
     cluster = self.fake_cluster.generate_scenario_1()
     audit_scope = fake_scopes.fake_scope_1
     mock_zone_list.return_value = [
         mock.Mock(zoneName='AZ{0}'.format(i),
                   hosts={'Node_{0}'.format(i): {}}) for i in range(2)
     ]
     model = default.DefaultScope(audit_scope,
                                  osc=mock.Mock()).get_scoped_model(cluster)
     expected_edges = [('INSTANCE_2', 'Node_1')]
     self.assertEqual(sorted(expected_edges), sorted(model.edges()))
示例#6
0
 def test__remove_instance(self):
     cluster = self.fake_cluster.generate_scenario_1()
     default.DefaultScope([], osc=mock.Mock())._remove_instance(
         cluster, 'INSTANCE_2', 'Node_1')
     expected_map = {
         'Node_4': set(['INSTANCE_7']),
         'Node_1': set([]),
         'Node_0': set(['INSTANCE_0', 'INSTANCE_1']),
         'Node_3': set(['INSTANCE_6']),
         'Node_2': set(['INSTANCE_4', 'INSTANCE_5', 'INSTANCE_3'])
     }
     self.assertEqual(expected_map, cluster.get_mapping().get_mapping())
示例#7
0
 def test__remove_node_from_model(self):
     cluster = self.fake_cluster.generate_scenario_1()
     default.DefaultScope([], osc=mock.Mock())._remove_node_from_model(
         ['Node_1', 'Node_2'], cluster)
     expected_cluster = {
         'Node_0': set(['INSTANCE_0', 'INSTANCE_1']),
         'Node_1': set([]),
         'Node_2': set([]),
         'Node_3': set(['INSTANCE_6']),
         'Node_4': set(['INSTANCE_7'])
     }
     self.assertEqual(expected_cluster, cluster.get_mapping().get_mapping())
 def test_remove_instance(self):
     model = self.fake_cluster.generate_scenario_1()
     default.DefaultScope([], osc=mock.Mock()).remove_instance(
         model, model.get_instance_by_uuid('INSTANCE_2'), 'Node_1')
     expected_edges = [
         ('INSTANCE_0', 'Node_0'),
         ('INSTANCE_1', 'Node_0'),
         ('INSTANCE_3', 'Node_2'),
         ('INSTANCE_4', 'Node_2'),
         ('INSTANCE_5', 'Node_2'),
         ('INSTANCE_6', 'Node_3'),
         ('INSTANCE_7', 'Node_4'),
     ]
     self.assertEqual(sorted(expected_edges), sorted(model.edges()))
 def test_aggregates_wildcard_is_used(self, mock_aggregate,
                                      mock_detailed_aggregate):
     allowed_nodes = []
     mock_aggregate.return_value = [mock.Mock(id=i) for i in range(2)]
     mock_detailed_aggregate.side_effect = [
         mock.Mock(id=i, hosts=['Node_{0}'.format(i)]) for i in range(2)
     ]
     default.DefaultScope([{
         'host_aggregates': [{
             'id': '*'
         }]
     }],
                          osc=mock.Mock())._collect_aggregates([{
                              'id': '*'
                          }], allowed_nodes)
     self.assertEqual(['Node_0', 'Node_1'], allowed_nodes)
示例#10
0
 def test_aggregates_wildcard_with_other_ids(self, mock_aggregate):
     allowed_nodes = []
     mock_aggregate.return_value = [mock.Mock(id=i) for i in range(2)]
     scope_handler = default.DefaultScope([{
         'host_aggregates': [{
             'id': '*'
         }, {
             'id': 1
         }]
     }],
                                          osc=mock.Mock())
     self.assertRaises(exception.WildcardCharacterIsUsed,
                       scope_handler._collect_aggregates, [{
                           'id': '*'
                       }, {
                           'id': 1
                       }], allowed_nodes)
示例#11
0
 def test_get_scoped_model_with_zones_and_instances(self, mock_zone_list):
     cluster = self.fake_cluster.generate_scenario_1()
     audit_scope = fake_scopes.fake_scope_1
     mock_zone_list.return_value = [
         mock.Mock(zoneName='AZ{0}'.format(i),
                   hosts={'Node_{0}'.format(i): {}}) for i in range(2)
     ]
     model = default.DefaultScope(audit_scope,
                                  osc=mock.Mock()).get_scoped_model(cluster)
     nodes = {
         'Node_4': set([]),
         'Node_0': set([]),
         'Node_3': set([]),
         'Node_1': set(['INSTANCE_2']),
         'Node_2': set([])
     }
     self.assertEqual(nodes, model.get_mapping().get_mapping())
示例#12
0
 def test_collect_zones(self, mock_zone_list):
     allowed_nodes = []
     mock_zone_list.return_value = [
         mock.Mock(zoneName="AZ{0}".format(i + 1),
                   hosts={
                       'Node_{0}'.format(2 * i): 1,
                       'Node_{0}'.format(2 * i + 1): 2
                   }) for i in range(2)
     ]
     default.DefaultScope([{
         'availability_zones': [{
             'name': "AZ1"
         }]
     }],
                          osc=mock.Mock())._collect_zones([{
                              'name': "AZ1"
                          }], allowed_nodes)
     self.assertEqual(['Node_0', 'Node_1'], sorted(allowed_nodes))
示例#13
0
 def test_exclude_resources(self):
     resources_to_exclude = [{
         'instances': [{
             'uuid': 'INSTANCE_1'
         }, {
             'uuid': 'INSTANCE_2'
         }]
     }, {
         'compute_nodes': [{
             'name': 'Node_1'
         }, {
             'name': 'Node_2'
         }]
     }]
     instances_to_exclude = []
     nodes_to_exclude = []
     default.DefaultScope([], osc=mock.Mock()).exclude_resources(
         resources_to_exclude,
         instances=instances_to_exclude,
         nodes=nodes_to_exclude)
     self.assertEqual(['Node_1', 'Node_2'], sorted(nodes_to_exclude))
     self.assertEqual(['INSTANCE_1', 'INSTANCE_2'],
                      sorted(instances_to_exclude))
示例#14
0
 def test_zones_wildcard_with_other_ids(self, mock_zone_list):
     allowed_nodes = []
     mock_zone_list.return_value = [
         mock.Mock(zoneName="AZ{0}".format(i + 1),
                   hosts={
                       'Node_{0}'.format(2 * i): 1,
                       'Node_{0}'.format(2 * i + 1): 2
                   }) for i in range(2)
     ]
     scope_handler = default.DefaultScope([{
         'availability_zones': [{
             'name': "*"
         }, {
             'name': 'AZ1'
         }]
     }],
                                          osc=mock.Mock())
     self.assertRaises(exception.WildcardCharacterIsUsed,
                       scope_handler._collect_zones, [{
                           'name': "*"
                       }, {
                           'name': 'AZ1'
                       }], allowed_nodes)
示例#15
0
文件: base.py 项目: akinsWin/watcher
 def audit_scope_handler(self):
     if not self._audit_scope_handler:
         self._audit_scope_handler = default_scope.DefaultScope(
             self.audit_scope)
     return self._audit_scope_handler
示例#16
0
 def test_get_scoped_model_without_scope(self, mock_zone_list):
     model = self.fake_cluster.generate_scenario_1()
     default.DefaultScope([], osc=mock.Mock()).get_scoped_model(model)
     assert not mock_zone_list.called