Skip to content

Commit 9c08c8c

Browse files
Add parser and tests for firewall forwardings
1 parent 6d09ae8 commit 9c08c8c

File tree

2 files changed

+98
-0
lines changed

2 files changed

+98
-0
lines changed

netjsonconfig/backends/openwrt/converters/firewall.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,10 @@ def to_netjson_loop(self, block, result, index):
118118
zone = self.__netjson_zone(block)
119119
result["firewall"].setdefault("zones", [])
120120
result["firewall"]["zones"].append(zone)
121+
if _type == "forwarding":
122+
forwarding = self.__netjson_forwarding(block)
123+
result["firewall"].setdefault("forwardings", [])
124+
result["firewall"]["forwardings"].append(forwarding)
121125

122126
return self.type_cast(result)
123127

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

151155
return self.type_cast(zone)
156+
157+
def __netjson_forwarding(self, forwarding):
158+
return self.type_cast(forwarding)

tests/openwrt/test_firewall.py

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import unittest
33

44
from netjsonconfig import OpenWrt
5+
from netjsonconfig.exceptions import ValidationError
56
from netjsonconfig.utils import _TabsMixin
67

78

@@ -282,3 +283,93 @@ def test_parse_zone_2(self):
282283
def test_parse_zone_3(self):
283284
o = OpenWrt(native=self._zone_3_uci)
284285
self.assertEqual(o.config, self._zone_2_netjson)
286+
287+
_forwarding_1_netjson = {
288+
"firewall": {"forwardings": [{"src": "isolated", "dest": "wan"}]}
289+
}
290+
291+
_forwarding_1_uci = textwrap.dedent(
292+
"""\
293+
package firewall
294+
295+
config defaults 'defaults'
296+
297+
config forwarding 'forwarding_isolated_wan'
298+
option src 'isolated'
299+
option dest 'wan'
300+
"""
301+
)
302+
303+
def test_render_forwarding_1(self):
304+
o = OpenWrt(self._forwarding_1_netjson)
305+
expected = self._tabs(self._forwarding_1_uci)
306+
self.assertEqual(o.render(), expected)
307+
308+
def test_parse_forwarding_1(self):
309+
o = OpenWrt(native=self._forwarding_1_uci)
310+
self.assertEqual(o.config, self._forwarding_1_netjson)
311+
312+
_forwarding_2_netjson = {
313+
"firewall": {
314+
"forwardings": [{"src": "isolated", "dest": "wan", "family": "ipv4"}]
315+
}
316+
}
317+
318+
_forwarding_2_uci = textwrap.dedent(
319+
"""\
320+
package firewall
321+
322+
config defaults 'defaults'
323+
324+
config forwarding 'forwarding_isolated_wan_ipv4'
325+
option src 'isolated'
326+
option dest 'wan'
327+
option family 'ipv4'
328+
"""
329+
)
330+
331+
def test_render_forwarding_2(self):
332+
o = OpenWrt(self._forwarding_2_netjson)
333+
expected = self._tabs(self._forwarding_2_uci)
334+
self.assertEqual(o.render(), expected)
335+
336+
def test_parse_forwarding_2(self):
337+
o = OpenWrt(native=self._forwarding_2_uci)
338+
self.assertEqual(o.config, self._forwarding_2_netjson)
339+
340+
_forwarding_3_netjson = {
341+
"firewall": {"forwardings": [{"src": "lan", "dest": "wan", "family": "any"}]}
342+
}
343+
344+
_forwarding_3_uci = textwrap.dedent(
345+
"""\
346+
package firewall
347+
348+
config defaults 'defaults'
349+
350+
config forwarding 'forwarding_lan_wan_any'
351+
option src 'lan'
352+
option dest 'wan'
353+
option family 'any'
354+
"""
355+
)
356+
357+
def test_render_forwarding_3(self):
358+
o = OpenWrt(self._forwarding_3_netjson)
359+
expected = self._tabs(self._forwarding_3_uci)
360+
self.assertEqual(o.render(), expected)
361+
362+
def test_parse_forwarding_3(self):
363+
o = OpenWrt(native=self._forwarding_3_uci)
364+
self.assertEqual(o.config, self._forwarding_3_netjson)
365+
366+
def test_forwarding_validation_error(self):
367+
o = OpenWrt(
368+
{
369+
"firewall": {
370+
"forwardings": [{"src": "lan", "dest": "wan", "family": "XXXXXX"}]
371+
}
372+
}
373+
)
374+
with self.assertRaises(ValidationError):
375+
o.validate()

0 commit comments

Comments
 (0)