Beispiel #1
0
def run_return_types(test_id, oper_id, kwargs, return_types, single=True):
    for rtyp in return_types:
        kwargs['profile'] = rtyp
        kwargs['opid'] = oper_id + '_' + rtyp
        kwargs['tool_conf']['tag'] = kwargs['opid']

        sh = SessionHandler(**kwargs)
        sh.init_session(profile=rtyp)

        res = Result(sh, SimpleProfileHandler)

        io = ClIO(**kwargs)
        io.session = sh

        tester = ClTester(io, sh, **kwargs)

        if single:
            tester.run(test_id, **kwargs)

            res.store_test_info()
            res.write_info(test_id)
            return True
        else:
            if not tester.match_profile(test_id):
                continue
            elif tester.run(test_id, **kwargs):
                print('+ {}'.format(test_id))
                return True
            else:
                res = Result(sh, SimpleProfileHandler)
                res.result()
                return False
Beispiel #2
0
 def process_error(self, msg, context):
     # test_id = list(self.flows.complete.keys())[0]
     self.tester.conv.events.store(EV_RESPONSE, msg)
     self.tester.conv.events.store(EV_FAULT, 'Error in {}'.format(context))
     # self.tester.conv.events.store(EV_CONDITION, State('Done', status=OK))
     res = Result(self.sh, self.flows.profile_handler)
     self.tester.store_result(res)
     logger.error('Encountered: {} in "{}"'.format(msg, context))
     self.opresult()
Beispiel #3
0
 def store_result(self, res=None):
     tinfo = self.flows.store_test_info(self)
     if res is None:
         res = Result(self.sh, self.kwargs['profile_handler'])
     res.write_info(tinfo)
     return tinfo
Beispiel #4
0
    def run_item(self, test_id, index, profiles=None, **kw_args):
        logger.info("<=<=<=<=< %s >=>=>=>=>" % test_id)

        _ss = self.sh
        try:
            _ss.test_flows.complete[test_id] = False
        except KeyError:
            pass

        self.conv.test_id = test_id
        res = Result(self.sh, self.kwargs['profile_handler'])

        if index >= len(self.conv.sequence):
            return None

        try:
            internal = kw_args['internal']
        except KeyError:
            internal = True

        cls, funcs = self.get_cls_and_func(index)

        try:
            _name = cls.__name__
        except AttributeError:
            _name = 'none'
        logger.info("<--<-- {} --- {} -->-->".format(index, _name))
        self.conv.events.store(EV_OPERATION, _name, sender='run_flow')
        try:
            _oper = cls(conv=self.conv,
                        inut=self.inut,
                        sh=self.sh,
                        profile=self.profile,
                        test_id=test_id,
                        funcs=funcs,
                        check_factory=self.chk_factory,
                        cache=self.cache,
                        internal=internal)
            # self.conv.operation = _oper
            if profiles:
                profile_map = profiles.PROFILEMAP
            else:
                profile_map = None
            _oper.setup(profile_map)
            resp = _oper()
        except ConditionError:
            self.store_result(res)
            return False
        except Exception as err:
            exception_trace('run_flow', err)
            self.sh["index"] = index
            return self.inut.err_response("run_sequence", err)
        else:
            if isinstance(resp, self.response_cls):
                if self.conv.sequence[index + 1] == Done:
                    self.post_op(_oper, res, test_id)
                return resp

            if resp:
                if self.conv.sequence[index + 1] == Done:
                    self.post_op(_oper, res, test_id)
                return resp

        # should be done as late as possible, so all processing has been
        # done
        try:
            _oper.post_tests()
        except ConditionError:
            self.store_result(res)
            return False

        _ss['index'] = self.conv.index = index + 1

        return True
Beispiel #5
0
 def main_page(self):
     res = Result(self.sh, self.flows.profile_handler)
     self.tester.store_result(res)
     return self.display()
