Esempio n. 1
0
    def test_node_recover_no_physical_id(self):
        node = nodem.Node('node1', PROFILE_ID, None)
        action = mock.Mock()

        res = node.do_recover(self.context, action)

        self.assertFalse(res)
Esempio n. 2
0
    def test_node_recover_mult_rebuild(self, mock_recover, mock_status):
        def set_status(*args, **kwargs):
            if args[1] == 'ACTIVE':
                node.physical_id = new_id
                node.data = {'recovery': 'RECREATE'}

        node = nodem.Node('node1', PROFILE_ID, '', id='fake')
        node.physical_id = 'd94d6333-82e6-4f87-b7ab-b786776df9d1'
        new_id = '166db83b-b4a4-49ef-96a8-6c0fdd882d1a'
        mock_recover.return_value = new_id, True
        mock_status.side_effect = set_status
        mock_check = self.patchobject(pb.Profile, 'check_object')
        mock_check.return_value = False
        action = mock.Mock(
            outputs={}, inputs={'operation': [{'name': 'REBOOT'},
                                              {'name': 'REBUILD'}],
                                'check': True})

        res = node.do_recover(self.context, action)

        self.assertTrue(res)
        mock_check.assert_called_once_with(self.context, node)
        mock_recover.assert_called_once_with(
            self.context, node, **action.inputs)
        self.assertEqual('node1', node.name)
        self.assertEqual(new_id, node.physical_id)
        self.assertEqual(PROFILE_ID, node.profile_id)
        mock_status.assert_has_calls([
            mock.call(self.context, 'RECOVERING',
                      reason='Recovery in progress'),
            mock.call(self.context, consts.NS_ACTIVE,
                      reason='Recovery succeeded',
                      physical_id=new_id,
                      data={'recovery': 'RECREATE'})])
Esempio n. 3
0
    def test_node_recover_new_object(self, mock_recover, mock_status):
        def set_status(*args, **kwargs):
            if args[1] == 'ACTIVE':
                node.physical_id = new_id
                node.data = {'recovery': 'RECREATE'}

        node = nodem.Node('node1', PROFILE_ID, '')
        node.physical_id = 'd94d6333-82e6-4f87-b7ab-b786776df9d1'
        new_id = '166db83b-b4a4-49ef-96a8-6c0fdd882d1a'

        # action = node_action.NodeAction(node.id, 'ACTION', self.ctx)

        mock_recover.return_value = new_id, True
        mock_status.side_effect = set_status
        action = mock.Mock()
        action.inputs = {'operation': ['SWIM', 'DANCE']}

        res = node.do_recover(self.context, action)

        self.assertTrue(res)
        mock_recover.assert_called_once_with(
            self.context, node, **action.inputs)
        self.assertEqual('node1', node.name)
        self.assertEqual(new_id, node.physical_id)
        self.assertEqual(PROFILE_ID, node.profile_id)
        self.assertEqual({'recovery': 'RECREATE'}, node.data)
        mock_status.assert_has_calls([
            mock.call(self.context, 'RECOVERING',
                      reason='Recovery in progress'),
            mock.call(self.context, consts.NS_ACTIVE,
                      reason='Recovery succeeded',
                      physical_id=new_id,
                      data={'recovery': 'RECREATE'})])
Esempio n. 4
0
    def test_node_update_EResourceUpdate(self, mock_db, mock_update):
        node = nodem.Node('node1', PROFILE_ID, CLUSTER_ID, self.context)
        node.physical_id = uuidutils.generate_uuid()
        node.id = uuidutils.generate_uuid()

        ex = exception.EResourceUpdate(type='PROFILE', id='ID',
                                       message='reason')
        mock_update.side_effect = ex
        new_id = uuidutils.generate_uuid()
        utils.create_profile(self.context, new_id)

        res = node.do_update(self.context, {'new_profile_id': new_id})

        self.assertFalse(res)
        self.assertNotEqual(new_id, node.profile_id)
        mock_db.assert_has_calls([
            mock.call(
                self.context, node.id,
                {"status": "UPDATING", "status_reason": "Update in progress"}
            ),
            mock.call(
                self.context, node.id,
                {"status": "ERROR",
                 "status_reason": "Failed in updating PROFILE 'ID': reason.",
                 "updated_at": mock.ANY}
            )
        ])
        self.assertEqual(1, mock_update.call_count)
Esempio n. 5
0
    def test_node_operation_no_physical_id(self):
        node = nodem.Node('node1', PROFILE_ID, None)
        inputs = {'operation': 'dance', 'params': {'style': 'tango'}}

        res = node.do_operation(self.context, **inputs)

        self.assertFalse(res)
