def test_info_default_values(self, mock_rpc, mock_context, mock_filter): x_rpc = mock_rpc.return_value recover_action = {'operation': 'REBUILD'} endpoint = heat_endpoint.HeatNotificationEndpoint( 'PROJECT', 'CLUSTER_ID', recover_action) 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', 'operation': 'REBUILD', } self.assertEqual(expected_params, req.params)
def ListenerProc(exchange, project_id, cluster_id, recover_action): """Thread procedure for running an event listener. :param exchange: The control exchange for a target service. :param project_id: The ID of the project to filter. :param cluster_id: The ID of the cluster to filter. :param recover_action: The health policy action name. """ transport = messaging.get_notification_transport(cfg.CONF) if exchange == cfg.CONF.health_manager.nova_control_exchange: endpoint = nova_endpoint.NovaNotificationEndpoint( project_id, cluster_id, recover_action) else: endpoint = heat_endpoint.HeatNotificationEndpoint( project_id, cluster_id, recover_action) listener = messaging.get_notification_listener(transport, [endpoint.target], [endpoint], executor='threading', pool='senlin-listeners') listener.start()
def test_info_no_node_in_tag(self, mock_rpc, mock_filter): x_rpc = mock_rpc.return_value recover_action = {'operation': 'REBUILD'} endpoint = heat_endpoint.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', } recover_action = {'operation': 'REBUILD'} endpoint = heat_endpoint.HeatNotificationEndpoint( 'PROJECT', 'CLUSTER_ID', recover_action) 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, endpoint.filter_rule) self.assertEqual(mock_rpc.return_value, endpoint.rpc) for e in event_map: self.assertIn(e, endpoint.STACK_FAILURE_EVENTS) self.assertEqual(event_map[e], endpoint.STACK_FAILURE_EVENTS[e]) self.assertEqual('PROJECT', endpoint.project_id) self.assertEqual('CLUSTER_ID', endpoint.cluster_id)