def test_request_to_primitive(self): body = nodes.NodeCreateRequestBody(**self.body) request = {'node': body} sot = nodes.NodeCreateRequest(**request) self.assertIsInstance(sot.node, nodes.NodeCreateRequestBody) self.assertEqual('test-node', sot.node.name) self.assertEqual('test-profile', sot.node.profile_id) res = sot.obj_to_primitive() self.assertEqual(['node'], res['senlin_object.changes']) self.assertEqual('NodeCreateRequest', res['senlin_object.name']) self.assertEqual('senlin', res['senlin_object.namespace']) self.assertEqual('1.0', res['senlin_object.version']) data = res['senlin_object.data']['node'] self.assertIn('profile_id', data['senlin_object.changes']) self.assertIn('name', data['senlin_object.changes']) self.assertEqual('NodeCreateRequestBody', data['senlin_object.name']) self.assertEqual('senlin', data['senlin_object.namespace']) self.assertEqual('1.0', data['senlin_object.version']) self.assertEqual( {'name': u'test-node', 'profile_id': u'test-profile'}, data['senlin_object.data'] )
def test_node_create2_profile_type_not_match(self, mock_profile, mock_cluster): mock_profile.side_effect = [ mock.Mock(id='NODE_PROFILE_ID', type='TYPE-A'), mock.Mock(id='CLUSTER_PROFILE_ID', type='TYPE-B'), ] mock_cluster.return_value = mock.Mock(id='CLUSTER_ID', profile_id='CLUSTER_PROFILE_ID') req = orno.NodeCreateRequestBody(name='NODE1', profile_id='NODE_PROFILE', cluster_id='FAKE_CLUSTER') ex = self.assertRaises(rpc.ExpectedException, self.eng.node_create2, self.ctx, req.obj_to_primitive()) self.assertEqual(exc.BadRequest, ex.exc_info[0]) self.assertEqual( "The request is malformed: Node and cluster have " "different profile type, operation aborted.", six.text_type(ex.exc_info[1])) mock_profile.assert_has_calls([ mock.call(self.ctx, 'NODE_PROFILE'), mock.call(self.ctx, 'CLUSTER_PROFILE_ID'), ]) mock_cluster.assert_called_once_with(self.ctx, 'FAKE_CLUSTER')
def test_node_create2(self, notify, mock_profile, mock_node, mock_action): mock_profile.return_value = mock.Mock(id='PROFILE_ID') x_node = mock.Mock(id='NODE_ID') x_node.to_dict.return_value = {'foo': 'bar'} mock_node.return_value = x_node mock_action.return_value = 'ACTION_ID' req = orno.NodeCreateRequestBody(name='NODE1', profile_id='PROFILE_NAME') result = self.eng.node_create2(self.ctx, req.obj_to_primitive()) self.assertEqual({'foo': 'bar', 'action': 'ACTION_ID'}, result) mock_profile.assert_called_once_with(self.ctx, 'PROFILE_NAME') mock_node.assert_called_once_with('NODE1', 'PROFILE_ID', '', self.ctx, index=-1, role='', metadata={}, user=self.ctx.user, project=self.ctx.project, domain=self.ctx.domain) x_node.store.assert_called_once_with(self.ctx) mock_action.assert_called_once_with(self.ctx, 'NODE_ID', consts.NODE_CREATE, name='node_create_NODE_ID', cause=action_mod.CAUSE_RPC, status=action_mod.Action.READY) notify.assert_called_once_with()
def test_node_create_request_body(self): sot = nodes.NodeCreateRequestBody(**self.body) self.assertEqual('test-node', sot.name) self.assertEqual('test-profile', sot.profile_id) sot.obj_set_defaults() self.assertEqual('', sot.cluster_id) self.assertEqual('', sot.role) self.assertEqual({}, sot.metadata)
def test_node_create_same_profile_type(self, notify, mock_profile, mock_cluster, mock_index, mock_node, mock_action, mock_node_name): mock_profile.side_effect = [ mock.Mock(id='NODE_PROFILE_ID', type='PROFILE_TYPE'), mock.Mock(id='CLUSTER_PROFILE_ID', type='PROFILE_TYPE'), ] x_cluster = mock.Mock(id='CLUSTER_ID', profile_id='CLUSTER_PROFILE_ID', config={}) mock_cluster.return_value = x_cluster mock_index.return_value = 12345 x_node = mock.Mock(id='NODE_ID') x_node.to_dict.return_value = {'foo': 'bar'} mock_node.return_value = x_node mock_action.return_value = 'ACTION_ID' mock_node_name.return_value = 'GENERATED_NAME' req = orno.NodeCreateRequestBody(name='NODE1', profile_id='PROFILE_NAME', cluster_id='FAKE_CLUSTER') result = self.eng.node_create(self.ctx, req.obj_to_primitive()) self.assertEqual({'foo': 'bar', 'action': 'ACTION_ID'}, result) mock_cluster.assert_called_once_with(self.ctx, 'FAKE_CLUSTER') mock_profile.assert_has_calls([ mock.call(self.ctx, 'PROFILE_NAME'), # for node mock.call(self.ctx, 'CLUSTER_PROFILE_ID'), # for cluster ]) mock_index.assert_called_once_with(self.ctx, 'CLUSTER_ID') mock_node.assert_called_once_with( self.ctx, { 'name': 'GENERATED_NAME', 'profile_id': 'NODE_PROFILE_ID', 'cluster_id': 'CLUSTER_ID', 'physical_id': None, 'index': 12345, 'role': '', 'metadata': {}, 'status': 'INIT', 'status_reason': 'Initializing', 'user': self.ctx.user_id, 'project': self.ctx.project_id, 'domain': self.ctx.domain_id, 'data': {}, 'dependents': {}, 'init_at': mock.ANY, }) mock_action.assert_called_once_with( self.ctx, 'NODE_ID', consts.NODE_CREATE, name='node_create_NODE_ID', cause=consts.CAUSE_RPC, status=action_mod.Action.READY) notify.assert_called_once_with()
def test_node_create_request_body_full(self): body = copy.deepcopy(self.body) body['role'] = 'master' body['cluster_id'] = 'cluster-01' body['metadata'] = {'foo': 'bar'} sot = nodes.NodeCreateRequestBody(**body) self.assertEqual('test-node', sot.name) self.assertEqual('test-profile', sot.profile_id) self.assertEqual('cluster-01', sot.cluster_id) self.assertEqual('master', sot.role) self.assertEqual({'foo': 'bar'}, sot.metadata)
def test_request_body_to_primitive(self): sot = nodes.NodeCreateRequestBody(**self.body) res = sot.obj_to_primitive() self.assertEqual({ 'name': u'test-node', 'profile_id': u'test-profile' }, res['senlin_object.data']) self.assertEqual('NodeCreateRequestBody', res['senlin_object.name']) self.assertEqual('senlin', res['senlin_object.namespace']) self.assertEqual('1.0', res['senlin_object.version']) self.assertIn('profile_id', res['senlin_object.changes']) self.assertIn('name', res['senlin_object.changes'])
def test_node_create2_profile_not_found(self, mock_profile): mock_profile.side_effect = exc.ResourceNotFound(type='profile', id='Bogus') req = orno.NodeCreateRequestBody(name='NODE1', profile_id='Bogus') ex = self.assertRaises(rpc.ExpectedException, self.eng.node_create2, self.ctx, req.obj_to_primitive()) self.assertEqual(exc.BadRequest, ex.exc_info[0]) self.assertEqual( "The request is malformed: The specified profile " "(Bogus) could not be found.", six.text_type(ex.exc_info[1])) mock_profile.assert_called_once_with(self.ctx, 'Bogus')
def test_node_create2_name_conflict(self, mock_get): cfg.CONF.set_override('name_unique', True, enforce_type=True) mock_get.return_value = mock.Mock() req = orno.NodeCreateRequestBody(name='NODE1', profile_id='PROFILE_NAME') ex = self.assertRaises(rpc.ExpectedException, self.eng.node_create2, self.ctx, req.obj_to_primitive()) self.assertEqual(exc.BadRequest, ex.exc_info[0]) self.assertEqual( _("The request is malformed: The node named " "(NODE1) already exists."), six.text_type(ex.exc_info[1]))
def test_node_create_cluster_not_found(self, mock_profile, mock_cluster): mock_cluster.side_effect = exc.ResourceNotFound(type='cluster', id='Bogus') req = orno.NodeCreateRequestBody(name='NODE1', profile_id='PROFILE_NAME', cluster_id='Bogus') ex = self.assertRaises(rpc.ExpectedException, self.eng.node_create, self.ctx, req.obj_to_primitive()) self.assertEqual(exc.BadRequest, ex.exc_info[0]) self.assertEqual("The specified cluster 'Bogus' could not be found.", six.text_type(ex.exc_info[1])) mock_cluster.assert_called_once_with(self.ctx, 'Bogus')
def test_node_create2_same_profile_type(self, notify, mock_profile, mock_cluster, mock_index, mock_node, mock_action): mock_profile.side_effect = [ mock.Mock(id='NODE_PROFILE_ID', type='PROFILE_TYPE'), mock.Mock(id='CLUSTER_PROFILE_ID', type='PROFILE_TYPE'), ] x_cluster = mock.Mock(id='CLUSTER_ID', profile_id='CLUSTER_PROFILE_ID') mock_cluster.return_value = x_cluster mock_index.return_value = 12345 x_node = mock.Mock(id='NODE_ID') x_node.to_dict.return_value = {'foo': 'bar'} mock_node.return_value = x_node mock_action.return_value = 'ACTION_ID' req = orno.NodeCreateRequestBody(name='NODE1', profile_id='PROFILE_NAME', cluster_id='FAKE_CLUSTER') result = self.eng.node_create2(self.ctx, req.obj_to_primitive()) self.assertEqual({'foo': 'bar', 'action': 'ACTION_ID'}, result) mock_cluster.assert_called_once_with(self.ctx, 'FAKE_CLUSTER') mock_profile.assert_has_calls([ mock.call(self.ctx, 'PROFILE_NAME'), # for node mock.call(self.ctx, 'CLUSTER_PROFILE_ID'), # for cluster ]) mock_index.assert_called_once_with(self.ctx, 'CLUSTER_ID') mock_node.assert_called_once_with('NODE1', 'NODE_PROFILE_ID', 'CLUSTER_ID', self.ctx, index=12345, role='', metadata={}, user=self.ctx.user, project=self.ctx.project, domain=self.ctx.domain) x_node.store.assert_called_once_with(self.ctx) mock_action.assert_called_once_with(self.ctx, 'NODE_ID', consts.NODE_CREATE, name='node_create_NODE_ID', cause=action_mod.CAUSE_RPC, status=action_mod.Action.READY) notify.assert_called_once_with()
def test_node_create(self, notify, mock_profile, mock_node, mock_action): mock_profile.return_value = mock.Mock(id='PROFILE_ID') x_node = mock.Mock(id='NODE_ID') x_node.to_dict.return_value = {'foo': 'bar'} mock_node.return_value = x_node mock_action.return_value = 'ACTION_ID' req = orno.NodeCreateRequestBody(name='NODE1', profile_id='PROFILE_NAME') result = self.eng.node_create(self.ctx, req.obj_to_primitive()) self.assertEqual({'foo': 'bar', 'action': 'ACTION_ID'}, result) mock_profile.assert_called_once_with(self.ctx, 'PROFILE_NAME') mock_node.assert_called_once_with( self.ctx, { 'name': 'NODE1', 'profile_id': 'PROFILE_ID', 'cluster_id': '', 'index': -1, 'role': '', 'metadata': {}, 'user': self.ctx.user_id, 'project': self.ctx.project_id, 'domain': self.ctx.domain_id, 'data': {}, 'init_at': mock.ANY, 'dependents': {}, 'physical_id': None, 'status': 'INIT', 'status_reason': 'Initializing', }) mock_action.assert_called_once_with( self.ctx, 'NODE_ID', consts.NODE_CREATE, name='node_create_NODE_ID', cause=consts.CAUSE_RPC, status=action_mod.Action.READY) notify.assert_called_once_with()