kytos / of_core

Kytos Main OpenFlow Network Application (NApp)
MIT License
1 stars 19 forks source link

TypeError when instantiating ActionPopVlan #47

Closed ajoaoff closed 5 years ago

ajoaoff commented 5 years ago

When flow_manager tries to create a flow having a pop_vlan action, a TypeError occurs, because the __init__ method expects only self, but a parameter is passed. That happens because a factory is used, and the other types of actions receive a parameter, so ActionPopVlan had a *args argument that was unused. Probably it was removed due to linter errors, but it shouldn't.

hdiogenes commented 5 years ago

Can you attach a traceback or, better yet, create a unit test that reproduces this scenario?

ajoaoff commented 5 years ago

The traceback:

Traceback (most recent call last):
  File "/home/antonio/kytos-env/lib/python3.6/site-packages/flask/app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/antonio/kytos-env/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/antonio/kytos-env/lib/python3.6/site-packages/flask_cors/extension.py", line 161, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "/home/antonio/kytos-env/lib/python3.6/site-packages/flask/app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/antonio/kytos-env/lib/python3.6/site-packages/flask/_compat.py", line 33, in reraise
    raise value
  File "/home/antonio/kytos-env/lib/python3.6/site-packages/flask/app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/antonio/kytos-env/lib/python3.6/site-packages/flask/app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/antonio/kytos-env/var/lib/kytos/napps/kytos/flow_manager/main.py", line 59, in add
    return self._send_flow_mods_from_request(dpid, "add")
  File "/home/antonio/kytos-env/var/lib/kytos/napps/kytos/flow_manager/main.py", line 89, in _send_flow_mods_from_request
    self._install_flows(command, flows_dict, [switch])
  File "/home/antonio/kytos-env/var/lib/kytos/napps/kytos/flow_manager/main.py", line 109, in _install_flows
    flow = serializer.from_dict(flow_dict, switch)
  File "/home/antonio/kytos-env/lib/python3.6/site-packages/napps/kytos/of_core/flow.py", line 148, in from_dict
    action = cls._action_factory.from_dict(action_dict)
  File "/home/antonio/kytos-env/lib/python3.6/site-packages/napps/kytos/of_core/flow.py", line 258, in from_dict
    return action_class.from_dict(action_dict) if action_class else None
  File "/home/antonio/kytos-env/lib/python3.6/site-packages/napps/kytos/of_core/flow.py", line 223, in from_dict
    action = cls(None)
TypeError: __init__() takes 1 positional argument but 2 were given