def test_info_default_values(self, mock_rpc, mock_context, mock_filter): x_rpc = mock_rpc.return_value endpoint = hm.HeatNotificationEndpoint('PROJECT', 'CLUSTER_ID') ctx = mock.Mock() payload = { 'tags': ['cluster_id=CLUSTER_ID', 'cluster_node_id=NODE_ID'], 'user_identity': 'USER', } metadata = {'timestamp': 'TIMESTAMP'} call_ctx = mock.Mock() mock_context.return_value = call_ctx res = endpoint.info(ctx, 'PUBLISHER', 'orchestration.stack.delete.end', payload, metadata) self.assertIsNone(res) x_rpc.call.assert_called_once_with(call_ctx, 'node_recover', mock.ANY) req = x_rpc.call.call_args[0][2] self.assertIsInstance(req, objects.NodeRecoverRequest) self.assertEqual('NODE_ID', req.identity) expected_params = { 'event': 'DELETE', 'state': 'Unknown', 'stack_id': 'Unknown', 'timestamp': 'TIMESTAMP', 'publisher': 'PUBLISHER', } self.assertEqual(expected_params, req.params)
def test_info_cluster_id_not_match(self, mock_rpc, mock_filter): x_rpc = mock_rpc.return_value endpoint = hm.HeatNotificationEndpoint('PROJECT', 'CLUSTER_ID') ctx = mock.Mock() payload = {'tags': ['cluster_id=FOOBAR', 'cluster_node_id=N2']} metadata = {'timestamp': 'TIMESTAMP'} res = endpoint.info(ctx, 'PUBLISHER', 'orchestration.stack.delete.end', payload, metadata) self.assertIsNone(res) self.assertEqual(0, x_rpc.node_recover.call_count)
def test_info_event_type_not_interested(self, mock_rpc, mock_filter): x_rpc = mock_rpc.return_value endpoint = hm.HeatNotificationEndpoint('PROJECT', 'CLUSTER_ID') ctx = mock.Mock() payload = {'tags': {'cluster_id': 'CLUSTER_ID'}} metadata = {'timestamp': 'TIMESTAMP'} res = endpoint.info(ctx, 'PUBLISHER', 'orchestration.stack.create.start', payload, metadata) self.assertIsNone(res) self.assertEqual(0, x_rpc.node_recover.call_count)
def test_info_no_node_in_tag(self, mock_rpc, mock_filter): x_rpc = mock_rpc.return_value recover_action = {'operation': 'REBUILD'} endpoint = hm.HeatNotificationEndpoint('PROJECT', 'CLUSTER_ID', recover_action) ctx = mock.Mock() payload = {'tags': ['cluster_id=C1ID']} metadata = {'timestamp': 'TIMESTAMP'} res = endpoint.info(ctx, 'PUBLISHER', 'orchestration.stack.delete.end', payload, metadata) self.assertIsNone(res) self.assertEqual(0, x_rpc.node_recover.call_count)
def test_init(self, mock_rpc, mock_filter): x_filter = mock_filter.return_value event_map = { 'orchestration.stack.delete.end': 'DELETE', } obj = hm.HeatNotificationEndpoint('PROJECT', 'CLUSTER') mock_filter.assert_called_once_with( publisher_id='^orchestration.*', event_type='^orchestration\.stack\..*', context={'project_id': '^PROJECT$'}) mock_rpc.assert_called_once_with() self.assertEqual(x_filter, obj.filter_rule) self.assertEqual(mock_rpc.return_value, obj.rpc) for e in event_map: self.assertIn(e, obj.STACK_FAILURE_EVENTS) self.assertEqual(event_map[e], obj.STACK_FAILURE_EVENTS[e]) self.assertEqual('PROJECT', obj.project_id) self.assertEqual('CLUSTER', obj.cluster_id)