+++ /dev/null
-#!/usr/bin/env python
-# This Python file uses the following encoding: utf-8
-
-# The software in this package is distributed under the GNU General
-# Public License version 2 (with a special exception described below).
-#
-# A copy of GNU General Public License (GPL) is included in this distribution,
-# in the file COPYING.GPL.
-#
-# As a special exception, if other files instantiate templates or use macros
-# or inline functions from this file, or you compile this file and link it
-# with other works to produce a work based on this file, this file
-# does not by itself cause the resulting work to be covered
-# by the GNU General Public License.
-#
-# However the source code for this file must still be made available
-# in accordance with section (3) of the GNU General Public License.
-#
-# This exception does not invalidate any other reasons why a work based
-# on this file might be covered by the GNU General Public License.
-#
-# Copyright (c) 2016-2018 Intra2net AG <info@intra2net.com>
-
-import os
-import unittest
-
-from src import cnfvar_old
-
-#
-# test data
-#
-
-# model cnf tree
-demo_cnfvar = {"cnf": [
- {
- "varname": "MY_FAVORITE_CNF_VAR",
- "instance": 1337,
- "number": 42,
- "data": "string conf content",
- "comment": ""
- },
- {
- "varname": "SOME_NESTED_CNF_VAR",
- "instance": 0,
- "number": 23,
- "data": "999",
- "comment": "",
- "children": [
- {
- "varname": "SOME_CHILD_VAR",
- "instance": 1,
- "number": 24,
- "data": "2014",
- "parent": 23,
- "comment": ""
- }
- ]
- },
-]}
-
-# duplicate line number
-demo_invalid_cnfvar = {"cnf": [
- {
- "varname": "SOME_PARTICULARLY_TASTY_CNF_VAR",
- "instance": 1337,
- "number": 23,
- "data": "classic wingers",
- "comment": ""
- },
- {
- "varname": "EXTRAORDINARILY_FANCY_CNF_VAR",
- "instance": 1,
- "number": 42,
- "data": "ab mentions",
- "comment": ""
- },
- {
- "varname": "ANOTHER_POPULAR_CNF_VAR",
- "instance": 0,
- "number": 42,
- "data": "notches",
- "comment": ""
- }
-]}
-
-demo_jsoncnf = """
-{
- "cnf" : [
- {
- "children" : [
- {
- "comment" : "",
- "data" : "1",
- "instance" : 0,
- "number" : 2,
- "parent" : 1,
- "varname" : "FIREWALL_SERVICEGROUP_PREDEFINED_ID"
- },
- {
- "children" : [
- {
- "comment" : "",
- "data" : "",
- "instance" : 0,
- "number" : 4,
- "parent" : 3,
- "varname" : "FIREWALL_SERVICEGROUP_TYPE_COMMENT"
- },
- {
- "comment" : "",
- "data" : "80",
- "instance" : 0,
- "number" : 5,
- "parent" : 3,
- "varname" : "FIREWALL_SERVICEGROUP_TYPE_TCPUDP_DST_PORT"
- }
- ],
- "comment" : "",
- "data" : "TCP",
- "instance" : 0,
- "number" : 3,
- "parent" : 1,
- "varname" : "FIREWALL_SERVICEGROUP_TYPE"
- }
- ],
- "comment" : "",
- "data" : "http",
- "instance" : 1,
- "number" : 1,
- "varname" : "FIREWALL_SERVICEGROUP"
- },
- {
- "children" : [
- {
- "comment" : "",
- "data" : "2",
- "instance" : 0,
- "number" : 7,
- "parent" : 6,
- "varname" : "FIREWALL_SERVICEGROUP_PREDEFINED_ID"
- },
- {
- "children" : [
- {
- "comment" : "",
- "data" : "",
- "instance" : 0,
- "number" : 9,
- "parent" : 8,
- "varname" : "FIREWALL_SERVICEGROUP_TYPE_COMMENT"
- },
- {
- "comment" : "",
- "data" : "443",
- "instance" : 0,
- "number" : 10,
- "parent" : 8,
- "varname" : "FIREWALL_SERVICEGROUP_TYPE_TCPUDP_DST_PORT"
- }
- ],
- "comment" : "",
- "data" : "TCP",
- "instance" : 0,
- "number" : 8,
- "parent" : 6,
- "varname" : "FIREWALL_SERVICEGROUP_TYPE"
- }
- ],
- "comment" : "",
- "data" : "https",
- "instance" : 2,
- "number" : 6,
- "varname" : "FIREWALL_SERVICEGROUP"
- }
- ]
-}
-"""
-
-demo_jsoncnf_bytes = demo_jsoncnf.encode ("latin-1")
-
-demo_nonascii = r"""
-{ "cnf" : [
- {
- "children" : [
- {
- "comment" : "",
- "data" : "0",
- "instance" : 0,
- "number" : 2,
- "parent" : 1,
- "varname" : "USER_DISABLED"
- },
- {
- "comment" : "",
- "data" : "Administrator",
- "instance" : 0,
- "number" : 3,
- "parent" : 1,
- "varname" : "USER_FULLNAME"
- },
- {
- "comment" : "",
- "data" : "INBOX/Kalender",
- "instance" : 0,
- "number" : 4,
- "parent" : 1,
- "varname" : "USER_GROUPWARE_FOLDER_CALENDAR"
- },
- {
- "comment" : "",
- "data" : "INBOX/Kontakte",
- "instance" : 0,
- "number" : 5,
- "parent" : 1,
- "varname" : "USER_GROUPWARE_FOLDER_CONTACTS"
- },
- {
- "comment" : "",
- "data" : "INBOX/Entwürfe",
- "instance" : 0,
- "number" : 6,
- "parent" : 1,
- "varname" : "USER_GROUPWARE_FOLDER_DRAFTS"
- },
- {
- "comment" : "",
- "data" : "INBOX/Notizen",
- "instance" : 0,
- "number" : 7,
- "parent" : 1,
- "varname" : "USER_GROUPWARE_FOLDER_NOTES"
- },
- {
- "comment" : "",
- "data" : "INBOX/Gesendete Elemente",
- "instance" : 0,
- "number" : 8,
- "parent" : 1,
- "varname" : "USER_GROUPWARE_FOLDER_OUTBOX"
- },
- {
- "comment" : "",
- "data" : "INBOX/Aufgaben",
- "instance" : 0,
- "number" : 9,
- "parent" : 1,
- "varname" : "USER_GROUPWARE_FOLDER_TASKS"
- },
-
- {
- "comment" : "",
- "data" : "INBOX/Gelöschte Elemente",
- "instance" : 0,
- "number" : 10,
- "parent" : 1,
- "varname" : "USER_GROUPWARE_FOLDER_TRASH"
- },
- {
- "comment" : "",
- "data" : "1",
- "instance" : 0,
- "number" : 11,
- "parent" : 1,
- "varname" : "USER_GROUP_MEMBER_REF"
- },
- {
- "comment" : "",
- "data" : "2",
- "instance" : 1,
- "number" : 12,
- "parent" : 1,
- "varname" : "USER_GROUP_MEMBER_REF"
- },
- {
- "comment" : "",
- "data" : "",
- "instance" : 0,
- "number" : 13,
- "parent" : 1,
- "varname" : "USER_LOCALE"
- },
- {
- "comment" : "",
- "data" : "idkfa",
- "instance" : 0,
- "number" : 14,
- "parent" : 1,
- "varname" : "USER_PASSWORD"
- },
- {
- "comment" : "",
- "data" : "30",
- "instance" : 0,
- "number" : 15,
- "parent" : 1,
- "varname" : "USER_TRASH_DELETEDAYS"
- }
- ],
- "comment" : "",
- "data" : "admin",
- "instance" : 1,
- "number" : 1,
- "varname" : "USER"
- }
-]}
-"""
-
-demo_latin1crap = demo_nonascii.encode('latin1')
-
-demo_cnf_group = """
-1 GROUP,1: "Administratoren"
-2 (1) GROUP_ACCESS_GO_ONLINE_ALLOWED,0: "1"
-3 (1) GROUP_EMAILFILTER_BAN_FILTERLIST_REF,0: "-1"
-4 (1) GROUP_EMAIL_RELAY_RIGHTS,0: "RELAY_FROM_INTRANET"
-5 (1) GROUP_PROXY_PROFILE_REF,0: "1"
-"""
-
-demo_cnf_group_bytes = demo_cnf_group.encode ("latin-1")
-
-demo_cnf_filter = b"""
-1 EMAILFILTER_BAN_FILTERLIST,1: "Vordefiniert: Alles verboten"
-2 (1) EMAILFILTER_BAN_FILTERLIST_ENCRYPTED,0: "BLOCK"
-3 (1) EMAILFILTER_BAN_FILTERLIST_EXTENSIONS,0: ""
-4 (1) EMAILFILTER_BAN_FILTERLIST_MIMETYPES,0: ""
-5 (4) EMAILFILTER_BAN_FILTERLIST_MIMETYPES_NAME,0: "text/plain"
-6 (4) EMAILFILTER_BAN_FILTERLIST_MIMETYPES_NAME,1: "text/html"
-7 (1) EMAILFILTER_BAN_FILTERLIST_MODE,0: "ALLOW"
-8 (1) EMAILFILTER_BAN_FILTERLIST_PREDEFINED_ID,0: "1"
-"""
-
-demo_cnf_comments = b"""
-1 EMAILFILTER_BAN_FILTERLIST,1: "Vordefiniert: Alles verboten"
-2 (1) EMAILFILTER_BAN_FILTERLIST_ENCRYPTED,0: "BLOCK"
-3 (1) EMAILFILTER_BAN_FILTERLIST_EXTENSIONS,0: ""
-4 (1) EMAILFILTER_BAN_FILTERLIST_MIMETYPES,0: "" # foo
-5 (4) EMAILFILTER_BAN_FILTERLIST_MIMETYPES_NAME,0: "text/plain"#bar
-6 (4) EMAILFILTER_BAN_FILTERLIST_MIMETYPES_NAME,1: "text/html"
-7 (1) EMAILFILTER_BAN_FILTERLIST_MODE,0: "ALLOW" # baz
-8 (1) EMAILFILTER_BAN_FILTERLIST_PREDEFINED_ID,0: "1"
-"""
-
-demo_cnf_escaped_quotes = """
-1 HERE_BE_QUOTES,0: "\""
-2 HERE_BE_QUOTES,1: "foo\"bar\"\"\"baz"
-3 HERE_BE_QUOTES,2: "unquo\\\"table"
-4 HERE_BE_QUOTES,3: "unquo\\\\\"\"table"
-"""
-
-demo_json_escaped_quotes = """
-{ "cnf": [ { "number" : 1,
- "varname" : "HERE_BE_QUOTES",
- "instance" : 0,
- "data" : "\\"" },
- { "number" : 2,
- "varname" : "HERE_BE_QUOTES",
- "instance" : 1,
- "data" : "foo\\"bar\\"\\"\\"baz" },
- { "number" : 3,
- "varname" : "HERE_BE_QUOTES",
- "instance" : 2,
- "data" : "unquo\\\\\\"table" },
- { "number" : 4,
- "varname" : "HERE_BE_QUOTES",
- "instance" : 3,
- "data" : "unquo\\\\\\\\\\"\\"table" } ] }
-"""
-
-#
-# test class
-#
-
-class CnfVarUnittest(unittest.TestCase):
-
- def test_print_cnf(self):
- with open(os.devnull, "w") as devnull:
- cnfvar_old.print_cnf(demo_cnfvar, out=devnull)
-
- def test_parse_cnf_simple_str(self):
- cnf = cnfvar_old.read_cnf(demo_cnf_group)
- with open(os.devnull, "w") as devnull:
- cnfvar_old.print_cnf_json(cnf, out=devnull)
-
- def test_parse_cnf_simple_bytes(self):
- cnf = cnfvar_old.read_cnf(demo_cnf_group_bytes)
- with open(os.devnull, "w") as devnull:
- cnfvar_old.print_cnf_json(cnf, out=devnull)
-
- def test_parse_cnf_nested(self):
- cnf = cnfvar_old.read_cnf(demo_cnf_filter)
- with open(os.devnull, "w") as devnull:
- cnfvar_old.print_cnf_json(cnf, out=devnull)
-
- def test_parse_cnf_comments(self):
- cnf = cnfvar_old.read_cnf(demo_cnf_comments)
- with open(os.devnull, "w") as devnull:
- cnfvar_old.print_cnf_json(cnf, out=devnull)
-
- def test_print_cnf_garbage(self):
- try:
- with open(os.devnull, "w") as devnull:
- cnfvar_old.print_cnf(demo_invalid_cnfvar, out=devnull)
- except cnfvar_old.InvalidCNF:
- print ("Caught the duplicate line, bravo!")
-
- def test_read_json_str(self):
- cnf = cnfvar_old.read_cnf_json(demo_jsoncnf)
- with open(os.devnull, "w") as devnull:
- cnfvar_old.print_cnf(cnf, out=devnull)
-
- def test_read_json_bytes(self):
- cnf = cnfvar_old.read_cnf_json(demo_jsoncnf_bytes)
- with open(os.devnull, "w") as devnull:
- cnfvar_old.print_cnf(cnf, out=devnull)
-
- def test_read_json_nonascii(self):
- cnf = cnfvar_old.read_cnf_json(demo_nonascii)
- with open(os.devnull, "wb") as devnull:
- cnfvar_old.print_cnf(cnf, out=devnull)
-
- def test_read_json_latin1(self):
- cnf = cnfvar_old.read_cnf_json(demo_latin1crap)
- with open(os.devnull, "wb") as devnull:
- cnfvar_old.print_cnf(cnf, out=devnull)
-
- def test_parse_cnf_quotes(self):
- cnf = cnfvar_old.read_cnf(demo_cnf_escaped_quotes)
- with open(os.devnull, "w") as devnull:
- cnfvar_old.print_cnf_json(cnf, out=devnull)
-
- def test_parse_json_quotes(self):
- cnf = cnfvar_old.read_cnf_json(demo_json_escaped_quotes)
- with open(os.devnull, "w") as devnull:
- cnfvar_old.print_cnf_json(cnf, out=devnull)
-
-
-class CnfVarUnittestVarnameCase(unittest.TestCase):
- """Tests for verifying that uppercasing/lowercasing of varname works."""
- # TODO: rethink whether this lower-casing is worth all the effort it causes
-
- def test_dump_cnf_uppercase(self):
- """Test dump of cnfvars results in uppercase var names."""
- cnf = {"cnf": [
- {"instance": 0, "varname": "dialout_mode",
- "data": "ONLINE", "number": 1, "comment": None},
- {"instance": 0, "varname": "dialout_defaultprovider_ref",
- "data": "1", "number": 2, "comment": None},
- {"instance": 0, "varname": "hypothetical_parent",
- "data": "parent value", "number": 3, "comment": None,
- "children": [
- {"instance": 0, "varname": "hypothetical_child",
- "data": "0", "number": 4, "parent": 3, "comment": None},
- {"instance": 1, "varname": "hypothetical_child",
- "data": "1", "number": 5, "parent": 3, "comment": None}]}
- ]}
- serialization = cnfvar_old.dump_json_string(cnf)
- self.assertIn('DIALOUT_MODE', serialization)
- self.assertIn('DIALOUT_DEFAULTPROVIDER_REF', serialization)
- self.assertIn('HYPOTHETICAL_CHILD', serialization)
- self.assertNotIn('dialout_mode', serialization)
- self.assertNotIn('dialout_defaultprovider_ref', serialization)
- self.assertNotIn('hypothetical_child', serialization)
-
- def test_read_cnf_lowercase(self):
- """Test that after reading, varnames are lowercase."""
- cnf = cnfvar_old.read_cnf_json(demo_jsoncnf.encode('latin1'))
- for parentvar in cnf['cnf']:
- self.assertEqual(parentvar['varname'],
- parentvar['varname'].lower())
- if 'children' in parentvar:
- for childvar in parentvar['children']:
- self.assertEqual(parentvar['varname'],
- parentvar['varname'].lower())
-
-
-if __name__ == '__main__':
- unittest.main()