Exemple #1
0
    def test_radio_list_option(self):
        o = OpenWrt({
            "radios": [
                {
                    "name": "radio0",
                    "phy": "phy0",
                    "driver": "mac80211",
                    "protocol": "802.11n",
                    "channel": 1,
                    "channel_width": 20,
                    "ht_capab": ["SMPS-STATIC", "SHORT-GI-20"]
                }
            ]
        })
        expected = self._tabs("""package wireless

config wifi-device 'radio0'
    option channel '1'
    list ht_capab 'SMPS-STATIC'
    list ht_capab 'SHORT-GI-20'
    option htmode 'HT20'
    option hwmode '11g'
    option phy 'phy0'
    option type 'mac80211'
""")
        self.assertEqual(o.render(), expected)
Exemple #2
0
    def test_radio_ac_and_custom_attrs(self):
        o = OpenWrt({
            "radios": [
                {
                    "name": "radio0",
                    "phy": "phy0",
                    "driver": "mac80211",
                    "protocol": "802.11ac",
                    "channel": 132,
                    "channel_width": 80,
                    "tx_power": 8,
                    "diversity": True,
                    "country_ie": True,
                    "empty_setting": ""
                }
            ]
        })
        expected = self._tabs("""package wireless

config wifi-device 'radio0'
    option channel '132'
    option country_ie '1'
    option diversity '1'
    option htmode 'VHT80'
    option hwmode '11a'
    option phy 'phy0'
    option txpower '8'
    option type 'mac80211'
""")
        self.assertEqual(o.render(), expected)
Exemple #3
0
    def test_radio_mac80211b(self):
        o = OpenWrt({
            "radios": [
                {
                    "name": "radio0",
                    "phy": "phy0",
                    "driver": "mac80211",
                    "protocol": "802.11b",
                    "channel": 3,
                    "channel_width": 20,
                    "tx_power": 3
                }
            ]
        })
        expected = self._tabs("""package wireless

config wifi-device 'radio0'
    option channel '3'
    option htmode 'NONE'
    option hwmode '11b'
    option phy 'phy0'
    option txpower '3'
    option type 'mac80211'
""")
        self.assertEqual(o.render(), expected)
    def test_macaddr_override(self):
        o = OpenWrt({
            "interfaces": [
                {
                    "name": "wlan0",
                    "type": "wireless",
                    "mac": "E8:94:F6:33:8C:00",
                    "wireless": {
                        "radio": "radio0",
                        "mode": "access_point",
                        "ssid": "open"
                    }
                }
            ]
        })
        expected = self._tabs("""package network

config interface 'wlan0'
    option ifname 'wlan0'
    option proto 'none'

package wireless

config wifi-iface 'wifi_wlan0'
    option device 'radio0'
    option ifname 'wlan0'
    option macaddr 'E8:94:F6:33:8C:00'
    option mode 'ap'
    option network 'wlan0'
    option ssid 'open'
""")
        self.assertEqual(o.render(), expected)
    def test_wifi_iface_list_option(self):
        o = OpenWrt({
            "interfaces": [
                {
                    "name": "wlan0",
                    "type": "wireless",
                    "wireless": {
                        "radio": "radio0",
                        "mode": "access_point",
                        "ssid": "open",
                        "basic_rate": ["6000", "9000"]
                    }
                }
            ]
        })
        expected = self._tabs("""package network

config interface 'wlan0'
    option ifname 'wlan0'
    option proto 'none'

package wireless

config wifi-iface 'wifi_wlan0'
    list basic_rate '6000'
    list basic_rate '9000'
    option device 'radio0'
    option ifname 'wlan0'
    option mode 'ap'
    option network 'wlan0'
    option ssid 'open'
""")
        self.assertEqual(o.render(), expected)
    def test_wds_ap(self):
        o = OpenWrt({
            "interfaces": [
                {
                    "name": "wlan0",
                    "type": "wireless",
                    "wireless": {
                        "radio": "radio0",
                        "mode": "access_point",
                        "wds": True,
                        "ssid": "MyWdsAp"
                    }
                }
            ]
        })
        expected = self._tabs("""package network

config interface 'wlan0'
    option ifname 'wlan0'
    option proto 'none'

package wireless

config wifi-iface 'wifi_wlan0'
    option device 'radio0'
    option ifname 'wlan0'
    option mode 'ap'
    option network 'wlan0'
    option ssid 'MyWdsAp'
    option wds '1'
""")
        self.assertEqual(o.render(), expected)
    def test_led_1(self):
        o = OpenWrt({
            "led": [
                {
                    "name": "USB1",
                    "sysfs": "tp-link:green:usb1",
                    "trigger": "usbdev",
                    "dev": "1-1.1",
                    "interval": 50,
                },
                {
                    "name": "WLAN2G",
                    "sysfs": "tp-link:blue:wlan2g",
                    "trigger": "phy0tpt"
                }
            ]
        })
        expected = self._tabs("""package system

config led 'led_usb1'
    option dev '1-1.1'
    option interval '50'
    option name 'USB1'
    option sysfs 'tp-link:green:usb1'
    option trigger 'usbdev'

config led 'led_wlan2g'
    option name 'WLAN2G'
    option sysfs 'tp-link:blue:wlan2g'
    option trigger 'phy0tpt'
""")
        self.assertEqual(o.render(), expected)
