murano generates incorrect exception in case when method takes wrong number of patameters

Bug #1553186 reported by Dmytro Dovbii
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Murano
Fix Released
Critical
Stan Lagun

Bug Description

I tried to use static method runCommand() of io.murnao.configuration.Linux class, but forgot to pass one of arguments.
It caused to strange error:

  AttributeError: 'MuranoTypeReference' object has no attribute 'cast'
  Traceback (most recent call last):
    File "/home/ddovbii/work/murano/meta/io.murano/Classes/Environment.yaml", line 101:9 in method deploy of type io.murano.Environment
        $.applications.pselect($.deploy())
    File "/home/ddovbii/work/murano-apps/ApacheHTTPServer/package/Classes/ApacheHttpServer.yaml", line 58:13 in method deploy of type io.murano.apps.apache.ApacheHttpServer
        conf:Linux.runCommand($.instance.agent, "sudo apt-get update && sudo apt-get -y install apache2")
    File "/home/ddovbii/work/murano/murano/dsl/helpers.py", line 47 in method evaluate
        return value(context)
    File "/home/ddovbii/work/murano/murano/dsl/yaql_expression.py", line 85 in method __call__
        return self._parsed_expression.evaluate(context=context)
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/expressions.py", line 165 in method evaluate
        return self(utils.NO_VALUE, context, self.engine)
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/expressions.py", line 156 in method __call__
        return super(Statement, self).__call__(receiver, context, engine)
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/expressions.py", line 37 in method __call__
        return context(self.name, engine, receiver, context)(*self.args)
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/contexts.py", line 65 in method <lambda>
        data_context, use_convention, function_filter)
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/runner.py", line 49 in method call
        name, all_overloads, engine, receiver, data_context, args, kwargs)
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/runner.py", line 117 in method choose_overload
        args = tuple(arg_evaluator(i, arg) for i, arg in enumerate(args))
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/runner.py", line 117 in method <genexpr>
        args = tuple(arg_evaluator(i, arg) for i, arg in enumerate(args))
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/runner.py", line 113 in method <lambda>
        and not isinstance(arg, expressions.Constant))
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/expressions.py", line 37 in method __call__
        return context(self.name, engine, receiver, context)(*self.args)
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/contexts.py", line 65 in method <lambda>
        data_context, use_convention, function_filter)
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/runner.py", line 51 in method call
        result = delegate()
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/runner.py", line 142 in method <lambda>
        return lambda: delegate()
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/specs.py", line 341 in method func
        six.iteritems(keyword_args)))
    File "/home/ddovbii/work/murano/murano/dsl/yaql_functions.py", line 179 in method op_dot_static
        return operator(ctx2, receiver, expr)
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/yaqltypes.py", line 323 in method func
        new_name, engine, new_receiver, new_context)(*args, **kwargs)
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/contexts.py", line 65 in method <lambda>
        data_context, use_convention, function_filter)
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/runner.py", line 51 in method call
        result = delegate()
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/runner.py", line 142 in method <lambda>
        return lambda: delegate()
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/specs.py", line 341 in method func
        six.iteritems(keyword_args)))
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/standard_library/system.py", line 34 in method op_dot
        return expr(receiver)
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/yaqltypes.py", line 269 in method func
        engine, args, kwargs)
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/yaqltypes.py", line 236 in method _call
        result = value(receiver, context, engine)
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/expressions.py", line 37 in method __call__
        return context(self.name, engine, receiver, context)(*self.args)
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/contexts.py", line 65 in method <lambda>
        data_context, use_convention, function_filter)
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/runner.py", line 51 in method call
        result = delegate()
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/runner.py", line 142 in method <lambda>
        return lambda: delegate()
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/specs.py", line 339 in method func
        positional_args)),
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/specs.py", line 338 in method <lambda>
        *tuple(map(lambda t: t(new_context),
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/specs.py", line 268 in method convert_arg_func
        val, receiver, context2, self, engine)
    File "/home/ddovbii/work/murano/murano/dsl/yaql_integration.py", line 102 in method convert
        return super(ContractedValue, self).convert(value, *args, **kwargs)
    File "/home/ddovbii/work/murano/.tox/venv/local/lib/python2.7/site-packages/yaql/language/yaqltypes.py", line 89 in method convert
        *args, **kwargs)
    File "/home/ddovbii/work/murano/murano/dsl/yaql_integration.py", line 91 in method converter
        context)
    File "/home/ddovbii/work/murano/murano/dsl/murano_method.py", line 188 in method transform
        value, this, *args, **kwargs)
    File "/home/ddovbii/work/murano/murano/dsl/typespec.py", line 46 in method transform
        this.cast(self._container_type())),

Expected result:
ContractViolationException must be generated in this case

Stan Lagun (slagun)
Changed in murano:
assignee: nobody → Stan Lagun (slagun)
Dmytro Dovbii (ddovbii)
Changed in murano:
status: New → Confirmed
Stan Lagun (slagun)
Changed in murano:
milestone: none → mitaka-rc1
importance: Undecided → Medium
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to murano (master)

Fix proposed to branch: master
Review: https://review.openstack.org/288595

Changed in murano:
status: Confirmed → In Progress
Stan Lagun (slagun)
Changed in murano:
importance: Medium → Critical
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to murano (master)

Reviewed: https://review.openstack.org/288595
Committed: https://git.openstack.org/cgit/openstack/murano/commit/?id=62ec96e3745dc3585ecf711e5e42cc2b9c768624
Submitter: Jenkins
Branch: master

commit 62ec96e3745dc3585ecf711e5e42cc2b9c768624
Author: Stan Lagun <email address hidden>
Date: Fri Mar 4 20:12:30 2016 +0300

    Fix static method parameter validation

    Contract validation expected "this" parameter to be of
    either MuranoType or Murano object type. However
    for static method parameters it is MuranoTypeReference
    and this case wasn't handled

    Change-Id: I97b08b9383d47b6a66cff6db722e5467d0278f44
    Closes-Bug: #1553186

Changed in murano:
status: In Progress → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.