예제 #1
0
    def get(self, task_id):  # pylint: disable=no-self-use
        """ GET the log of the task id """
        try:
            uuid.UUID(task_id)
        except ValueError:
            return api_utils.result_handler(status=1, data='Invalid task id')

        task_handler = TasksHandler()
        try:
            task = task_handler.get_task_by_taskid(task_id)
        except ValueError:
            return api_utils.result_handler(status=1, data='No such task id')

        task_log_dir = CONST.__getattribute__('dir_results')

        try:
            with open(os.path.join(task_log_dir, '{}.log'.format(task_id)),
                      'r') as log_file:
                data = log_file.readlines()
        except OSError as err:
            if err.errno == errno.ENOENT:
                return api_utils.result_handler(status=1,
                                                data='Log file does not exist')

            return api_utils.result_handler(status=1,
                                            data='Error with log file')

        return_data = {'data': data}

        return api_utils.result_handler(status=task.status, data=return_data)
예제 #2
0
    def get(self, task_id):  # pylint: disable=no-self-use
        """ GET the result of the task id """
        try:
            uuid.UUID(task_id)
        except ValueError:
            return api_utils.result_handler(status=1, data='Invalid task id')

        task_handler = TasksHandler()
        try:
            task = task_handler.get_task_by_taskid(task_id)
        except ValueError:
            return api_utils.result_handler(status=1, data='No such task id')

        status = task.status
        LOGGER.debug('Task status is: %s', status)

        if status not in ['IN PROGRESS', 'FAIL', 'FINISHED']:
            return api_utils.result_handler(status=1,
                                            data='internal server error')
        if status == 'IN PROGRESS':
            result = {'status': status, 'result': ''}
        elif status == 'FAIL':
            result = {'status': status, 'error': task.error}
        else:
            result = {'status': status, 'result': json.loads(task.result)}

        return jsonify(result)
예제 #3
0
    def run_test_case(self, args):
        """ Run a testcase """
        try:
            case_name = args['testcase']
        except KeyError:
            return api_utils.result_handler(
                status=1, data='testcase name must be provided')

        testcase = Testcase().show(case_name)
        if not testcase:
            return api_utils.result_handler(
                status=1,
                data="The test case '%s' does not exist or is not supported" %
                case_name)

        task_id = str(uuid.uuid4())

        task_args = {'testcase': case_name, 'task_id': task_id}

        task_args.update(args.get('opts', {}))

        task_thread = thread.TaskThread(self._run, task_args, TasksHandler())
        task_thread.start()

        result = {'testcase': case_name, 'task_id': task_id}
        return jsonify({'result': result})
예제 #4
0
파일: tasks.py 프로젝트: xuxiaodai/functest
    def get(self, task_id):  # pylint: disable=no-self-use
        """ GET the log of the task id """
        try:
            uuid.UUID(task_id)
        except ValueError:
            return api_utils.result_handler(status=1, data='Invalid task id')

        task_handler = TasksHandler()
        try:
            task = task_handler.get_task_by_taskid(task_id)
        except ValueError:
            return api_utils.result_handler(status=1, data='No such task id')

        task_log_dir = getattr(config.CONF, 'dir_results')
        # pylint: disable=maybe-no-member
        index = int(self._get_args().get('index', 0))

        try:
            with open(os.path.join(task_log_dir, '{}.log'.format(task_id)),
                      'r') as log_file:
                log_file.seek(index)
                data = log_file.readlines()
                index = log_file.tell()
        except OSError as err:
            if err.errno == errno.ENOENT:
                return api_utils.result_handler(status=1,
                                                data='Log file does not exist')

            return api_utils.result_handler(status=1,
                                            data='Error with log file')

        return_data = {'data': data, 'index': index}

        switcher = {'IN PROGRESS': 0, 'FAIL': 1, 'FINISHED': 2}

        return api_utils.result_handler(status=switcher.get(task.status),
                                        data=return_data)
예제 #5
0
    def run_test_case(self, args):
        """ Run a testcase """
        try:
            case_name = args['testcase']
        except KeyError:
            return api_utils.result_handler(
                status=1, data='testcase name must be provided')

        task_id = str(uuid.uuid4())

        task_args = {'testcase': case_name, 'task_id': task_id}

        task_args.update(args.get('opts', {}))

        task_thread = thread.TaskThread(self._run, task_args, TasksHandler())
        task_thread.start()

        results = {'testcase': case_name, 'task_id': task_id}
        return jsonify(results)