Exemple #8
0
    def test_dns(self):
        o = OpenWrt({
            "interfaces": [
                {
                    "name": "eth0",
                    "type": "ethernet",
                    "addresses": [
                        {
                            "address": "192.168.1.1",
                            "mask": 24,
                            "proto": "static",
                            "family": "ipv4"
                        }
                    ]
                }
            ],
            "dns_servers": [
                "10.11.12.13",
                "8.8.8.8"
            ],
            "dns_search": [
                "netjson.org",
                "openwisp.org",
            ]
        })
        expected = self._tabs("""package network

config interface 'eth0'
    option dns '10.11.12.13 8.8.8.8'
    option dns_search 'netjson.org openwisp.org'
    option ifname 'eth0'
    option ipaddr '192.168.1.1/24'
    option proto 'static'
""")
        self.assertEqual(o.render(), expected)
    def test_custom_proto(self):
        o = OpenWrt({
            "interfaces": [
                {
                    "name": "ppp0",
                    "type": "other",
                    "proto": "ppp",
                    "device": "/dev/usb/modem1",
                    "username": "******",
                    "password": "******",
                    "keepalive": 3,
                    "ipv6": True
                }
            ]
        })
        expected = self._tabs("""package network

config interface 'ppp0'
    option device '/dev/usb/modem1'
    option ifname 'ppp0'
    option ipv6 '1'
    option keepalive '3'
    option password 'pwd0123'
    option proto 'ppp'
    option username 'user1'
""")
        self.assertEqual(o.render(), expected)
Exemple #10
0
    def test_loopback(self):
        o = OpenWrt({
            "interfaces": [
                {
                    "name": "lo",
                    "type": "loopback",
                    "addresses": [
                        {
                            "address": "127.0.0.1",
                            "mask": 8,
                            "proto": "static",
                            "family": "ipv4"
                        }
                    ]
                }
            ]
        })
        expected = self._tabs("""package network

config interface 'lo'
    option ifname 'lo'
    option ipaddr '127.0.0.1/8'
    option proto 'static'
""")
        self.assertEqual(o.render(), expected)
    def test_default_addresses(self):
        """
        the following configuration dictionary caused empty output up to 0.4.0
        """
        o = OpenWrt({
            "interfaces": [
                {
                    "type": "bridge",
                    "network": "lan",
                    "addresses": [],
                    "name": "br-lan",
                    "bridge_members": [
                        "eth0",
                        "eth1"
                    ]
                }
            ]
        })
        expected = self._tabs("""package network

config interface 'lan'
    option ifname 'eth0 eth1'
    option proto 'none'
    option type 'bridge'
""")
        self.assertEqual(o.render(), expected)
    def test_address_list_option(self):
        o = OpenWrt({
            "interfaces": [
                {
                    "name": "eth0",
                    "type": "ethernet",
                    "addresses": [
                        {
                            "proto": "dhcp",
                            "family": "ipv4",
                            "reqopts": ["43", "54"]
                        }
                    ]
                }
            ]
        })
        expected = self._tabs("""package network

config interface 'eth0'
    option ifname 'eth0'
    option proto 'dhcp'
    list reqopts '43'
    list reqopts '54'
""")
        self.assertEqual(o.render(), expected)
