コード例 #1
0
ファイル: test_node.py プロジェクト: KongJustin/senlin
    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))
コード例 #2
0
ファイル: test_node_api.py プロジェクト: tengqm/senlin
    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)
コード例 #3
0
ファイル: test_node.py プロジェクト: Tennyson53/senlin
    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))
コード例 #4
0
ファイル: test_node_api.py プロジェクト: tomas-mazak/senlin
    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)
コード例 #5
0
ファイル: test_node_api.py プロジェクト: tomas-mazak/senlin
 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)
コード例 #6
0
ファイル: test_node_api.py プロジェクト: onesafe/senlin
    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))
コード例 #7
0
ファイル: test_node_api.py プロジェクト: zhaihaifei/senlin
    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))
コード例 #8
0
ファイル: test_node_api.py プロジェクト: zhaihaifei/senlin
    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)
コード例 #9
0
ファイル: test_node_api.py プロジェクト: onesafe/senlin
    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)
コード例 #10
0
    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)
コード例 #11
0
    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)
コード例 #12
0
    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)
コード例 #13
0
ファイル: test_cluster_api.py プロジェクト: onesafe/senlin
    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)
コード例 #14
0
ファイル: test_node_api.py プロジェクト: tengqm/senlin
    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)
コード例 #15
0
ファイル: test_node_api.py プロジェクト: KongJustin/senlin
    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)
コード例 #16
0
ファイル: test_node.py プロジェクト: KongJustin/senlin
    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')
コード例 #17
0
ファイル: test_node_api.py プロジェクト: zhaihaifei/senlin
    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)
コード例 #18
0
ファイル: test_node.py プロジェクト: Tennyson53/senlin
    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')
コード例 #19
0
ファイル: test_node_api.py プロジェクト: tengqm/senlin
    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)
コード例 #20
0
    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)
コード例 #21
0
ファイル: test_node_api.py プロジェクト: tengqm/senlin
    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)
コード例 #22
0
ファイル: test_node_api.py プロジェクト: zhaihaifei/senlin
    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)
コード例 #23
0
ファイル: test_node_api.py プロジェクト: onesafe/senlin
    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))
コード例 #24
0
ファイル: test_node_api.py プロジェクト: tengqm/senlin
    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)
コード例 #25
0
ファイル: test_node_api.py プロジェクト: zhaihaifei/senlin
    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))
コード例 #26
0
ファイル: test_cluster_api.py プロジェクト: Alzon/senlin
    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)
コード例 #27
0
ファイル: test_node_api.py プロジェクト: tomas-mazak/senlin
    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)
コード例 #28
0
ファイル: test_node_api.py プロジェクト: onesafe/senlin
    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))
コード例 #29
0
ファイル: test_node_api.py プロジェクト: tengqm/senlin
    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)
コード例 #30
0
ファイル: test_node_api.py プロジェクト: zhaihaifei/senlin
    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)
コード例 #31
0
ファイル: test_node_api.py プロジェクト: tengqm/senlin
    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)
コード例 #32
0
ファイル: test_node_api.py プロジェクト: onesafe/senlin
 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)
コード例 #33
0
ファイル: test_node_api.py プロジェクト: tengqm/senlin
 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)