def test_receiver_create_webhook_succeed(self, mock_create, mock_find): fake_cluster = mock.Mock() fake_cluster.user = self.ctx.user mock_find.return_value = fake_cluster fake_receiver = mock.Mock(id='FAKE_RECIEVER') fake_receiver.to_dict.return_value = { 'id': 'FAKE_RECEIVER', 'foo': 'bar' } mock_create.return_value = fake_receiver req = orro.ReceiverCreateRequestBody(name='r1', type=consts.RECEIVER_WEBHOOK, cluster_id='C1', action=consts.CLUSTER_RESIZE) result = self.eng.receiver_create(self.ctx, req.obj_to_primitive()) self.assertIsInstance(result, dict) self.assertEqual('FAKE_RECEIVER', result['id']) mock_find.assert_called_once_with(self.ctx, 'C1') mock_create.assert_called_once_with(self.ctx, 'webhook', fake_cluster, consts.CLUSTER_RESIZE, name='r1', user=self.ctx.user, project=self.ctx.project, domain=self.ctx.domain, params={}) # test params passed mock_create.reset_mock() req = orro.ReceiverCreateRequestBody(name='r1', type=consts.RECEIVER_WEBHOOK, cluster_id='C1', action=consts.CLUSTER_RESIZE, params={'FOO': 'BAR'}) self.eng.receiver_create(self.ctx, req.obj_to_primitive()) mock_create.assert_called_once_with(self.ctx, 'webhook', fake_cluster, consts.CLUSTER_RESIZE, name='r1', user=self.ctx.user, project=self.ctx.project, domain=self.ctx.domain, params={'FOO': 'BAR'})
def test_receiver_create_webhook_action_not_specified(self, mock_find): fake_cluster = mock.Mock() fake_cluster.user = self.ctx.user_id mock_find.return_value = fake_cluster req1 = orro.ReceiverCreateRequestBody(name='r1', type='webhook', cluster_id='C1') req2 = orro.ReceiverCreateRequestBody(name='r1', type='webhook', cluster_id='C1', action=None) for req in [req1, req2]: ex = self.assertRaises(rpc.ExpectedException, self.eng.receiver_create, self.ctx, req.obj_to_primitive()) self.assertEqual(exc.BadRequest, ex.exc_info[0]) self.assertEqual("Action name is required for creating webhook " "receiver.", six.text_type(ex.exc_info[1]))
def test_receiver_create_request(self): body = receivers.ReceiverCreateRequestBody(**self.body) request = {'receiver': body} sot = receivers.ReceiverCreateRequest(**request) self.assertIsInstance(sot.receiver, receivers.ReceiverCreateRequestBody) self.assertEqual('test-receiver', sot.receiver.name) self.assertEqual('message', sot.receiver.type)
def test_receiver_create_request_body(self): sot = receivers.ReceiverCreateRequestBody(**self.body) self.assertEqual('test-receiver', sot.name) self.assertEqual('message', sot.type) sot.obj_set_defaults() self.assertEqual({}, sot.actor) self.assertEqual({}, sot.params) self.assertFalse(sot.obj_attr_is_set('action')) self.assertFalse(sot.obj_attr_is_set('cluster_id'))
def test_receiver_create_webhook_cluster_not_specified(self, mock_find): fake_cluster = mock.Mock() fake_cluster.user = self.ctx.user_id mock_find.return_value = fake_cluster req1 = orro.ReceiverCreateRequestBody(name='r1', type='webhook', action='CLUSTER_RESIZE') req2 = orro.ReceiverCreateRequestBody(name='r1', type='webhook', cluster_id=None, action='CLUSTER_RESIZE') for req in [req1, req2]: ex = self.assertRaises(rpc.ExpectedException, self.svc.receiver_create, self.ctx, req.obj_to_primitive()) self.assertEqual(exc.BadRequest, ex.exc_info[0]) self.assertEqual( "Cluster identity is required for creating " "webhook receiver.", str(ex.exc_info[1]))
def test_receiver_create_name_duplicated(self, mock_get): cfg.CONF.set_override('name_unique', True, enforce_type=True) # Return an existing instance mock_get.return_value = mock.Mock() req = orro.ReceiverCreateRequestBody(name='r1', type='message') ex = self.assertRaises(rpc.ExpectedException, self.eng.receiver_create, self.ctx, req.obj_to_primitive()) self.assertEqual(exc.BadRequest, ex.exc_info[0]) self.assertEqual( "The request is malformed: A receiver named 'r1' " "already exists.", six.text_type(ex.exc_info[1]))
def test_receiver_create_webhook_cluster_not_found(self, mock_find): mock_find.side_effect = exc.ResourceNotFound(type='cluster', id='C1') req = orro.ReceiverCreateRequestBody( name='r1', type=consts.RECEIVER_WEBHOOK, cluster_id='C1', action=consts.CLUSTER_RESIZE) ex = self.assertRaises(rpc.ExpectedException, self.eng.receiver_create, self.ctx, req.obj_to_primitive()) self.assertEqual(exc.BadRequest, ex.exc_info[0]) self.assertEqual("The referenced cluster 'C1' could not be found.", six.text_type(ex.exc_info[1]))
def test_receiver_create_name_duplicated(self, mock_get): cfg.CONF.set_override('name_unique', True) # Return an existing instance mock_get.return_value = mock.Mock() req = orro.ReceiverCreateRequestBody(name='r1', type=consts.RECEIVER_MESSAGE) ex = self.assertRaises(rpc.ExpectedException, self.svc.receiver_create, self.ctx, req.obj_to_primitive()) self.assertEqual(exc.BadRequest, ex.exc_info[0]) self.assertEqual("A receiver named 'r1' already exists.", str(ex.exc_info[1]))
def test_receiver_create_request_body_full(self): body = copy.deepcopy(self.body) body['type'] = 'webhook' body['cluster_id'] = 'cluster-01' body['action'] = consts.CLUSTER_SCALE_OUT body['actor'] = {'user': '******', 'password': '******'} body['params'] = {'count': '1'} sot = receivers.ReceiverCreateRequestBody(**body) self.assertEqual('test-receiver', sot.name) self.assertEqual('webhook', sot.type) self.assertEqual('cluster-01', sot.cluster_id) self.assertEqual(consts.CLUSTER_SCALE_OUT, sot.action) self.assertEqual({'user': '******', 'password': '******'}, sot.actor) self.assertEqual({'count': '1'}, sot.params)
def test_receiver_create_webhook_invalid_action(self, mock_find): fake_cluster = mock.Mock() fake_cluster.user = '******' mock_find.return_value = fake_cluster req = orro.ReceiverCreateRequestBody( name='r1', type=consts.RECEIVER_WEBHOOK, cluster_id='C1', action=consts.CLUSTER_CREATE) ex = self.assertRaises(rpc.ExpectedException, self.eng.receiver_create, self.ctx, req.obj_to_primitive()) self.assertEqual(exc.BadRequest, ex.exc_info[0]) self.assertEqual("Action name cannot be any of ['CLUSTER_CREATE'].", six.text_type(ex.exc_info[1]))
def test_receiver_create_message_succeed(self, mock_create): fake_receiver = mock.Mock(id='FAKE_RECEIVER') fake_receiver.to_dict.return_value = { 'id': 'FAKE_RECEIVER', 'foo': 'bar' } mock_create.return_value = fake_receiver req = orro.ReceiverCreateRequestBody(name='r1', type='message') result = self.eng.receiver_create(self.ctx, req.obj_to_primitive()) self.assertIsInstance(result, dict) self.assertEqual('FAKE_RECEIVER', result['id']) mock_create.assert_called_once_with( self.ctx, 'message', None, None, name='r1', user=self.ctx.user_id, project=self.ctx.project_id, domain=self.ctx.domain_id, params={})
def test_receiver_create_webhook_forbidden(self, mock_create, mock_find): fake_cluster = mock.Mock() fake_cluster.user = '******' mock_find.return_value = fake_cluster req = orro.ReceiverCreateRequestBody( name='r1', type=consts.RECEIVER_WEBHOOK, cluster_id='C1', action=consts.CLUSTER_RESIZE) ex = self.assertRaises(rpc.ExpectedException, self.eng.receiver_create, self.ctx, req.obj_to_primitive()) self.assertEqual(exc.Forbidden, ex.exc_info[0]) fake_receiver = mock.Mock(id='FAKE_RECEIVER') fake_receiver.to_dict.return_value = { 'id': 'FAKE_RECEIVER', 'foo': 'bar' } mock_create.return_value = fake_receiver # an admin can do this self.ctx.is_admin = True result = self.eng.receiver_create(self.ctx, req.obj_to_primitive()) self.assertIsInstance(result, dict)