Exemple #13
0
    def test_rules(self):
        o = OpenWrt({
            "ip_rules": [
                {
                    "in": "eth0",
                    "out": "eth1",
                    "src": "192.168.1.0/24",
                    "dest": "192.168.2.0/24",
                    "tos": 2,
                    "mark": "0x0/0x1",
                    "invert": True,
                    "lookup": "0",
                    "action": "blackhole"
                },
                {
                    "src": "192.168.1.0/24",
                    "dest": "192.168.3.0/24",
                    "goto": 0
                },
                {
                    "in": "vpn",
                    "dest": "fdca:1234::/64",
                    "action": "prohibit"
                },
                {
                    "in": "vpn",
                    "src": "fdca:1235::/64",
                    "action": "prohibit"
                }
            ]
        })
        expected = self._tabs("""package network

config rule
    option action 'blackhole'
    option dest '192.168.2.0/24'
    option in 'eth0'
    option invert '1'
    option lookup '0'
    option mark '0x0/0x1'
    option out 'eth1'
    option src '192.168.1.0/24'
    option tos '2'

config rule
    option dest '192.168.3.0/24'
    option goto '0'
    option src '192.168.1.0/24'

config rule6
    option action 'prohibit'
    option dest 'fdca:1234::/64'
    option in 'vpn'

config rule6
    option action 'prohibit'
    option in 'vpn'
    option src 'fdca:1235::/64'
""")
        self.assertEqual(o.render(), expected)
    def test_enabled_missing(self):
        c = OpenWrt({
            "openvpn": [{
                "ca": "ca.pem",
                "cert": "cert.pem",
                "dev": "tap0",
                "dev_type": "tap",
                "dh": "dh.pem",
                "key": "key.pem",
                "mode": "server",
                "name": "test-properties",
                "proto": "udp",
                "tls_server": True
            }]
        })
        expected = self._tabs("""package openvpn

config openvpn 'test_properties'
    option ca 'ca.pem'
    option cert 'cert.pem'
    option dev 'tap0'
    option dev_type 'tap'
    option dh 'dh.pem'
    option enabled '1'
    option key 'key.pem'
    option mode 'server'
    option proto 'udp'
    option tls_server '1'
""")
        self.assertEqual(c.render(), expected)
    def test_server_bridge_routed(self):
        c = OpenWrt({
            "openvpn": [{
                "ca": "ca.pem",
                "cert": "cert.pem",
                "dev": "tap0",
                "dev_type": "tap",
                "dh": "dh.pem",
                "enabled": True,
                "key": "key.pem",
                "mode": "server",
                "name": "routed",
                "proto": "udp",
                "server": "10.8.0.0 255.255.0.0",
                "tls_server": True
            }]
        })
        expected = self._tabs("""package openvpn

config openvpn 'routed'
    option ca 'ca.pem'
    option cert 'cert.pem'
    option dev 'tap0'
    option dev_type 'tap'
    option dh 'dh.pem'
    option enabled '1'
    option key 'key.pem'
    option mode 'server'
    option proto 'udp'
    option server '10.8.0.0 255.255.0.0'
    option tls_server '1'
""")
        self.assertEqual(c.render(), expected)
Exemple #16
0
    def test_multiple_dhcp(self):
        o = OpenWrt({
            "interfaces": [
                {
                    "name": "eth0",
                    "type": "ethernet",
                    "addresses": [
                        {
                            "proto": "dhcp",
                            "family": "ipv4"
                        },
                        {
                            "proto": "dhcp",
                            "family": "ipv6"
                        }
                    ]
                }
            ]
        })
        expected = self._tabs("""package network

config interface 'eth0'
    option ifname 'eth0'
    option proto 'dhcp'

config interface 'eth0_2'
    option ifname 'eth0'
    option proto 'dhcpv6'
""")
        self.assertEqual(o.render(), expected)
 def test_file_inclusion(self):
     o = OpenWrt({
         "files": [
             {
                 "path": "/etc/crontabs/root",
                 "mode": "0644",
                 "contents": '* * * * * echo "test" > /etc/testfile\n'
                             '* * * * * echo "test2" > /etc/testfile2'
             },
             {
                 "path": "/etc/dummy.conf",
                 "mode": "0644",
                 "contents": "testing!"
             }
         ]
     })
     output = o.render()
     self.assertNotIn('package files', output)
     self.assertIn('* * * * * echo', output)
     # ensure the additional files are there present in the tar.gz archive
     tar = tarfile.open(fileobj=o.generate(), mode='r')
     self.assertEqual(len(tar.getmembers()), 2)
     # first file
     crontab = tar.getmember('etc/crontabs/root')
     contents = tar.extractfile(crontab).read().decode()
     self.assertEqual(contents, o.config['files'][0]['contents'])
     self.assertEqual(crontab.mtime, 0)
     self.assertEqual(crontab.mode, 420)
     # second file
     dummy = tar.getmember('etc/dummy.conf')
     contents = tar.extractfile(dummy).read().decode()
     self.assertEqual(contents, o.config['files'][1]['contents'])
     self.assertEqual(dummy.mode, 420)
     tar.close()