Esempio n. 6
0
    def test_node_store_init(self):
        node = nodem.Node('node1',
                          PROFILE_ID,
                          CLUSTER_ID,
                          self.context,
                          role='first_node',
                          index=1)
        self.assertIsNone(node.id)
        node_id = node.store(self.context)
        self.assertIsNotNone(node_id)

        node_info = node_obj.Node.get(self.context, node_id)
        self.assertIsNotNone(node_info)
        self.assertEqual('node1', node_info.name)
        self.assertIsNone(node_info.physical_id)
        self.assertEqual(CLUSTER_ID, node_info.cluster_id)
        self.assertEqual(PROFILE_ID, node_info.profile_id)
        self.assertEqual(self.context.user, node_info.user)
        self.assertEqual(self.context.project, node_info.project)
        self.assertEqual(self.context.domain, node_info.domain)
        self.assertEqual(1, node_info.index)
        self.assertEqual('first_node', node.role)

        self.assertIsNotNone(node_info.init_at)
        self.assertIsNone(node_info.created_at)
        self.assertIsNone(node_info.updated_at)

        self.assertEqual('INIT', node_info.status)
        self.assertEqual('Initializing', node_info.status_reason)
        self.assertEqual({}, node_info.metadata)
        self.assertEqual({}, node_info.data)
Esempio n. 7
0
    def test_run_workflow_failed_creation(self):
        node = nodem.Node('node1', PROFILE_ID, 'FAKE_CLUSTER')
        node.physical_id = 'FAKE_NODE'

        wfc = mock.Mock()
        wfc.workflow_find.return_value = None
        err = exception.InternalError(message='boom')
        wfc.workflow_create.side_effect = err
        wfc.execution_create = mock.Mock()
        x_profile = mock.Mock()
        x_profile.workflow = mock.Mock(return_value=wfc)
        node.rt['profile'] = x_profile

        options = {
            'workflow_name': 'foo',
            'inputs': {
                'definition': {'bar': 'baz'},
                'FAKE_KEY1': 'FAKE_VALUE1',
                'FAKE_KEY2': 'FAKE_VALUE2',
            }
        }

        ex = self.assertRaises(exception.EResourceOperation,
                               node.run_workflow,
                               **options)

        self.assertEqual("Failed in executing workflow 'foo': boom.",
                         six.text_type(ex))
        x_profile.workflow.assert_called_once_with(node)
        wfc.workflow_find.assert_called_once_with('foo')
        wfc.workflow_create.assert_called_once_with(
            {'bar': 'baz'}, scope='private')
        self.assertEqual(0, wfc.execution_create.call_count)
Esempio n. 8
0
    def test_run_workflow_no_physical_id(self):
        node = nodem.Node('node1', PROFILE_ID, 'FAKE_CLUSTER')
        node.physical_id = None

        res = node.run_workflow()

        self.assertFalse(res)
Esempio n. 9
0
 def test_node_delete_not_created(self, mock_delete, mock_db_delete):
     node = nodem.Node('node1', PROFILE_ID, CLUSTER_ID, self.context)
     self.assertIsNone(node.physical_id)
     res = node.do_delete(self.context)
     self.assertTrue(res)
     self.assertFalse(mock_delete.called)
     self.assertTrue(mock_db_delete.called)
Esempio n. 10
0
    def test_node_update_name(self, mock_db, mock_update):
        node = nodem.Node('node1', PROFILE_ID, CLUSTER_ID, self.context)
        node.store(self.context)

        physical_id = uuidutils.generate_uuid()
        node.physical_id = physical_id

        res = node.do_update(self.context, {'name': 'new_name',
                                            'role': 'new_role',
                                            'metadata': {'k': {'m': 'v'}},
                                            'bogus': 'foo'})

        self.assertTrue(res)
        self.assertEqual('new_name', node.name)
        mock_db.assert_has_calls([
            mock.call(self.context, node.id,
                      {'status': 'UPDATING',
                       'status_reason': 'Update in progress'}),
            mock.call(self.context, node.id,
                      {'status': 'ACTIVE',
                       'status_reason': 'Update succeeded',
                       'name': 'new_name',
                       'role': 'new_role',
                       'metadata': {'k': {'m': 'v'}},
                       'updated_at': mock.ANY})
        ])
        self.assertEqual(0, mock_update.call_count)
