Skip to content

Commit b061ee4

Browse files
committed
[OpenWrt] Fixed empty output bug if addresses is empty list
1 parent 11da509 commit b061ee4

File tree

2 files changed

+36
-5
lines changed

2 files changed

+36
-5
lines changed

netjsonconfig/backends/openwrt/renderers.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def _get_interfaces(self):
1919
interfaces = self.config.get('interfaces', [])
2020
# this line ensures interfaces are not entirely
2121
# ignored if they do not contain any address
22-
default_addresses = [{'proto': 'none'}]
22+
default_address = [{'proto': 'none'}]
2323
# results container
2424
uci_interfaces = []
2525
for interface in interfaces:
@@ -34,8 +34,12 @@ def _get_interfaces(self):
3434
if interface.get('type') == 'bridge':
3535
is_bridge = True
3636
bridge_members = ' '.join(interface['bridge_members'])
37+
# ensure address list is not never empty, even when 'addresses' is []
38+
address_list = interface.get('addresses')
39+
if not address_list:
40+
address_list = default_address
3741
# address list defaults to empty list
38-
for address in interface.get('addresses', default_addresses):
42+
for address in address_list:
3943
# prepare new UCI interface directive
4044
uci_interface = deepcopy(interface)
4145
if network:
@@ -46,11 +50,11 @@ def _get_interfaces(self):
4650
if uci_interface.get('disabled'):
4751
uci_interface['enabled'] = not interface['disabled']
4852
del uci_interface['disabled']
49-
if uci_interface.get('addresses'):
53+
if 'addresses' in uci_interface:
5054
del uci_interface['addresses']
51-
if uci_interface.get('type'):
55+
if 'type' in uci_interface:
5256
del uci_interface['type']
53-
if uci_interface.get('wireless'):
57+
if 'wireless' in uci_interface:
5458
del uci_interface['wireless']
5559
# default values
5660
address_key = None

tests/openwrt/test_network.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -874,3 +874,30 @@ def test_mac_address_format(self):
874874
# empty is valid (will be ignored)
875875
o.config['interfaces'][0]['mac'] = ''
876876
o.validate()
877+
878+
def test_default_addresses(self):
879+
"""
880+
the following configuration dictionary caused empty output up to 0.4.0
881+
"""
882+
o = OpenWrt({
883+
"interfaces": [
884+
{
885+
"type": "bridge",
886+
"network": "lan",
887+
"addresses": [],
888+
"name": "br-lan",
889+
"bridge_members": [
890+
"eth0",
891+
"eth1"
892+
]
893+
}
894+
]
895+
})
896+
expected = self._tabs("""package network
897+
898+
config interface 'lan'
899+
option ifname 'eth0 eth1'
900+
option proto 'none'
901+
option type 'bridge'
902+
""")
903+
self.assertEqual(o.render(), expected)

0 commit comments

Comments
 (0)