Exemple #18
0
    def test_interface_custom_attrs(self):
        o = OpenWrt({
            "interfaces": [
                {
                    "name": "mobile0",
                    "type": "wireless",
                    "mtu": 1400,
                    "custom_attr": "yes",
                    "empty": "",
                    "addresses": [
                        {
                            "proto": "3g",
                            "family": "ipv4"
                        }
                    ]
                }
            ]
        })
        expected = self._tabs("""package network

config interface 'mobile0'
    option custom_attr 'yes'
    option ifname 'mobile0'
    option mtu '1400'
    option proto '3g'
""")
        self.assertEqual(o.render(), expected)
    def test_dns_dhcpv6_ignored(self):
        o = OpenWrt({
            "interfaces": [
                {
                    "name": "eth0",
                    "type": "ethernet",
                    "addresses": [
                        {
                            "proto": "dhcp",
                            "family": "ipv6"
                        }
                    ]
                }
            ],
            "dns_servers": ["10.11.12.13", "8.8.8.8"],
            "dns_search": ["netjson.org", "openwisp.org"],
        })
        expected = self._tabs("""package network

config interface 'eth0'
    option dns_search 'netjson.org openwisp.org'
    option ifname 'eth0'
    option proto 'dhcpv6'
""")
        self.assertEqual(o.render(), expected)
    def test_network_dash_conversion(self):
        o = OpenWrt({
            "interfaces": [
                {
                    "name": "wlan0",
                    "type": "wireless",
                    "wireless": {
                        "radio": "radio0",
                        "mode": "access_point",
                        "ssid": "open",
                        "network": ["eth0-1"],
                    }
                }
            ]
        })
        expected = self._tabs("""package network

config interface 'wlan0'
    option ifname 'wlan0'
    option proto 'none'

package wireless

config wifi-iface 'wifi_wlan0'
    option device 'radio0'
    option ifname 'wlan0'
    option mode 'ap'
    option network 'eth0_1'
    option ssid 'open'
""")
        self.assertEqual(o.render(), expected)
    def test_no_encryption(self):
        o = OpenWrt({
            "interfaces": [
                {
                    "name": "wlan0",
                    "type": "wireless",
                    "wireless": {
                        "radio": "radio0",
                        "mode": "access_point",
                        "ssid": "open",
                        "encryption": {"protocol": "none"}
                    }
                }
            ]
        })
        expected = self._tabs("""package network

config interface 'wlan0'
    option ifname 'wlan0'
    option proto 'none'

package wireless

config wifi-iface 'wifi_wlan0'
    option device 'radio0'
    option ifname 'wlan0'
    option mode 'ap'
    option network 'wlan0'
    option ssid 'open'
""")
        self.assertEqual(o.render(), expected)
Exemple #22
0
    def test_ipv4_routes(self):
        o = OpenWrt({
            "interfaces": [
                {
                    "name": "eth1",
                    "type": "ethernet",
                    "addresses": [
                        {
                            "address": "192.168.1.1",
                            "mask": 24,
                            "proto": "static",
                            "family": "ipv4"
                        }
                    ]
                }
            ],
            "routes": [
                {
                    "device": "eth1",
                    "destination": "192.168.3.1/24",
                    "next": "192.168.2.1"
                },
                {
                    "device": "eth1",
                    "destination": "192.168.4.1/24",
                    "next": "192.168.2.2",
                    "cost": 2,
                    "source": "192.168.1.10",
                    "table": 2,
                    "onlink": True,
                    "mtu": 1450
                }
            ]
        })
        expected = self._tabs("""package network

config interface 'eth1'
    option ifname 'eth1'
    option ipaddr '192.168.1.1/24'
    option proto 'static'

config route 'route1'
    option gateway '192.168.2.1'
    option interface 'eth1'
    option netmask '255.255.255.0'
    option target '192.168.3.1'

config route 'route2'
    option gateway '192.168.2.2'
    option interface 'eth1'
    option metric '2'
    option mtu '1450'
    option netmask '255.255.255.0'
    option onlink '1'
    option source '192.168.1.10'
    option table '2'
    option target '192.168.4.1'
""")
        self.assertEqual(o.render(), expected)
 def test_checksum(self):
     """ ensures checksum of same config doesn't change """
     o = OpenWrt({"general": {"hostname": "test"}})
     # md5 is good enough and won't slow down test execution too much
     checksum1 = md5(o.generate().getvalue()).hexdigest()
     sleep(1)
     checksum2 = md5(o.generate().getvalue()).hexdigest()
     self.assertEqual(checksum1, checksum2)
 def test_no_variables_found(self):
     config = {
         "general": {
             "description": "{{ desc }}",
         }
     }
     o = OpenWrt(config, context={"a": "b"})
     output = o.render()
     self.assertIn("option description '{{ desc }}'", output)
 def test_dns_search_hostname(self):
     o = OpenWrt({
         "dns_search": ['openwisp.org', 'test.netjson.org']
     })
     o.validate()
     # invalid hostname
     o.config['dns_search'].append('very/wrong')
     with self.assertRaises(ValidationError):
         o.validate()
 def test_warning(self):
     o = OpenWrt({
         "luci": [
             {
                 "unrecognized": True
             }
         ]
     })
     self.assertEqual(o.render(), 'package luci\n')
 def test_system_invalid_timezone(self):
     o = OpenWrt({
         "general": {
             "hostname": "test_system",
             "timezone": "WRONG",
         }
     })
     with self.assertRaises(ValidationError):
         o.validate()
