Пример #1
0
    def testLoadWholeConfig(self):
        text = """\

# a
a = b
b = 三

<a block>
  a = b
</a>
a b
<a a block>
c "d d"
</a>
# a
"""
        ApacheConfigLexer = make_lexer()
        ApacheConfigParser = make_parser()

        loader = ApacheConfigLoader(
            ApacheConfigParser(ApacheConfigLexer()))

        config = loader.loads(text)

        self.assertEqual(
            config, {
                'b': '三',
                'a': ['b', {'block': {'a': 'b'}}, 'b',
                      {'a block': {'c': 'd d'}}]
            }
        )
Пример #2
0
    def testAutoTrue(self):
        text = """\
a 1
a on
a true
b 0
b off
b false
"""
        options = {
            'autotrue': True
        }

        ApacheConfigLexer = make_lexer(**options)
        ApacheConfigParser = make_parser(**options)

        loader = ApacheConfigLoader(
            ApacheConfigParser(ApacheConfigLexer()), **options)

        config = loader.loads(text)

        self.assertEqual(
            config, {
                'a': ['1', '1', '1'], 'b': ['0', '0', '0']
            }
        )
Пример #3
0
    def testFlagBits(self):
        text = """\
mode = CLEAR | UNSECURE
"""
        options = {
            'flagbits': {
                'mode': {
                    'CLEAR': 1,
                    'STRONG': 1,
                    'UNSECURE': '32bit'
                }
            }
        }

        ApacheConfigLexer = make_lexer(**options)
        ApacheConfigParser = make_parser(**options)

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()),
                                    **options)

        config = loader.loads(text)

        self.assertEqual(
            config,
            {'mode': {
                'CLEAR': 1,
                'STRONG': None,
                'UNSECURE': '32bit'
            }})
Пример #4
0
    def testDefaultConfig(self):
        text = """\
a = 1
b = 2
"""
        options = {
            'defaultconfig': {
                'b': '4',
                'c': '3'
            },
            'mergeduplicateoptions': False
        }

        ApacheConfigLexer = make_lexer(**options)
        ApacheConfigParser = make_parser(**options)

        loader = ApacheConfigLoader(
            ApacheConfigParser(ApacheConfigLexer()), **options)

        config = loader.loads(text)

        self.assertEqual(
            config, {
                'a': '1', 'b': ['4', '2'], 'c': '3'
            }
        )
Пример #5
0
    def testNamedBlocks(self):
        text = """\
<a />
c = 1
</a />

<a b c>
d = 1
</a b c>
"""
        ApacheConfigLexer = make_lexer()
        ApacheConfigParser = make_parser()

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()))

        config = loader.loads(text)

        self.assertEqual(config,
                         {'a': [{
                             '/': {
                                 'c': '1'
                             }
                         }, {
                             'b c': {
                                 'd': '1'
                             }
                         }]})
Пример #6
0
    def testQuotedBlockTag(self):
        text = """\
<"a b">
c = 1
</"a b">

<'d e'>
f = 1
</'d e'>

<g 'h i'>
j = 1
</g 'h i'>
    """
        ApacheConfigLexer = make_lexer()
        ApacheConfigParser = make_parser()

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()))

        config = loader.loads(text)

        self.assertEqual(config, {
            'a b': {
                'c': '1'
            },
            'd e': {
                'f': '1'
            },
            'g': {
                'h i': {
                    'j': '1'
                }
            }
        })
Пример #7
0
    def testLineContinuationInNestedBlock(self):
        text = """\
<a>
   b abc \\
        pqr\\

   <aa>
     c value2
   </aa>
</a>
"""
        ApacheConfigLexer = make_lexer()
        ApacheConfigParser = make_parser()

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()))

        config = loader.loads(text)

        self.assertEqual(config,
                         {'a': {
                             'b': 'abc pqr',
                             'aa': {
                                 'c': 'value2'
                             }
                         }})
Пример #8
0
    def testDisabledNamedBlocks(self):
        text = """\
<a />
c = 1
</a />

<a b c>
d = 1
</a b c>
"""
        options = {
            'namedblocks': False
        }

        ApacheConfigLexer = make_lexer(**options)
        ApacheConfigParser = make_parser(**options)

        loader = ApacheConfigLoader(
            ApacheConfigParser(ApacheConfigLexer()), **options)

        config = loader.loads(text)

        self.assertEqual(
            config, {
                'a /': {'c': '1'}, 'a b c': {'d': '1'}
            }
        )
Пример #9
0
    def testLoadEmptyText(self):
        text = ""
        ApacheConfigLexer = make_lexer()
        ApacheConfigParser = make_parser()

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()))

        config = loader.loads(text)
        self.assertEqual(config, {})