Esempio n. 11
0
    def test_node_init(self):
        node = nodem.Node('node1',
                          self.profile.id,
                          self.cluster.id,
                          role='first_node')
        self.assertIsNone(node.id)
        self.assertEqual('node1', node.name)
        self.assertEqual('', node.physical_id)
        self.assertEqual(self.profile.id, node.profile_id)
        self.assertEqual('', node.user)
        self.assertEqual('', node.project)
        self.assertEqual('', node.domain)
        self.assertEqual(self.cluster.id, node.cluster_id)
        self.assertEqual(-1, node.index)
        self.assertEqual('first_node', node.role)

        self.assertIsNone(node.init_at)
        self.assertIsNone(node.created_at)
        self.assertIsNone(node.updated_at)

        self.assertEqual('INIT', node.status)
        self.assertEqual('Initializing', node.status_reason)
        self.assertEqual({}, node.data)
        self.assertEqual({}, node.metadata)
        self.assertEqual({}, node.rt)
Esempio n. 12
0
    def test_run_workflow_workflow_is_found(self):
        node = nodem.Node('node1', PROFILE_ID, 'FAKE_CLUSTER')
        node.physical_id = 'FAKE_NODE'

        wfc = mock.Mock()
        wfc.workflow_find.return_value = mock.Mock(definition={'bar': 'baz'})
        wfc.workflow_create = mock.Mock()
        wfc.execution_create = mock.Mock()
        x_profile = mock.Mock()
        x_profile.workflow = mock.Mock(return_value=wfc)
        node.rt['profile'] = x_profile

        options = {
            'workflow_name': 'foo',
            'inputs': {
                'FAKE_KEY1': 'FAKE_VALUE1',
                'FAKE_KEY2': 'FAKE_VALUE2',
            }
        }

        res = node.run_workflow(**options)

        self.assertTrue(res)
        x_profile.workflow.assert_called_once_with(node)
        wfc.workflow_find.assert_called_once_with('foo')
        self.assertEqual(0, wfc.workflow_create.call_count)
        final_dict = {
            'cluster_id': 'FAKE_CLUSTER',
            'node_id': 'FAKE_NODE',
            'FAKE_KEY1': 'FAKE_VALUE1',
            'FAKE_KEY2': 'FAKE_VALUE2',
        }
        self._verify_execution_create_args('foo', final_dict, wfc)
Esempio n. 13
0
    def test_node_recover_operation_not_support(self, mock_set_status):
        node = nodem.Node('node1', PROFILE_ID, None)
        node.physical_id = 'd94d6333-82e6-4f87-b7ab-b786776df9d1'

        params = {'operation': 'foo'}
        res = node.do_recover(self.context, **params)

        self.assertFalse(res)
Esempio n. 14
0
 def test_node_delete_not_created(self, mock_delete, mock_db_delete):
     node = nodem.Node('node1', self.profile.id, self.cluster.id,
                       self.context)
     self.assertEqual('', node.physical_id)
     res = node.do_delete(self.context)
     self.assertTrue(res)
     self.assertFalse(mock_delete.called)
     self.assertTrue(mock_db_delete.called)
Esempio n. 15
0
 def test_node_create_not_init(self, mock_status):
     node = nodem.Node('node1', PROFILE_ID, CLUSTER_ID, self.context)
     node.status = 'NOT_INIT'
     res, reason = node.do_create(self.context)
     self.assertFalse(res)
     self.assertEqual('Node must be in INIT status', reason)
     mock_status.assert_any_call(self.context, consts.NS_ERROR,
                                 'Node must be in INIT status')
Esempio n. 16
0
 def test_node_join_same_cluster(self, mock_migrate):
     node = nodem.Node('node1', PROFILE_ID, CLUSTER_ID, self.context)
     node.index = 1
     res = node.do_join(self.context, CLUSTER_ID)
     self.assertTrue(res)
     self.assertEqual(1, node.index)
     self.assertIsNone(node.updated_at)
     self.assertFalse(mock_migrate.called)
Esempio n. 17
0
    def test_node_store_update(self):
        node = nodem.Node('node1', self.profile.id, None)
        node_id = node.store(self.context)

        node.name = 'new_name'
        new_node_id = node.store(self.context)

        self.assertEqual(node_id, new_node_id)
Esempio n. 18
0
    def test_node_recover_operation_not_support(self, mock_set_status):
        node = nodem.Node('node1', PROFILE_ID, None)
        node.physical_id = 'd94d6333-82e6-4f87-b7ab-b786776df9d1'
        action = mock.Mock(outputs={}, inputs={'operation': [{'name': 'foo'}]})

        res = node.do_recover(self.context, action)
        self.assertEqual({}, action.outputs)
        self.assertFalse(res)
Esempio n. 19
0
    def test_node_healthcheck(self, mock_healthcheck):
        node = nodem.Node('node1', PROFILE_ID, '')
        node.status = consts.NS_ACTIVE
        node.physical_id = 'd94d6333-82e6-4f87-b7ab-b786776df9d1'
        mock_healthcheck.return_value = True
        res = node.do_healthcheck(self.context)

        self.assertTrue(res)
        mock_healthcheck.assert_called_once_with(self.context, node)
