This is an automated email from the git hooks/post-receive script.
spichugi pushed a commit to branch master
in repository 389-ds-base.
commit f102eab6798f637217c18d19040cae498a770de2
Author: Simon Pichugin <spichugi(a)redhat.com>
Date: Mon Jan 8 14:42:20 2018 +0100
Ticket 49523 - Refactor CI test
Description: Add Python 3 support, move the test case
to suites/memberof_plugin/regression-test.py and
refactor its structure with lib389 wrappers.
https://pagure.io/389-ds-base/issue/49523
Reviewed by: mreynolds (Thanks!)
---
.../suites/memberof_plugin/regression_test.py | 66 ++++++++-
dirsrvtests/tests/tickets/ticket49523_test.py | 154 ---------------------
2 files changed, 64 insertions(+), 156 deletions(-)
diff --git a/dirsrvtests/tests/suites/memberof_plugin/regression_test.py
b/dirsrvtests/tests/suites/memberof_plugin/regression_test.py
index 6ba4217..bc7affe 100644
--- a/dirsrvtests/tests/suites/memberof_plugin/regression_test.py
+++ b/dirsrvtests/tests/suites/memberof_plugin/regression_test.py
@@ -1,3 +1,11 @@
+# --- BEGIN COPYRIGHT BLOCK ---
+# Copyright (C) 2017 Red Hat, Inc.
+# All rights reserved.
+#
+# License: GPL (version 3 or any later version).
+# See LICENSE for details.
+# --- END COPYRIGHT BLOCK ---
+#
import logging
import pytest
import os
@@ -15,8 +23,9 @@ from lib389.idm.group import Groups, Group
# Skip on older versions
pytestmark = pytest.mark.skipif(ds_is_older('1.3.7'), reason="Not
implemented")
-USER_CN='user_'
-GROUP_CN='group_'
+USER_CN = 'user_'
+GROUP_CN = 'group1'
+
DEBUGGING = os.getenv("DEBUGGING", default=False)
if DEBUGGING:
@@ -232,6 +241,59 @@ def test_memberof_with_repl(topo):
_find_memberof(i, member_dn, grp0_dn)
+(a)pytest.mark.skipif(ds_is_older('1.4.0'), reason="Not implemented")
+def test_scheme_violation_errors_logged(topo):
+ """Check that ERR messages are verbose enough, if a member entry
+ doesn't have the appropriate objectclass to support 'memberof' attribute
+
+ :id: e2af0aaa-447e-4e85-a5ce-57ae66260d0b
+ :setup: Standalone instance
+ :steps:
+ 1. Enable memberofPlugin and set autoaddoc to nsMemberOf
+ 2. Restart the instance
+ 3. Add a user without nsMemberOf attribute
+ 4. Create a group and add the user to the group
+ 5. Check that user has memberOf attribute
+ 6. Check the error log for ".*oc_check_allowed_sv.*USER_DN.*memberOf.*not
allowed.*"
+ and ".*schema violation caught - repair operation.*" patterns
+ :expectedresults:
+ 1. Should be successful
+ 2. Should be successful
+ 3. Should be successful
+ 4. Should be successful
+ 5. User should have the attribute
+ 6. Errors should be logged
+ """
+
+ inst = topo.ms["master1"]
+ memberof = MemberOfPlugin(inst)
+ memberof.enable()
+ memberof.set_autoaddoc('nsMemberOf')
+ inst.restart()
+
+ users = UserAccounts(inst, SUFFIX)
+ user_props = TEST_USER_PROPERTIES.copy()
+ user_props.update({'uid': USER_CN, 'cn': USER_CN, 'sn':
USER_CN})
+ testuser = users.create(properties=user_props)
+ testuser.remove('objectclass', 'nsMemberOf')
+
+ groups = Groups(inst, SUFFIX)
+ testgroup = groups.create(properties={'cn': GROUP_CN})
+
+ testgroup.add('member', testuser.dn)
+
+ user_memberof_attr = testuser.get_attr_val_utf8('memberof')
+ assert user_memberof_attr
+ log.info('memberOf attr value - '.format(user_memberof_attr))
+
+ pattern = ".*oc_check_allowed_sv.*{}.*memberOf.*not
allowed.*".format(testuser.dn)
+ log.info("pattern = %s" % pattern)
+ assert inst.ds_error_log.match(pattern)
+
+ pattern = ".*schema violation caught - repair operation.*"
+ assert inst.ds_error_log.match(pattern)
+
+
if __name__ == '__main__':
# Run isolated
# -s for DEBUG mode
diff --git a/dirsrvtests/tests/tickets/ticket49523_test.py
b/dirsrvtests/tests/tickets/ticket49523_test.py
deleted file mode 100644
index c3296ef..0000000
--- a/dirsrvtests/tests/tickets/ticket49523_test.py
+++ /dev/null
@@ -1,154 +0,0 @@
-import logging
-import pytest
-import os
-import ldap
-import time
-import re
-from lib389.plugins import MemberOfPlugin
-from lib389._constants import *
-from lib389.topologies import topology_st as topo
-from lib389 import Entry
-
-DEBUGGING = os.getenv("DEBUGGING", default=False)
-if DEBUGGING:
- logging.getLogger(__name__).setLevel(logging.DEBUG)
-else:
- logging.getLogger(__name__).setLevel(logging.INFO)
-log = logging.getLogger(__name__)
-
-
-USER_CN='user_'
-GROUP_CN='group_'
-def _user_get_dn(no):
- cn = '%s%d' % (USER_CN, no)
- dn = 'cn=%s,ou=people,%s' % (cn, SUFFIX)
- return (cn, dn)
-
-def add_user(server, no, desc='dummy', sleep=True):
- (cn, dn) = _user_get_dn(no)
- log.fatal('Adding user (%s): ' % dn)
- server.add_s(Entry((dn, {'objectclass': ['top', 'person'],
- 'cn': [cn],
- 'description': [desc],
- 'sn': [cn],
- 'description': ['add on that host']})))
- if sleep:
- time.sleep(2)
-
-def add_group(server, nr, sleep=True):
- cn = '%s%d' % (GROUP_CN, nr)
- dn = 'cn=%s,ou=groups,%s' % (cn, SUFFIX)
- server.add_s(Entry((dn, {'objectclass': ['top',
'groupofnames'],
- 'description': 'group %d' % nr})))
- if sleep:
- time.sleep(2)
-
-def update_member(server, member_dn, group_dn, op, sleep=True):
- mod = [(op, 'member', member_dn)]
- server.modify_s(group_dn, mod)
- if sleep:
- time.sleep(2)
-
-def _find_memberof(server, member_dn, group_dn, find_result=True):
- ent = server.getEntry(member_dn, ldap.SCOPE_BASE, "(objectclass=*)",
['memberof'])
- found = False
- if ent.hasAttr('memberof'):
-
- for val in ent.getValues('memberof'):
- server.log.info("!!!!!!! %s: memberof->%s" % (member_dn, val))
- server.log.info("!!!!!!! %s" % (val))
- server.log.info("!!!!!!! %s" % (group_dn))
- if val.lower() == group_dn.lower():
- found = True
- break
-
- if find_result:
- assert (found)
- else:
- assert (not found)
-
-def pattern_accesslog(server, log_pattern):
- file_obj = open(server.accesslog, "r")
-
- found = False
- # Use a while true iteration because 'for line in file: hit a
- while True:
- line = file_obj.readline()
- found = log_pattern.search(line)
- if ((line == '') or (found)):
- break
-
- return found
-
-def pattern_errorlog(server, log_pattern):
- file_obj = open(server.errlog, "r")
-
- found = None
- # Use a while true iteration because 'for line in file: hit a
- while True:
- line = file_obj.readline()
- found = log_pattern.search(line)
- server.log.fatal("%s --> %s" % (line, found))
- if ((line == '') or (found)):
- break
-
- return found
-
-def test_ticket49523(topo):
- """Specify a test case purpose or name here
-
- :id: e2af0aaa-447e-4e85-a5ce-57ae66260d0b
- :setup: Fill in set up configuration here
- :steps:
- 1. Fill in test case steps here
- 2. And indent them like this (RST format requirement)
- :expectedresults:
- 1. Fill in the result that is expected
- 2. For each test step
- """
-
- # If you need any test suite initialization,
- # please, write additional fixture for that (including finalizer).
- # Topology for suites are predefined in lib389/topologies.py.
-
- # If you need host, port or any other data about instance,
- # Please, use the instance object attributes for that (for example,
topo.ms["master1"].serverid)
- inst = topo.standalone
- memberof = MemberOfPlugin(inst)
- memberof.enable()
- memberof.set_autoaddoc('nsMemberOf')
- inst.restart()
-
- # Step 2
- for i in range(10):
- add_user(inst, i, desc='add user')
-
- add_group(inst, 1)
-
- group_parent_dn = 'ou=groups,%s' % (SUFFIX)
- group_rdn = 'cn=%s%d' % (GROUP_CN, 1)
- group_dn = '%s,%s' % (group_rdn, group_parent_dn)
- (member_cn, member_dn) = _user_get_dn(1)
- update_member(inst, member_dn, group_dn, ldap.MOD_ADD, sleep=False)
-
- _find_memberof(inst, member_dn, group_dn, find_result=True)
-
- pattern = ".*oc_check_allowed_sv - Entry.*cn=%s.* -- attribute.*not
allowed.*" % member_cn
- log.fatal("pattern = %s" % pattern)
- regex = re.compile(pattern)
- assert pattern_errorlog(inst, regex)
-
- regex = re.compile(".*schema violation caught - repair operation.*")
- assert pattern_errorlog(inst, regex)
-
- if DEBUGGING:
- # Add debugging steps(if any)...
- pass
-
-
-if __name__ == '__main__':
- # Run isolated
- # -s for DEBUG mode
- CURRENT_FILE = os.path.realpath(__file__)
- pytest.main("-s %s" % CURRENT_FILE)
-
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.