Ejemplo n.º 1
0
    def run(self, name, context, args):
        cls_name, method_name = name.split(".", 1)
        cls = scenario_base.Scenario.get_by_name(cls_name)

        scenario_context = copy.deepcopy(getattr(cls, method_name).context)
        # TODO(boris-42): We should keep default behavior for `users` context
        #                 as a part of work on pre-created users this should be
        #                 removed.
        scenario_context.setdefault("users", {})
        # merge scenario context and task context configuration
        scenario_context.update(context)

        context_obj = {
            "task": self.task,
            "admin": {
                "endpoint": self.admin_user
            },
            "scenario_name": name,
            "config": scenario_context
        }

        args = cls.preprocess(method_name, context_obj, args)

        with base_ctx.ContextManager(context_obj):
            with rutils.Timer() as timer:
                self._run_scenario(cls, method_name, context_obj, args)
            return timer.duration()
Ejemplo n.º 2
0
 def test_timer_exception(self):
     try:
         with utils.Timer() as timer:
             raise Exception()
     except Exception:
         pass
     self.assertEqual(3, len(timer.error))
     self.assertEqual(timer.error[0], type(Exception()))
Ejemplo n.º 3
0
    def test_timer_duration(self):
        start_time = time.time()
        end_time = time.time()

        with mock.patch('rally.utils.time') as mock_time:
            mock_time.time = mock.MagicMock(return_value=start_time)
            with utils.Timer() as timer:
                mock_time.time = mock.MagicMock(return_value=end_time)

        self.assertIsNone(timer.error)
        self.assertEqual(end_time - start_time, timer.duration())
Ejemplo n.º 4
0
    def run(self, name, context, args):
        cls_name, method_name = name.split(".", 1)
        cls = scenario_base.Scenario.get_by_name(cls_name)

        # NOTE(boris-42): processing @types decorators
        args = types.preprocess(cls, method_name, context, args)

        with rutils.Timer() as timer:
            print("Runner context: %s" % (context))
            self._run_scenario(cls, method_name, context, args)
        return timer.duration()
Ejemplo n.º 5
0
def _run_scenario_once(args):
    iteration, cls, method_name, context, kwargs = args

    LOG.info("Task %(task)s | ITER: %(iteration)s START" %
             {"task": context["task"]["uuid"], "iteration": iteration})

    context["iteration"] = iteration
    scenario = cls(
            context=context,
            admin_clients=osclients.Clients(context["admin"]["endpoint"]),
            clients=osclients.Clients(context["user"]["endpoint"]))

    error = []
    scenario_output = {"errors": "", "data": {}}
    try:
        with rutils.Timer() as timer:
            scenario_fn = getattr(scenario, method_name)
            fargs, fvargs, fkws, fdefaults = inspect.getargspec(scenario_fn)

            if fkws != None:
                kwargs["my_context"] = context
                print("KEYWORD ARGS PRESENT")
            else:
                print("NO KEYWORD ARGS")

            scenario_output = getattr(scenario,
                                      method_name)(**kwargs) or scenario_output
    except Exception as e:
        error = utils.format_exc(e)
        if cfg.CONF.debug:
            LOG.exception(e)
    finally:
        status = "Error %s: %s" % tuple(error[0:2]) if error else "OK"
        LOG.info("Task %(task)s | ITER: %(iteration)s END: %(status)s" %
                 {"task": context["task"]["uuid"], "iteration": iteration,
                  "status": status})

        return {"duration": timer.duration() - scenario.idle_duration(),
                "idle_duration": scenario.idle_duration(),
                "error": error,
                "scenario_output": scenario_output,
                "atomic_actions": scenario.atomic_actions()}
Ejemplo n.º 6
0
def _run_scenario_once(args):
    iteration, cls, method_name, context, kwargs = args

    LOG.info("Task %(task)s | ITER: %(iteration)s START" % {
        "task": context["task"]["uuid"],
        "iteration": iteration
    })

    scenario = cls(context=context,
                   admin_clients=osclients.Clients(
                       context["admin"]["endpoint"]),
                   clients=osclients.Clients(context["user"]["endpoint"]))

    error = []
    scenario_output = {}
    try:
        with rutils.Timer() as timer:
            scenario_output = getattr(scenario, method_name)(**kwargs) or {}
    except Exception as e:
        error = utils.format_exc(e)
        if cfg.CONF.debug:
            LOG.exception(e)
    finally:
        status = "Error %s: %s" % tuple(error[0:2]) if error else "OK"
        LOG.info(
            "Task %(task)s | ITER: %(iteration)s END: %(status)s" % {
                "task": context["task"]["uuid"],
                "iteration": iteration,
                "status": status
            })

        return {
            "duration": timer.duration() - scenario.idle_duration(),
            "idle_duration": scenario.idle_duration(),
            "error": error,
            "scenario_output": scenario_output,
            "atomic_actions": scenario.atomic_actions()
        }
Ejemplo n.º 7
0
 def func_atomic_actions(self, *args, **kwargs):
     with utils.Timer() as timer:
         f = func(self, *args, **kwargs)
     self._add_atomic_actions(name, timer.duration())
     return f