Esempio n. 20
0
    def test_node_check_failed_check(self, mock_check, mock_store):
        node = nodem.Node('node1', PROFILE_ID, '')
        node.physical_id = 'd94d6333-82e6-4f87-b7ab-b786776df9d1'
        mock_check.return_value = False

        res = node.do_check(self.context)

        self.assertFalse(res)
        self.assertEqual('ERROR', node.status)
Esempio n. 21
0
    def test_node_create_not_created(self, mock_create, mock_status):

        node = nodem.Node('node1', PROFILE_ID, CLUSTER_ID, self.context)
        mock_create.return_value = None
        res = node.do_create(self.context)
        self.assertFalse(res)
        mock_status.assert_called_once_with(self.context,
                                            node.CREATING,
                                            reason='Creation in progress')
Esempio n. 22
0
 def test_node_leave_fail_update_server_metadata(self, mock_leave):
     node = nodem.Node('node1', PROFILE_ID, CLUSTER_ID, self.context,
                       index=1)
     mock_leave.return_value = False
     res = node.do_leave(self.context)
     self.assertFalse(res)
     self.assertNotEqual('', node.cluster_id)
     self.assertIsNone(node.updated_at)
     self.assertEqual(1, node.index)
Esempio n. 23
0
    def test_node_store_update(self):
        node = nodem.Node('node1', PROFILE_ID, "", user=self.context.user_id,
                          project=self.context.project_id)
        node_id = node.store(self.context)

        node.name = 'new_name'
        new_node_id = node.store(self.context)

        self.assertEqual(node_id, new_node_id)
Esempio n. 24
0
    def test_create_with_obj(self):
        params = copy.deepcopy(self.params)
        name = params.pop('name')
        profile_id = params.pop('profile_id')
        n1 = node.Node(name, profile_id, **params)

        sot = base.NodePayload.from_node(n1)

        self._verify_equality(sot, self.params)
Esempio n. 25
0
    def test_node_check_failed_check(self, mock_check, mock_store):
        node = nodem.Node('node1', self.profile.id, '')
        node.physical_id = 'fake_id'
        mock_check.return_value = False

        res = node.do_check(self.context)

        self.assertFalse(res)
        self.assertEqual('ERROR', node.status)
Esempio n. 26
0
    def test_node_check(self, mock_check):
        node = nodem.Node('node1', self.profile.id, '')
        node.physical_id = 'fake_id'
        mock_check.return_value = True

        res = node.do_check(self.context)

        self.assertTrue(res)
        mock_check.assert_called_once_with(self.context, node)
Esempio n. 27
0
 def test_node_join_fail_update_server_metadata(self, mock_join):
     node = nodem.Node('node1', self.profile.id, None, self.context)
     mock_join.return_value = False
     res = node.do_join(self.context, 'NEW_CLUSTER_ID')
     self.assertFalse(res)
     self.assertEqual('', node.cluster_id)
     self.assertEqual(-1, node.index)
     self.assertIsNone(node.updated_at)
     mock_join.assert_called_once_with(self.context, node, 'NEW_CLUSTER_ID')
Esempio n. 28
0
 def test_node_join_same_cluster(self, mock_migrate):
     node = nodem.Node('node1', self.profile.id, self.cluster.id,
                       self.context)
     node.index = 1
     res = node.do_join(self.context, self.cluster.id)
     self.assertTrue(res)
     self.assertEqual(1, node.index)
     self.assertIsNone(node.updated_at)
     self.assertFalse(mock_migrate.called)
Esempio n. 29
0
 def test_node_join_fail_update_server_metadata(self, mock_join):
     node = nodem.Node('node1', PROFILE_ID, None, self.context)
     mock_join.return_value = False
     cluster_id = 'fb8bca7a-a82b-4442-a40f-92d3e3cfb0b9'
     res = node.do_join(self.context, cluster_id)
     self.assertFalse(res)
     self.assertEqual('', node.cluster_id)
     self.assertEqual(-1, node.index)
     self.assertIsNone(node.updated_at)
     mock_join.assert_called_once_with(self.context, node, cluster_id)
Esempio n. 30
0
    def test_node_check_check_return_false(self, mock_check, mock_status):
        node = nodem.Node('node1', PROFILE_ID, '')
        node.physical_id = 'd94d6333-82e6-4f87-b7ab-b786776df9d1'
        mock_check.return_value = False

        res = node.do_check(self.context)

        self.assertFalse(res)
        mock_status.assert_called_once_with(self.context, consts.NS_ERROR,
                                            'Check: Node is not ACTIVE.')