gixy/tests/parser/test_nginx_parser.py

111 lines
2.9 KiB
Python
Raw Normal View History

2017-05-16 20:02:10 +00:00
from nose.tools import assert_equal
from tests.asserts import assert_is_instance
2017-03-30 22:12:44 +00:00
from gixy.parser.nginx_parser import NginxParser
from gixy.directives.directive import *
from gixy.directives.block import *
def _parse(config):
return NginxParser(cwd='', allow_includes=False).parse(config)
2017-03-30 22:12:44 +00:00
def test_directive():
configs = [
'access_log syslog:server=127.0.0.1,tag=nginx_sentry toolsformat;',
'user http;',
'internal;',
'set $foo "bar";',
"set $foo 'bar';",
'proxy_pass http://unix:/run/sock.socket;',
'rewrite ^/([a-zA-Z0-9]+)$ /$1/${arg_v}.pb break;'
]
expected = [
[Directive],
[Directive],
[Directive],
[Directive, SetDirective],
[Directive],
[Directive, RewriteDirective]
]
for i, config in enumerate(configs):
return assert_config, config, expected[i]
def test_blocks():
configs = [
'if (-f /some) {}',
'location / {}'
]
expected = [
[Directive, Block, IfBlock],
[Directive, Block, LocationBlock],
]
for i, config in enumerate(configs):
yield assert_config, config, expected[i]
def test_dump_simple():
config = '''
# configuration file /etc/nginx/nginx.conf:
http {
include sites/*.conf;
}
# configuration file /etc/nginx/conf.d/listen:
listen 80;
# configuration file /etc/nginx/sites/default.conf:
server {
include conf.d/listen;
}
'''
tree = _parse(config)
assert_is_instance(tree, Directive)
assert_is_instance(tree, Block)
assert_is_instance(tree, Root)
assert_equal(len(tree.children), 1)
http = tree.children[0]
assert_is_instance(http, Directive)
assert_is_instance(http, Block)
assert_is_instance(http, HttpBlock)
assert_equal(len(http.children), 1)
include_server = http.children[0]
assert_is_instance(include_server, Directive)
assert_is_instance(include_server, IncludeBlock)
assert_equal(include_server.file_path, '/etc/nginx/sites/default.conf')
assert_equal(len(include_server.children), 1)
server = include_server.children[0]
assert_is_instance(server, Directive)
assert_is_instance(server, Block)
assert_is_instance(server, ServerBlock)
assert_equal(len(server.children), 1)
include_listen = server.children[0]
assert_is_instance(include_listen, Directive)
assert_is_instance(include_listen, IncludeBlock)
assert_equal(include_listen.file_path, '/etc/nginx/conf.d/listen')
assert_equal(len(include_listen.children), 1)
listen = include_listen.children[0]
assert_is_instance(listen, Directive)
assert_equal(listen.args, ['80'])
def assert_config(config, expected):
tree = _parse(config)
assert_is_instance(tree, Directive)
assert_is_instance(tree, Block)
assert_is_instance(tree, Root)
child = tree.children[0]
for ex in expected:
assert_is_instance(child, ex)