Beispiel #6
0
    def run_flow(self, test_id, index=0, profiles=None, **kwargs):
        logger.info("<=<=<=<=< %s >=>=>=>=>" % test_id)
        _ss = self.sh
        _ss.test_flows.complete[test_id] = False

        self.conv.test_id = test_id
        res = Result(self.sh, self.kwargs['profile_handler'])

        if index >= len(self.conv.sequence):
            return CRITICAL

        _oper = None
        for item in self.conv.sequence[index:]:
            if isinstance(item, tuple):
                cls, funcs = item
            else:
                cls = item
                funcs = {}

            logger.info("<--<-- {} --- {} -->-->".format(index, cls))
            self.conv.events.store('operation', cls, sender='run_flow')
            try:
                _oper = cls(conv=self.conv,
                            inut=self.inut,
                            sh=self.sh,
                            profile=self.profile,
                            test_id=test_id,
                            funcs=funcs,
                            check_factory=self.check_factory,
                            cache=self.cache)
                # self.conv.operation = _oper
                if profiles:
                    profile_map = profiles.PROFILEMAP
                else:
                    profile_map = None
                _oper.setup(profile_map)
                resp = _oper()
            except ConditionError:
                self.store_result(res)
                return ERROR
            except Exception as err:
                exception_trace('run_flow', err)
                self.conv.events.store(EV_FAULT, err)
                #self.sh["index"] = index
                self.store_result(res)
                return CRITICAL
            else:
                if isinstance(resp, self.response_cls):
                    return resp

                if resp:
                    if self.com_handler:
                        resp = self.com_handler(resp)

                    resp = _oper.handle_response(self.get_response(resp))

                    if resp:
                        return self.inut.respond(resp)

            # should be done as late as possible, so all processing has been
            # done
            try:
                _oper.post_tests()
            except ConditionError:
                tinfo = self.store_result(res)
                return tinfo['state']

            index += 1

        _ss['index'] = self.conv.index = index

        try:
            if self.conv.flow["assert"]:
                _ver = Verify(self.check_factory, self.conv)
                _ver.test_sequence(self.conv.flow["assert"])
        except KeyError:
            pass
        except Exception as err:
            logger.error(err)
            raise

        if isinstance(_oper, Done):
            self.conv.events.store(EV_CONDITION,
                                   State('Done', OK),
                                   sender='run_flow')

        tinfo = self.store_result(res)

        return tinfo['state']
Beispiel #7
0
 def store_result(self, res=None):
     tinfo = self.flows.store_test_info(self)
     if res is None:
         res = Result(self.sh, self.kwargs['profile_handler'])
     res.write_info(tinfo)
     return tinfo
Beispiel #8
0
    def run_flow(self, test_id, index=0, profiles=None, conf=None):
        logger.info("<=<=<=<=< %s >=>=>=>=>" % test_id)
        self.flows.complete[test_id] = False
        self.conv.test_id = test_id
        self.conv.conf = conf

        if index >= len(self.conv.sequence):
            return CRITICAL

        res = Result(self.sh, self.kwargs['profile_handler'])

        _oper = None
        for item in self.conv.sequence[index:]:
            self.sh["index"] = index
            if isinstance(item, tuple):
                cls, funcs = item
            else:
                cls = item
                funcs = {}

            _name = cls.__name__
            _line = "<--<-- {} --- {} -->-->".format(index, _name)
            logger.info(_line)
            self.conv.events.store(EV_OPERATION, _line)
            try:
                _oper = cls(conv=self.conv,
                            inut=self.inut,
                            sh=self.sh,
                            profile=self.sh.profile,
                            test_id=test_id,
                            conf=conf,
                            funcs=funcs,
                            check_factory=self.check_factory,
                            cache=self.cache,
                            tool_conf=self.kwargs['tool_conf'])
                self.conv.operation = _oper
                _oper.setup(self.profiles.PROFILEMAP)
                if _oper.fail:
                    break
                resp = _oper()
            except Break:
                break
            except cherrypy.HTTPError:
                raise
            except Exception as err:
                self.conv.events.store(
                    EV_CONDITION,
                    State(test_id=test_id,
                          status=ERROR,
                          message=err,
                          context=cls.__name__))
                _trace = exception_trace(cls.__name__, err, logger)
                self.sh["index"] = index
                self.store_result(res)
                return {'exception_trace': _trace}
            else:
                rsp = self.handle_response(resp, index)
                if rsp:
                    self.store_result(res)
                    return self.inut.respond(rsp)

            index += 1
            if index == len(self.conv.sequence):
                break

        if isinstance(_oper, Done):
            try:
                if self.conv.flow["assert"]:
                    _ver = Verify(self.check_factory, self.conv)
                    _ver.test_sequence(self.conv.flow["assert"])
            except (KeyError, Break):
                self.conv.events.store(EV_CONDITION, State('Done', status=OK))
            except ConditionError:
                pass
            except Exception as err:
                raise
            else:
                self.conv.events.store(EV_CONDITION, State('Done', status=OK))

        tinfo = self.store_result(res)
        return tinfo['state']