mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Move config directives handling code
Move config directives handling code:
ipaserver.install.installutils -> ipapython.directivesetter
Reviewed-By: Stanislav Laznicka <slaznick@redhat.com>
Reviewed-By: Christian Heimes <cheimes@redhat.com>
This commit is contained in:
committed by
Christian Heimes
parent
8c0d7bb92f
commit
f47d86c719
177
ipatests/test_ipapython/test_directivesetter.py
Normal file
177
ipatests/test_ipapython/test_directivesetter.py
Normal file
@@ -0,0 +1,177 @@
|
||||
#
|
||||
# Copyright (C) 2017 FreeIPA Contributors. See COPYING for license
|
||||
#
|
||||
from __future__ import absolute_import
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import tempfile
|
||||
|
||||
import pytest
|
||||
|
||||
from ipapython import directivesetter
|
||||
|
||||
EXAMPLE_CONFIG = [
|
||||
'foo=1\n',
|
||||
'foobar=2\n',
|
||||
]
|
||||
|
||||
WHITESPACE_CONFIG = [
|
||||
'foo 1\n',
|
||||
'foobar\t2\n',
|
||||
]
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def tempdir(request):
|
||||
tempdir = tempfile.mkdtemp()
|
||||
|
||||
def fin():
|
||||
shutil.rmtree(tempdir)
|
||||
|
||||
request.addfinalizer(fin)
|
||||
return tempdir
|
||||
|
||||
|
||||
class test_set_directive_lines(object):
|
||||
def test_remove_directive(self):
|
||||
lines = directivesetter.set_directive_lines(
|
||||
False, '=', 'foo', None, EXAMPLE_CONFIG, comment="#")
|
||||
assert list(lines) == ['foobar=2\n']
|
||||
|
||||
def test_add_directive(self):
|
||||
lines = directivesetter.set_directive_lines(
|
||||
False, '=', 'baz', '4', EXAMPLE_CONFIG, comment="#")
|
||||
assert list(lines) == ['foo=1\n', 'foobar=2\n', 'baz=4\n']
|
||||
|
||||
def test_set_directive_does_not_clobber_suffix_key(self):
|
||||
lines = directivesetter.set_directive_lines(
|
||||
False, '=', 'foo', '3', EXAMPLE_CONFIG, comment="#")
|
||||
assert list(lines) == ['foo=3\n', 'foobar=2\n']
|
||||
|
||||
|
||||
class test_set_directive_lines_whitespace(object):
|
||||
def test_remove_directive(self):
|
||||
lines = directivesetter.set_directive_lines(
|
||||
False, ' ', 'foo', None, WHITESPACE_CONFIG, comment="#")
|
||||
assert list(lines) == ['foobar\t2\n']
|
||||
|
||||
def test_add_directive(self):
|
||||
lines = directivesetter.set_directive_lines(
|
||||
False, ' ', 'baz', '4', WHITESPACE_CONFIG, comment="#")
|
||||
assert list(lines) == ['foo 1\n', 'foobar\t2\n', 'baz 4\n']
|
||||
|
||||
def test_set_directive_does_not_clobber_suffix_key(self):
|
||||
lines = directivesetter.set_directive_lines(
|
||||
False, ' ', 'foo', '3', WHITESPACE_CONFIG, comment="#")
|
||||
assert list(lines) == ['foo 3\n', 'foobar\t2\n']
|
||||
|
||||
def test_set_directive_with_tab(self):
|
||||
lines = directivesetter.set_directive_lines(
|
||||
False, ' ', 'foobar', '6', WHITESPACE_CONFIG, comment="#")
|
||||
assert list(lines) == ['foo 1\n', 'foobar 6\n']
|
||||
|
||||
|
||||
class test_set_directive(object):
|
||||
def test_set_directive(self):
|
||||
"""Check that set_directive writes the new data and preserves mode."""
|
||||
fd, filename = tempfile.mkstemp()
|
||||
try:
|
||||
os.close(fd)
|
||||
stat_pre = os.stat(filename)
|
||||
|
||||
with open(filename, 'w') as f:
|
||||
for line in EXAMPLE_CONFIG:
|
||||
f.write(line)
|
||||
|
||||
directivesetter.set_directive(
|
||||
filename, 'foo', '3', False, '=', "#")
|
||||
|
||||
stat_post = os.stat(filename)
|
||||
with open(filename, 'r') as f:
|
||||
lines = list(f)
|
||||
|
||||
assert lines == ['foo=3\n', 'foobar=2\n']
|
||||
assert stat_pre.st_mode == stat_post.st_mode
|
||||
assert stat_pre.st_uid == stat_post.st_uid
|
||||
assert stat_pre.st_gid == stat_post.st_gid
|
||||
|
||||
finally:
|
||||
os.remove(filename)
|
||||
|
||||
|
||||
class test_get_directive(object):
|
||||
def test_get_directive(self, tmpdir):
|
||||
configfile = tmpdir.join('config')
|
||||
configfile.write(''.join(EXAMPLE_CONFIG))
|
||||
|
||||
assert '1' == directivesetter.get_directive(str(configfile),
|
||||
'foo',
|
||||
separator='=')
|
||||
assert '2' == directivesetter.get_directive(str(configfile),
|
||||
'foobar',
|
||||
separator='=')
|
||||
|
||||
|
||||
class test_get_directive_whitespace(object):
|
||||
def test_get_directive(self, tmpdir):
|
||||
configfile = tmpdir.join('config')
|
||||
configfile.write(''.join(WHITESPACE_CONFIG))
|
||||
|
||||
assert '1' == directivesetter.get_directive(str(configfile),
|
||||
'foo')
|
||||
assert '2' == directivesetter.get_directive(str(configfile),
|
||||
'foobar')
|
||||
|
||||
|
||||
def test_directivesetter(tempdir):
|
||||
filename = os.path.join(tempdir, 'example.conf')
|
||||
with open(filename, 'w') as f:
|
||||
for line in EXAMPLE_CONFIG:
|
||||
f.write(line)
|
||||
|
||||
ds = directivesetter.DirectiveSetter(filename)
|
||||
assert ds.lines is None
|
||||
with ds:
|
||||
assert ds.lines == EXAMPLE_CONFIG
|
||||
ds.set('foo', '3') # quoted, space separated, doesn't change 'foo='
|
||||
ds.set('foobar', None, separator='=') # remove
|
||||
ds.set('baz', '4', False, '=') # add
|
||||
ds.setitems([
|
||||
('list1', 'value1'),
|
||||
('list2', 'value2'),
|
||||
])
|
||||
ds.setitems({
|
||||
'dict1': 'value1',
|
||||
'dict2': 'value2',
|
||||
})
|
||||
|
||||
with open(filename, 'r') as f:
|
||||
lines = list(f)
|
||||
|
||||
assert lines == [
|
||||
'foo=1\n',
|
||||
'foo "3"\n',
|
||||
'baz=4\n',
|
||||
'list1 "value1"\n',
|
||||
'list2 "value2"\n',
|
||||
'dict1 "value1"\n',
|
||||
'dict2 "value2"\n',
|
||||
]
|
||||
|
||||
with directivesetter.DirectiveSetter(filename, True, '=') as ds:
|
||||
ds.set('foo', '4') # doesn't change 'foo '
|
||||
|
||||
with open(filename, 'r') as f:
|
||||
lines = list(f)
|
||||
|
||||
assert lines == [
|
||||
'foo="4"\n',
|
||||
'foo "3"\n',
|
||||
'baz=4\n',
|
||||
'list1 "value1"\n',
|
||||
'list2 "value2"\n',
|
||||
'dict1 "value1"\n',
|
||||
'dict2 "value2"\n',
|
||||
|
||||
]
|
||||
Reference in New Issue
Block a user