예제 #1
0
    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']
        )
예제 #2
0
    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')
예제 #3
0
    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()
예제 #4
0
    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)
예제 #5
0
    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()
예제 #6
0
 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)
예제 #7
0
 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'])
예제 #8
0
    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')
예제 #9
0
    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]))
예제 #10
0
    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')
예제 #11
0
    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()
예제 #12
0
    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()