Пример #10
0
    def testMergeEmptyLists(self):
        options = {}
        ApacheConfigLexer = make_lexer(**options)
        ApacheConfigParser = make_parser(**options)

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()),
                                    **options)

        self.assertEqual(loader._merge_lists([], []), [])
Пример #11
0
    def testMergeListsWithSameValues(self):
        options = {}
        ApacheConfigLexer = make_lexer(**options)
        ApacheConfigParser = make_parser(**options)

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()),
                                    **options)

        self.assertEqual(loader._merge_lists([1], [1]), [1])
Пример #12
0
    def testEscape(self):
        text = """\
a = \\$b
"""
        ApacheConfigLexer = make_lexer()
        ApacheConfigParser = make_parser()

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()))

        config = loader.loads(text)

        self.assertEqual(config, {'a': '$b'})
Пример #13
0
    def testKeyOnlyOption(self):
        text = """\
key2
key value
"""
        ApacheConfigLexer = make_lexer()
        ApacheConfigParser = make_parser()

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()))

        config = loader.loads(text)
        self.assertEqual(config, {'key2': None, 'key': 'value'})
Пример #14
0
    def testLineContinuation(self):
        text = """\
a = \\
b
"""
        ApacheConfigLexer = make_lexer()
        ApacheConfigParser = make_parser()

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()))

        config = loader.loads(text)

        self.assertEqual(config, {'a': 'b'})
Пример #15
0
    def testForceArray(self):
        text = """\
b = [1]
"""
        options = {'forcearray': True}
        ApacheConfigLexer = make_lexer(**options)
        ApacheConfigParser = make_parser(**options)

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()),
                                    **options)

        config = loader.loads(text)

        self.assertEqual(config, {'b': ['1']})
Пример #16
0
    def testNoEscape(self):
        text = """\
a = \\$b
"""
        options = {'noescape': True}

        ApacheConfigLexer = make_lexer(**options)
        ApacheConfigParser = make_parser(**options)

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()),
                                    **options)

        config = loader.loads(text)

        self.assertEqual(config, {'a': '\\$b'})
Пример #17
0
    def testInterpolateVarsIgnoreUndefined(self):
        text = """\
b = '${a}'
"""
        options = {'interpolatevars': True, 'strictvars': False}

        ApacheConfigLexer = make_lexer(**options)
        ApacheConfigParser = make_parser(**options)

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()),
                                    **options)

        config = loader.loads(text)

        self.assertEqual(config, {'b': '${a}'})
Пример #18
0
    def testInterpolateVarsSingleQuote(self):
        text = """\
a = 1
b = '${a}'
"""
        options = {'allowsinglequoteinterpolation': True}

        ApacheConfigLexer = make_lexer(**options)
        ApacheConfigParser = make_parser(**options)

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()),
                                    **options)

        config = loader.loads(text)

        self.assertEqual(config, {'a': '1', 'b': '1'})
Пример #19
0
    def testDuplicateOptionsOverriden(self):
        text = """\
a = 1
a = 2
"""
        options = {'mergeduplicateoptions': True}

        ApacheConfigLexer = make_lexer(**options)
        ApacheConfigParser = make_parser(**options)

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()),
                                    **options)

        config = loader.loads(text)

        self.assertEqual(config, {'a': '2'})
Пример #20
0
    def testDuplicateBlocksUnmerged(self):
        text = """\
<a>
b = 1
</a>
<a>
b = 2
</a>
"""
        ApacheConfigLexer = make_lexer()
        ApacheConfigParser = make_parser()

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()))

        config = loader.loads(text)

        self.assertEqual(config, {'a': [{'b': '1'}, {'b': '2'}]})
Пример #21
0
    def testHookPreOpen(self):
        def pre_open(filename, basedir):
            return 'blah' in filename, filename, basedir

        options = {'plug': {'pre_open': pre_open}}

        ApacheConfigLexer = make_lexer(**options)
        ApacheConfigParser = make_parser(**options)

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()),
                                    **options)

        config = loader.load('halb.conf')

        self.assertEqual(config, {})

        self.assertRaises(ApacheConfigError, loader.load, 'blah.conf')
Пример #22
0
    def testLineContinuationOnEmptyLine(self):
        text = """\
\\
# comment
\\
<a>
    key value
</a>
"""
        ApacheConfigLexer = make_lexer()
        ApacheConfigParser = make_parser()

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()))

        config = loader.loads(text)

        self.assertEqual(config, {'a': {'key': 'value'}})