Exemple #28
0
 def test_led_schema_validation(self):
     o = OpenWrt({
         "led": [
             {
                 "invalid": True
             }
         ]
     })
     with self.assertRaises(ValidationError):
         o.validate()
    def test_ula_prefix(self):
        o = OpenWrt({
            "general": {"ula_prefix": "fd8e:f40a:6701::/48"}
        })
        expected = self._tabs("""package network

config globals 'globals'
    option ula_prefix 'fd8e:f40a:6701::/48'
""")
        self.assertEqual(o.render(), expected)
 def test_wireless_network_attr_validation(self):
     o = OpenWrt({
         "interfaces": [
             {
                 "name": "wlan0",
                 "type": "wireless",
                 "wireless": {
                     "radio": "radio0",
                     "mode": "access_point",
                     "ssid": "open",
                     "network": "lan 0"
                 }
             }
         ]
     })
     # pattern does not validate
     with self.assertRaises(ValidationError):
         o.validate()
     # maxLength does not validate
     o.config['interfaces'][0]['wireless']['network'] = ['lan0123456789012345']
     with self.assertRaises(ValidationError):
         o.validate()
     # ensure fix works
     o.config['interfaces'][0]['wireless']['network'] = ['lan']
     o.validate()
Exemple #31
0
 def test_render_system_custom_id(self):
     o = OpenWrt(self._system_id_netjson)
     expected = self._tabs(self._system_id_uci)
     self.assertEqual(o.render(), expected)
 def test_no_variables_found(self):
     config = {"general": {"description": "{{ desc }}"}}
     o = OpenWrt(config, context={"a": "b"})
     output = o.render()
     self.assertIn("option description '{{ desc }}'", output)
 def test_render_wpa_personal_mixed(self):
     o = OpenWrt(self._wpa_personal_mixed_netjson)
     expected = self._tabs(self._wpa_personal_mixed_uci)
     self.assertEqual(o.render(), expected)
 def test_parse_server_bridge_routed(self):
     c = OpenWrt(native=self._server_bridge_routed_uci)
     self.assertEqual(c.config, self._server_bridge_routed_netjson)
 def test_parse_client_mode(self):
     c = OpenWrt(native=self._client_uci)
     self.assertEqual(c.config, self._client_netjson)
Exemple #36
0
 def test_parse_led(self):
     o = OpenWrt(native=(self._led_uci))
     self.assertEqual(o.config, self._led_netjson)
Exemple #37
0
 def test_parse_ntp_id(self):
     o = OpenWrt(native=self._ntp_id_uci)
     self.assertEqual(o.config, self._ntp_id_netjson)
 def test_parse_multiple_ip(self):
     o = OpenWrt(native=self._multi_ip_uci)
     self.assertEqual(o.config, self._multi_ip_netjson)
 def test_render_simple_bridge(self):
     o = OpenWrt(self._simple_bridge_netjson)
     expected = self._tabs(self._simple_bridge_uci)
     self.assertEqual(o.render(), expected)
 def test_mac_address_format(self):
     o = OpenWrt({
         "interfaces": [{
             "name": "eth0",
             "type": "ethernet",
             "mac": "00:11:22:33:44:55"
         }]
     })
     o.validate()
     # too short
     o.config['interfaces'][0]['mac'] = '00:11:22:33:44'
     with self.assertRaises(ValidationError):
         o.validate()
     # valid
     o.config['interfaces'][0]['mac'] = '00-11-22-33-44-55'
     o.validate()
     # should not be valid
     o.config['interfaces'][0]['mac'] = '00:11:22:33:44:ZY'
     with self.assertRaises(ValidationError):
         o.validate()
     # empty is valid (will be ignored)
     o.config['interfaces'][0]['mac'] = ''
     o.validate()
 def test_render_multiple_ip(self):
     o = OpenWrt(self._multi_ip_netjson)
     expected = self._tabs(self._multi_ip_uci)
     self.assertEqual(o.render(), expected)
