コード例 #1
0
ファイル: test_radio.py プロジェクト: openwisp/netjsonconfig
    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)
コード例 #2
0
ファイル: test_radio.py プロジェクト: openwisp/netjsonconfig
    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)
コード例 #3
0
ファイル: test_radio.py プロジェクト: openwisp/netjsonconfig
    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)
コード例 #4
0
    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)
コード例 #5
0
    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)
コード例 #6
0
    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)
コード例 #7
0
ファイル: test_system.py プロジェクト: openwisp/netjsonconfig
    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)
コード例 #8
0
ファイル: test_network.py プロジェクト: gonrin/netjsonconfig
    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)
コード例 #9
0
    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)
コード例 #10
0
ファイル: test_network.py プロジェクト: gonrin/netjsonconfig
    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)
コード例 #11
0
    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)
コード例 #12
0
    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)
コード例 #13
0
ファイル: test_network.py プロジェクト: gonrin/netjsonconfig
    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)
コード例 #14
0
    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)
コード例 #15
0
    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)
コード例 #16
0
ファイル: test_network.py プロジェクト: gonrin/netjsonconfig
    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)
コード例 #17
0
 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()
コード例 #18
0
ファイル: test_network.py プロジェクト: gonrin/netjsonconfig
    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)
コード例 #19
0
    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)
コード例 #20
0
    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)
コード例 #21
0
    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)
コード例 #22
0
ファイル: test_network.py プロジェクト: gonrin/netjsonconfig
    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)
コード例 #23
0
 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)
コード例 #24
0
 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)
コード例 #25
0
 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()
コード例 #26
0
 def test_warning(self):
     o = OpenWrt({
         "luci": [
             {
                 "unrecognized": True
             }
         ]
     })
     self.assertEqual(o.render(), 'package luci\n')
コード例 #27
0
 def test_system_invalid_timezone(self):
     o = OpenWrt({
         "general": {
             "hostname": "test_system",
             "timezone": "WRONG",
         }
     })
     with self.assertRaises(ValidationError):
         o.validate()
コード例 #28
0
ファイル: test_system.py プロジェクト: openwisp/netjsonconfig
 def test_led_schema_validation(self):
     o = OpenWrt({
         "led": [
             {
                 "invalid": True
             }
         ]
     })
     with self.assertRaises(ValidationError):
         o.validate()
コード例 #29
0
    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)
コード例 #30
0
 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()
コード例 #31
0
ファイル: test_system.py プロジェクト: wrtcoder/netjsonconfig
 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)
コード例 #32
0
 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)
コード例 #33
0
 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)
コード例 #34
0
 def test_parse_server_bridge_routed(self):
     c = OpenWrt(native=self._server_bridge_routed_uci)
     self.assertEqual(c.config, self._server_bridge_routed_netjson)
コード例 #35
0
 def test_parse_client_mode(self):
     c = OpenWrt(native=self._client_uci)
     self.assertEqual(c.config, self._client_netjson)
コード例 #36
0
ファイル: test_system.py プロジェクト: wrtcoder/netjsonconfig
 def test_parse_led(self):
     o = OpenWrt(native=(self._led_uci))
     self.assertEqual(o.config, self._led_netjson)
コード例 #37
0
ファイル: test_system.py プロジェクト: wrtcoder/netjsonconfig
 def test_parse_ntp_id(self):
     o = OpenWrt(native=self._ntp_id_uci)
     self.assertEqual(o.config, self._ntp_id_netjson)
コード例 #38
0
 def test_parse_multiple_ip(self):
     o = OpenWrt(native=self._multi_ip_uci)
     self.assertEqual(o.config, self._multi_ip_netjson)
コード例 #39
0
 def test_render_simple_bridge(self):
     o = OpenWrt(self._simple_bridge_netjson)
     expected = self._tabs(self._simple_bridge_uci)
     self.assertEqual(o.render(), expected)
コード例 #40
0
 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()
コード例 #41
0
 def test_render_multiple_ip(self):
     o = OpenWrt(self._multi_ip_netjson)
     expected = self._tabs(self._multi_ip_uci)
     self.assertEqual(o.render(), expected)
コード例 #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)
コード例 #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)
コード例 #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)
コード例 #45
0
ファイル: test_system.py プロジェクト: wrtcoder/netjsonconfig
 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)
コード例 #46
0
 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)
コード例 #47
0
ファイル: test_system.py プロジェクト: wrtcoder/netjsonconfig
 def test_led_schema_validation(self):
     o = OpenWrt({"led": [{"invalid": True}]})
     with self.assertRaises(ValidationError):
         o.validate()
コード例 #48
0
 def test_render_complex_bridge(self):
     o = OpenWrt(self._complex_bridge_netjson)
     self.assertEqual(o.render(), self._tabs(self._complex_bridge_uci))
コード例 #49
0
ファイル: test_system.py プロジェクト: wrtcoder/netjsonconfig
 def test_render_led(self):
     o = OpenWrt(self._led_netjson)
     expected = self._tabs(self._led_uci)
     self.assertEqual(o.render(), expected)
コード例 #50
0
 def test_skip(self):
     o = OpenWrt({"skipme": {"enabled": True}})
     self.assertEqual(o.render(), '')
コード例 #51
0
 def test_render_server_mode(self):
     c = OpenWrt(self._server_netjson)
     expected = self._tabs(self._server_uci)
     self.assertEqual(c.render(), expected)
コード例 #52
0
 def test_warning(self):
     o = OpenWrt({"luci": [{"unrecognized": True}]})
     self.assertEqual(o.render(), '')
コード例 #53
0
 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)
コード例 #54
0
 def test_skip_nonlists(self):
     o = OpenWrt({"custom_package": {'unknown': True}})
     self.assertEqual(o.render(), '')
コード例 #55
0
 def test_parse_server_mode(self):
     c = OpenWrt(native=self._server_uci)
     self.assertEqual(c.config, self._server_netjson)
コード例 #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)
コード例 #57
0
 def test_parse_wpa_personal_mixed(self):
     o = OpenWrt(native=self._wpa_personal_mixed_uci)
     self.assertEqual(o.config, self._wpa_personal_mixed_netjson)
コード例 #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)
コード例 #59
0
ファイル: test_system.py プロジェクト: wrtcoder/netjsonconfig
 def test_parse_system_custom_id(self):
     o = OpenWrt(native=self._system_id_uci)
     self.assertDictEqual(o.config, self._system_id_netjson)
コード例 #60
0
ファイル: test_system.py プロジェクト: wrtcoder/netjsonconfig
 def test_parse_system_without_timezone(self):
     o = OpenWrt(native=self._system_simple_uci)
     self.assertEqual(o.config, self._system_simple_netjson)