Skip to content

Commit 9aff7a1

Browse files
Enhance and test redirect parser
1 parent 3dd9f67 commit 9aff7a1

2 files changed

Lines changed: 98 additions & 1 deletion

File tree

netjsonconfig/backends/openwrt/converters/firewall.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,4 +232,16 @@ def __netjson_redirect(self, redirect):
232232
else:
233233
redirect["monthdays"] = [int(x) for x in monthdays]
234234

235+
if "utc_time" in redirect:
236+
redirect["utc_time"] = redirect["utc_time"] == "1"
237+
238+
if "reflection" in redirect:
239+
redirect["reflection"] = redirect["reflection"] == "1"
240+
241+
if "limit_burst" in redirect:
242+
redirect["limit_burst"] = int(redirect["limit_burst"])
243+
244+
if "enabled" in redirect:
245+
redirect["enabled"] = redirect["enabled"] == "1"
246+
235247
return self.type_cast(redirect)

tests/openwrt/test_firewall.py

Lines changed: 86 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -549,5 +549,90 @@ def test_redirect_monthdays_validation_error_2(self):
549549

550550
def test_parse_redirect_3(self):
551551
o = OpenWrt(native=self._redirect_3_uci)
552-
print(o.config)
553552
self.assertEqual(o.config, self._redirect_3_netjson)
553+
554+
_redirect_4_uci = textwrap.dedent(
555+
"""\
556+
package firewall
557+
558+
config defaults 'defaults'
559+
560+
config redirect 'redirect_Adblock DNS, port 53'
561+
option name 'Adblock DNS, port 53'
562+
option src 'lan'
563+
option proto 'tcpudp'
564+
option src_dport '53'
565+
option dest_port '53'
566+
option target 'DNAT'
567+
list weekdays 'mon'
568+
list weekdays 'tue'
569+
list weekdays 'wed'
570+
list monthdays '1'
571+
list monthdays '2'
572+
list monthdays '31'
573+
option src_ip '192.168.1.1'
574+
option src_dip '192.168.1.1'
575+
option src_mac 'AA:AA:AA:AA:AA:AA'
576+
option src_port '1-1064'
577+
option dest 'wan'
578+
option dest_ip '10.0.0.1'
579+
option ipset 'myipset'
580+
option mark '0xff'
581+
option start_date '2020-02-02'
582+
option stop_date '2020-03-02'
583+
option start_time '12:12:12'
584+
option stop_time '23:23:23'
585+
option utc_time '1'
586+
option family 'any'
587+
option reflection '0'
588+
option reflection_src 'external'
589+
option limit '3/sec'
590+
option limit_burst '5'
591+
option enabled '0'
592+
"""
593+
)
594+
595+
_redirect_4_netjson = {
596+
"firewall": {
597+
"redirects": [
598+
{
599+
"name": "Adblock DNS, port 53",
600+
"src": "lan",
601+
"proto": ["tcp", "udp"],
602+
"src_dport": "53",
603+
"dest_port": "53",
604+
"target": "DNAT",
605+
"weekdays": ["mon", "tue", "wed"],
606+
"monthdays": [1, 2, 31],
607+
"src_ip": "192.168.1.1",
608+
"src_dip": "192.168.1.1",
609+
"src_mac": "AA:AA:AA:AA:AA:AA",
610+
"src_port": "1-1064",
611+
"dest": "wan",
612+
"dest_ip": "10.0.0.1",
613+
"ipset": "myipset",
614+
"mark": "0xff",
615+
"start_date": "2020-02-02",
616+
"stop_date": "2020-03-02",
617+
"start_time": "12:12:12",
618+
"stop_time": "23:23:23",
619+
"utc_time": True,
620+
"family": "any",
621+
"reflection": False,
622+
"reflection_src": "external",
623+
"limit": "3/sec",
624+
"limit_burst": 5,
625+
"enabled": False,
626+
}
627+
]
628+
}
629+
}
630+
631+
def test_render_redirect_4(self):
632+
o = OpenWrt(self._redirect_4_netjson)
633+
expected = self._tabs(self._redirect_4_uci)
634+
self.assertEqual(o.render(), expected)
635+
636+
def test_parse_redirect_4(self):
637+
o = OpenWrt(native=self._redirect_4_uci)
638+
self.assertEqual(o.config, self._redirect_4_netjson)

0 commit comments

Comments
 (0)