Exemple #42
0
    def test_eth_bridge(self):
        o = OpenWrt({
            "interfaces": [
                {
                    "name": "eth0",
                    "type": "ethernet"
                },
                {
                    "name": "eth1",
                    "type": "ethernet",
                },
                {
                    "name":
                    "lan",
                    "type":
                    "bridge",
                    "bridge_members": ["eth0", "eth1"],
                    "addresses": [
                        {
                            "address": "192.168.1.1",
                            "mask": 24,
                            "proto": "static",
                            "family": "ipv4"
                        },
                        # most probably a config that wouldn't work in practice
                        # but needed to ensure that only the first
                        # logical interface contains bridge information
                        {
                            "address": "10.0.0.1",
                            "gateway": "10.0.0.10",
                            "mask": 24,
                            "proto": "static",
                            "family": "ipv4"
                        }
                    ]
                }
            ]
        })
        expected = self._tabs("""package network

config interface 'eth0'
    option ifname 'eth0'
    option proto 'none'

config interface 'eth1'
    option ifname 'eth1'
    option proto 'none'

config interface 'lan'
    option ifname 'eth0 eth1'
    option ipaddr '192.168.1.1'
    option netmask '255.255.255.0'
    option proto 'static'
    option type 'bridge'

config interface 'lan_2'
    option gateway '10.0.0.10'
    option ifname 'br-lan'
    option ipaddr '10.0.0.1'
    option netmask '255.255.255.0'
    option proto 'static'
""")
        self.assertEqual(o.render(), expected)
Exemple #43
0
    def test_server_mode(self):
        c = OpenWrt({
            "openvpn": [{
                "auth": "SHA1",
                "auth_user_pass_verify": "",
                "ca": "ca.pem",
                "cert": "cert.pem",
                "cipher": "BF-CBC",
                "client_cert_not_required": False,
                "client_to_client": False,
                "comp_lzo": "yes",
                "crl_verify": "crl.pem",
                "dev": "tap0",
                "dev_type": "tap",
                "dh": "dh.pem",
                "down": "",
                "duplicate_cn": True,
                "engine": "rsax",
                "enabled": True,
                "fast_io": True,
                "fragment": 0,
                "group": "nogroup",
                "keepalive": "20 60",
                "key": "key.pem",
                "local": "",
                "log": "/var/log/openvpn.log",
                "mode": "server",
                "name": "test-server",
                "mssfix": 1450,
                "mtu_disc": "no",
                "mtu_test": False,
                "mute": 0,
                "mute_replay_warnings": True,
                "ns_cert_type": "",
                "persist_key": True,
                "persist_tun": True,
                "port": 1194,
                "proto": "udp",
                "script_security": 0,
                "secret": "",
                "status": "/var/log/openvpn.status 10",
                "status_version": 1,
                "tls_server": True,
                "tun_ipv6": False,
                "up": "",
                "up_delay": 0,
                "user": "******",
                "username_as_common_name": False,
                "verb": 3
            }]
        })
        expected = self._tabs("""package openvpn

config openvpn 'test_server'
    option auth 'SHA1'
    option ca 'ca.pem'
    option cert 'cert.pem'
    option cipher 'BF-CBC'
    option comp_lzo 'yes'
    option crl_verify 'crl.pem'
    option dev 'tap0'
    option dev_type 'tap'
    option dh 'dh.pem'
    option duplicate_cn '1'
    option enabled '1'
    option engine 'rsax'
    option fast_io '1'
    option group 'nogroup'
    option keepalive '20 60'
    option key 'key.pem'
    option log '/var/log/openvpn.log'
    option mode 'server'
    option mssfix '1450'
    option mtu_disc 'no'
    option mute_replay_warnings '1'
    option persist_key '1'
    option persist_tun '1'
    option port '1194'
    option proto 'udp'
    option script_security '0'
    option status '/var/log/openvpn.status 10'
    option status_version '1'
    option tls_server '1'
    option user 'nobody'
    option verb '3'
""")
        self.assertEqual(c.render(), expected)
