def test_node_handle_exception(self, mock_warning): ex = exception.ResourceStatusError(resource_id='FAKE_ID', status='FAKE_STATUS', reason='FAKE_REASON') node = nodem.Node('node1', self.profile.id, None) node.store(self.context) node._handle_exception(self.context, 'ACTION', 'STATUS', ex) db_node = db_api.node_get(self.context, node.id) self.assertEqual(node.ERROR, db_node.status) self.assertEqual( 'Profile failed in ACTIOing resource ' '(FAKE_ID) due to: %s' % six.text_type(ex), db_node.status_reason) self.assertEqual('FAKE_ID', db_node.physical_id) mock_warning.assert_called_with(self.context, node, 'ACTION', 'STATUS', six.text_type(ex)) # Exception happens before physical node creation started. ex = exception.ResourceCreationFailure(rtype='stack', code=400, message='Bad request') node = nodem.Node('node1', self.profile.id, None) node.store(self.context) node._handle_exception(self.context, 'CREATE', 'STATUS', ex) db_node = db_api.node_get(self.context, node.id) self.assertEqual(node.ERROR, db_node.status) self.assertEqual( 'Profile failed in creating node due to: ' '%s' % six.text_type(ex), db_node.status_reason) self.assertEqual(None, db_node.physical_id) mock_warning.assert_called_with(self.context, node, 'CREATE', 'STATUS', six.text_type(ex))
def test_node_get(self): res = shared.create_node(self.ctx, self.cluster, self.profile) node = db_api.node_get(self.ctx, res.id) self.assertIsNotNone(node) node = db_api.node_get(self.ctx, UUID2) self.assertIsNone(node)
def test_node_handle_exception(self, mock_warning): ex = exception.ResourceStatusError(resource_id='FAKE_ID', status='FAKE_STATUS', reason='FAKE_REASON') node = nodem.Node('node1', self.profile.id, None, self.context) node.store(self.context) node._handle_exception(self.context, 'ACTION', 'STATUS', ex) db_node = db_api.node_get(self.context, node.id) self.assertEqual(node.ERROR, db_node.status) self.assertEqual('Profile failed in ACTIOing resource ' '(FAKE_ID) due to: %s' % six.text_type(ex), db_node.status_reason) self.assertEqual('FAKE_ID', db_node.physical_id) mock_warning.assert_called_with(self.context, node, 'ACTION', 'STATUS', six.text_type(ex)) # Exception happens before physical node creation started. ex = exception.ResourceCreationFailure(rtype='stack', code=400, message='Bad request') node = nodem.Node('node1', self.profile.id, None, self.context) node.store(self.context) node._handle_exception(self.context, 'CREATE', 'STATUS', ex) db_node = db_api.node_get(self.context, node.id) self.assertEqual(node.ERROR, db_node.status) self.assertEqual('Profile failed in creating node due to: ' '%s' % six.text_type(ex), db_node.status_reason) self.assertEqual(None, db_node.physical_id) mock_warning.assert_called_with(self.context, node, 'CREATE', 'STATUS', six.text_type(ex))
def test_node_get_with_admin_context(self): res = shared.create_node(self.ctx, self.cluster, self.profile) admin_ctx = utils.dummy_context(project='a_different_project', is_admin=True) node = db_api.node_get(admin_ctx, res.id, project_safe=True) self.assertIsNone(node) node = db_api.node_get(admin_ctx, res.id, project_safe=False) self.assertIsNotNone(node)
def test_node_get(self): res = shared.create_node(self.ctx, self.cluster, self.profile) node = db_api.node_get(self.ctx, res.id) self.assertIsNotNone(node) node = db_api.node_get(self.ctx, UUID2) self.assertIsNone(node) nodes = db_api.node_get_all_by_cluster(self.ctx, self.cluster.id) self.assertEqual(1, len(nodes))
def test_node_get_diff_project(self): res = shared.create_node(self.ctx, self.cluster, self.profile) node = db_api.node_get(self.ctx, res.id) self.assertIsNotNone(node) ctx_new = utils.dummy_context(project='a_different_project') node = db_api.node_get(ctx_new, res.id) self.assertIsNone(node) node = db_api.node_get(ctx_new, res.id, project_safe=False) self.assertIsNotNone(node)
def test_node_add_node_dependents(self): node_id = 'host_node' node = shared.create_node(self.ctx, None, self.profile, id=node_id, name='node-1') db_api.node_add_dependents(self.ctx, node_id, 'NODE1') node = db_api.node_get(self.ctx, node_id) nodes = node.dependents['nodes'] self.assertEqual(['NODE1'], nodes) db_api.node_add_dependents(self.ctx, node_id, 'NODE2') new_node = db_api.node_get(self.ctx, node_id) nodes = new_node.dependents['nodes'] self.assertEqual(['NODE1', 'NODE2'], nodes)
def test_node_remove_profile_dependents(self): node_id = 'host_node' dependents = {'profiles': ['P1', 'P2']} node = shared.create_node(self.ctx, None, self.profile, id=node_id, dependents=dependents) db_api.node_remove_dependents(self.ctx, node_id, 'P1', 'profile') node = db_api.node_get(self.ctx, node_id) dependents = node.dependents self.assertEqual({'profiles': ['P2']}, dependents) db_api.node_remove_dependents(self.ctx, node_id, 'P2', 'profile') node = db_api.node_get(self.ctx, node_id) dependents = node.dependents self.assertEqual({}, dependents)
def test_cluster_delete(self): cluster = shared.create_cluster(self.ctx, self.profile) cluster_id = cluster.id node = shared.create_node(self.ctx, cluster, self.profile) db_api.cluster_delete(self.ctx, cluster_id) self.assertIsNone(db_api.cluster_get(self.ctx, cluster_id)) res = db_api.node_get(self.ctx, node.id) self.assertIsNone(res) self.assertRaises(exception.ResourceNotFound, db_api.cluster_delete, self.ctx, cluster_id) # Testing child nodes deletion res = db_api.node_get(self.ctx, node.id) self.assertIsNone(res)
def test_cluster_delete(self): cluster = shared.create_cluster(self.ctx, self.profile) cluster_id = cluster.id node = shared.create_node(self.ctx, cluster, self.profile) db_api.cluster_delete(self.ctx, cluster_id) self.assertIsNone(db_api.cluster_get(self.ctx, cluster_id)) res = db_api.node_get(self.ctx, node.id) self.assertIsNone(res) self.assertRaises(exception.ClusterNotFound, db_api.cluster_delete, self.ctx, cluster_id) # Testing child nodes deletion res = db_api.node_get(self.ctx, node.id) self.assertIsNone(res)
def test_node_get_show_deleted(self): res = shared.create_node(self.ctx, self.cluster, self.profile) node_id = res.id node = db_api.node_get(self.ctx, node_id) self.assertIsNotNone(node) db_api.node_delete(self.ctx, node_id) node = db_api.node_get(self.ctx, node_id) self.assertIsNone(node) node = db_api.node_get(self.ctx, node_id, show_deleted=False) self.assertIsNone(node) node = db_api.node_get(self.ctx, node_id, show_deleted=True) self.assertEqual(node_id, node.id)
def test_node_store_init(self, mock_info): node = nodem.Node('node1', self.profile.id, self.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 = db_api.node_get(self.context, node_id) self.assertIsNotNone(node_info) self.assertEqual('node1', node_info.name) self.assertEqual('', node_info.physical_id) self.assertEqual(self.cluster.id, node_info.cluster_id) self.assertEqual(self.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_time) self.assertIsNone(node_info.created_time) self.assertIsNone(node_info.updated_time) self.assertIsNone(node_info.deleted_time) self.assertEqual('INIT', node_info.status) self.assertEqual('Initializing', node_info.status_reason) self.assertEqual({}, node_info.meta_data) self.assertEqual({}, node_info.data) mock_info.assert_called_once_with(self.context, node, 'create')
def test_node_delete_not_found(self): node_id = 'BogusNodeID' res = db_api.node_delete(self.ctx, node_id) self.assertIsNone(res) res = db_api.node_get(self.ctx, node_id) self.assertIsNone(res)
def test_node_add_profile_dependents(self): node_id = 'host_node' new_profile = shared.create_profile(self.ctx) node = shared.create_node(self.ctx, None, self.profile, id=node_id, name='node-1') db_api.node_add_dependents(self.ctx, node_id, new_profile.id, 'profile') node = db_api.node_get(self.ctx, node_id) nodes = node.dependents['profiles'] self.assertEqual([new_profile.id], nodes) new_profile_1 = shared.create_profile(self.ctx) db_api.node_add_dependents(self.ctx, node_id, new_profile_1.id, 'profile') new_node = db_api.node_get(self.ctx, node_id) nodes = new_node.dependents['profiles'] self.assertEqual([new_profile.id, new_profile_1.id], nodes)
def test_node_delete(self): node = shared.create_node(self.ctx, self.cluster, self.profile) node_id = node.id cluster = db_api.cluster_get(self.ctx, self.cluster.id) self.assertEqual(1, cluster.size) db_api.node_delete(self.ctx, node_id) res = db_api.node_get(self.ctx, node_id) self.assertIsNone(res) cluster = db_api.cluster_get(self.ctx, self.cluster.id) self.assertEqual(0, cluster.size)
def test_node_update(self): node = shared.create_node(self.ctx, self.cluster, self.profile) new_attributes = { 'name': 'new node name', 'status': 'bad status', 'role': 'a new role', } db_api.node_update(self.ctx, node.id, new_attributes) node = db_api.node_get(self.ctx, node.id) self.assertEqual('new node name', node.name) self.assertEqual('bad status', node.status) self.assertEqual('a new role', node.role)
def test_node_delete(self): node = shared.create_node(self.ctx, self.cluster, self.profile) node_id = node.id nodes = db_api.node_get_all_by_cluster(self.ctx, self.cluster.id) self.assertEqual(1, len(nodes)) db_api.node_delete(self.ctx, node_id) res = db_api.node_get(self.ctx, node_id) self.assertIsNone(res) nodes = db_api.node_get_all_by_cluster(self.ctx, self.cluster.id) self.assertEqual(0, len(nodes))
def test_cluster_delete(self): cluster = shared.create_cluster(self.ctx, self.profile) cluster_id = cluster.id node = shared.create_node(self.ctx, cluster, self.profile) db_api.cluster_delete(self.ctx, cluster_id) self.assertIsNone(db_api.cluster_get(self.ctx, cluster_id, show_deleted=False)) res = db_api.node_get(self.ctx, node.id) self.assertIsNone(res) self.assertRaises(exception.ClusterNotFound, db_api.cluster_delete, self.ctx, cluster_id) # Testing soft delete ret_cluster = db_api.cluster_get(self.ctx, cluster_id, show_deleted=True) self.assertIsNotNone(ret_cluster) self.assertEqual(cluster_id, ret_cluster.id) self.assertEqual('db_test_cluster_name', ret_cluster.name) # Testing child nodes deletion res = db_api.node_get(self.ctx, node.id) self.assertIsNone(res)
def test_node_create(self): res = shared.create_node(self.ctx, self.cluster, self.profile) node = db_api.node_get(self.ctx, res.id) self.assertIsNotNone(node) self.assertEqual('test_node_name', node.name) self.assertEqual(UUID1, node.physical_id) self.assertEqual(1, node.index) self.assertIsNone(node.role) self.assertIsNone(node.created_at) self.assertIsNone(node.updated_at) self.assertEqual('ACTIVE', node.status) self.assertEqual('create complete', node.status_reason) self.assertEqual('{"foo": "123"}', jsonutils.dumps(node.meta_data)) self.assertEqual('{"key1": "value1"}', jsonutils.dumps(node.data)) self.assertEqual(self.cluster.id, node.cluster_id) self.assertEqual(self.profile.id, node.profile_id)
def test_node_create(self): nodes = db_api.node_get_all_by_cluster(self.ctx, self.cluster.id) self.assertEqual(0, len(nodes)) res = shared.create_node(self.ctx, self.cluster, self.profile) node = db_api.node_get(self.ctx, res.id) self.assertIsNotNone(node) self.assertEqual('test_node_name', node.name) self.assertEqual(UUID1, node.physical_id) self.assertEqual(1, node.index) self.assertIsNone(node.role) self.assertIsNone(node.created_at) self.assertIsNone(node.updated_at) self.assertEqual('ACTIVE', node.status) self.assertEqual('create complete', node.status_reason) self.assertEqual('{"foo": "123"}', jsonutils.dumps(node.meta_data)) self.assertEqual('{"key1": "value1"}', jsonutils.dumps(node.data)) self.assertEqual(self.cluster.id, node.cluster_id) self.assertEqual(self.profile.id, node.profile_id) nodes = db_api.node_get_all_by_cluster(self.ctx, self.cluster.id) self.assertEqual(1, len(nodes))
def test_node_create(self): cluster = db_api.cluster_get(self.ctx, self.cluster.id) self.assertEqual(0, cluster.size) res = shared.create_node(self.ctx, self.cluster, self.profile) node = db_api.node_get(self.ctx, res.id) self.assertIsNotNone(node) self.assertEqual('test_node_name', node.name) self.assertEqual(UUID1, node.physical_id) self.assertEqual(0, node.index) self.assertIsNone(node.role) self.assertIsNone(node.created_time) self.assertIsNone(node.updated_time) self.assertIsNone(node.deleted_time) self.assertEqual('ACTIVE', node.status) self.assertEqual('create complete', node.status_reason) self.assertEqual('{"foo": "123"}', json.dumps(node.tags)) self.assertEqual('{"key1": "value1"}', json.dumps(node.data)) self.assertEqual(self.cluster.id, node.cluster_id) self.assertEqual(self.profile.id, node.profile_id) cluster = db_api.cluster_get(self.ctx, self.cluster.id) self.assertEqual(1, cluster.size)
def test_node_update_cluster_status_updated(self): cluster = db_api.cluster_get(self.ctx, self.cluster.id) self.assertEqual('INIT', cluster.status) node = shared.create_node(self.ctx, self.cluster, self.profile) new_attributes = { 'name': 'new_name', 'status': 'ERROR', 'status_reason': 'Something is wrong', } db_api.node_update(self.ctx, node.id, new_attributes) node = db_api.node_get(self.ctx, node.id) self.assertEqual('new_name', node.name) self.assertEqual('ERROR', node.status) self.assertEqual('Something is wrong', node.status_reason) cluster = db_api.cluster_get(self.ctx, self.cluster.id) self.assertEqual('WARNING', cluster.status) reason = 'Node new_name: Something is wrong' self.assertEqual(reason, cluster.status_reason)
def test_node_get_with_admin_context(self): res = shared.create_node(self.ctx, self.cluster, self.profile) admin_ctx = utils.dummy_context(project='a_different_project', is_admin=True) node = db_api.node_get(admin_ctx, res.id, project_safe=True) self.assertIsNotNone(node)
def test_node_status_reason_truncate(self): node = shared.create_node(self.ctx, self.cluster, self.profile, status_reason='a' * 1024) ret_node = db_api.node_get(self.ctx, node.id) self.assertEqual('a' * 255, ret_node.status_reason)