File: rules_parser_test.py

package info (click to toggle)
qtwebengine-opensource-src 5.7.1%2Bdfsg-6.1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 1,028,096 kB
  • ctags: 1,436,736
  • sloc: cpp: 5,960,176; ansic: 3,477,727; asm: 395,492; python: 320,633; sh: 96,504; perl: 69,449; xml: 42,977; makefile: 28,408; objc: 9,962; yacc: 9,847; tcl: 5,430; lex: 2,259; ruby: 1,053; lisp: 522; awk: 497; pascal: 310; cs: 249; sed: 53
file content (81 lines) | stat: -rwxr-xr-x 2,810 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# Copyright 2015 Google Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Unit tests for rules_parser.  Usage: ./rules_parser_test.py"""

import collections
import logging
from StringIO import StringIO
import unittest

import rules_parser


class RuleParserTest(unittest.TestCase):

  @classmethod
  def setUpClass(cls):
    if not logging.root.handlers:
      logging.basicConfig(level=logging.DEBUG,  # Enable log_url stdout.
                          format='%(asctime)s %(levelname)s %(message)s')

  def testCall(self):
    my_rules = rules_parser.Rules(StringIO(r'''
        [{"comment": "ignore me"},
         {"LogUrl": {"url": "example\\.com/ss.*"}},
         {"LogUrl": {"url": "example\\.com/blah$"}}]'''))
    log_url = my_rules.Find('log_url')
    self.assertEquals(True, log_url(FakeRequest(full_path='/ss'), None))
    self.assertEquals(True, log_url(FakeRequest(full_path='/ssxxxx'), None))
    self.assertEquals(True, log_url(FakeRequest(full_path='/blah'), None))
    self.assertEquals(None, log_url(FakeRequest(full_path='/blahxxx'), None))
    self.assertEquals(None, log_url(FakeRequest(full_path='/'), None))

  def testImport(self):
    my_rules = rules_parser.Rules(StringIO(r'''
        [{"rules.LogUrl": {"url": "example\\.com/ss.*"}}]'''))
    self.assertTrue(my_rules.Contains('log_url'))

  def testRaises(self):
    input_pairs = [
        'bad_json',
        '123',
        '{}',
        '[42]',
        '[{12:34}]',
        '[{"a":"b","c":"d"}]',
        '[{"bad+rule@name":{}}]',
        '["unallowed.Path":{}]',
        '["NoSuchRule":{}]',
        '["LogUrl":"bad"]',
        '["LogUrl":{}]',
        '["LogUrl":{"url":123}]',
        '["LogUrl":{"url":"", "bad_arg":123}]',
    ]
    for input_text in input_pairs:
      self.assertRaises(Exception, rules_parser.Rules, StringIO(input_text))


class FakeRequest(collections.namedtuple(
    'FakeRequest', ('command', 'host', 'full_path', 'request_body',
                    'headers', 'is_ssl'))):

  def __new__(cls, command='GET', host='example.com', full_path='/',
              request_body=None, headers=None, is_ssl=False):
    return super(FakeRequest, cls).__new__(
        cls, command, host, full_path, request_body, headers or {}, is_ssl)


if __name__ == '__main__':
  unittest.main()