Skip to content

Commit

Permalink
Add parser and tests for firewall forwardings
Browse files Browse the repository at this point in the history
  • Loading branch information
jonathanunderwood committed Jul 29, 2020
1 parent 6d09ae8 commit 9c08c8c
Show file tree
Hide file tree
Showing 2 changed files with 98 additions and 0 deletions.
7 changes: 7 additions & 0 deletions netjsonconfig/backends/openwrt/converters/firewall.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,10 @@ def to_netjson_loop(self, block, result, index):
zone = self.__netjson_zone(block)
result["firewall"].setdefault("zones", [])
result["firewall"]["zones"].append(zone)
if _type == "forwarding":
forwarding = self.__netjson_forwarding(block)
result["firewall"].setdefault("forwardings", [])
result["firewall"]["forwardings"].append(forwarding)

return self.type_cast(result)

Expand Down Expand Up @@ -149,3 +153,6 @@ def __netjson_zone(self, zone):
zone["masq"] = zone.pop("masq") == "1"

return self.type_cast(zone)

def __netjson_forwarding(self, forwarding):
return self.type_cast(forwarding)
91 changes: 91 additions & 0 deletions tests/openwrt/test_firewall.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import unittest

from netjsonconfig import OpenWrt
from netjsonconfig.exceptions import ValidationError
from netjsonconfig.utils import _TabsMixin


Expand Down Expand Up @@ -282,3 +283,93 @@ def test_parse_zone_2(self):
def test_parse_zone_3(self):
o = OpenWrt(native=self._zone_3_uci)
self.assertEqual(o.config, self._zone_2_netjson)

_forwarding_1_netjson = {
"firewall": {"forwardings": [{"src": "isolated", "dest": "wan"}]}
}

_forwarding_1_uci = textwrap.dedent(
"""\
package firewall
config defaults 'defaults'
config forwarding 'forwarding_isolated_wan'
option src 'isolated'
option dest 'wan'
"""
)

def test_render_forwarding_1(self):
o = OpenWrt(self._forwarding_1_netjson)
expected = self._tabs(self._forwarding_1_uci)
self.assertEqual(o.render(), expected)

def test_parse_forwarding_1(self):
o = OpenWrt(native=self._forwarding_1_uci)
self.assertEqual(o.config, self._forwarding_1_netjson)

_forwarding_2_netjson = {
"firewall": {
"forwardings": [{"src": "isolated", "dest": "wan", "family": "ipv4"}]
}
}

_forwarding_2_uci = textwrap.dedent(
"""\
package firewall
config defaults 'defaults'
config forwarding 'forwarding_isolated_wan_ipv4'
option src 'isolated'
option dest 'wan'
option family 'ipv4'
"""
)

def test_render_forwarding_2(self):
o = OpenWrt(self._forwarding_2_netjson)
expected = self._tabs(self._forwarding_2_uci)
self.assertEqual(o.render(), expected)

def test_parse_forwarding_2(self):
o = OpenWrt(native=self._forwarding_2_uci)
self.assertEqual(o.config, self._forwarding_2_netjson)

_forwarding_3_netjson = {
"firewall": {"forwardings": [{"src": "lan", "dest": "wan", "family": "any"}]}
}

_forwarding_3_uci = textwrap.dedent(
"""\
package firewall
config defaults 'defaults'
config forwarding 'forwarding_lan_wan_any'
option src 'lan'
option dest 'wan'
option family 'any'
"""
)

def test_render_forwarding_3(self):
o = OpenWrt(self._forwarding_3_netjson)
expected = self._tabs(self._forwarding_3_uci)
self.assertEqual(o.render(), expected)

def test_parse_forwarding_3(self):
o = OpenWrt(native=self._forwarding_3_uci)
self.assertEqual(o.config, self._forwarding_3_netjson)

def test_forwarding_validation_error(self):
o = OpenWrt(
{
"firewall": {
"forwardings": [{"src": "lan", "dest": "wan", "family": "XXXXXX"}]
}
}
)
with self.assertRaises(ValidationError):
o.validate()

0 comments on commit 9c08c8c

Please sign in to comment.