Exemple #44
0
    def test_client_mode(self):
        c = OpenWrt({
            "openvpn": [
                {
                    "auth": "SHA256",
                    "auth_user_pass": "",
                    "ca": "ca.pem",
                    "cert": "cert.pem",
                    "cipher": "AES-128-CBC",
                    "comp_lzo": "adaptive",
                    "dev": "tun0",
                    "dev_type": "tun",
                    "down": "/home/user/down-command.sh",
                    "enabled": True,
                    "engine": "",
                    "fast_io": False,
                    "fragment": 0,
                    "group": "",
                    "keepalive": "",
                    "key": "key.pem",
                    "local": "",
                    "log": "/var/log/openvpn.log",
                    "mode": "client",
                    "mssfix": 1450,
                    "mtu_disc": "yes",
                    "mtu_test": True,
                    "mute": 10,
                    "mute_replay_warnings": True,
                    "name": "test-client",
                    "nobind": True,
                    "ns_cert_type": "server",
                    "persist_key": True,
                    "persist_tun": True,
                    "port": 1195,
                    "proto": "tcp-client",
                    "remote": [
                        {
                            "host": "vpn1.test.com",
                            "port": 1194
                        },
                        {
                            "host": "vpn2.test.com",
                            "port": 1195
                        }
                    ],
                    "resolv_retry": True,
                    "script_security": 1,
                    "secret": "",
                    "status": "/var/log/openvpn.status 30",
                    "status_version": 1,
                    "tls_client": True,
                    "tun_ipv6": True,
                    "up": "/home/user/up-command.sh",
                    "up_delay": 10,
                    "user": "******",
                    "verb": 1
                }
            ]
        })
        expected = self._tabs("""package openvpn

config openvpn 'test_client'
    option auth 'SHA256'
    option ca 'ca.pem'
    option cert 'cert.pem'
    option cipher 'AES-128-CBC'
    option comp_lzo 'adaptive'
    option dev 'tun0'
    option dev_type 'tun'
    option down '/home/user/down-command.sh'
    option enabled '1'
    option key 'key.pem'
    option log '/var/log/openvpn.log'
    option mode 'client'
    option mssfix '1450'
    option mtu_disc 'yes'
    option mtu_test '1'
    option mute '10'
    option mute_replay_warnings '1'
    option nobind '1'
    option ns_cert_type 'server'
    option persist_key '1'
    option persist_tun '1'
    option port '1195'
    option proto 'tcp-client'
    list remote 'vpn1.test.com 1194'
    list remote 'vpn2.test.com 1195'
    option resolv_retry '1'
    option script_security '1'
    option status '/var/log/openvpn.status 30'
    option status_version '1'
    option tls_client '1'
    option tun_ipv6 '1'
    option up '/home/user/up-command.sh'
    option up_delay '10'
    option user 'nobody'
    option verb '1'
""")
        self.assertEqual(c.render(), expected)
Exemple #45
0
 def test_render_system_without_timezone(self):
     o = OpenWrt(self._system_simple_netjson)
     expected = self._tabs(self._system_simple_uci)
     self.assertEqual(o.render(), expected)
 def test_parse_simple_bridge(self):
     native = self._tabs(self._simple_bridge_uci)
     o = OpenWrt(native=native)
     self.assertEqual(o.config, self._simple_bridge_netjson)
Exemple #47
0
 def test_led_schema_validation(self):
     o = OpenWrt({"led": [{"invalid": True}]})
     with self.assertRaises(ValidationError):
         o.validate()
 def test_render_complex_bridge(self):
     o = OpenWrt(self._complex_bridge_netjson)
     self.assertEqual(o.render(), self._tabs(self._complex_bridge_uci))
Exemple #49
0
 def test_render_led(self):
     o = OpenWrt(self._led_netjson)
     expected = self._tabs(self._led_uci)
     self.assertEqual(o.render(), expected)
Exemple #50
0
 def test_skip(self):
     o = OpenWrt({"skipme": {"enabled": True}})
     self.assertEqual(o.render(), '')
 def test_render_server_mode(self):
     c = OpenWrt(self._server_netjson)
     expected = self._tabs(self._server_uci)
     self.assertEqual(c.render(), expected)
Exemple #52
0
 def test_warning(self):
     o = OpenWrt({"luci": [{"unrecognized": True}]})
     self.assertEqual(o.render(), '')
 def test_render_server_bridge_routed(self):
     c = OpenWrt(self._server_bridge_routed_netjson)
     expected = self._tabs(self._server_bridge_routed_uci)
     self.assertEqual(c.render(), expected)
Exemple #54
0
 def test_skip_nonlists(self):
     o = OpenWrt({"custom_package": {'unknown': True}})
     self.assertEqual(o.render(), '')
 def test_parse_server_mode(self):
     c = OpenWrt(native=self._server_uci)
     self.assertEqual(c.config, self._server_netjson)