Пример #23
0
    def testDuplicateOptionsAllowed(self):
        text = """\
a = 1
a = 2
# comment
a = 3
"""
        options = {'allowmultioptions': True}

        ApacheConfigLexer = make_lexer()
        ApacheConfigParser = make_parser()

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()),
                                    **options)

        config = loader.loads(text)

        self.assertEqual(config, {'a': ['1', '2', '3']})
Пример #24
0
    def testHookPreRead(self):
        text = """\
blah 1
"""

        def pre_read(filepath, text):
            return 'blah' in text, filepath, 'a 1\n'

        options = {'plug': {'pre_read': pre_read}}

        ApacheConfigLexer = make_lexer(**options)
        ApacheConfigParser = make_parser(**options)

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()),
                                    **options)

        config = loader.loads(text)

        self.assertEqual(config, {'a': '1'})
Пример #25
0
    def testHookPreParse(self):
        text = """\
a 1
b = 2
"""

        def pre_parse_value(option, value):
            return option == 'a', option, value + '1'

        options = {'plug': {'pre_parse_value': pre_parse_value}}

        ApacheConfigLexer = make_lexer(**options)
        ApacheConfigParser = make_parser(**options)

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()),
                                    **options)

        config = loader.loads(text)

        self.assertEqual(config, {'a': '11'})
Пример #26
0
    def testDuplicateBlocksMerged_allowMultiOptions(self):
        text = """\
<a>
b = 1
</a>
<a>
b = 2
</a>
"""
        options = {'mergeduplicateblocks': True, 'allowmultioptions': True}

        ApacheConfigLexer = make_lexer(**options)
        ApacheConfigParser = make_parser(**options)

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()),
                                    **options)

        config = loader.loads(text)

        self.assertEqual(config, {'a': {'b': ['1', '2']}})
Пример #27
0
    def testInterpolateEnv(self):
        text = """\
b = $a
c = ${b}
e 1
<aa>
  d = ${c}
  e = 2
  f "${e} + 2"
  g = '${e}'
</aa>
"""
        options = {
            'interpolateenv': True
        }

        os.environ['a'] = '1'

        ApacheConfigLexer = make_lexer(**options)
        ApacheConfigParser = make_parser(**options)

        loader = ApacheConfigLoader(
            ApacheConfigParser(ApacheConfigLexer()), **options)

        config = loader.loads(text)

        self.assertEqual(
            config, {
                'b': '1',
                'c': '1',
                'e': '1',
                'aa': {
                    'd': '1',
                    'e': '2',
                    'f': '2 + 2',
                    'g': '${e}'
                }
            }
        )
Пример #28
0
    def testDumpWholeConfig(self):
        text = """\

# a
a = b

<a block>
  a = b
</a>
a b
<a a block>
c "d d"
b = 三
</a>
# a
"""

        expect_text = """\
a b
<a>
  <block>
    a b
  </block>
</a>
a b
<a>
  <a block>
    c "d d"
    b 三
  </a block>
</a>
"""

        ApacheConfigLexer = make_lexer()
        ApacheConfigParser = make_parser()

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()))

        config = loader.loads(text)
        gen_text = loader.dumps(config)

        try:
            self.assertEqual(expect_text, gen_text)
        except AssertionError:
            # Account for non-deterministic ordering of dict items;
            # swap lines `b 三` and `c "d d"`
            lines = expect_text.split('\n')
            lines[9], lines[10] = lines[10], lines[9]
            expect_text = "\n".join(lines)
            self.assertEqual(expect_text, gen_text)

        # Testing dump(filepath, config)
        tmpd = tempfile.mkdtemp()
        filepath = os.path.join(tmpd, "config")
        loader.dump(filepath, config)
        with io.open(filepath, mode='r', encoding='utf-8') as f:
            text = f.read()
        shutil.rmtree(tmpd)
        self.assertEqual(expect_text, text)
Пример #29
0
    def testDuplicateOptionsDenied(self):
        text = """\
a = 1
<b/>
a = 2
"""
        options = {'allowmultioptions': False}

        ApacheConfigLexer = make_lexer()
        ApacheConfigParser = make_parser()

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()),
                                    **options)

        self.assertRaises(ApacheConfigError, loader.loads, text)
Пример #30
0
    def testInterpolateVarsFailOnUndefined(self):
        text = """\
b = ${a}
"""

        options = {
            'interpolatevars': True,
        }

        ApacheConfigLexer = make_lexer(**options)
        ApacheConfigParser = make_parser(**options)

        loader = ApacheConfigLoader(ApacheConfigParser(ApacheConfigLexer()),
                                    **options)

        self.assertRaises(ApacheConfigError, loader.loads, text)