diff options
author | Andrew Shadura <andrew@shadura.me> | 2015-08-20 15:58:26 +0200 |
---|---|---|
committer | Andrew Shadura <andrew@shadura.me> | 2015-08-20 15:58:26 +0200 |
commit | ff1408420159488a106492ccd11dd234967029b6 (patch) | |
tree | 473420cee1c5229a427ec4cafead1aa6c0a26800 /reconfigure/tests |
Imported Upstream version 0.1.29
Diffstat (limited to 'reconfigure/tests')
34 files changed, 1312 insertions, 0 deletions
diff --git a/reconfigure/tests/__init__.py b/reconfigure/tests/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/reconfigure/tests/__init__.py diff --git a/reconfigure/tests/configs/__init__.py b/reconfigure/tests/configs/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/reconfigure/tests/configs/__init__.py diff --git a/reconfigure/tests/configs/ajenti_tests.py b/reconfigure/tests/configs/ajenti_tests.py new file mode 100644 index 0000000..56a1dc1 --- /dev/null +++ b/reconfigure/tests/configs/ajenti_tests.py @@ -0,0 +1,52 @@ +import json + +from reconfigure.configs import AjentiConfig +from base_test import BaseConfigTest + + +class AjentiConfigTest (BaseConfigTest): + sources = { + None: """{ + "authentication": false, + "bind": { + "host": "0.0.0.0", + "port": 8000 + }, + "enable_feedback": true, + "installation_id": null, + "users": { + "test": { + "configs": { "a": "{}" }, + "password": "sha512", + "permissions": [ + "section:Dash" + ] + } + }, + "ssl": { + "enable": false, + "certificate_path": "" + } +} +""" + } + result = { + 'authentication': False, + 'enable_feedback': True, + 'installation_id': None, + 'http_binding': {'host': '0.0.0.0', 'port': 8000}, + 'ssl': {'certificate_path': '', 'enable': False}, + 'users': {'test': { + 'configs': {'a': {'data': {}, 'name': 'a'}}, + 'name': 'test', + 'password': 'sha512', + 'permissions': ['section:Dash'] + }} + } + + config = AjentiConfig + + stringify_filter = staticmethod(json.loads) + + +del BaseConfigTest diff --git a/reconfigure/tests/configs/base_test.py b/reconfigure/tests/configs/base_test.py new file mode 100644 index 0000000..1824819 --- /dev/null +++ b/reconfigure/tests/configs/base_test.py @@ -0,0 +1,37 @@ +import unittest +import json + + +class BaseConfigTest (unittest.TestCase): + sources = "" + result = None + config = None + config_kwargs = {} + stringify_filter = staticmethod(lambda x: x.split()) + + def test_config(self): + if not self.config: + return + + self.maxDiff = None + + config = self.config(content=self.sources[None], **self.config_kwargs) + if config.includer: + config.includer.content_map = self.sources + config.load() + #print 'RESULT', config.tree.to_dict() + #print 'SOURCE', self.__class__.result + #self.assertTrue(self.__class__.result== config.tree.to_dict()) + a, b = self.__class__.result, config.tree.to_dict() + if a != b: + print 'SOURCE: %s\nGENERATED: %s\n' % (json.dumps(a, indent=4), json.dumps(b, indent=4)) + self.assertEquals(a, b) + + result = config.save() + s_filter = self.__class__.stringify_filter + #print s_filter(result[None]) + for k, v in result.iteritems(): + self.assertEquals( + s_filter(self.__class__.sources[k]), + s_filter(v) + ) diff --git a/reconfigure/tests/configs/bind9_tests.py b/reconfigure/tests/configs/bind9_tests.py new file mode 100644 index 0000000..ee0c05a --- /dev/null +++ b/reconfigure/tests/configs/bind9_tests.py @@ -0,0 +1,28 @@ +from reconfigure.configs import BIND9Config +from base_test import BaseConfigTest + + +class BIND9ConfigTest (BaseConfigTest): + sources = { + None: """ +zone "asd" { + type master; + file "/file"; +}; + +""" + } + result = { + "zones": [ + { + "type": "master", + "name": "asd", + "file": "/file" + } + ] + } + + config = BIND9Config + + +del BaseConfigTest diff --git a/reconfigure/tests/configs/crontab_tests.py b/reconfigure/tests/configs/crontab_tests.py new file mode 100644 index 0000000..f1b28fe --- /dev/null +++ b/reconfigure/tests/configs/crontab_tests.py @@ -0,0 +1,53 @@ +from reconfigure.configs import CrontabConfig +from base_test import BaseConfigTest + + +class CrontabConfigTest (BaseConfigTest): + sources = { + None: """#comment line +* * * * * date +@reboot ls -al +1 * 0 1 2 date -s +NAME = TEST""" + } + result = { + 'normal_tasks': [ + { + 'minute': '*', + 'hour': '*', + 'day_of_month': '*', + 'month': '*', + 'day_of_week': '*', + 'command': 'date', + 'comment': 'comment line' + }, + { + 'minute': '1', + 'hour': '*', + 'day_of_month': '0', + 'month': '1', + 'day_of_week': '2', + 'command': 'date -s', + 'comment': None, + }, + + ], + 'special_tasks': [ + { + 'special': '@reboot', + 'command': 'ls -al', + 'comment': None, + } + ], + 'env_settings': [ + { + 'name': 'NAME', + 'value': 'TEST', + 'comment': None + } + ] + } + config = CrontabConfig + + +del BaseConfigTest diff --git a/reconfigure/tests/configs/ctdb_tests.py b/reconfigure/tests/configs/ctdb_tests.py new file mode 100644 index 0000000..7437ef7 --- /dev/null +++ b/reconfigure/tests/configs/ctdb_tests.py @@ -0,0 +1,73 @@ +from reconfigure.configs import CTDBConfig, CTDBNodesConfig, CTDBPublicAddressesConfig +from base_test import BaseConfigTest + + +class CTDBNodesConfigTest (BaseConfigTest): + sources = { + None: """10.10.1.1 +10.10.1.2 +""" + } + result = { + 'nodes': [ + { + 'address': '10.10.1.1', + }, + { + 'address': '10.10.1.2', + }, + ] + } + config = CTDBNodesConfig + + +class CTDBPublicAddressesConfigTest (BaseConfigTest): + sources = { + None: """10.10.1.1 eth0 +10.10.1.2 eth1 +""" + } + result = { + 'addresses': [ + { + 'address': '10.10.1.1', + 'interface': 'eth0', + }, + { + 'address': '10.10.1.2', + 'interface': 'eth1', + }, + ] + } + config = CTDBPublicAddressesConfig + + +class CTDBConfigTest (BaseConfigTest): + sources = { + None: """CTDB_RECOVERY_LOCK="/dadoscluster/ctdb/storage" +CTDB_PUBLIC_INTERFACE=eth0 +CTDB_PUBLIC_ADDRESSES=/etc/ctdb/public_addresses +CTDB_MANAGES_SAMBA=yes +CTDB_NODES=/etc/ctdb/nodes +CTDB_LOGFILE=/var/log/log.ctdb +CTDB_DEBUGLEVEL=2 +CTDB_PUBLIC_NETWORK="10.0.0.0/24" +CTDB_PUBLIC_GATEWAY="10.0.0.9" +""" + } + result = { + "recovery_lock_file": "\"/dadoscluster/ctdb/storage\"", + "public_interface": "eth0", + "public_addresses_file": "/etc/ctdb/public_addresses", + "nodes_file": "/etc/ctdb/nodes", + "debug_level": "2", + "public_gateway": "\"10.0.0.9\"", + "public_network": "\"10.0.0.0/24\"", + "log_file": "/var/log/log.ctdb", + "manages_samba": True + } + + config = CTDBConfig + + +del BaseConfigTest diff --git a/reconfigure/tests/configs/dhcpd_tests.py b/reconfigure/tests/configs/dhcpd_tests.py new file mode 100644 index 0000000..73fbc74 --- /dev/null +++ b/reconfigure/tests/configs/dhcpd_tests.py @@ -0,0 +1,50 @@ +from reconfigure.configs import DHCPDConfig +from base_test import BaseConfigTest + + +class DHCPDConfigTest (BaseConfigTest): + sources = { + None: """ +default-lease-time 600; +max-lease-time 7200; + + subnet 10.17.224.0 netmask 255.255.255.0 { + option routers rtr-224.example.org; + range 10.0.29.10 10.0.29.230; + } +shared-network 224-29 { + subnet 10.17.224.0 netmask 255.255.255.0 { + option routers rtr-224.example.org; + } + pool { + deny members of "foo"; + range 10.0.29.10 10.0.29.230; + } +} + +""" + } + result = { + "subnets": [ + { + "ranges": [ + { + "range": "10.0.29.10 10.0.29.230" + } + ], + "subnets": [], + "name": "10.17.224.0 netmask 255.255.255.0", + "options": [ + { + "value": "routers rtr-224.example.org" + } + ] + } + ], + "options": [] + } + + config = DHCPDConfig + + +del BaseConfigTest diff --git a/reconfigure/tests/configs/exports_tests.py b/reconfigure/tests/configs/exports_tests.py new file mode 100644 index 0000000..be85736 --- /dev/null +++ b/reconfigure/tests/configs/exports_tests.py @@ -0,0 +1,45 @@ +from reconfigure.configs import ExportsConfig +from base_test import BaseConfigTest + + +class ExportsConfigTest (BaseConfigTest): + sources = { + None: """ +/another/exported/directory 192.168.0.3(rw,sync) \ +192.168.0.4(ro) # test +/one 192.168.0.1 # comment +""" + } + result = { + "exports": [ + { + "comment": "test", + "name": '/another/exported/directory', + "clients": [ + { + "name": "192.168.0.3", + "options": "rw,sync" + }, + { + "name": "192.168.0.4", + "options": "ro" + } + ] + }, + { + "comment": "comment", + "name": '/one', + "clients": [ + { + "name": "192.168.0.1", + "options": "" + } + ] + } + ] + } + + config = ExportsConfig + + +del BaseConfigTest diff --git a/reconfigure/tests/configs/fstab_tests.py b/reconfigure/tests/configs/fstab_tests.py new file mode 100644 index 0000000..9ffe19b --- /dev/null +++ b/reconfigure/tests/configs/fstab_tests.py @@ -0,0 +1,34 @@ +from reconfigure.configs import FSTabConfig +from base_test import BaseConfigTest + + +class FSTabConfigTest (BaseConfigTest): + sources = { + None: """fs1\tmp1\text\trw\t1\t2 +fs2\tmp2\tauto\tnone\t0\t0 +""" + } + result = { + 'filesystems': [ + { + 'device': 'fs1', + 'mountpoint': 'mp1', + 'type': 'ext', + 'options': 'rw', + 'freq': '1', + 'passno': '2' + }, + { + 'device': 'fs2', + 'mountpoint': 'mp2', + 'type': 'auto', + 'options': 'none', + 'freq': '0', + 'passno': '0' + }, + ] + } + config = FSTabConfig + + +del BaseConfigTest diff --git a/reconfigure/tests/configs/group_tests.py b/reconfigure/tests/configs/group_tests.py new file mode 100644 index 0000000..b53dc5c --- /dev/null +++ b/reconfigure/tests/configs/group_tests.py @@ -0,0 +1,30 @@ +from reconfigure.configs import GroupConfig +from base_test import BaseConfigTest + + +class GroupConfigTest (BaseConfigTest): + sources = { + None: """sys:x:3: +adm:x:4:eugeny +""" + } + result = { + 'groups': [ + { + 'name': 'sys', + 'password': 'x', + 'gid': '3', + 'users': '', + }, + { + 'name': 'adm', + 'password': 'x', + 'gid': '4', + 'users': 'eugeny', + }, + ] + } + config = GroupConfig + + +del BaseConfigTest diff --git a/reconfigure/tests/configs/hosts_tests.py b/reconfigure/tests/configs/hosts_tests.py new file mode 100644 index 0000000..e202929 --- /dev/null +++ b/reconfigure/tests/configs/hosts_tests.py @@ -0,0 +1,40 @@ +from reconfigure.configs import HostsConfig +from base_test import BaseConfigTest + + +class FSTabConfigTest (BaseConfigTest): + sources = { + None: """a1 h1 a2 a3 a4 +a5 h2 +a6 h3 a7 +""" + } + result = { + 'hosts': [ + { + 'address': 'a1', + 'name': 'h1', + 'aliases': [ + {'name': 'a2'}, + {'name': 'a3'}, + {'name': 'a4'}, + ] + }, + { + 'address': 'a5', + 'aliases': [], + 'name': 'h2', + }, + { + 'address': 'a6', + 'name': 'h3', + 'aliases': [ + {'name': 'a7'}, + ] + }, + ] + } + config = HostsConfig + + +del BaseConfigTest diff --git a/reconfigure/tests/configs/iptables_tests.py b/reconfigure/tests/configs/iptables_tests.py new file mode 100644 index 0000000..335e081 --- /dev/null +++ b/reconfigure/tests/configs/iptables_tests.py @@ -0,0 +1,100 @@ +from reconfigure.configs import IPTablesConfig +from base_test import BaseConfigTest + + +class IPTablesConfigTest (BaseConfigTest): + sources = { + None: '''*filter +:INPUT ACCEPT [0:0] +:FORWARD DROP [0:0] +:OUTPUT ACCEPT [0:0] +-A INPUT ! -s 202.54.1.2/32 -j DROP +-A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT # test +COMMIT +''' + } + result = { + 'tables': [ + { + 'chains': [ + { + 'default': 'ACCEPT', + 'rules': [ + { + 'options': [ + { + 'arguments': [ + { + 'value': '202.54.1.2/32' + } + ], + 'negative': True, + 'name': 's' + }, + { + 'arguments': [ + { + 'value': 'DROP' + } + ], + 'negative': False, + 'name': 'j' + } + ], + 'comment': None, + }, + { + 'options': [ + { + 'arguments': [ + { + 'value': 'state' + } + ], + 'negative': False, + 'name': 'm' + }, + { + 'arguments': [ + { + 'value': 'NEW,ESTABLISHED' + } + ], + 'negative': False, + 'name': 'state' + }, + { + 'arguments': [ + { + 'value': 'ACCEPT' + } + ], + 'negative': False, + 'name': 'j' + } + ], + 'comment': 'test', + } + ], + 'name': 'INPUT' + }, + { + 'default': 'DROP', + 'rules': [], + 'name': 'FORWARD' + }, + { + 'default': 'ACCEPT', + 'rules': [], + 'name': 'OUTPUT' + } + ], + 'name': 'filter' + } + ] + } + + config = IPTablesConfig + + +del BaseConfigTest diff --git a/reconfigure/tests/configs/netatalk_tests.py b/reconfigure/tests/configs/netatalk_tests.py new file mode 100644 index 0000000..ab9f693 --- /dev/null +++ b/reconfigure/tests/configs/netatalk_tests.py @@ -0,0 +1,41 @@ +from reconfigure.configs import NetatalkConfig +from base_test import BaseConfigTest + + +class NetatalkConfigTest (BaseConfigTest): + sources = { + None: """ +[Global] +afp port=123 + +[test] +path=/home ;comment +valid users=root +ea=sys +""" + } + + result = { + "global": { + "zeroconf": True, + "cnid_listen": "localhost:4700", + "afp_port": "123", + }, + "shares": [ + { + "comment": "comment", + "appledouble": "ea", + "name": "test", + "ea": "sys", + "valid_users": "root", + "cnid_scheme": "dbd", + "path": "/home", + "password": '', + } + ] + } + + config = NetatalkConfig + + +del BaseConfigTest diff --git a/reconfigure/tests/configs/nsd_tests.py b/reconfigure/tests/configs/nsd_tests.py new file mode 100644 index 0000000..d91b0bd --- /dev/null +++ b/reconfigure/tests/configs/nsd_tests.py @@ -0,0 +1,26 @@ +from reconfigure.configs import NSDConfig +from base_test import BaseConfigTest + + +class NSDConfigTest (BaseConfigTest): + sources = { + None: """ +zone: + name: "example.net" + zonefile: "example.net.signed.zone" + notify-retry: 5 +""" + } + result = { + "zones": [ + { + "name": "example.net", + "file": "example.net.signed.zone" + } + ] + } + + config = NSDConfig + + +del BaseConfigTest diff --git a/reconfigure/tests/configs/passwd_tests.py b/reconfigure/tests/configs/passwd_tests.py new file mode 100644 index 0000000..8f9a5de --- /dev/null +++ b/reconfigure/tests/configs/passwd_tests.py @@ -0,0 +1,36 @@ +from reconfigure.configs import PasswdConfig +from base_test import BaseConfigTest + + +class PasswdConfigTest (BaseConfigTest): + sources = { + None: """backup:x:34:34:backup:/var/backups:/bin/sh +list:x:38:38:Mailing List Manager:/var/list:/bin/sh +""" + } + result = { + 'users': [ + { + 'name': 'backup', + 'password': 'x', + 'uid': '34', + 'gid': '34', + 'comment': 'backup', + 'home': '/var/backups', + 'shell': '/bin/sh' + }, + { + 'name': 'list', + 'password': 'x', + 'uid': '38', + 'gid': '38', + 'comment': 'Mailing List Manager', + 'home': '/var/list', + 'shell': '/bin/sh' + }, + ] + } + config = PasswdConfig + + +del BaseConfigTest diff --git a/reconfigure/tests/configs/resolv_tests.py b/reconfigure/tests/configs/resolv_tests.py new file mode 100644 index 0000000..d7bedc8 --- /dev/null +++ b/reconfigure/tests/configs/resolv_tests.py @@ -0,0 +1,31 @@ +from reconfigure.configs import ResolvConfig +from base_test import BaseConfigTest + + +class ResolvConfigTest (BaseConfigTest): + sources = { + None: """nameserver 1 +domain 2 +search 3 5 +""" + } + result = { + 'items': [ + { + 'name': 'nameserver', + 'value': '1', + }, + { + 'name': 'domain', + 'value': '2', + }, + { + 'name': 'search', + 'value': '3 5', + }, + ] + } + config = ResolvConfig + + +del BaseConfigTest diff --git a/reconfigure/tests/configs/samba_tests.py b/reconfigure/tests/configs/samba_tests.py new file mode 100644 index 0000000..c6ce44c --- /dev/null +++ b/reconfigure/tests/configs/samba_tests.py @@ -0,0 +1,70 @@ +from reconfigure.configs import SambaConfig +from base_test import BaseConfigTest + + +class SambaConfigTest (BaseConfigTest): + sources = { + None: """ +[global] +workgroup=WORKGROUP +server string=%h server (Samba, Ubuntu) +interfaces=127.0.0.0/8 eth0 +bind interfaces only=yes +log file=/var/log/samba/log.%m +security=user + +[homes] +comment=Home Directories +browseable=no + +[profiles] +comment=Users profiles +path=/home/samba/profiles +guest ok=no +browseable=no +create mask=0600 +directory mask=0700 +""" + } + + result = { + "global": { + "server_string": "%h server (Samba, Ubuntu)", + "workgroup": "WORKGROUP", + "interfaces": "127.0.0.0/8 eth0", + "bind_interfaces_only": True, + "security": "user", + "log_file": "/var/log/samba/log.%m" + }, + "shares": [ + { + "name": "homes", + "comment": "Home Directories", + "browseable": False, + "create_mask": "0744", + "directory_mask": "0755", + 'follow_symlinks': True, + "read_only": True, + "guest_ok": False, + "path": "", + 'wide_links': False, + }, + { + "name": "profiles", + "comment": "Users profiles", + "browseable": False, + "create_mask": "0600", + "directory_mask": "0700", + 'follow_symlinks': True, + "read_only": True, + "guest_ok": False, + "path": "/home/samba/profiles", + 'wide_links': False + } + ] + } + + config = SambaConfig + + +del BaseConfigTest diff --git a/reconfigure/tests/configs/squid_tests.py b/reconfigure/tests/configs/squid_tests.py new file mode 100644 index 0000000..011d4bf --- /dev/null +++ b/reconfigure/tests/configs/squid_tests.py @@ -0,0 +1,63 @@ +from reconfigure.configs import SquidConfig +from base_test import BaseConfigTest + + +class SquidConfigTest (BaseConfigTest): + sources = { + None: """acl manager proto cache_object +acl SSL_ports port 443 +http_access deny CONNECT !SSL_ports +http_port 3128 +""" + } + result = { + "http_access": [ + { + "mode": "deny", + "options": [ + { + "value": "CONNECT" + }, + { + "value": "!SSL_ports" + } + ] + } + ], + "http_port": [ + { + "options": [], + "port": "3128" + } + ], + "https_port": [], + "acl": [ + { + "name": "manager", + "options": [ + { + "value": "proto" + }, + { + "value": "cache_object" + } + ] + }, + { + "name": "SSL_ports", + "options": [ + { + "value": "port" + }, + { + "value": "443" + } + ] + } + ] + } + + config = SquidConfig + + +del BaseConfigTest diff --git a/reconfigure/tests/configs/supervisor_tests.py b/reconfigure/tests/configs/supervisor_tests.py new file mode 100644 index 0000000..8656128 --- /dev/null +++ b/reconfigure/tests/configs/supervisor_tests.py @@ -0,0 +1,36 @@ +from reconfigure.configs import SupervisorConfig +from base_test import BaseConfigTest + + +class SupervisorConfigTest (BaseConfigTest): + sources = { + None: """[unix_http_server] +file=/var/run//supervisor.sock ;comment +chmod=0700 +[include] +files=test""", + 'test': """[program:test1] +command=cat + """ + } + result = { + "programs": [ + { + "autorestart": None, + "name": "test1", + "startsecs": None, + "umask": None, + "environment": None, + "command": "cat", + "user": None, + "startretries": None, + "directory": None, + "autostart": None + } + ] + } + + config = SupervisorConfig + + +del BaseConfigTest diff --git a/reconfigure/tests/includers/__init__.py b/reconfigure/tests/includers/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/reconfigure/tests/includers/__init__.py diff --git a/reconfigure/tests/includers/nginx_tests.py b/reconfigure/tests/includers/nginx_tests.py new file mode 100644 index 0000000..ad980a1 --- /dev/null +++ b/reconfigure/tests/includers/nginx_tests.py @@ -0,0 +1,29 @@ +#coding: utf8 +import unittest +from reconfigure.parsers import NginxParser +from reconfigure.includers import NginxIncluder + + +class IncludersTest (unittest.TestCase): + def test_compose_decompose(self): + content = """ + sec1 { + p1 1; + include test; + } + """ + content2 = """ + sec2 { + p2 2; + } + """ + + parser = NginxParser() + includer = NginxIncluder(parser=parser, content_map={'test': content2}) + tree = parser.parse(content) + tree = includer.compose(None, tree) + self.assertTrue(len(tree.children[0].children) == 3) + + treemap = includer.decompose(tree) + self.assertTrue(len(treemap.keys()) == 2) + self.assertTrue(treemap['test'].children[0].name == 'sec2') diff --git a/reconfigure/tests/parsers/__init__.py b/reconfigure/tests/parsers/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/reconfigure/tests/parsers/__init__.py diff --git a/reconfigure/tests/parsers/base_test.py b/reconfigure/tests/parsers/base_test.py new file mode 100644 index 0000000..74c94b5 --- /dev/null +++ b/reconfigure/tests/parsers/base_test.py @@ -0,0 +1,30 @@ +import unittest + + +class BaseParserTest (unittest.TestCase): + source = "" + parsed = None + parser = None + + @property + def stringified(self): + return self.source + + def test_parse(self): + if not self.__class__.parser: + return + + nodetree = self.parser.parse(self.__class__.source) + if self.__class__.parsed != nodetree: + print 'TARGET: %s\n\nPARSED: %s' % (self.__class__.parsed, nodetree) + self.assertEquals(self.__class__.parsed, nodetree) + + def test_stringify(self): + if not self.__class__.parser: + return + + unparsed = self.parser.stringify(self.__class__.parsed) + a, b = self.stringified, unparsed + if a.split() != b.split(): + print 'SOURCE: %s\n\nGENERATED: %s' % (a, b) + self.assertEquals(a.split(), b.split()) diff --git a/reconfigure/tests/parsers/bind9_tests.py b/reconfigure/tests/parsers/bind9_tests.py new file mode 100644 index 0000000..0f2527e --- /dev/null +++ b/reconfigure/tests/parsers/bind9_tests.py @@ -0,0 +1,55 @@ +from reconfigure.tests.parsers.base_test import BaseParserTest +from reconfigure.parsers import BIND9Parser +from reconfigure.nodes import * + + +class BIND9ParserTest (BaseParserTest): + parser = BIND9Parser() + source = """p1 asd; + +sec { + s1p1 asd; + /*s1p2 wqe;*/ + + sec2 test { + ::1; + s2p1 qwe; + }; +}; +""" + + @property + def stringified(self): + return """ + p1 asd; + +sec { + s1p1 asd; + + # s1p2 wqe; + sec2 test { + ::1; + s2p1 qwe; + }; +}; +""" + + parsed = RootNode( + None, + PropertyNode('p1', 'asd'), + Node( + 'sec', + PropertyNode('s1p1', 'asd'), + Node( + 'sec2', + PropertyNode('', '::1'), + PropertyNode('s2p1', 'qwe'), + parameter='test', + comment='s1p2 wqe;', + ), + parameter=None, + ) + ) + + +del BaseParserTest diff --git a/reconfigure/tests/parsers/crontab_tests.py b/reconfigure/tests/parsers/crontab_tests.py new file mode 100644 index 0000000..481a2f6 --- /dev/null +++ b/reconfigure/tests/parsers/crontab_tests.py @@ -0,0 +1,57 @@ +from reconfigure.parsers import CrontabParser +from reconfigure.nodes import RootNode, Node, PropertyNode +from reconfigure.tests.parsers.base_test import BaseParserTest + + +class CrontabParserTest (BaseParserTest): + parser = CrontabParser() + + source = '\n'.join(['#comment line', + '* * * * * date', + '@reboot ls -al', + '1 * 0 1 2 date -s', + 'NAME = TEST', + ]) + parsed = RootNode(None, + children=[ + Node('normal_task', + comment='comment line', + children=[ + PropertyNode('minute', '*'), + PropertyNode('hour', '*'), + PropertyNode('day_of_month', '*'), + PropertyNode('month', '*'), + PropertyNode('day_of_week', '*'), + PropertyNode('command', 'date'), + ] + ), + Node('special_task', + children=[ + PropertyNode('special', '@reboot'), + PropertyNode('command', 'ls -al'), + ] + ), + Node('normal_task', + children=[ + PropertyNode('minute', '1'), + PropertyNode('hour', '*'), + PropertyNode('day_of_month', '0'), + PropertyNode('month', '1'), + PropertyNode('day_of_week', '2'), + PropertyNode('command', 'date -s'), + ] + ), + Node('env_setting', + children=[ + PropertyNode('name', 'NAME'), + PropertyNode('value', 'TEST'), + ] + ), + ] + ) +# bad_source = '\n'.join(['* * * * dd', #Wrong line +# ' = FAIL', #wrong line +# ]) + + +del BaseParserTest diff --git a/reconfigure/tests/parsers/exports_tests.py b/reconfigure/tests/parsers/exports_tests.py new file mode 100644 index 0000000..e83552a --- /dev/null +++ b/reconfigure/tests/parsers/exports_tests.py @@ -0,0 +1,50 @@ +from reconfigure.tests.parsers.base_test import BaseParserTest +from reconfigure.parsers import ExportsParser +from reconfigure.nodes import * + + +class ExportsParserTest (BaseParserTest): + parser = ExportsParser() + source = """ +/another/exported/directory 192.168.0.3(rw,sync) \ +192.168.0.4(ro) +# comment +/one 192.168.0.1 +""" + parsed = RootNode( + None, + Node( + '/another/exported/directory', + Node( + 'clients', + Node( + '192.168.0.3', + PropertyNode('options', 'rw,sync') + ), + Node( + '192.168.0.4', + PropertyNode('options', 'ro') + ), + ), + ), + Node( + '/one', + Node( + 'clients', + Node( + '192.168.0.1', + PropertyNode('options', '') + ), + ), + comment='comment' + ) + ) + + @property + def stringified(self): + return """/another/exported/directory\t192.168.0.3(rw,sync)\t192.168.0.4(ro) +/one\t192.168.0.1\t# comment +""" + + +del BaseParserTest diff --git a/reconfigure/tests/parsers/ini_tests.py b/reconfigure/tests/parsers/ini_tests.py new file mode 100644 index 0000000..cdb3c02 --- /dev/null +++ b/reconfigure/tests/parsers/ini_tests.py @@ -0,0 +1,26 @@ +from reconfigure.tests.parsers.base_test import BaseParserTest +from reconfigure.parsers import IniFileParser +from reconfigure.nodes import * + + +class IniParserTest (BaseParserTest): + parser = IniFileParser(sectionless=True) + source = """a=b + +[section1] ;section comment +s1p1=asd ;comment 2 +s1p2=123 +""" + parsed = RootNode(None, + Node(None, + PropertyNode('a', 'b'), + ), + Node('section1', + PropertyNode('s1p1', 'asd', comment='comment 2'), + PropertyNode('s1p2', '123'), + comment='section comment' + ), + ) + + +del BaseParserTest diff --git a/reconfigure/tests/parsers/iptables_tests.py b/reconfigure/tests/parsers/iptables_tests.py new file mode 100644 index 0000000..21e09fa --- /dev/null +++ b/reconfigure/tests/parsers/iptables_tests.py @@ -0,0 +1,61 @@ +from reconfigure.tests.parsers.base_test import BaseParserTest +from reconfigure.parsers import IPTablesParser +from reconfigure.nodes import * + + +class IPTablesParserTest (BaseParserTest): + parser = IPTablesParser() + source = """*filter +:INPUT ACCEPT [0:0] +:FORWARD DROP [0:0] +:OUTPUT ACCEPT [0:0] +-A INPUT ! -s 202.54.1.2/32 -j DROP # test +-A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT +COMMIT +""" + parsed = RootNode(None, + Node('filter', + Node('INPUT', + PropertyNode('default', 'ACCEPT'), + Node('append', + Node('option', + Node('argument', PropertyNode('value', '202.54.1.2/32')), + PropertyNode('negative', True), + PropertyNode('name', 's') + ), + Node('option', + Node('argument', PropertyNode('value', 'DROP')), + PropertyNode('negative', False), + PropertyNode('name', 'j') + ), + comment='test' + ), + Node('append', + Node('option', + Node('argument', PropertyNode('value', 'state')), + PropertyNode('negative', False), + PropertyNode('name', 'm') + ), + Node('option', + Node('argument', PropertyNode('value', 'NEW,ESTABLISHED')), + PropertyNode('negative', False), + PropertyNode('name', 'state') + ), + Node('option', + Node('argument', PropertyNode('value', 'ACCEPT')), + PropertyNode('negative', False), + PropertyNode('name', 'j') + ), + ), + ), + Node('FORWARD', + PropertyNode('default', 'DROP'), + ), + Node('OUTPUT', + PropertyNode('default', 'ACCEPT'), + ), + ) + ) + + +del BaseParserTest diff --git a/reconfigure/tests/parsers/jsonparser_tests.py b/reconfigure/tests/parsers/jsonparser_tests.py new file mode 100644 index 0000000..1c1312e --- /dev/null +++ b/reconfigure/tests/parsers/jsonparser_tests.py @@ -0,0 +1,24 @@ +from reconfigure.tests.parsers.base_test import BaseParserTest +from reconfigure.parsers import JsonParser +from reconfigure.nodes import * + + +class JsonParserTest (BaseParserTest): + parser = JsonParser() + source = """{ + "p2": 123, + "s1": { + "s1p1": "qwerty" + } +} +""" + + parsed = RootNode(None, + PropertyNode('p2', 123), + Node('s1', + PropertyNode('s1p1', 'qwerty'), + ), + ) + + +del BaseParserTest diff --git a/reconfigure/tests/parsers/nginx_tests.py b/reconfigure/tests/parsers/nginx_tests.py new file mode 100644 index 0000000..83fe8b2 --- /dev/null +++ b/reconfigure/tests/parsers/nginx_tests.py @@ -0,0 +1,38 @@ +from reconfigure.tests.parsers.base_test import BaseParserTest +from reconfigure.parsers import NginxParser +from reconfigure.nodes import * + + +class NginxParserTest (BaseParserTest): + parser = NginxParser() + source = """p1 asd; + +sec { + s1p1 asd; + s1p2 wqe; + + # test + sec2 test { + s2p1 qwe; + } +} +""" + parsed = RootNode( + None, + PropertyNode('p1', 'asd'), + Node( + 'sec', + PropertyNode('s1p1', 'asd'), + PropertyNode('s1p2', 'wqe'), + Node( + 'sec2', + PropertyNode('s2p1', 'qwe'), + parameter='test', + comment='test', + ), + parameter=None, + ) + ) + + +del BaseParserTest diff --git a/reconfigure/tests/parsers/nsd_tests.py b/reconfigure/tests/parsers/nsd_tests.py new file mode 100644 index 0000000..54bd7a4 --- /dev/null +++ b/reconfigure/tests/parsers/nsd_tests.py @@ -0,0 +1,29 @@ +from reconfigure.tests.parsers.base_test import BaseParserTest +from reconfigure.parsers import NSDParser +from reconfigure.nodes import * + + +class BIND9ParserTest (BaseParserTest): + parser = NSDParser() + source = """# asd + server: + ip4-only: no +key: + name: "mskey" +""" + + parsed = RootNode( + None, + Node( + 'server', + PropertyNode('ip4-only', 'no'), + comment='asd' + ), + Node( + 'key', + PropertyNode('name', '"mskey"'), + ) + ) + + +del BaseParserTest diff --git a/reconfigure/tests/parsers/squid_tests.py b/reconfigure/tests/parsers/squid_tests.py new file mode 100644 index 0000000..1896b5f --- /dev/null +++ b/reconfigure/tests/parsers/squid_tests.py @@ -0,0 +1,29 @@ +from reconfigure.tests.parsers.base_test import BaseParserTest +from reconfigure.parsers import SquidParser +from reconfigure.nodes import * + + +class SquidParserTest (BaseParserTest): + parser = SquidParser() + source = """# line1 +# long comment +a\tbc +efgh # line2 +""" + parsed = RootNode(None, + Node('line', + PropertyNode('name', 'a'), + Node('arguments', + PropertyNode('1', 'bc'), + ), + comment='line1\nlong comment', + ), + Node('line', + PropertyNode('name', 'efgh'), + Node('arguments'), + comment='line2', + ), + ) + + +del BaseParserTest diff --git a/reconfigure/tests/parsers/ssv_tests.py b/reconfigure/tests/parsers/ssv_tests.py new file mode 100644 index 0000000..4df9ff5 --- /dev/null +++ b/reconfigure/tests/parsers/ssv_tests.py @@ -0,0 +1,39 @@ +from reconfigure.tests.parsers.base_test import BaseParserTest +from reconfigure.parsers import SSVParser +from reconfigure.nodes import * + + +class SSVParserTest (BaseParserTest): + parser = SSVParser(continuation='\\') + source = """# line1 +# long comment +a\tbc\\ +\tdef +efgh # line2 +""" + parsed = RootNode( + None, + Node( + 'line', + Node('token', PropertyNode('value', 'a')), + Node('token', PropertyNode('value', 'bc')), + Node('token', PropertyNode('value', 'def')), + comment='line1\nlong comment', + ), + Node( + 'line', + Node('token', PropertyNode('value', 'efgh')), + comment='line2', + ), + ) + + @property + def stringified(self): + return """# line1 +# long comment +a\tbc\tdef +efgh # line2 +""" + + +del BaseParserTest |