Exemple #56
0
    def test_parse_default(self):
        native = self._tabs("""package firewall

config rule 'rule_1'
    option family 'ipv6'
    list icmp_type '130/0'
    list icmp_type '131/0'
    list icmp_type '132/0'
    list icmp_type '143/0'
    option name 'Allow-MLD'
    option proto 'icmp'
    option src 'wan'
    option src_ip 'fe80::/10'
    option target 'ACCEPT'

package luci

config core 'main'
    option boolean '1'
    option lang 'auto'
    option mediaurlbase '/luci-static/bootstrap'
    option number '4'
    option resourcebase '/luci-static/resources'

package network

config interface 'eth0'
    option ifname 'eth0'
    option proto 'none'

package system

config led 'led_usb1'
    option dev '1-1.1'
    option interval '50'
    option name 'USB1'
    option sysfs 'tp-link:green:usb1'
    option trigger 'usbdev'

config custom 'custom'
    option test '1'
""")
        o = OpenWrt(native=native)
        expected = {
            "luci": [{
                "config_name": "core",
                "config_value": "main",
                "lang": "auto",
                "resourcebase": "/luci-static/resources",
                "mediaurlbase": "/luci-static/bootstrap",
                "number": "4",
                "boolean": "1"
            }],
            "firewall": [{
                "config_name": "rule",
                "name": "Allow-MLD",
                "src": "wan",
                "proto": "icmp",
                "src_ip": "fe80::/10",
                "family": "ipv6",
                "target": "ACCEPT",
                "icmp_type": ["130/0", "131/0", "132/0", "143/0"]
            }],
            "led": [{
                "name": "USB1",
                "sysfs": "tp-link:green:usb1",
                "trigger": "usbdev",
                "dev": "1-1.1",
                "interval": 50,
            }],
            "interfaces": [{
                "name": "eth0",
                "type": "ethernet"
            }],
            "system": [{
                "test": "1",
                "config_name": "custom",
                "config_value": "custom"
            }]
        }
        self.assertDictEqual(o.config, expected)
 def test_parse_wpa_personal_mixed(self):
     o = OpenWrt(native=self._wpa_personal_mixed_uci)
     self.assertEqual(o.config, self._wpa_personal_mixed_netjson)
Exemple #58
0
    def test_render_default(self):
        o = OpenWrt({
            "luci": [{
                "config_name": "core",
                "config_value": "main",
                "lang": "auto",
                "resourcebase": "/luci-static/resources",
                "mediaurlbase": "/luci-static/bootstrap",
                "number": 4,
                "boolean": True
            }],
            "firewall": [{
                "config_name": "rule",
                "name": "Allow-MLD",
                "src": "wan",
                "proto": "icmp",
                "src_ip": "fe80::/10",
                "family": "ipv6",
                "target": "ACCEPT",
                "icmp_type": ["130/0", "131/0", "132/0", "143/0"]
            }, {
                "config_name": "rule",
                "name": "Rule2",
                "src": "wan",
                "proto": "icmp",
                "src_ip": "192.168.1.1/24",
                "family": "ipv4",
                "target": "ACCEPT",
                "icmp_type": ["130/0", "131/0", "132/0", "143/0"]
            }]
        })
        expected = self._tabs("""package firewall

config rule 'rule_1'
    option family 'ipv6'
    list icmp_type '130/0'
    list icmp_type '131/0'
    list icmp_type '132/0'
    list icmp_type '143/0'
    option name 'Allow-MLD'
    option proto 'icmp'
    option src 'wan'
    option src_ip 'fe80::/10'
    option target 'ACCEPT'

config rule 'rule_2'
    option family 'ipv4'
    list icmp_type '130/0'
    list icmp_type '131/0'
    list icmp_type '132/0'
    list icmp_type '143/0'
    option name 'Rule2'
    option proto 'icmp'
    option src 'wan'
    option src_ip '192.168.1.1/24'
    option target 'ACCEPT'

package luci

config core 'main'
    option boolean '1'
    option lang 'auto'
    option mediaurlbase '/luci-static/bootstrap'
    option number '4'
    option resourcebase '/luci-static/resources'
""")
        self.assertEqual(o.render(), expected)
        # try a second time to ensure that the usage of dict.pop
        # in templates does not cause any issue
        self.assertEqual(o.render(), expected)
Exemple #59
0
 def test_parse_system_custom_id(self):
     o = OpenWrt(native=self._system_id_uci)
     self.assertDictEqual(o.config, self._system_id_netjson)
Exemple #60
0
 def test_parse_system_without_timezone(self):
     o = OpenWrt(native=self._system_simple_uci)
     self.assertEqual(o.config, self._system_simple_netjson)