You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
365 lines
14 KiB
365 lines
14 KiB
import pytest
|
|
from collections import OrderedDict
|
|
from calculate.templates.format.ldap_format import LDAPFormat
|
|
|
|
|
|
@pytest.mark.ldap
|
|
class TestParsingMethods:
|
|
def test_if_logiclines_method_takes_text_with_lines_that_starts_whit_space_symbols__it_returns_joined_lines(self):
|
|
with open('./tests/templates/format/testfiles/ldap_logic_lines_test.txt', 'r') as input_file:
|
|
input_text = input_file.read()
|
|
|
|
output_lines = ['First string of test file.',
|
|
'Second string of test file.',
|
|
'Third string of test file.',
|
|
'Fourth string of test file.']
|
|
|
|
ldap_object = LDAPFormat('')
|
|
input_lines = ldap_object._get_list_of_logic_lines(input_text)
|
|
assert input_lines == output_lines
|
|
|
|
def test_if_input_doc_contains_some_type_sections_with_plain_directives__object_dictionary_contains_correct_dictionary_with_directives_values_and_comments(self):
|
|
document_text = '''
|
|
include /etc/openldap/schema/samba.schema
|
|
include /etc/openldap/schema/mail.schema
|
|
|
|
loglevel 0
|
|
allow bind_v2
|
|
modulepath /usr/lib/openldap/openldap
|
|
|
|
database bdb
|
|
|
|
checkpoint 1024 5
|
|
suffix "dc=calculate"
|
|
cachesize 10000
|
|
sizelimit unlimited
|
|
directory /var/lib/openldap-data
|
|
rootdn "cn=ldaproot,dc=calculate"'''
|
|
|
|
global_section = OrderedDict({'#': [],
|
|
('', 'include', '/etc/openldap/schema/samba.schema'):
|
|
[''],
|
|
('', 'include', '/etc/openldap/schema/mail.schema'):
|
|
[''],
|
|
('', 'loglevel'): ['0'],
|
|
('', 'allow'): ['bind_v2'],
|
|
('', 'modulepath'):
|
|
['/usr/lib/openldap/openldap']})
|
|
|
|
database_section = OrderedDict({('', 'checkpoint'): ['1024 5'],
|
|
('', 'suffix'): ['"dc=calculate"'],
|
|
('', 'cachesize'): ['10000'],
|
|
('', 'sizelimit'): ['unlimited'],
|
|
('', 'directory'):
|
|
['/var/lib/openldap-data'],
|
|
('', 'rootdn'):
|
|
['"cn=ldaproot,dc=calculate"']})
|
|
|
|
result = OrderedDict({('', 'global'): global_section,
|
|
('', 'database', 'bdb'): database_section})
|
|
|
|
ldap_object = LDAPFormat(document_text)
|
|
assert ldap_object._document_dictionary == result
|
|
|
|
def test_if_input_document_contains_access_to_directive__the_object_s_dictionary_contains_correct_dictionary_with_list_of_access_to_parameters_and_comments(self):
|
|
document_text = '''
|
|
database bdb
|
|
# Comment1
|
|
# Comment2
|
|
access to attrs=userPassword
|
|
by dn="cn=ldapadmin,dc=calculate" write
|
|
by dn="ou=Samba,ou=Services,dc=calculate" write
|
|
by self read
|
|
by * auth
|
|
|
|
# Comment3
|
|
access to * by * read
|
|
'''
|
|
access_1 = OrderedDict({'#': ['# Comment1', '# Comment2'],
|
|
('', '*'):
|
|
['auth'],
|
|
('', 'self'):
|
|
['read'],
|
|
('', 'dn="ou=Samba,ou=Services,dc=calculate"'):
|
|
['write'],
|
|
('', 'dn="cn=ldapadmin,dc=calculate"'):
|
|
['write']})
|
|
|
|
access_2 = OrderedDict({'#': ['# Comment3'],
|
|
('', '*'): ['read']})
|
|
|
|
database_section = OrderedDict({('', 'access to', 'attrs=userPassword'):
|
|
access_1,
|
|
('', 'access to', '*'):
|
|
access_2})
|
|
|
|
result = OrderedDict({('', 'global'): OrderedDict(),
|
|
('', 'database', 'bdb'): database_section})
|
|
|
|
ldap_object = LDAPFormat(document_text)
|
|
assert ldap_object._document_dictionary == result
|
|
|
|
def test_if_input_document_contains_syncrepl_directive__the_object_s_dictionary_contains_correct_dictionary_with_list_of_syncrepl_parameters_and_comments(self):
|
|
document_text = '''
|
|
# Comment1
|
|
# Comment2
|
|
syncrepl rid=123
|
|
provider=ldap://provider.example.com:389
|
|
type=refreshOnly
|
|
interval=01:00:00:00
|
|
searchbase="dc=example,dc=com"
|
|
'''
|
|
|
|
syncrepl_dictionary = OrderedDict({('', 'provider'):
|
|
['ldap://provider.example.com:389'],
|
|
('', 'type'):
|
|
['refreshOnly'],
|
|
('', 'interval'):
|
|
['01:00:00:00'],
|
|
('', 'searchbase'):
|
|
['"dc=example,dc=com"']})
|
|
|
|
global_section = OrderedDict({'#': ['# Comment1', '# Comment2'],
|
|
('', 'syncrepl', 'rid=123'):
|
|
syncrepl_dictionary})
|
|
|
|
result = OrderedDict({('', 'global'): global_section})
|
|
|
|
ldap_object = LDAPFormat(document_text)
|
|
assert ldap_object._document_dictionary == result
|
|
|
|
def test_if_input_document_contains_index_directives__the_object_s_dictionary_contains_correct_dictionary_with_index_elements_and_comments(self):
|
|
document_text = '''
|
|
# Comment for global
|
|
|
|
index objectClass eq
|
|
# Comment for index
|
|
index cn pres,sub,eq
|
|
index sn pres,sub,eq
|
|
index uid pres,sub,eq
|
|
|
|
database bdb
|
|
# Comment1
|
|
# Comment2
|
|
index uidNumber eq
|
|
index gidNumber eq
|
|
index default sub'''
|
|
|
|
global_section = OrderedDict({'#': ['# Comment for global'],
|
|
('', 'index', 'objectClass'): ['eq'],
|
|
('', 'index', 'cn'):
|
|
['# Comment for index', 'pres,sub,eq'],
|
|
('', 'index', 'sn'): ['pres,sub,eq'],
|
|
('', 'index', 'uid'): ['pres,sub,eq']})
|
|
|
|
database_section = OrderedDict({('', 'index', 'uidNumber'):
|
|
['# Comment1', '# Comment2', 'eq'],
|
|
('', 'index', 'gidNumber'): ['eq'],
|
|
('', 'index', 'default'): ['sub']})
|
|
|
|
result = OrderedDict({('', 'global'): global_section,
|
|
('', 'database', 'bdb'): database_section})
|
|
|
|
ldap_object = LDAPFormat(document_text)
|
|
assert ldap_object._document_dictionary == result
|
|
|
|
def test_if_input_document_contains_comments_to_type_sections__the_object_s_dictionary_collect_them(self):
|
|
document_text = '''
|
|
# Comment1
|
|
loglevel 0
|
|
allow bind_v2
|
|
modulepath /usr/lib/openldap/openldap
|
|
|
|
# Comment2
|
|
database bdb
|
|
# Comment3
|
|
checkpoint 1024 5
|
|
suffix "dc=calculate"
|
|
cachesize 10000'''
|
|
|
|
global_section = OrderedDict({'#': ['# Comment1'],
|
|
('', 'loglevel'): ['0'],
|
|
('', 'allow'): ['bind_v2'],
|
|
('', 'modulepath'):
|
|
['/usr/lib/openldap/openldap']})
|
|
|
|
database_section = OrderedDict({'#': ['# Comment2'],
|
|
('', 'checkpoint'):
|
|
['# Comment3',
|
|
'1024 5'],
|
|
('', 'suffix'): ['"dc=calculate"'],
|
|
('', 'cachesize'): ['10000']})
|
|
|
|
result = OrderedDict({('', 'global'): global_section,
|
|
('', 'database', 'bdb'): database_section})
|
|
|
|
ldap_object = LDAPFormat(document_text)
|
|
assert ldap_object._document_dictionary == result
|
|
|
|
def test_if_input_doc_contains_some_type_sections_with_plain_directives_and_action_marks__object_dictionary_contains_correct_dictionary_with_directives_values_and_comments(self):
|
|
document_text = '''
|
|
!include /etc/openldap/schema/samba.schema
|
|
-include /etc/openldap/schema/mail.schema
|
|
|
|
-backend hdb
|
|
modulepath /usr/lib/openldap/openldap
|
|
|
|
!database bdb
|
|
|
|
checkpoint 1024 5
|
|
!directory /var/lib/openldap-data
|
|
!rootdn
|
|
-allow
|
|
|
|
# Comment1
|
|
!index uidNumber eq
|
|
-index gidNumber eq
|
|
|
|
# Comment for index
|
|
!index cn
|
|
!index sn
|
|
|
|
'''
|
|
|
|
global_section = OrderedDict({'#': [],
|
|
('!', 'include', '/etc/openldap/schema/samba.schema'):
|
|
[''],
|
|
('-', 'include', '/etc/openldap/schema/mail.schema'):
|
|
['']})
|
|
|
|
backend_section = OrderedDict({('', 'modulepath'):
|
|
['/usr/lib/openldap/openldap']})
|
|
|
|
database_section = OrderedDict({('', 'checkpoint'): ['1024 5'],
|
|
('!', 'directory'):
|
|
['/var/lib/openldap-data'],
|
|
('!', 'rootdn'): [],
|
|
('!', 'index', 'uidNumber'):
|
|
['# Comment1', 'eq'],
|
|
('-', 'index', 'gidNumber'): ['eq'],
|
|
('!', 'index', 'cn'):
|
|
['# Comment for index'],
|
|
('!', 'index', 'sn'):
|
|
[]})
|
|
|
|
result = OrderedDict({('', 'global'): global_section,
|
|
('-', 'backend', 'hdb'): backend_section,
|
|
('!', 'database', 'bdb'): database_section})
|
|
|
|
ldap_object = LDAPFormat(document_text)
|
|
assert ldap_object._document_dictionary == result
|
|
|
|
def test_if_template_text_contains_some_access_to_constuctions_with_same_what_value_and_without_action_marks_for_whole_constructions__they_join_in_one_access_to_construction(self):
|
|
document_text = '''
|
|
# Unix
|
|
access to attrs=sambaLMPassword,sambaNTPassword
|
|
by dn="ou=Unix,ou=Services,dc=calculate" write
|
|
|
|
# Newval
|
|
access to attrs=sambaLMPassword,sambaNTPassword
|
|
by dn="cn=newval, dc=calculate" read
|
|
|
|
# Mail
|
|
access to attrs=sambaLMPassword,sambaNTPassword
|
|
by dn="ou=Mail,ou=Services,dc=calculate" read
|
|
|
|
# Jabber
|
|
access to attrs=sambaLMPassword,sambaNTPassword
|
|
by dn="ou=Jabber,ou=Services,dc=calculate" read
|
|
'''
|
|
|
|
access = OrderedDict({('', 'dn="ou=Unix,ou=Services,dc=calculate"'):
|
|
['write'],
|
|
('', 'dn="cn=newval, dc=calculate"'):
|
|
['read'],
|
|
('', 'dn="ou=Mail,ou=Services,dc=calculate"'):
|
|
['read'],
|
|
('', 'dn="ou=Jabber,ou=Services,dc=calculate"'):
|
|
['read']})
|
|
|
|
global_section = OrderedDict({('', 'access to',
|
|
'attrs=sambaLMPassword,sambaNTPassword'):
|
|
access})
|
|
|
|
result = OrderedDict({('', 'global'): global_section})
|
|
|
|
ldap_object = LDAPFormat(document_text, ignore_comments=True)
|
|
assert ldap_object._document_dictionary == result
|
|
|
|
def test_if_input_document_contains_syncrepl_and_access_to_constructions_with_action_marks__object_dictionary_contains_correct_dictionary_with_action_marks(self):
|
|
document_text = '''
|
|
# Comment
|
|
!syncrepl rid=123
|
|
provider=ldap://provider.example.com:389
|
|
type=refreshOnly
|
|
interval=01:00:00:00
|
|
searchbase="dc=example,dc=com"
|
|
|
|
# Comment1
|
|
!syncrepl rid=001
|
|
|
|
database bdb
|
|
# Comment2
|
|
!access to attrs=userPassword
|
|
by dn="cn=ldapadmin,dc=calculate" write
|
|
by !dn="ou=Samba,ou=Services,dc=calculate" write
|
|
by self read
|
|
by * auth
|
|
|
|
# Comment3
|
|
!access to dn.base="cn=proxyuser,dc=calculate"
|
|
'''
|
|
|
|
access_1 = OrderedDict({'#': ['# Comment2'],
|
|
('', '*'):
|
|
['auth'],
|
|
('', 'self'):
|
|
['read'],
|
|
('!', 'dn="ou=Samba,ou=Services,dc=calculate"'):
|
|
['write'],
|
|
('', 'dn="cn=ldapadmin,dc=calculate"'):
|
|
['write']})
|
|
|
|
syncrepl_dictionary = OrderedDict({('', 'provider'):
|
|
['ldap://provider.example.com:389'],
|
|
('', 'type'):
|
|
['refreshOnly'],
|
|
('', 'interval'):
|
|
['01:00:00:00'],
|
|
('', 'searchbase'):
|
|
['"dc=example,dc=com"']})
|
|
|
|
global_section = OrderedDict({'#': ['# Comment'],
|
|
('!', 'syncrepl', 'rid=123'):
|
|
syncrepl_dictionary,
|
|
('!', 'syncrepl', 'rid=001'):
|
|
OrderedDict({'#': ['# Comment1']})})
|
|
|
|
database_section = OrderedDict({('!', 'access to', 'attrs=userPassword'):
|
|
access_1,
|
|
('!', 'access to', 'dn.base="cn=proxyuser,dc=calculate"'):
|
|
OrderedDict({'#': ['# Comment3']})})
|
|
|
|
result = OrderedDict({('', 'global'): global_section,
|
|
('', 'database', 'bdb'): database_section})
|
|
|
|
ldap_object = LDAPFormat(document_text)
|
|
assert ldap_object._document_dictionary == result
|
|
|
|
def test_joining_documents_1(self):
|
|
with open('./tests/templates/format/testfiles/ldap_original.conf', 'r') as original_file:
|
|
original_text = original_file.read()
|
|
ldap_original_object = LDAPFormat(original_text)
|
|
|
|
with open('./tests/templates/format/testfiles/ldap_template.conf', 'r') as template_file:
|
|
template_text = template_file.read()
|
|
ldap_template_object = LDAPFormat(template_text,
|
|
ignore_comments=True)
|
|
|
|
ldap_original_object.join_template(ldap_template_object)
|
|
|
|
with open('./tests/templates/format/testfiles/ldap_result.conf', 'r') as result_file:
|
|
result_text = result_file.read()
|
|
|
|
assert ldap_original_object.document_text == result_text
|