report.html

Report generated on 18-Aug-2021 at 02:32:10 by pytest-html v3.1.1

Environment

389-ds-base 2.1.0-20210818gita2435264d.fc34
Packages {"pluggy": "0.13.1", "py": "1.10.0", "pytest": "5.4.3"}
Platform Linux-5.12.10-300.fc34.x86_64-x86_64-with-glibc2.33
Plugins {"flaky": "3.7.0", "html": "3.1.1", "libfaketime": "0.1.2", "metadata": "1.11.0"}
Python 3.9.6
cyrus-sasl 2.1.27-8.fc34
nspr 4.32.0-1.fc34
nss 3.69.0-1.fc34
openldap 2.4.57-5.fc34

Summary

2113 tests ran in 18414.40 seconds.

2021 passed, 15 skipped, 63 failed, 5 errors, 21 expected failures, 8 unexpected passes

Results

Result Test Duration Links
Error suites/basic/basic_test.py::collect
ImportError while importing test module '/export/tests/suites/basic/basic_test.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
suites/basic/basic_test.py:25: in <module>
from ....conftest import get_rpm_version
E ImportError: attempted relative import beyond top-level package
Error tickets/ticket48973_test.py::test_ticket48973_init::setup 0.90
request = <SubRequest 'topology' for <Function test_ticket48973_init>>

@pytest.fixture(scope="module")
def topology(request):
# Creating standalone instance ...
standalone = DirSrv(verbose=False)
args_instance[SER_HOST] = HOST_STANDALONE
args_instance[SER_PORT] = PORT_STANDALONE
args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE
args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX
args_standalone = args_instance.copy()
standalone.allocate(args_standalone)
instance_standalone = standalone.exists()
if instance_standalone:
standalone.delete()
> standalone.create()

/export/tests/tickets/ticket48973_test.py:52:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:838: in create
self._createDirsrv(version)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:808: in _createDirsrv
sds.create_from_args(general, slapd, backends, None)
/usr/local/lib/python3.9/site-packages/lib389/instance/setup.py:663: in create_from_args
self._prepare_ds(general, slapd, backends)
/usr/local/lib/python3.9/site-packages/lib389/instance/setup.py:594: in _prepare_ds
assert_c(slapd['root_dn'] is not None, "Configuration root_dn in section [slapd] not found")
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

condition = False, msg = 'Configuration root_dn in section [slapd] not found'

def assert_c(condition, msg="Assertion Failed"):
"""This is the same as assert, but assert is compiled out
when optimisation is enabled. This prevents compiling out.
"""
if not condition:
> raise AssertionError(msg)
E AssertionError: Configuration root_dn in section [slapd] not found

/usr/local/lib/python3.9/site-packages/lib389/utils.py:1246: AssertionError
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation...
Error tickets/ticket48973_test.py::test_ticket48973_ces_not_indexed::setup 0.00
request = <SubRequest 'topology' for <Function test_ticket48973_init>>

@pytest.fixture(scope="module")
def topology(request):
# Creating standalone instance ...
standalone = DirSrv(verbose=False)
args_instance[SER_HOST] = HOST_STANDALONE
args_instance[SER_PORT] = PORT_STANDALONE
args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE
args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX
args_standalone = args_instance.copy()
standalone.allocate(args_standalone)
instance_standalone = standalone.exists()
if instance_standalone:
standalone.delete()
> standalone.create()

/export/tests/tickets/ticket48973_test.py:52:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:838: in create
self._createDirsrv(version)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:808: in _createDirsrv
sds.create_from_args(general, slapd, backends, None)
/usr/local/lib/python3.9/site-packages/lib389/instance/setup.py:663: in create_from_args
self._prepare_ds(general, slapd, backends)
/usr/local/lib/python3.9/site-packages/lib389/instance/setup.py:594: in _prepare_ds
assert_c(slapd['root_dn'] is not None, "Configuration root_dn in section [slapd] not found")
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

condition = False, msg = 'Configuration root_dn in section [slapd] not found'

def assert_c(condition, msg="Assertion Failed"):
"""This is the same as assert, but assert is compiled out
when optimisation is enabled. This prevents compiling out.
"""
if not condition:
> raise AssertionError(msg)
E AssertionError: Configuration root_dn in section [slapd] not found

/usr/local/lib/python3.9/site-packages/lib389/utils.py:1246: AssertionError
Error tickets/ticket48973_test.py::test_ticket48973_homeDirectory_indexing::setup 0.00
request = <SubRequest 'topology' for <Function test_ticket48973_init>>

@pytest.fixture(scope="module")
def topology(request):
# Creating standalone instance ...
standalone = DirSrv(verbose=False)
args_instance[SER_HOST] = HOST_STANDALONE
args_instance[SER_PORT] = PORT_STANDALONE
args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE
args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX
args_standalone = args_instance.copy()
standalone.allocate(args_standalone)
instance_standalone = standalone.exists()
if instance_standalone:
standalone.delete()
> standalone.create()

/export/tests/tickets/ticket48973_test.py:52:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:838: in create
self._createDirsrv(version)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:808: in _createDirsrv
sds.create_from_args(general, slapd, backends, None)
/usr/local/lib/python3.9/site-packages/lib389/instance/setup.py:663: in create_from_args
self._prepare_ds(general, slapd, backends)
/usr/local/lib/python3.9/site-packages/lib389/instance/setup.py:594: in _prepare_ds
assert_c(slapd['root_dn'] is not None, "Configuration root_dn in section [slapd] not found")
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

condition = False, msg = 'Configuration root_dn in section [slapd] not found'

def assert_c(condition, msg="Assertion Failed"):
"""This is the same as assert, but assert is compiled out
when optimisation is enabled. This prevents compiling out.
"""
if not condition:
> raise AssertionError(msg)
E AssertionError: Configuration root_dn in section [slapd] not found

/usr/local/lib/python3.9/site-packages/lib389/utils.py:1246: AssertionError
Error tickets/ticket48973_test.py::test_ticket48973_homeDirectory_caseExactIA5Match_caseIgnoreIA5Match_indexing::setup 0.00
request = <SubRequest 'topology' for <Function test_ticket48973_init>>

@pytest.fixture(scope="module")
def topology(request):
# Creating standalone instance ...
standalone = DirSrv(verbose=False)
args_instance[SER_HOST] = HOST_STANDALONE
args_instance[SER_PORT] = PORT_STANDALONE
args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE
args_instance[SER_CREATION_SUFFIX] = DEFAULT_SUFFIX
args_standalone = args_instance.copy()
standalone.allocate(args_standalone)
instance_standalone = standalone.exists()
if instance_standalone:
standalone.delete()
> standalone.create()

/export/tests/tickets/ticket48973_test.py:52:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:838: in create
self._createDirsrv(version)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:808: in _createDirsrv
sds.create_from_args(general, slapd, backends, None)
/usr/local/lib/python3.9/site-packages/lib389/instance/setup.py:663: in create_from_args
self._prepare_ds(general, slapd, backends)
/usr/local/lib/python3.9/site-packages/lib389/instance/setup.py:594: in _prepare_ds
assert_c(slapd['root_dn'] is not None, "Configuration root_dn in section [slapd] not found")
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

condition = False, msg = 'Configuration root_dn in section [slapd] not found'

def assert_c(condition, msg="Assertion Failed"):
"""This is the same as assert, but assert is compiled out
when optimisation is enabled. This prevents compiling out.
"""
if not condition:
> raise AssertionError(msg)
E AssertionError: Configuration root_dn in section [slapd] not found

/usr/local/lib/python3.9/site-packages/lib389/utils.py:1246: AssertionError
Failed suites/acl/keywords_test.py::test_user_can_access_the_data_when_connecting_from_any_machine 0.44
topo = <lib389.topologies.TopologyMain object at 0x7f91e565c730>
add_user = None, aci_of_user = None

@pytest.mark.flaky(max_runs=2, min_passes=1)
def test_user_can_access_the_data_when_connecting_from_any_machine(
topo, add_user, aci_of_user
):
"""User can access the data when connecting from any machine as per the ACI.

:id: 28cbc008-7ac5-11e8-934e-8c16451d917b
:customerscenario: True
:setup: Standalone Server
:steps:
1. Add test entry
2. Add ACI
3. User should follow ACI role
:expectedresults:
1. Entry should be added
2. Operation should succeed
3. Operation should succeed
"""
# Add ACI
Domain(topo.standalone, DEFAULT_SUFFIX)\
.add("aci", f'(target ="ldap:///{DNS_OU_KEY}")'
f'(targetattr="*")(version 3.0; aci "DNS aci"; allow(all) '
f'userdn = "ldap:///{FULLDNS_KEY}" and dns = "*" ;)')

# Create a new connection for this test.
conn = UserAccount(topo.standalone, FULLDNS_KEY).bind(PW_DM)
# Perform Operation
> OrganizationalUnit(conn, DNS_OU_KEY).replace("seeAlso", "cn=1")

suites/acl/keywords_test.py:254:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:294: in replace
self.set(key, value, action=ldap.MOD_REPLACE)
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:460: in set
return self._instance.modify_ext_s(self._dn, [(action, key, value)],
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:613: in modify_ext_s
resp_type, resp_data, resp_msgid, resp_ctrls = self.result3(msgid,all=1,timeout=self.timeout)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:764: in result3
resp_type, resp_data, resp_msgid, decoded_resp_ctrls, retoid, retval = self.result4(
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:774: in result4
ldap_result = self._ldap_call(self._l.result4,msgid,all,timeout,add_ctrls,add_intermediates,add_extop)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340: in _ldap_call
reraise(exc_type, exc_value, exc_traceback)
/usr/lib64/python3.9/site-packages/ldap/compat.py:46: in reraise
raise exc_value
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91e3cda8b0>
func = <built-in method result4 of LDAP object at 0x7f91e438bc30>
args = (3, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.INSUFFICIENT_ACCESS: {'msgtype': 103, 'msgid': 3, 'result': 50, 'desc': 'Insufficient access', 'ctrls': [], 'info': "Insufficient 'write' privilege to the 'seeAlso' attribute of entry 'ou=dns,ou=keywords,dc=example,dc=com'.\n"}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: INSUFFICIENT_ACCESS
Failed suites/acl/keywords_test.py::test_user_can_access_the_data_when_connecting_from_internal_ds_network_only 0.35
topo = <lib389.topologies.TopologyMain object at 0x7f91e565c730>
add_user = None, aci_of_user = None

@pytest.mark.flaky(max_runs=2, min_passes=1)
def test_user_can_access_the_data_when_connecting_from_internal_ds_network_only(
topo, add_user, aci_of_user
):
"""User can access the data when connecting from internal ICNC network only as per the ACI.

:id: 2cac2136-7ac5-11e8-8328-8c16451d917b
:customerscenario: True
:setup: Standalone Server
:steps:
1. Add test entry
2. Add ACI
3. User should follow ACI role
:expectedresults:
1. Entry should be added
2. Operation should succeed
3. Operation should succeed
"""
dns_name = socket.getfqdn()
# Add ACI
Domain(topo.standalone, DEFAULT_SUFFIX).\
add("aci", [f'(target = "ldap:///{DNS_OU_KEY}")(targetattr="*")'
f'(version 3.0; aci "DNS aci"; allow(all) '
f'userdn = "ldap:///{SUNDNS_KEY}" and '
f'(dns = "*redhat.com" or dns = "{dns_name}");)'])

# Create a new connection for this test.
conn = UserAccount(topo.standalone, SUNDNS_KEY).bind(PW_DM)
# Perform Operation
> OrganizationalUnit(conn, DNS_OU_KEY).replace("seeAlso", "cn=1")

suites/acl/keywords_test.py:287:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:294: in replace
self.set(key, value, action=ldap.MOD_REPLACE)
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:460: in set
return self._instance.modify_ext_s(self._dn, [(action, key, value)],
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:613: in modify_ext_s
resp_type, resp_data, resp_msgid, resp_ctrls = self.result3(msgid,all=1,timeout=self.timeout)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:764: in result3
resp_type, resp_data, resp_msgid, decoded_resp_ctrls, retoid, retval = self.result4(
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:774: in result4
ldap_result = self._ldap_call(self._l.result4,msgid,all,timeout,add_ctrls,add_intermediates,add_extop)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340: in _ldap_call
reraise(exc_type, exc_value, exc_traceback)
/usr/lib64/python3.9/site-packages/ldap/compat.py:46: in reraise
raise exc_value
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91e4410730>
func = <built-in method result4 of LDAP object at 0x7f91e3c82600>
args = (3, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.INSUFFICIENT_ACCESS: {'msgtype': 103, 'msgid': 3, 'result': 50, 'desc': 'Insufficient access', 'ctrls': [], 'info': "Insufficient 'write' privilege to the 'seeAlso' attribute of entry 'ou=dns,ou=keywords,dc=example,dc=com'.\n"}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: INSUFFICIENT_ACCESS
Failed suites/acl/keywords_test.py::test_user_can_access_the_data_when_connecting_from_some_network_only 0.39
topo = <lib389.topologies.TopologyMain object at 0x7f91e565c730>
add_user = None, aci_of_user = None

@pytest.mark.flaky(max_runs=2, min_passes=1)
def test_user_can_access_the_data_when_connecting_from_some_network_only(
topo, add_user, aci_of_user
):
"""User can access the data when connecting from some network only as per the ACI.

:id: 3098512a-7ac5-11e8-af85-8c16451d917b
:customerscenario: True
:setup: Standalone Server
:steps:
1. Add test entry
2. Add ACI
3. User should follow ACI role
:expectedresults:
1. Entry should be added
2. Operation should succeed
3. Operation should succeed
"""
dns_name = socket.getfqdn()
# Add ACI
Domain(topo.standalone, DEFAULT_SUFFIX)\
.add("aci", f'(target = "ldap:///{DNS_OU_KEY}")'
f'(targetattr="*")(version 3.0; aci "DNS aci"; allow(all) '
f'userdn = "ldap:///{NETSCAPEDNS_KEY}" '
f'and dns = "{dns_name}" ;)')

# Create a new connection for this test.
conn = UserAccount(topo.standalone, NETSCAPEDNS_KEY).bind(PW_DM)
# Perform Operation
> OrganizationalUnit(conn, DNS_OU_KEY).replace("seeAlso", "cn=1")

suites/acl/keywords_test.py:319:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:294: in replace
self.set(key, value, action=ldap.MOD_REPLACE)
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:460: in set
return self._instance.modify_ext_s(self._dn, [(action, key, value)],
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:613: in modify_ext_s
resp_type, resp_data, resp_msgid, resp_ctrls = self.result3(msgid,all=1,timeout=self.timeout)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:764: in result3
resp_type, resp_data, resp_msgid, decoded_resp_ctrls, retoid, retval = self.result4(
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:774: in result4
ldap_result = self._ldap_call(self._l.result4,msgid,all,timeout,add_ctrls,add_intermediates,add_extop)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340: in _ldap_call
reraise(exc_type, exc_value, exc_traceback)
/usr/lib64/python3.9/site-packages/ldap/compat.py:46: in reraise
raise exc_value
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91e3a7f8b0>
func = <built-in method result4 of LDAP object at 0x7f91e3c82450>
args = (3, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.INSUFFICIENT_ACCESS: {'msgtype': 103, 'msgid': 3, 'result': 50, 'desc': 'Insufficient access', 'ctrls': [], 'info': "Insufficient 'write' privilege to the 'seeAlso' attribute of entry 'ou=dns,ou=keywords,dc=example,dc=com'.\n"}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: INSUFFICIENT_ACCESS
Failed suites/acl/keywords_test.py::test_from_an_unauthorized_network 0.35
topo = <lib389.topologies.TopologyMain object at 0x7f91e565c730>
add_user = None, aci_of_user = None

@pytest.mark.flaky(max_runs=2, min_passes=1)
def test_from_an_unauthorized_network(topo, add_user, aci_of_user):
"""User cannot access the data when connecting from an unauthorized network as per the ACI.

:id: 34cf9726-7ac5-11e8-bc12-8c16451d917b
:customerscenario: True
:setup: Standalone Server
:steps:
1. Add test entry
2. Add ACI
3. User should follow ACI role
:expectedresults:
1. Entry should be added
2. Operation should succeed
3. Operation should succeed
"""
# Add ACI
Domain(topo.standalone, DEFAULT_SUFFIX).\
add("aci", f'(target = "ldap:///{DNS_OU_KEY}")'
f'(targetattr="*")(version 3.0; aci "DNS aci"; allow(all) '
f'userdn = "ldap:///{NETSCAPEDNS_KEY}" and dns != "red.iplanet.com" ;)')

# Create a new connection for this test.
conn = UserAccount(topo.standalone, NETSCAPEDNS_KEY).bind(PW_DM)
# Perform Operation
> OrganizationalUnit(conn, DNS_OU_KEY).replace("seeAlso", "cn=1")

suites/acl/keywords_test.py:347:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:294: in replace
self.set(key, value, action=ldap.MOD_REPLACE)
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:460: in set
return self._instance.modify_ext_s(self._dn, [(action, key, value)],
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:613: in modify_ext_s
resp_type, resp_data, resp_msgid, resp_ctrls = self.result3(msgid,all=1,timeout=self.timeout)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:764: in result3
resp_type, resp_data, resp_msgid, decoded_resp_ctrls, retoid, retval = self.result4(
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:774: in result4
ldap_result = self._ldap_call(self._l.result4,msgid,all,timeout,add_ctrls,add_intermediates,add_extop)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340: in _ldap_call
reraise(exc_type, exc_value, exc_traceback)
/usr/lib64/python3.9/site-packages/ldap/compat.py:46: in reraise
raise exc_value
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91e27c5dc0>
func = <built-in method result4 of LDAP object at 0x7f91e281d330>
args = (3, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.INSUFFICIENT_ACCESS: {'msgtype': 103, 'msgid': 3, 'result': 50, 'desc': 'Insufficient access', 'ctrls': [], 'info': "Insufficient 'write' privilege to the 'seeAlso' attribute of entry 'ou=dns,ou=keywords,dc=example,dc=com'.\n"}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: INSUFFICIENT_ACCESS
Failed suites/acl/keywords_test.py::test_user_cannot_access_the_data_when_connecting_from_an_unauthorized_network_2 0.34
topo = <lib389.topologies.TopologyMain object at 0x7f91e565c730>
add_user = None, aci_of_user = None

@pytest.mark.flaky(max_runs=2, min_passes=1)
def test_user_cannot_access_the_data_when_connecting_from_an_unauthorized_network_2(
topo, add_user, aci_of_user):
"""User cannot access the data when connecting from an unauthorized network as per the ACI.

:id: 396bdd44-7ac5-11e8-8014-8c16451d917b
:customerscenario: True
:setup: Standalone Server
:steps:
1. Add test entry
2. Add ACI
3. User should follow ACI role
:expectedresults:
1. Entry should be added
2. Operation should succeed
3. Operation should succeed
"""
# Add ACI
Domain(topo.standalone, DEFAULT_SUFFIX).\
add("aci", f'(target = "ldap:///{DNS_OU_KEY}")'
f'(targetattr="*")(version 3.0; aci "DNS aci"; allow(all) '
f'userdn = "ldap:///{NETSCAPEDNS_KEY}" '
f'and dnsalias != "www.redhat.com" ;)')

# Create a new connection for this test.
conn = UserAccount(topo.standalone, NETSCAPEDNS_KEY).bind(PW_DM)
# Perform Operation
> OrganizationalUnit(conn, DNS_OU_KEY).replace("seeAlso", "cn=1")

suites/acl/keywords_test.py:377:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:294: in replace
self.set(key, value, action=ldap.MOD_REPLACE)
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:460: in set
return self._instance.modify_ext_s(self._dn, [(action, key, value)],
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:613: in modify_ext_s
resp_type, resp_data, resp_msgid, resp_ctrls = self.result3(msgid,all=1,timeout=self.timeout)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:764: in result3
resp_type, resp_data, resp_msgid, decoded_resp_ctrls, retoid, retval = self.result4(
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:774: in result4
ldap_result = self._ldap_call(self._l.result4,msgid,all,timeout,add_ctrls,add_intermediates,add_extop)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340: in _ldap_call
reraise(exc_type, exc_value, exc_traceback)
/usr/lib64/python3.9/site-packages/ldap/compat.py:46: in reraise
raise exc_value
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91e42a5ee0>
func = <built-in method result4 of LDAP object at 0x7f91e4208090>
args = (3, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.INSUFFICIENT_ACCESS: {'msgtype': 103, 'msgid': 3, 'result': 50, 'desc': 'Insufficient access', 'ctrls': [], 'info': "Insufficient 'write' privilege to the 'seeAlso' attribute of entry 'ou=dns,ou=keywords,dc=example,dc=com'.\n"}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: INSUFFICIENT_ACCESS
Failed suites/clu/repl_monitor_test.py::test_dsconf_replication_monitor 73.94
topology_m2 = <lib389.topologies.TopologyMain object at 0x7f91e2245910>
set_log_file = None

@pytest.mark.flaky(max_runs=2, min_passes=1)
@pytest.mark.ds50545
@pytest.mark.bz1739718
@pytest.mark.skipif(ds_is_older("1.4.0"), reason="Not implemented")
def test_dsconf_replication_monitor(topology_m2, set_log_file):
"""Test replication monitor that was ported from legacy tools

:id: ce48020d-7c30-41b7-8f68-144c9cd757f6
:setup: 2 MM topology
:steps:
1. Create DS instance
2. Run replication monitor with connections option
3. Run replication monitor with aliases option
4. Run replication monitor with --json option
5. Run replication monitor with .dsrc file created
6. Run replication monitor with connections option as if using dsconf CLI
:expectedresults:
1. Success
2. Success
3. Success
4. Success
5. Success
6. Success
"""

m1 = topology_m2.ms["supplier1"]
m2 = topology_m2.ms["supplier2"]

# Enable ldapi if not already done.
for inst in [topology_m2.ms["supplier1"], topology_m2.ms["supplier2"]]:
if not inst.can_autobind():
# Update ns-slapd instance
inst.config.set('nsslapd-ldapilisten', 'on')
inst.config.set('nsslapd-ldapiautobind', 'on')
inst.restart()
# Ensure that updates have been sent both ways.
replicas = Replicas(m1)
replica = replicas.get(DEFAULT_SUFFIX)
replica.test_replication([m2])
replicas = Replicas(m2)
replica = replicas.get(DEFAULT_SUFFIX)
replica.test_replication([m1])

alias_content = ['Supplier: M1 (' + m1.host + ':' + str(m1.port) + ')',
'Supplier: M2 (' + m2.host + ':' + str(m2.port) + ')']

connection_content = 'Supplier: '+ m1.host + ':' + str(m1.port)
content_list = ['Replica Root: dc=example,dc=com',
'Replica ID: 1',
'Replica Status: Online',
'Max CSN',
'Status For Agreement: "002" ('+ m2.host + ':' + str(m2.port) + ')',
'Replica Enabled: on',
'Update In Progress: FALSE',
'Last Update Start:',
'Last Update End:',
'Number Of Changes Sent:',
'Number Of Changes Skipped: None',
'Last Update Status: Error (0) Replica acquired successfully: Incremental update succeeded',
'Last Init Start:',
'Last Init End:',
'Last Init Status:',
'Reap Active: 0',
'Replication Status: In Synchronization',
'Replication Lag Time:',
'Supplier: ',
m2.host + ':' + str(m2.port),
'Replica Root: dc=example,dc=com',
'Replica ID: 2',
'Status For Agreement: "001" (' + m1.host + ':' + str(m1.port)+')']

error_list = ['consumer (Unavailable)',
'Failed to retrieve database RUV entry from consumer']

json_list = ['type',
'list',
'items',
'name',
m1.host + ':' + str(m1.port),
'data',
'"replica_id": "1"',
'"replica_root": "dc=example,dc=com"',
'"replica_status": "Online"',
'maxcsn',
'agmts_status',
'agmt-name',
'002',
'replica',
m2.host + ':' + str(m2.port),
'replica-enabled',
'update-in-progress',
'last-update-start',
'last-update-end',
'number-changes-sent',
'number-changes-skipped',
'last-update-status',
'Error (0) Replica acquired successfully: Incremental update succeeded',
'last-init-start',
'last-init-end',
'last-init-status',
'reap-active',
'replication-status',
'In Synchronization',
'replication-lag-time',
'"replica_id": "2"',
'001',
m1.host + ':' + str(m1.port)]

connections = [m1.host + ':' + str(m1.port) + ':' + DN_DM + ':' + PW_DM,
m2.host + ':' + str(m2.port) + ':' + DN_DM + ':' + PW_DM]

args = FakeArgs()
args.connections = connections
args.aliases = None
args.json = False

log.info('Run replication monitor with connections option')
get_repl_monitor_info(m1, DEFAULT_SUFFIX, log, args)
(host_m1, host_m2) = get_hostnames_from_log(m1.port, m2.port)
> check_value_in_log_and_reset(content_list, connection_content, error_list=error_list)

suites/clu/repl_monitor_test.py:213:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

content_list = ['Replica Root: dc=example,dc=com', 'Replica ID: 1', 'Replica Status: Online', 'Max CSN', 'Status For Agreement: "002" (ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002)', 'Replica Enabled: on', ...]
second_list = 'Supplier: ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001'
single_value = None
error_list = ['consumer (Unavailable)', 'Failed to retrieve database RUV entry from consumer']

def check_value_in_log_and_reset(content_list, second_list=None, single_value=None, error_list=None):
with open(LOG_FILE, 'r+') as f:
file_content = f.read()

for item in content_list:
log.info('Check that "{}" is present'.format(item))
> assert item in file_content
E AssertionError: assert 'Update In Progress: FALSE' in 'Run replication monitor with connections option\ndsrc path: /root/.dsrc\ndsrc container path: /data/config/container....t Init Status: unavailable\nReap Active: 0\nReplication Status: In Synchronization\nReplication Lag Time: 00:00:00\n\n'

suites/clu/repl_monitor_test.py:54: AssertionError
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39001, 'ldap-secureport': 63701, 'server-id': 'supplier1', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier2 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39002, 'ldap-secureport': 63702, 'server-id': 'supplier2', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.topologies:topologies.py:145 Creating replication topology. INFO lib389.topologies:topologies.py:159 Joining supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2084 SUCCESS: bootstrap to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 completed INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is was created INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is was created INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 85dcc0f0-a1ad-4215-9dd8-6868f0e77bf6 / got description=None) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect 3fc4cd22-aa85-4a6d-b108-b8ac4a007f0e / got description=85dcc0f0-a1ad-4215-9dd8-6868f0e77bf6) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is working INFO lib389.replica:replica.py:2153 SUCCESS: joined supplier from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier1 to supplier2 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 already exists
-------------------------------Captured log call--------------------------------
INFO tests.suites.clu.repl_monitor_test:repl_monitor_test.py:210 Run replication monitor with connections option DEBUG tests.suites.clu.repl_monitor_test:dsrc.py:76 dsrc path: /root/.dsrc DEBUG tests.suites.clu.repl_monitor_test:dsrc.py:77 dsrc container path: /data/config/container.inf DEBUG tests.suites.clu.repl_monitor_test:dsrc.py:85 dsrc instances: [] DEBUG tests.suites.clu.repl_monitor_test:dsrc.py:212 dsrc completed with {'connections': None, 'aliases': None} INFO tests.suites.clu.repl_monitor_test:replication.py:446 Supplier: localhost.localdomain:39001 INFO tests.suites.clu.repl_monitor_test:replication.py:450 ------------------------------------- INFO tests.suites.clu.repl_monitor_test:replication.py:464 Replica Root: dc=example,dc=com INFO tests.suites.clu.repl_monitor_test:replication.py:465 Replica ID: 1 INFO tests.suites.clu.repl_monitor_test:replication.py:466 Replica Status: Online INFO tests.suites.clu.repl_monitor_test:replication.py:467 Max CSN: 611c66d4000000010000 INFO tests.suites.clu.repl_monitor_test:replication.py:470 Status For Agreement: "002" (ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002) Replica Enabled: on Update In Progress: TRUE Last Update Start: 20210818014804Z Last Update End: 19700101000000Z Number Of Changes Sent: 1:2/0 Number Of Changes Skipped: None Last Update Status: Error (0) Replica acquired successfully: Incremental update started Last Init Start: 19700101000000Z Last Init End: 19700101000000Z Last Init Status: unavailable Reap Active: 0 Replication Status: In Synchronization Replication Lag Time: 00:00:00 INFO tests.suites.clu.repl_monitor_test:replication.py:446 Supplier: ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 INFO tests.suites.clu.repl_monitor_test:replication.py:450 ---------------------------------------------------------------- INFO tests.suites.clu.repl_monitor_test:replication.py:464 Replica Root: dc=example,dc=com INFO tests.suites.clu.repl_monitor_test:replication.py:465 Replica ID: 2 INFO tests.suites.clu.repl_monitor_test:replication.py:466 Replica Status: Online INFO tests.suites.clu.repl_monitor_test:replication.py:467 Max CSN: 611c66d4000600020000 INFO tests.suites.clu.repl_monitor_test:replication.py:470 Status For Agreement: "001" (ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001) Replica Enabled: on Update In Progress: TRUE Last Update Start: 20210818014804Z Last Update End: 19700101000000Z Number Of Changes Sent: 2:2/0 Number Of Changes Skipped: None Last Update Status: Error (0) Replica acquired successfully: Incremental update started Last Init Start: 19700101000000Z Last Init End: 19700101000000Z Last Init Status: unavailable Reap Active: 0 Replication Status: In Synchronization Replication Lag Time: 00:00:00 INFO tests.suites.clu.repl_monitor_test:repl_monitor_test.py:53 Check that "Replica Root: dc=example,dc=com" is present INFO tests.suites.clu.repl_monitor_test:repl_monitor_test.py:53 Check that "Replica ID: 1" is present INFO tests.suites.clu.repl_monitor_test:repl_monitor_test.py:53 Check that "Replica Status: Online" is present INFO tests.suites.clu.repl_monitor_test:repl_monitor_test.py:53 Check that "Max CSN" is present INFO tests.suites.clu.repl_monitor_test:repl_monitor_test.py:53 Check that "Status For Agreement: "002" (ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002)" is present INFO tests.suites.clu.repl_monitor_test:repl_monitor_test.py:53 Check that "Replica Enabled: on" is present INFO tests.suites.clu.repl_monitor_test:repl_monitor_test.py:53 Check that "Update In Progress: FALSE" is present
-----------------------------Captured log teardown------------------------------
INFO tests.suites.clu.repl_monitor_test:repl_monitor_test.py:38 Delete files
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39001, 'ldap-secureport': 63701, 'server-id': 'supplier1', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier2 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39002, 'ldap-secureport': 63702, 'server-id': 'supplier2', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.topologies:topologies.py:145 Creating replication topology. INFO lib389.topologies:topologies.py:159 Joining supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2084 SUCCESS: bootstrap to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 completed INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is was created INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is was created INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect d07d9769-3791-403a-94d8-99784fac7b64 / got description=None) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect cbf0970c-3195-4f54-975b-029fa9269643 / got description=d07d9769-3791-403a-94d8-99784fac7b64) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is working INFO lib389.replica:replica.py:2153 SUCCESS: joined supplier from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier1 to supplier2 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 already exists
-------------------------------Captured log call--------------------------------
INFO tests.suites.clu.repl_monitor_test:repl_monitor_test.py:210 Run replication monitor with connections option DEBUG tests.suites.clu.repl_monitor_test:dsrc.py:76 dsrc path: /root/.dsrc DEBUG tests.suites.clu.repl_monitor_test:dsrc.py:77 dsrc container path: /data/config/container.inf DEBUG tests.suites.clu.repl_monitor_test:dsrc.py:85 dsrc instances: [] DEBUG tests.suites.clu.repl_monitor_test:dsrc.py:212 dsrc completed with {'connections': None, 'aliases': None} INFO tests.suites.clu.repl_monitor_test:replication.py:446 Supplier: localhost.localdomain:39001 INFO tests.suites.clu.repl_monitor_test:replication.py:450 ------------------------------------- INFO tests.suites.clu.repl_monitor_test:replication.py:464 Replica Root: dc=example,dc=com INFO tests.suites.clu.repl_monitor_test:replication.py:465 Replica ID: 1 INFO tests.suites.clu.repl_monitor_test:replication.py:466 Replica Status: Online INFO tests.suites.clu.repl_monitor_test:replication.py:467 Max CSN: 611c66fd000000010000 INFO tests.suites.clu.repl_monitor_test:replication.py:470 Status For Agreement: "002" (ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002) Replica Enabled: on Update In Progress: TRUE Last Update Start: 20210818014845Z Last Update End: 19700101000000Z Number Of Changes Sent: 1:2/0 Number Of Changes Skipped: None Last Update Status: Error (0) Replica acquired successfully: Incremental update started Last Init Start: 19700101000000Z Last Init End: 19700101000000Z Last Init Status: unavailable Reap Active: 0 Replication Status: In Synchronization Replication Lag Time: 00:00:00 INFO tests.suites.clu.repl_monitor_test:replication.py:446 Supplier: ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 INFO tests.suites.clu.repl_monitor_test:replication.py:450 ---------------------------------------------------------------- INFO tests.suites.clu.repl_monitor_test:replication.py:464 Replica Root: dc=example,dc=com INFO tests.suites.clu.repl_monitor_test:replication.py:465 Replica ID: 2 INFO tests.suites.clu.repl_monitor_test:replication.py:466 Replica Status: Online INFO tests.suites.clu.repl_monitor_test:replication.py:467 Max CSN: 611c66fd000600020000 INFO tests.suites.clu.repl_monitor_test:replication.py:470 Status For Agreement: "001" (ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001) Replica Enabled: on Update In Progress: TRUE Last Update Start: 20210818014845Z Last Update End: 19700101000000Z Number Of Changes Sent: 2:1/0 Number Of Changes Skipped: None Last Update Status: Error (0) Replica acquired successfully: Incremental update started Last Init Start: 19700101000000Z Last Init End: 19700101000000Z Last Init Status: unavailable Reap Active: 0 Replication Status: In Synchronization Replication Lag Time: 00:00:00 INFO tests.suites.clu.repl_monitor_test:repl_monitor_test.py:53 Check that "Replica Root: dc=example,dc=com" is present INFO tests.suites.clu.repl_monitor_test:repl_monitor_test.py:53 Check that "Replica ID: 1" is present INFO tests.suites.clu.repl_monitor_test:repl_monitor_test.py:53 Check that "Replica Status: Online" is present INFO tests.suites.clu.repl_monitor_test:repl_monitor_test.py:53 Check that "Max CSN" is present INFO tests.suites.clu.repl_monitor_test:repl_monitor_test.py:53 Check that "Status For Agreement: "002" (ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002)" is present INFO tests.suites.clu.repl_monitor_test:repl_monitor_test.py:53 Check that "Replica Enabled: on" is present INFO tests.suites.clu.repl_monitor_test:repl_monitor_test.py:53 Check that "Update In Progress: FALSE" is present
-----------------------------Captured log teardown------------------------------
INFO tests.suites.clu.repl_monitor_test:repl_monitor_test.py:38 Delete files
Failed suites/disk_monitoring/disk_monitoring_test.py::test_operation_with_nsslapd_disk_monitoring_logging_critical_off 59.83
topo = <lib389.topologies.TopologyMain object at 0x7f91e28721f0>, setup = None
reset_logs = None

@disk_monitoring_ack
def test_operation_with_nsslapd_disk_monitoring_logging_critical_off(topo, setup, reset_logs):
"""Verify operation with nsslapd-disk-monitoring-logging-critical: off

:id: 97985a52-fe9e-11e8-9914-8c16451d917b
:setup: Standalone
:steps:
1. Verify that logging is disabled
2. Verify that rotated logs were removed
3. Verify that verbose logging was set to default level
4. Verify that logging is disabled
5. Verify that rotated logs were removed
:expectedresults:
1. Should Success
2. Should Success
3. Should Success
4. Should Success
5. Should Success
"""
# Verify that logging is disabled
try:
assert topo.standalone.config.set('nsslapd-disk-monitoring', 'on')
assert topo.standalone.config.set('nsslapd-disk-monitoring-logging-critical', 'off')
assert topo.standalone.config.set('nsslapd-errorlog-level', '8')
assert topo.standalone.config.set('nsslapd-accesslog-maxlogsize', '1')
assert topo.standalone.config.set('nsslapd-accesslog-logrotationtimeunit', 'minute')
assert topo.standalone.config.set('nsslapd-accesslog-level', '772')
topo.standalone.restart()
# Verify that rotated logs were removed
users = UserAccounts(topo.standalone, DEFAULT_SUFFIX)
for i in range(10):
user_properties = {
'uid': 'cn=anuj{}'.format(i),
'cn': 'cn=anuj{}'.format(i),
'sn': 'cn=anuj{}'.format(i),
'userPassword': "Itsme123",
'uidNumber': '1{}'.format(i),
'gidNumber': '2{}'.format(i),
'homeDirectory': '/home/{}'.format(i)
}
users.create(properties=user_properties)
for j in range(100):
for i in [i for i in users.list()]: i.bind('Itsme123')
assert re.findall(r'access.\d+-\d+',str(os.listdir(topo.standalone.ds_paths.log_dir)))
topo.standalone.bind_s(DN_DM, PW_DM)
assert topo.standalone.config.set('nsslapd-accesslog-maxlogsize', '100')
assert topo.standalone.config.set('nsslapd-accesslog-logrotationtimeunit', 'day')
assert topo.standalone.config.set('nsslapd-accesslog-level', '256')
topo.standalone.restart()
subprocess.call(['dd', 'if=/dev/zero', 'of={}/foo2'.format(topo.standalone.ds_paths.log_dir), 'bs=1M', 'count={}'.format(HALF_THR_FILL_SIZE)])
# Verify that verbose logging was set to default level
_witherrorlog(topo, 'temporarily setting error loglevel to the default level', 10)
> assert LOG_DEFAULT == int(re.findall(r'nsslapd-errorlog-level: \d+', str(
topo.standalone.search_s('cn=config', ldap.SCOPE_SUBTREE, '(objectclass=*)', ['nsslapd-errorlog-level'])))[0].split(' ')[1])
E assert 16384 == 8
E +16384
E -8

suites/disk_monitoring/disk_monitoring_test.py:344: AssertionError
------------------------------Captured stderr call------------------------------
10+0 records in 10+0 records out 10485760 bytes (10 MB, 10 MiB) copied, 0.00834667 s, 1.3 GB/s
Failed suites/disk_monitoring/disk_monitoring_test.py::test_operation_with_nsslapd_disk_monitoring_logging_critical_off_below_half_of_the_threshold 113.51
topo = <lib389.topologies.TopologyMain object at 0x7f91e28721f0>, setup = None
reset_logs = None

@disk_monitoring_ack
def test_operation_with_nsslapd_disk_monitoring_logging_critical_off_below_half_of_the_threshold(topo, setup, reset_logs):
"""Verify operation with nsslapd-disk-monitoring-logging-critical: off below 1/2 of the threshold
Verify shutdown
Recovery and setup

:id: 9d4c7d48-fe9e-11e8-b5d6-8c16451d917b
:setup: Standalone
:steps:
1. Verify that DS goes into shutdown mode
2. Verifying that DS has been shut down after the grace period
3. Verify logging enabled
4. Create rotated logfile
5. Enable verbose logging
:expectedresults:
1. Should Success
2. Should Success
3. Should Success
4. Should Success
5. Should Success
"""
assert topo.standalone.config.set('nsslapd-disk-monitoring', 'on')
assert topo.standalone.config.set('nsslapd-disk-monitoring-logging-critical', 'off')
topo.standalone.restart()
# Verify that DS goes into shutdown mode
if float(THRESHOLD) > FULL_THR_FILL_SIZE:
FULL_THR_FILL_SIZE_new = FULL_THR_FILL_SIZE + round(float(THRESHOLD) - FULL_THR_FILL_SIZE)
subprocess.call(['dd', 'if=/dev/zero', 'of={}/foo'.format(topo.standalone.ds_paths.log_dir), 'bs=1M', 'count={}'.format(FULL_THR_FILL_SIZE_new)])
else:
subprocess.call(['dd', 'if=/dev/zero', 'of={}/foo'.format(topo.standalone.ds_paths.log_dir), 'bs=1M', 'count={}'.format(FULL_THR_FILL_SIZE)])
# Increased sleep to avoid failure
_witherrorlog(topo, 'is too far below the threshold', 100)
_witherrorlog(topo, 'Signaling slapd for shutdown', 90)
# Verifying that DS has been shut down after the grace period
time.sleep(2)
assert topo.standalone.status() == False
# free_space
os.remove('{}/foo'.format(topo.standalone.ds_paths.log_dir))
open('{}/errors'.format(topo.standalone.ds_paths.log_dir), 'w').close()
# StartSlapd
topo.standalone.start()
# verify logging enabled
assert topo.standalone.config.get_attr_val_utf8('nsslapd-accesslog-logging-enabled') == 'on'
assert topo.standalone.config.get_attr_val_utf8('nsslapd-errorlog-logging-enabled') == 'on'
with open(topo.standalone.errlog, 'r') as study: study = study.read()
assert 'disabling access and audit logging' not in study
assert topo.standalone.config.set('nsslapd-accesslog-maxlogsize', '1')
assert topo.standalone.config.set('nsslapd-accesslog-logrotationtimeunit', 'minute')
assert topo.standalone.config.set('nsslapd-accesslog-level', '772')
topo.standalone.restart()
# create rotated logfile
users = UserAccounts(topo.standalone, DEFAULT_SUFFIX)
for i in range(10):
user_properties = {
'uid': 'cn=anuj{}'.format(i),
'cn': 'cn=anuj{}'.format(i),
'sn': 'cn=anuj{}'.format(i),
'userPassword': "Itsme123",
'uidNumber': '1{}'.format(i),
'gidNumber': '2{}'.format(i),
'homeDirectory': '/home/{}'.format(i)
}
> users.create(properties=user_properties)

suites/disk_monitoring/disk_monitoring_test.py:422:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:1228: in create
return co.create(rdn, properties, self._basedn)
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:985: in create
return self._create(rdn, properties, basedn, ensure=False)
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:960: in _create
self._instance.add_ext_s(e, serverctrls=self._server_controls, clientctrls=self._client_controls, escapehatch='i am sure')
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:170: in inner
return f(ent.dn, ent.toTupleList(), *args[2:])
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:425: in add_ext_s
resp_type, resp_data, resp_msgid, resp_ctrls = self.result3(msgid,all=1,timeout=self.timeout)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:764: in result3
resp_type, resp_data, resp_msgid, decoded_resp_ctrls, retoid, retval = self.result4(
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:774: in result4
ldap_result = self._ldap_call(self._l.result4,msgid,all,timeout,add_ctrls,add_intermediates,add_extop)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340: in _ldap_call
reraise(exc_type, exc_value, exc_traceback)
/usr/lib64/python3.9/site-packages/ldap/compat.py:46: in reraise
raise exc_value
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91e2872e50>
func = <built-in method result4 of LDAP object at 0x7f91e435b9f0>
args = (5, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.ALREADY_EXISTS: {'msgtype': 105, 'msgid': 5, 'result': 68, 'desc': 'Already exists', 'ctrls': []}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: ALREADY_EXISTS
------------------------------Captured stderr call------------------------------
30+0 records in 30+0 records out 31457280 bytes (31 MB, 30 MiB) copied, 0.0205397 s, 1.5 GB/s
Failed suites/fourwaymmr/fourwaymmr_test.py::test_replica_backup_and_restore 58.01
topo_m4 = <lib389.topologies.TopologyMain object at 0x7f91e514ed00>

@pytest.mark.bz830335
def test_replica_backup_and_restore(topo_m4):
"""Test Backup and restore

:id: 5ad1b85c-e765-11e8-9668-8c16451d917b
:setup: standalone
:steps:
1. Add entries
2. Take backup db2ldif on supplier1
3. Delete entries on supplier1
4. Restore entries ldif2db
5. Check entries
:expected results:
1. Should success
2. Should success
3. Should success
4. Should success
5. Should success
"""
# Testing bug #830335: Taking a replica backup and Restore on M1 after deleting few entries from M1 nad M2
repl = ReplicationManager(DEFAULT_SUFFIX)
users = UserAccounts(topo_m4.ms["supplier3"], DEFAULT_SUFFIX)
for i in range(20, 25):
users.create_test_user(uid=i)
time.sleep(1)
repl.wait_for_replication(topo_m4.ms["supplier1"], topo_m4.ms["supplier2"])
repl.test_replication(topo_m4.ms["supplier1"], topo_m4.ms["supplier2"], 30)
topo_m4.ms["supplier1"].stop()
topo_m4.ms["supplier1"].db2ldif(
bename=DEFAULT_BENAME,
suffixes=[DEFAULT_SUFFIX],
excludeSuffixes=[],
encrypt=False,
repl_data=True,
outputfile="/tmp/output_file",
)
topo_m4.ms["supplier1"].start()
for i in users.list(): topo_m4.ms["supplier1"].delete_s(i.dn)
repl.wait_for_replication(topo_m4.ms["supplier1"], topo_m4.ms["supplier2"])
repl.test_replication(topo_m4.ms["supplier1"], topo_m4.ms["supplier2"], 30)
topo_m4.ms["supplier1"].stop()
topo_m4.ms["supplier1"].ldif2db(
bename=None,
excludeSuffixes=None,
encrypt=False,
suffixes=[DEFAULT_SUFFIX],
import_file="/tmp/output_file",
)
topo_m4.ms["supplier1"].start()
for i in range(20, 25):
users.create_test_user(uid=i)
time.sleep(1)
> repl.wait_for_replication(topo_m4.ms["supplier1"], topo_m4.ms["supplier2"])

suites/fourwaymmr/fourwaymmr_test.py:475:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.replica.ReplicationManager object at 0x7f91d3799610>
from_instance = <lib389.DirSrv object at 0x7f91e514e0d0>
to_instance = <lib389.DirSrv object at 0x7f91cfcd8eb0>, timeout = 20

def wait_for_replication(self, from_instance, to_instance, timeout=20):
"""Wait for a replication event to occur from instance to instance. This
shows some point of synchronisation has occured.

:param from_instance: The instance whos state we we want to check from
:type from_instance: lib389.DirSrv
:param to_instance: The instance whos state we want to check matches from.
:type to_instance: lib389.DirSrv
:param timeout: Fail after timeout seconds.
:type timeout: int

"""
# Touch something then wait_for_replication.
from_groups = Groups(from_instance, basedn=self._suffix, rdn=None)
to_groups = Groups(to_instance, basedn=self._suffix, rdn=None)
from_group = from_groups.get('replication_managers')
to_group = to_groups.get('replication_managers')

change = str(uuid.uuid4())

from_group.replace('description', change)

for i in range(0, timeout):
desc = to_group.get_attr_val_utf8('description')
if change == desc:
self._log.info("SUCCESS: Replication from %s to %s is working" % (from_instance.ldapuri, to_instance.ldapuri))
return True
self._log.info("Retry: Replication from %s to %s is NOT working (expect %s / got description=%s)" % (from_instance.ldapuri, to_instance.ldapuri, change, desc))
time.sleep(1)
self._log.info("FAIL: Replication from %s to %s is NOT working (expect %s / got description=%s)" % (from_instance.ldapuri, to_instance.ldapuri, change, desc))
> raise Exception("Replication did not sync in time!")
E Exception: Replication did not sync in time!

/usr/local/lib/python3.9/site-packages/lib389/replica.py:2501: Exception
------------------------------Captured stderr call------------------------------
ldiffile: /tmp/output_file [17/Aug/2021:22:36:43.755802030 -0400] - INFO - slapd_exemode_ldif2db - Backend Instance: userRoot
-------------------------------Captured log call--------------------------------
INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 32a088d9-93eb-4bb1-8785-aa6596d8ef1c / got description=4c23f310-bdab-4ca0-bcfe-2434bbc46270) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect ccafc308-6c3e-45b7-a09a-39febc44d3ac / got description=32a088d9-93eb-4bb1-8785-aa6596d8ef1c) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 0c14449c-5f67-48a6-95a2-1350a76899fe / got description=ccafc308-6c3e-45b7-a09a-39febc44d3ac) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect b91a985e-5f2b-432e-89e3-96e71dae55b3 / got description=0c14449c-5f67-48a6-95a2-1350a76899fe) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 77f04366-0e12-4cb2-b5dc-8b6a03c27df8 / got description=b91a985e-5f2b-432e-89e3-96e71dae55b3) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 77f04366-0e12-4cb2-b5dc-8b6a03c27df8 / got description=b91a985e-5f2b-432e-89e3-96e71dae55b3) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 77f04366-0e12-4cb2-b5dc-8b6a03c27df8 / got description=b91a985e-5f2b-432e-89e3-96e71dae55b3) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 77f04366-0e12-4cb2-b5dc-8b6a03c27df8 / got description=b91a985e-5f2b-432e-89e3-96e71dae55b3) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 77f04366-0e12-4cb2-b5dc-8b6a03c27df8 / got description=b91a985e-5f2b-432e-89e3-96e71dae55b3) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 77f04366-0e12-4cb2-b5dc-8b6a03c27df8 / got description=b91a985e-5f2b-432e-89e3-96e71dae55b3) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 77f04366-0e12-4cb2-b5dc-8b6a03c27df8 / got description=b91a985e-5f2b-432e-89e3-96e71dae55b3) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 77f04366-0e12-4cb2-b5dc-8b6a03c27df8 / got description=b91a985e-5f2b-432e-89e3-96e71dae55b3) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 77f04366-0e12-4cb2-b5dc-8b6a03c27df8 / got description=b91a985e-5f2b-432e-89e3-96e71dae55b3) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 77f04366-0e12-4cb2-b5dc-8b6a03c27df8 / got description=b91a985e-5f2b-432e-89e3-96e71dae55b3) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 77f04366-0e12-4cb2-b5dc-8b6a03c27df8 / got description=b91a985e-5f2b-432e-89e3-96e71dae55b3) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 77f04366-0e12-4cb2-b5dc-8b6a03c27df8 / got description=b91a985e-5f2b-432e-89e3-96e71dae55b3) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 77f04366-0e12-4cb2-b5dc-8b6a03c27df8 / got description=b91a985e-5f2b-432e-89e3-96e71dae55b3) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 77f04366-0e12-4cb2-b5dc-8b6a03c27df8 / got description=b91a985e-5f2b-432e-89e3-96e71dae55b3) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 77f04366-0e12-4cb2-b5dc-8b6a03c27df8 / got description=b91a985e-5f2b-432e-89e3-96e71dae55b3) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 77f04366-0e12-4cb2-b5dc-8b6a03c27df8 / got description=b91a985e-5f2b-432e-89e3-96e71dae55b3) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 77f04366-0e12-4cb2-b5dc-8b6a03c27df8 / got description=b91a985e-5f2b-432e-89e3-96e71dae55b3) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 77f04366-0e12-4cb2-b5dc-8b6a03c27df8 / got description=b91a985e-5f2b-432e-89e3-96e71dae55b3) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 77f04366-0e12-4cb2-b5dc-8b6a03c27df8 / got description=b91a985e-5f2b-432e-89e3-96e71dae55b3) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 77f04366-0e12-4cb2-b5dc-8b6a03c27df8 / got description=b91a985e-5f2b-432e-89e3-96e71dae55b3) INFO lib389.replica:replica.py:2500 FAIL: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 77f04366-0e12-4cb2-b5dc-8b6a03c27df8 / got description=b91a985e-5f2b-432e-89e3-96e71dae55b3)
Failed suites/gssapi/simple_gssapi_test.py::test_gssapi_bind 18.87
topology_st_gssapi = <lib389.topologies.TopologyMain object at 0x7f91d23b0220>
testuser = <lib389.idm.user.UserAccount object at 0x7f91d23b0670>

@gssapi_ack
def test_gssapi_bind(topology_st_gssapi, testuser):
"""Test that we can bind with GSSAPI

:id: 894a4c27-3d4c-4ba3-aa33-2910032e3783

:setup: standalone gssapi instance

:steps:
1. Bind with sasl/gssapi
:expectedresults:
1. Bind succeeds

"""
> conn = testuser.bind_gssapi()

suites/gssapi/simple_gssapi_test.py:53:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/idm/account.py:258: in bind_gssapi
inst_clone.open(saslmethod='gssapi')
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:1007: in open
self.sasl_interactive_bind_s("", sasl_auth, escapehatch='i am sure')
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:476: in sasl_interactive_bind_s
return self._ldap_call(self._l.sasl_interactive_bind_s,who,auth,RequestControlTuples(serverctrls),RequestControlTuples(clientctrls),sasl_flags)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340: in _ldap_call
reraise(exc_type, exc_value, exc_traceback)
/usr/lib64/python3.9/site-packages/ldap/compat.py:46: in reraise
raise exc_value
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d23b0f40>
func = <built-in method sasl_interactive_bind_s of LDAP object at 0x7f91d2659c30>
args = ('', <ldap.sasl.gssapi object at 0x7f91d2659e20>, None, None, 2)
kwargs = {}, diagnostic_message_success = None, exc_type = None
exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.INVALID_CREDENTIALS: {'result': 49, 'desc': 'Invalid credentials', 'ctrls': []}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: INVALID_CREDENTIALS
-----------------------------Captured stdout setup------------------------------
Kerberos primary password: ebkPHTSo05AqDjVw0jUX8RgeqiUA02KIX8mgArDWO9s1ctlhI.gx.3SRmYyAeChIC Loading random data Initializing database '/var/kerberos/krb5kdc/principal' for realm 'HOSTED.UPSHIFT.RDU2.REDHAT.COM', master key name 'K/M@HOSTED.UPSHIFT.RDU2.REDHAT.COM' Authenticating as principal root/admin@HOSTED.UPSHIFT.RDU2.REDHAT.COM with password. Principal "ldap/ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com@HOSTED.UPSHIFT.RDU2.REDHAT.COM" created. Authenticating as principal root/admin@HOSTED.UPSHIFT.RDU2.REDHAT.COM with password. K/M@HOSTED.UPSHIFT.RDU2.REDHAT.COM kadmin/admin@HOSTED.UPSHIFT.RDU2.REDHAT.COM kadmin/changepw@HOSTED.UPSHIFT.RDU2.REDHAT.COM krbtgt/HOSTED.UPSHIFT.RDU2.REDHAT.COM@HOSTED.UPSHIFT.RDU2.REDHAT.COM ldap/ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com@HOSTED.UPSHIFT.RDU2.REDHAT.COM Authenticating as principal root/admin@HOSTED.UPSHIFT.RDU2.REDHAT.COM with password. Entry for principal ldap/ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com@HOSTED.UPSHIFT.RDU2.REDHAT.COM with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal ldap/ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com@HOSTED.UPSHIFT.RDU2.REDHAT.COM with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab. Authenticating as principal root/admin@HOSTED.UPSHIFT.RDU2.REDHAT.COM with password. Principal "testuser@HOSTED.UPSHIFT.RDU2.REDHAT.COM" created. Authenticating as principal root/admin@HOSTED.UPSHIFT.RDU2.REDHAT.COM with password. K/M@HOSTED.UPSHIFT.RDU2.REDHAT.COM kadmin/admin@HOSTED.UPSHIFT.RDU2.REDHAT.COM kadmin/changepw@HOSTED.UPSHIFT.RDU2.REDHAT.COM krbtgt/HOSTED.UPSHIFT.RDU2.REDHAT.COM@HOSTED.UPSHIFT.RDU2.REDHAT.COM ldap/ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com@HOSTED.UPSHIFT.RDU2.REDHAT.COM testuser@HOSTED.UPSHIFT.RDU2.REDHAT.COM Authenticating as principal root/admin@HOSTED.UPSHIFT.RDU2.REDHAT.COM with password. Entry for principal testuser@HOSTED.UPSHIFT.RDU2.REDHAT.COM with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/tmp/testuser.keytab. Entry for principal testuser@HOSTED.UPSHIFT.RDU2.REDHAT.COM with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/tmp/testuser.keytab.
-----------------------------Captured stderr setup------------------------------
No policy specified for ldap/ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com@HOSTED.UPSHIFT.RDU2.REDHAT.COM; defaulting to no policy No policy specified for testuser@HOSTED.UPSHIFT.RDU2.REDHAT.COM; defaulting to no policy
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Failed suites/gssapi/simple_gssapi_test.py::test_support_mech 0.35
topology_st_gssapi = <lib389.topologies.TopologyMain object at 0x7f91d23b0220>
testuser = <lib389.idm.user.UserAccount object at 0x7f91d23b0670>

@gssapi_ack
def test_support_mech(topology_st_gssapi, testuser):
"""Test allowed sasl mechs works when GSSAPI is allowed

:id: 6ec80aca-00c4-4141-b96b-3ae8837fc751

:setup: standalone gssapi instance

:steps:
1. Add GSSAPI to allowed sasl mechanisms.
2. Attempt to bind
:expectedresults:
1. The allowed mechs are changed.
2. The bind succeeds.
"""
topology_st_gssapi.standalone.config.set('nsslapd-allowed-sasl-mechanisms', 'GSSAPI EXTERNAL ANONYMOUS')
> conn = testuser.bind_gssapi()

suites/gssapi/simple_gssapi_test.py:125:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/idm/account.py:258: in bind_gssapi
inst_clone.open(saslmethod='gssapi')
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:1007: in open
self.sasl_interactive_bind_s("", sasl_auth, escapehatch='i am sure')
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:476: in sasl_interactive_bind_s
return self._ldap_call(self._l.sasl_interactive_bind_s,who,auth,RequestControlTuples(serverctrls),RequestControlTuples(clientctrls),sasl_flags)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340: in _ldap_call
reraise(exc_type, exc_value, exc_traceback)
/usr/lib64/python3.9/site-packages/ldap/compat.py:46: in reraise
raise exc_value
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d23b0310>
func = <built-in method sasl_interactive_bind_s of LDAP object at 0x7f91d015b390>
args = ('', <ldap.sasl.gssapi object at 0x7f91d015b970>, None, None, 2)
kwargs = {}, diagnostic_message_success = None, exc_type = None
exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.INVALID_CREDENTIALS: {'result': 49, 'desc': 'Invalid credentials', 'ctrls': []}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: INVALID_CREDENTIALS
Failed suites/healthcheck/health_repl_test.py::test_healthcheck_replication_out_of_sync_broken 54.02
topology_m3 = <lib389.topologies.TopologyMain object at 0x7f91d2f3e460>

@pytest.mark.ds50873
@pytest.mark.bz1685160
@pytest.mark.xfail(ds_is_older("1.4.1"), reason="Not implemented")
def test_healthcheck_replication_out_of_sync_broken(topology_m3):
"""Check if HealthCheck returns DSREPLLE0001 code

:id: b5ae7cae-de0f-4206-95a4-f81538764bea
:setup: 3 MMR topology
:steps:
1. Create a 3 suppliers full-mesh topology, on M2 and M3 don’t set nsds5BeginReplicaRefresh:start
2. Perform modifications on M1
3. Use HealthCheck without --json option
4. Use HealthCheck with --json option
:expectedresults:
1. Success
2. Success
3. Healthcheck reports DSREPLLE0001 code and related details
4. Healthcheck reports DSREPLLE0001 code and related details
"""

RET_CODE = 'DSREPLLE0001'

M1 = topology_m3.ms['supplier1']
M2 = topology_m3.ms['supplier2']
M3 = topology_m3.ms['supplier3']

log.info('Break supplier2 and supplier3')
replicas = Replicas(M2)
replica = replicas.list()[0]
replica.replace('nsds5ReplicaBindDNGroup', 'cn=repl')

replicas = Replicas(M3)
replica = replicas.list()[0]
replica.replace('nsds5ReplicaBindDNGroup', 'cn=repl')

log.info('Perform update on supplier1')
test_users_m1 = UserAccounts(M1, DEFAULT_SUFFIX)
test_users_m1.create_test_user(1005, 2000)

> run_healthcheck_and_flush_log(topology_m3, M1, RET_CODE, json=False)

suites/healthcheck/health_repl_test.py:288:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

topology = <lib389.topologies.TopologyMain object at 0x7f91d2f3e460>
instance = <lib389.DirSrv object at 0x7f91d2700280>
searched_code = 'DSREPLLE0001', json = False, searched_code2 = None

def run_healthcheck_and_flush_log(topology, instance, searched_code, json, searched_code2=None):
args = FakeArgs()
args.instance = instance.serverid
args.verbose = instance.verbose
args.list_errors = False
args.list_checks = False
args.check = ['replication', 'backends:userroot:cl_trimming']
args.dry_run = False

if json:
log.info('Use healthcheck with --json option')
args.json = json
health_check_run(instance, topology.logcap.log, args)
assert topology.logcap.contains(searched_code)
log.info('Healthcheck returned searched code: %s' % searched_code)

if searched_code2 is not None:
assert topology.logcap.contains(searched_code2)
log.info('Healthcheck returned searched code: %s' % searched_code2)
else:
log.info('Use healthcheck without --json option')
args.json = json
health_check_run(instance, topology.logcap.log, args)
> assert topology.logcap.contains(searched_code)
E AssertionError: assert False
E + where False = <bound method LogCapture.contains of <LogCapture (NOTSET)>>('DSREPLLE0001')
E + where <bound method LogCapture.contains of <LogCapture (NOTSET)>> = <LogCapture (NOTSET)>.contains
E + where <LogCapture (NOTSET)> = <lib389.topologies.TopologyMain object at 0x7f91d2f3e460>.logcap

suites/healthcheck/health_repl_test.py:52: AssertionError
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39001, 'ldap-secureport': 63701, 'server-id': 'supplier1', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier2 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39002, 'ldap-secureport': 63702, 'server-id': 'supplier2', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier3 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39003, 'ldap-secureport': 63703, 'server-id': 'supplier3', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.topologies:topologies.py:145 Creating replication topology. INFO lib389.topologies:topologies.py:159 Joining supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2084 SUCCESS: bootstrap to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 completed INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is was created INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is was created INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect e046d857-864d-454f-a524-657051e3ce9c / got description=None) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect fc8ca222-0049-487c-a8c3-7980cda7a172 / got description=e046d857-864d-454f-a524-657051e3ce9c) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is working INFO lib389.replica:replica.py:2153 SUCCESS: joined supplier from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 INFO lib389.topologies:topologies.py:159 Joining supplier supplier3 to supplier1 ... INFO lib389.replica:replica.py:2084 SUCCESS: bootstrap to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 completed INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 is was created INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is was created INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 is NOT working (expect 12f20ae7-9f5a-47e6-89fa-306c6769fb43 / got description=fc8ca222-0049-487c-a8c3-7980cda7a172) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect f441be10-2ea4-4136-896d-e03f5ff6dae4 / got description=12f20ae7-9f5a-47e6-89fa-306c6769fb43) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is working INFO lib389.replica:replica.py:2153 SUCCESS: joined supplier from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier1 to supplier2 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier1 to supplier3 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier2 to supplier3 ... INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 is was created INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier3 to supplier1 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier3 to supplier2 ... INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is was created
-------------------------------Captured log call--------------------------------
INFO LogCapture:health.py:94 Beginning lint report, this could take a while ... INFO LogCapture:health.py:99 Checking replication:agmts_status ... INFO LogCapture:health.py:99 Checking replication:conflicts ... INFO LogCapture:health.py:99 Checking backends:userroot:cl_trimming ... INFO LogCapture:health.py:106 Healthcheck complete. INFO LogCapture:health.py:119 1 Issue found! Generating report ... INFO LogCapture:health.py:45 [1] DS Lint Error: DSCLLE0001 INFO LogCapture:health.py:46 -------------------------------------------------------------------------------- INFO LogCapture:health.py:47 Severity: LOW INFO LogCapture:health.py:49 Check: backends:userroot::cl_trimming INFO LogCapture:health.py:50 Affects: INFO LogCapture:health.py:52 -- Replication INFO LogCapture:health.py:52 -- Changelog INFO LogCapture:health.py:52 -- Backends INFO LogCapture:health.py:53 Details: INFO LogCapture:health.py:54 ----------- INFO LogCapture:health.py:55 The replication changelog does have any kind of trimming configured. This will lead to the changelog size growing indefinitely. INFO LogCapture:health.py:56 Resolution: INFO LogCapture:health.py:57 ----------- INFO LogCapture:health.py:58 Configure changelog trimming, preferably by setting the maximum age of a changelog record. Here is an example: # dsconf slapd-supplier1 replication set-changelog --suffix YOUR_SUFFIX --max-age 30d INFO LogCapture:health.py:124 ===== End Of Report (1 Issue found) =====
Failed suites/healthcheck/health_security_test.py::test_healthcheck_certif_expiring_within_30d 12.66
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d2384430>

@pytest.mark.ds50873
@pytest.mark.bz1685160
@pytest.mark.xfail(ds_is_older("1.4.1"), reason="Not implemented")
def test_healthcheck_certif_expiring_within_30d(topology_st):
"""Check if HealthCheck returns DSCERTLE0001 code

:id: c2165032-88ba-4978-a4ca-2fecfd8c35d8
:setup: Standalone instance
:steps:
1. Create DS instance
2. Use libfaketime to tell the process the date is within 30 days before certificate expiration
3. Use HealthCheck without --json option
4. Use HealthCheck with --json option
:expectedresults:
1. Success
2. Success
3. Healthcheck reports DSCERTLE0001 code and related details
4. Healthcheck reports DSCERTLE0001 code and related details
"""

RET_CODE = 'DSCERTLE0001'

standalone = topology_st.standalone

standalone.enable_tls()

# Cert is valid two years from today, so we count the date that is within 30 days before certificate expiration
date_future = datetime.now() + timedelta(days=701)

with libfaketime.fake_time(date_future):
time.sleep(1)
> run_healthcheck_and_flush_log(topology_st, standalone, RET_CODE, json=False)

suites/healthcheck/health_security_test.py:304:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

topology = <lib389.topologies.TopologyMain object at 0x7f91d2384430>
instance = <lib389.DirSrv object at 0x7f91d2259190>
searched_code = 'DSCERTLE0001', json = False, searched_code2 = None

def run_healthcheck_and_flush_log(topology, instance, searched_code, json, searched_code2=None):
args = FakeArgs()
args.instance = instance.serverid
args.verbose = instance.verbose
args.list_errors = False
args.list_checks = False
args.check = ['config', 'encryption', 'tls', 'fschecks']
args.dry_run = False

if json:
log.info('Use healthcheck with --json option')
args.json = json
health_check_run(instance, topology.logcap.log, args)
assert topology.logcap.contains(searched_code)
log.info('Healthcheck returned searched code: %s' % searched_code)

if searched_code2 is not None:
assert topology.logcap.contains(searched_code2)
log.info('Healthcheck returned searched code: %s' % searched_code2)
else:
log.info('Use healthcheck without --json option')
args.json = json
health_check_run(instance, topology.logcap.log, args)
> assert topology.logcap.contains(searched_code)
E AssertionError: assert False
E + where False = <bound method LogCapture.contains of <LogCapture (NOTSET)>>('DSCERTLE0001')
E + where <bound method LogCapture.contains of <LogCapture (NOTSET)>> = <LogCapture (NOTSET)>.contains
E + where <LogCapture (NOTSET)> = <lib389.topologies.TopologyMain object at 0x7f91d2384430>.logcap

suites/healthcheck/health_security_test.py:67: AssertionError
-------------------------------Captured log call--------------------------------
INFO LogCapture:health.py:94 Beginning lint report, this could take a while ... INFO LogCapture:health.py:99 Checking config:hr_timestamp ... INFO LogCapture:health.py:99 Checking config:passwordscheme ... INFO LogCapture:health.py:99 Checking encryption:check_tls_version ... INFO LogCapture:health.py:99 Checking tls:certificate_expiration ... INFO LogCapture:health.py:99 Checking fschecks:file_perms ... INFO LogCapture:health.py:106 Healthcheck complete. INFO LogCapture:health.py:111 No issues found.
Failed suites/healthcheck/health_security_test.py::test_healthcheck_certif_expired 14.18
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d2384430>

@pytest.mark.ds50873
@pytest.mark.bz1685160
@pytest.mark.xfail(ds_is_older("1.4.1"), reason="Not implemented")
def test_healthcheck_certif_expired(topology_st):
"""Check if HealthCheck returns DSCERTLE0002 code

:id: ceff2c22-62c0-4fd9-b737-930a88458d68
:setup: Standalone instance
:steps:
1. Create DS instance
2. Use libfaketime to tell the process the date is after certificate expiration
3. Use HealthCheck without --json option
4. Use HealthCheck with --json option
:expectedresults:
1. Success
2. Success
3. Healthcheck reports DSCERTLE0002 code and related details
4. Healthcheck reports DSCERTLE0002 code and related details
"""

RET_CODE = 'DSCERTLE0002'

standalone = topology_st.standalone

standalone.enable_tls()

# Cert is valid two years from today, so we count the date that is after expiration
date_future = datetime.now() + timedelta(days=731)

with libfaketime.fake_time(date_future):
time.sleep(1)
> run_healthcheck_and_flush_log(topology_st, standalone, RET_CODE, json=False)

suites/healthcheck/health_security_test.py:343:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

topology = <lib389.topologies.TopologyMain object at 0x7f91d2384430>
instance = <lib389.DirSrv object at 0x7f91d2259190>
searched_code = 'DSCERTLE0002', json = False, searched_code2 = None

def run_healthcheck_and_flush_log(topology, instance, searched_code, json, searched_code2=None):
args = FakeArgs()
args.instance = instance.serverid
args.verbose = instance.verbose
args.list_errors = False
args.list_checks = False
args.check = ['config', 'encryption', 'tls', 'fschecks']
args.dry_run = False

if json:
log.info('Use healthcheck with --json option')
args.json = json
health_check_run(instance, topology.logcap.log, args)
assert topology.logcap.contains(searched_code)
log.info('Healthcheck returned searched code: %s' % searched_code)

if searched_code2 is not None:
assert topology.logcap.contains(searched_code2)
log.info('Healthcheck returned searched code: %s' % searched_code2)
else:
log.info('Use healthcheck without --json option')
args.json = json
health_check_run(instance, topology.logcap.log, args)
> assert topology.logcap.contains(searched_code)
E AssertionError: assert False
E + where False = <bound method LogCapture.contains of <LogCapture (NOTSET)>>('DSCERTLE0002')
E + where <bound method LogCapture.contains of <LogCapture (NOTSET)>> = <LogCapture (NOTSET)>.contains
E + where <LogCapture (NOTSET)> = <lib389.topologies.TopologyMain object at 0x7f91d2384430>.logcap

suites/healthcheck/health_security_test.py:67: AssertionError
-------------------------------Captured log call--------------------------------
INFO LogCapture:health.py:94 Beginning lint report, this could take a while ... INFO LogCapture:health.py:99 Checking config:hr_timestamp ... INFO LogCapture:health.py:99 Checking config:passwordscheme ... INFO LogCapture:health.py:99 Checking encryption:check_tls_version ... INFO LogCapture:health.py:99 Checking tls:certificate_expiration ... INFO LogCapture:health.py:99 Checking fschecks:file_perms ... INFO LogCapture:health.py:106 Healthcheck complete. INFO LogCapture:health.py:111 No issues found.
Failed suites/import/import_test.py::test_fast_slow_import 69.06
topo = <lib389.topologies.TopologyMain object at 0x7f91d2738310>
_toggle_private_import_mem = None, _import_clean = None

def test_fast_slow_import(topo, _toggle_private_import_mem, _import_clean):
"""With nsslapd-db-private-import-mem: on is faster import.

:id: 3044331c-9c0e-11ea-ac9f-8c16451d917b
:setup: Standalone Instance
:steps:
1. Let's set nsslapd-db-private-import-mem:on, nsslapd-import-cache-autosize: 0
2. Measure offline import time duration total_time1
3. Now nsslapd-db-private-import-mem:off
4. Measure offline import time duration total_time2
5. (total_time2 - total_time1) < 1
6. Set nsslapd-db-private-import-mem:on, nsslapd-import-cache-autosize: -1
7. Measure offline import time duration total_time1
8. Now nsslapd-db-private-import-mem:off
9. Measure offline import time duration total_time2
10. (total_time2 - total_time1) < 1
:expected results:
1. Operation successful
2. Operation successful
3. Operation successful
4. Operation successful
5. Operation successful
6. Operation successful
7. Operation successful
8. Operation successful
9. Operation successful
10. Operation successful
"""
# Let's set nsslapd-db-private-import-mem:on, nsslapd-import-cache-autosize: 0
config = LDBMConfig(topo.standalone)
# Measure offline import time duration total_time1
total_time1 = _import_offline(topo, 1000)
# Now nsslapd-db-private-import-mem:off
config.replace('nsslapd-db-private-import-mem', 'off')
accounts = Accounts(topo.standalone, DEFAULT_SUFFIX)
for i in accounts.filter('(uid=*)'):
UserAccount(topo.standalone, i.dn).delete()
# Measure offline import time duration total_time2
total_time2 = _import_offline(topo, 1000)
# total_time1 < total_time2
log.info("total_time1 = %f" % total_time1)
log.info("total_time2 = %f" % total_time2)
assert (total_time2 - total_time1) < 1

# Set nsslapd-db-private-import-mem:on, nsslapd-import-cache-autosize: -1
config.replace_many(
('nsslapd-db-private-import-mem', 'on'),
('nsslapd-import-cache-autosize', '-1'))
for i in accounts.filter('(uid=*)'):
UserAccount(topo.standalone, i.dn).delete()
# Measure offline import time duration total_time1
total_time1 = _import_offline(topo, 1000)
# Now nsslapd-db-private-import-mem:off
config.replace('nsslapd-db-private-import-mem', 'off')
for i in accounts.filter('(uid=*)'):
UserAccount(topo.standalone, i.dn).delete()
# Measure offline import time duration total_time2
total_time2 = _import_offline(topo, 1000)
# total_time1 < total_time2
log.info("toral_time1 = %f" % total_time1)
log.info("total_time2 = %f" % total_time2)
> assert (total_time2 - total_time1) < 1
E assert (3.9960930347442627 - 2.676828384399414) < 1

suites/import/import_test.py:423: AssertionError
-------------------------------Captured log call--------------------------------
INFO tests.suites.import.import_test:import_test.py:402 total_time1 = 2.475179 INFO tests.suites.import.import_test:import_test.py:403 total_time2 = 2.584448 INFO tests.suites.import.import_test:import_test.py:421 toral_time1 = 2.676828 INFO tests.suites.import.import_test:import_test.py:422 total_time2 = 3.996093
Failed suites/paged_results/paged_results_test.py::test_search_dns_ip_aci[fqdn] 5.70
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d34b46d0>
create_user = <lib389.idm.user.UserAccount object at 0x7f91d3197400>
aci_subject = 'dns = "localhost.localdomain"'

@pytest.mark.flaky(max_runs=2, min_passes=1)
@pytest.mark.parametrize('aci_subject',
('dns = "{}"'.format(HOSTNAME),
'ip = "{}"'.format(IP_ADDRESS)),
ids=['fqdn','ip'])
def test_search_dns_ip_aci(topology_st, create_user, aci_subject):
"""Verify that after performing multiple simple paged searches
to completion on the suffix with DNS or IP based ACI

:id: bbfddc46-a8c8-49ae-8c90-7265d05b22a9
:customerscenario: True
:parametrized: yes
:setup: Standalone instance, test user for binding,
varying number of users for the search base
:steps:
1. Back up and remove all previous ACI from suffix
2. Add an anonymous ACI for DNS check
3. Bind as test user
4. Search through added users with a simple paged control
5. Perform steps 4 three times in a row
6. Return ACI to the initial state
7. Go through all steps once again, but use IP subject dn
instead of DNS
:expectedresults:
1. Operation should be successful
2. Anonymous ACI should be successfully added
3. Bind should be successful
4. No error happens, all users should be found and sorted
5. Results should remain the same
6. ACI should be successfully returned
7. Results should be the same with ACI with IP subject dn
"""

users_num = 100
page_size = 5
users_list = add_users(topology_st, users_num, DEFAULT_SUFFIX)
search_flt = r'(uid=test*)'
searchreq_attrlist = ['dn', 'sn']

try:
log.info('Back up current suffix ACI')
acis_bck = topology_st.standalone.aci.list(DEFAULT_SUFFIX, ldap.SCOPE_BASE)

log.info('Add test ACI')
ACI_TARGET = '(targetattr != "userPassword")'
ACI_ALLOW = '(version 3.0;acl "Anonymous access within domain"; allow (read,compare,search)'
ACI_SUBJECT = '(userdn = "ldap:///anyone") and (%s);)' % aci_subject
ACI_BODY = ensure_bytes(ACI_TARGET + ACI_ALLOW + ACI_SUBJECT)
topology_st.standalone.modify_s(DEFAULT_SUFFIX, [(ldap.MOD_REPLACE, 'aci', ACI_BODY)])
log.info('Set user bind')
conn = create_user.bind(TEST_USER_PWD, uri=f'ldap://{IP_ADDRESS}:{topology_st.standalone.port}')

log.info('Create simple paged results control instance')
req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='')
controls = [req_ctrl]

log.info('Initiate three searches with a paged results control')
for ii in range(3):
log.info('%d search' % (ii + 1))
all_results = paged_search(conn, DEFAULT_SUFFIX, controls,
search_flt, searchreq_attrlist)
log.info('%d results' % len(all_results))
> assert len(all_results) == len(users_list)
E assert 0 == 100
E +0
E -100

suites/paged_results/paged_results_test.py:576: AssertionError
-------------------------------Captured log call--------------------------------
INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:133 Adding 100 users INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:554 Back up current suffix ACI INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:557 Add test ACI INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:563 Set user bind INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:566 Create simple paged results control instance INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:570 Initiate three searches with a paged results control INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:572 1 search INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:191 Running simple paged result search with - search suffix: dc=example,dc=com; filter: (uid=test*); attr list ['dn', 'sn']; page_size = 5; controls: [<ldap.controls.libldap.SimplePagedResultsControl object at 0x7f91d2b2d400>]. INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:199 Getting page 0 INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:575 0 results INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:580 Restore ACI INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:155 Deleting 100 users
-------------------------------Captured log call--------------------------------
INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:133 Adding 100 users INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:554 Back up current suffix ACI INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:557 Add test ACI INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:563 Set user bind INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:566 Create simple paged results control instance INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:570 Initiate three searches with a paged results control INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:572 1 search INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:191 Running simple paged result search with - search suffix: dc=example,dc=com; filter: (uid=test*); attr list ['dn', 'sn']; page_size = 5; controls: [<ldap.controls.libldap.SimplePagedResultsControl object at 0x7f91d2e538b0>]. INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:199 Getting page 0 INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:575 0 results INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:580 Restore ACI INFO tests.suites.paged_results.paged_results_test:paged_results_test.py:155 Deleting 100 users
Failed suites/setup_ds/remove_test.py::test_basic[True] 12.36
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d247f220>
simple_allocate = True

@pytest.mark.skipif(ds_is_older('1.4.3'), reason="Backend split, lib389 supports only cn=bdb,cn=config...")
@pytest.mark.parametrize("simple_allocate", (True, False))
def test_basic(topology_st, simple_allocate):
"""Check that all DS directories and systemd items were removed

:id: 9e8bbcda-358d-4e9c-a38c-9b4c3b63308e
:parametrized: yes
"""

inst = topology_st.standalone

# FreeIPA uses local_simple_allocate for the removal process
if simple_allocate:
inst = DirSrv(verbose=inst.verbose)
inst.local_simple_allocate(topology_st.standalone.serverid)

remove_ds_instance(inst)

paths = [inst.ds_paths.backup_dir,
inst.ds_paths.cert_dir,
inst.ds_paths.config_dir,
inst.ds_paths.db_dir,
inst.get_changelog_dir(),
inst.ds_paths.ldif_dir,
inst.ds_paths.lock_dir,
inst.ds_paths.log_dir]
for path in paths:
> assert not os.path.exists(path)
E AssertionError: assert not True
E + where True = <function exists at 0x7f91e770f0d0>('/var/log/dirsrv/slapd-standalone1')
E + where <function exists at 0x7f91e770f0d0> = <module 'posixpath' from '/usr/lib64/python3.9/posixpath.py'>.exists
E + where <module 'posixpath' from '/usr/lib64/python3.9/posixpath.py'> = os.path

suites/setup_ds/remove_test.py:62: AssertionError
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Failed suites/setup_ds/remove_test.py::test_basic[False] 11.55
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d3140790>
simple_allocate = False

@pytest.mark.skipif(ds_is_older('1.4.3'), reason="Backend split, lib389 supports only cn=bdb,cn=config...")
@pytest.mark.parametrize("simple_allocate", (True, False))
def test_basic(topology_st, simple_allocate):
"""Check that all DS directories and systemd items were removed

:id: 9e8bbcda-358d-4e9c-a38c-9b4c3b63308e
:parametrized: yes
"""

inst = topology_st.standalone

# FreeIPA uses local_simple_allocate for the removal process
if simple_allocate:
inst = DirSrv(verbose=inst.verbose)
inst.local_simple_allocate(topology_st.standalone.serverid)

remove_ds_instance(inst)

paths = [inst.ds_paths.backup_dir,
inst.ds_paths.cert_dir,
inst.ds_paths.config_dir,
inst.ds_paths.db_dir,
inst.get_changelog_dir(),
inst.ds_paths.ldif_dir,
inst.ds_paths.lock_dir,
inst.ds_paths.log_dir]
for path in paths:
> assert not os.path.exists(path)
E AssertionError: assert not True
E + where True = <function exists at 0x7f91e770f0d0>('/var/log/dirsrv/slapd-standalone1')
E + where <function exists at 0x7f91e770f0d0> = <module 'posixpath' from '/usr/lib64/python3.9/posixpath.py'>.exists
E + where <module 'posixpath' from '/usr/lib64/python3.9/posixpath.py'> = os.path

suites/setup_ds/remove_test.py:62: AssertionError
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Failed tickets/ticket47781_test.py::test_ticket47781 15.43
topology_st = <lib389.topologies.TopologyMain object at 0x7f91e014f280>

def test_ticket47781(topology_st):
"""
Testing for a deadlock after doing an online import of an LDIF with
replication data. The replication agreement should be invalid.
"""

log.info('Testing Ticket 47781 - Testing for deadlock after importing LDIF with replication data')

supplier = topology_st.standalone
repl = ReplicationManager(DEFAULT_SUFFIX)
repl.create_first_supplier(supplier)

properties = {RA_NAME: r'meTo_$host:$port',
RA_BINDDN: defaultProperties[REPLICATION_BIND_DN],
RA_BINDPW: defaultProperties[REPLICATION_BIND_PW],
RA_METHOD: defaultProperties[REPLICATION_BIND_METHOD],
RA_TRANSPORT_PROT: defaultProperties[REPLICATION_TRANSPORT]}
# The agreement should point to a server that does NOT exist (invalid port)
repl_agreement = supplier.agreement.create(suffix=DEFAULT_SUFFIX,
host=supplier.host,
port=5555,
properties=properties)

#
# add two entries
#
log.info('Adding two entries...')

supplier.add_s(Entry(('cn=entry1,dc=example,dc=com', {
'objectclass': 'top person'.split(),
'sn': 'user',
'cn': 'entry1'})))

supplier.add_s(Entry(('cn=entry2,dc=example,dc=com', {
'objectclass': 'top person'.split(),
'sn': 'user',
'cn': 'entry2'})))

#
# export the replication ldif
#
log.info('Exporting replication ldif...')
args = {EXPORT_REPL_INFO: True}
exportTask = Tasks(supplier)
exportTask.exportLDIF(DEFAULT_SUFFIX, None, "/tmp/export.ldif", args)

#
# Restart the server
#
log.info('Restarting server...')
supplier.stop()
supplier.start()

#
# Import the ldif
#
log.info('Import replication LDIF file...')
importTask = Tasks(supplier)
args = {TASK_WAIT: True}
> importTask.importLDIF(DEFAULT_SUFFIX, None, "/tmp/export.ldif", args)

tickets/ticket47781_test.py:85:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.tasks.Tasks object at 0x7f91e016ad00>
suffix = 'dc=example,dc=com', benamebase = None, input_file = '/tmp/export.ldif'
args = {'wait': True}

def importLDIF(self, suffix=None, benamebase=None, input_file=None,
args=None):
'''
Import from a LDIF format a given 'suffix' (or 'benamebase' that stores
that suffix). It uses an internal task to acheive this request.

If 'suffix' and 'benamebase' are specified, it uses 'benamebase' first
else 'suffix'.
If both 'suffix' and 'benamebase' are missing it raise ValueError

'input_file' is the ldif input file

@param suffix - suffix of the backend
@param benamebase - 'commonname'/'cn' of the backend (e.g. 'userRoot')
@param ldif_input - file that will contain the entries in LDIF format
to import
@param args - is a dictionary that contains modifier of the import task
wait: True/[False] - If True, 'export' waits for the completion
of the task before to return

@return None

@raise ValueError

'''
if self.conn.state != DIRSRV_STATE_ONLINE:
raise ValueError("Invalid Server State %s! Must be online" % self.conn.state)

# Checking the parameters
if not benamebase and not suffix:
raise ValueError("Specify either bename or suffix")

if not input_file:
raise ValueError("input_file is mandatory")

if not os.path.exists(input_file):
> raise ValueError("Import file (%s) does not exist" % input_file)
E ValueError: Import file (/tmp/export.ldif) does not exist

/usr/local/lib/python3.9/site-packages/lib389/tasks.py:499: ValueError
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
-------------------------------Captured log call--------------------------------
INFO lib389:tasks.py:597 Export task export_08182021_011059 for file /tmp/export.ldif completed successfully
Failed tickets/ticket47871_test.py::test_ticket47871_2 65.28
topology_m1c1 = <lib389.topologies.TopologyMain object at 0x7f91d34a84c0>

def test_ticket47871_2(topology_m1c1):
'''
Wait until there is just a last entries
'''
MAX_TRIES = 10
TRY_NO = 1
while TRY_NO <= MAX_TRIES:
time.sleep(6) # at least 1 trimming occurred
ents = topology_m1c1.ms["supplier1"].search_s(RETROCL_SUFFIX, ldap.SCOPE_ONELEVEL, "(objectclass=*)")
assert len(ents) <= MAX_OTHERS
topology_m1c1.ms["supplier1"].log.info("\nTry no %d it remains %d entries" % (TRY_NO, len(ents)))
for ent in ents:
topology_m1c1.ms["supplier1"].log.info("%s" % ent.dn)
if len(ents) > 1:
TRY_NO += 1
else:
break
> assert TRY_NO <= MAX_TRIES
E assert 11 <= 10

tickets/ticket47871_test.py:100: AssertionError
-------------------------------Captured log call--------------------------------
INFO lib389:ticket47871_test.py:93 Try no 1 it remains 10 entries INFO lib389:ticket47871_test.py:95 changenumber=1,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=2,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=3,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=4,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=5,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=6,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=7,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=8,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=9,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=10,cn=changelog INFO lib389:ticket47871_test.py:93 Try no 2 it remains 10 entries INFO lib389:ticket47871_test.py:95 changenumber=1,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=2,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=3,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=4,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=5,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=6,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=7,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=8,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=9,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=10,cn=changelog INFO lib389:ticket47871_test.py:93 Try no 3 it remains 10 entries INFO lib389:ticket47871_test.py:95 changenumber=1,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=2,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=3,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=4,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=5,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=6,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=7,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=8,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=9,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=10,cn=changelog INFO lib389:ticket47871_test.py:93 Try no 4 it remains 10 entries INFO lib389:ticket47871_test.py:95 changenumber=1,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=2,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=3,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=4,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=5,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=6,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=7,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=8,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=9,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=10,cn=changelog INFO lib389:ticket47871_test.py:93 Try no 5 it remains 10 entries INFO lib389:ticket47871_test.py:95 changenumber=1,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=2,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=3,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=4,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=5,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=6,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=7,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=8,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=9,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=10,cn=changelog INFO lib389:ticket47871_test.py:93 Try no 6 it remains 10 entries INFO lib389:ticket47871_test.py:95 changenumber=1,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=2,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=3,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=4,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=5,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=6,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=7,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=8,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=9,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=10,cn=changelog INFO lib389:ticket47871_test.py:93 Try no 7 it remains 10 entries INFO lib389:ticket47871_test.py:95 changenumber=1,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=2,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=3,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=4,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=5,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=6,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=7,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=8,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=9,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=10,cn=changelog INFO lib389:ticket47871_test.py:93 Try no 8 it remains 10 entries INFO lib389:ticket47871_test.py:95 changenumber=1,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=2,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=3,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=4,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=5,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=6,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=7,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=8,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=9,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=10,cn=changelog INFO lib389:ticket47871_test.py:93 Try no 9 it remains 10 entries INFO lib389:ticket47871_test.py:95 changenumber=1,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=2,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=3,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=4,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=5,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=6,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=7,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=8,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=9,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=10,cn=changelog INFO lib389:ticket47871_test.py:93 Try no 10 it remains 10 entries INFO lib389:ticket47871_test.py:95 changenumber=1,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=2,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=3,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=4,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=5,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=6,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=7,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=8,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=9,cn=changelog INFO lib389:ticket47871_test.py:95 changenumber=10,cn=changelog
Failed tickets/ticket47988_test.py::test_ticket47988_init 33.99
topology_m2 = <lib389.topologies.TopologyMain object at 0x7f91cf876cd0>

def test_ticket47988_init(topology_m2):
"""
It adds
- Objectclass with MAY 'member'
- an entry ('bind_entry') with which we bind to test the 'SELFDN' operation
It deletes the anonymous aci

"""

_header(topology_m2, 'test_ticket47988_init')

# enable acl error logging
mod = [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', ensure_bytes(str(8192)))] # REPL
topology_m2.ms["supplier1"].modify_s(DN_CONFIG, mod)
topology_m2.ms["supplier2"].modify_s(DN_CONFIG, mod)

mod = [(ldap.MOD_REPLACE, 'nsslapd-accesslog-level', ensure_bytes(str(260)))] # Internal op
topology_m2.ms["supplier1"].modify_s(DN_CONFIG, mod)
topology_m2.ms["supplier2"].modify_s(DN_CONFIG, mod)

# add dummy entries
for cpt in range(MAX_OTHERS):
name = "%s%d" % (OTHER_NAME, cpt)
topology_m2.ms["supplier1"].add_s(Entry(("cn=%s,%s" % (name, SUFFIX), {
'objectclass': "top person".split(),
'sn': name,
'cn': name})))

# check that entry 0 is replicated before
loop = 0
entryDN = "cn=%s0,%s" % (OTHER_NAME, SUFFIX)
while loop <= 10:
try:
ent = topology_m2.ms["supplier2"].getEntry(entryDN, ldap.SCOPE_BASE, "(objectclass=*)", ['telephonenumber'])
break
except ldap.NO_SUCH_OBJECT:
time.sleep(1)
loop += 1
assert (loop <= 10)

topology_m2.ms["supplier1"].stop(timeout=10)
topology_m2.ms["supplier2"].stop(timeout=10)

# install the specific schema M1: ipa3.3, M2: ipa4.1
schema_file = os.path.join(topology_m2.ms["supplier1"].getDir(__file__, DATA_DIR), "ticket47988/schema_ipa3.3.tar.gz")
_install_schema(topology_m2.ms["supplier1"], schema_file)
schema_file = os.path.join(topology_m2.ms["supplier1"].getDir(__file__, DATA_DIR), "ticket47988/schema_ipa4.1.tar.gz")
_install_schema(topology_m2.ms["supplier2"], schema_file)

> topology_m2.ms["supplier1"].start(timeout=10)

/export/tests/tickets/ticket47988_test.py:157:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:1091: in start
subprocess.check_output(["systemctl", "start", "dirsrv@%s" % self.serverid], stderr=subprocess.STDOUT)
/usr/lib64/python3.9/subprocess.py:424: in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

input = None, capture_output = False, timeout = None, check = True
popenargs = (['systemctl', 'start', 'dirsrv@supplier1'],)
kwargs = {'stderr': -2, 'stdout': -1}
process = <Popen: returncode: 1 args: ['systemctl', 'start', 'dirsrv@supplier1']>
stdout = b'Job for dirsrv@supplier1.service failed because the control process exited with error code.\nSee "systemctl status dirsrv@supplier1.service" and "journalctl -xeu dirsrv@supplier1.service" for details.\n'
stderr = None, retcode = 1

def run(*popenargs,
input=None, capture_output=False, timeout=None, check=False, **kwargs):
"""Run command with arguments and return a CompletedProcess instance.

The returned instance will have attributes args, returncode, stdout and
stderr. By default, stdout and stderr are not captured, and those attributes
will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them.

If check is True and the exit code was non-zero, it raises a
CalledProcessError. The CalledProcessError object will have the return code
in the returncode attribute, and output & stderr attributes if those streams
were captured.

If timeout is given, and the process takes too long, a TimeoutExpired
exception will be raised.

There is an optional argument "input", allowing you to
pass bytes or a string to the subprocess's stdin. If you use this argument
you may not also use the Popen constructor's "stdin" argument, as
it will be used internally.

By default, all communication is in bytes, and therefore any "input" should
be bytes, and the stdout and stderr will be bytes. If in text mode, any
"input" should be a string, and stdout and stderr will be strings decoded
according to locale encoding, or by "encoding" if set. Text mode is
triggered by setting any of text, encoding, errors or universal_newlines.

The other arguments are the same as for the Popen constructor.
"""
if input is not None:
if kwargs.get('stdin') is not None:
raise ValueError('stdin and input arguments may not both be used.')
kwargs['stdin'] = PIPE

if capture_output:
if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None:
raise ValueError('stdout and stderr arguments may not be used '
'with capture_output.')
kwargs['stdout'] = PIPE
kwargs['stderr'] = PIPE

with Popen(*popenargs, **kwargs) as process:
try:
stdout, stderr = process.communicate(input, timeout=timeout)
except TimeoutExpired as exc:
process.kill()
if _mswindows:
# Windows accumulates the output in a single blocking
# read() call run on child threads, with the timeout
# being done in a join() on those threads. communicate()
# _after_ kill() is required to collect that and add it
# to the exception.
exc.stdout, exc.stderr = process.communicate()
else:
# POSIX _communicate already populated the output so
# far into the TimeoutExpired exception.
process.wait()
raise
except: # Including KeyboardInterrupt, communicate handled that.
process.kill()
# We don't call process.wait() as .__exit__ does that for us.
raise
retcode = process.poll()
if check and retcode:
> raise CalledProcessError(retcode, process.args,
output=stdout, stderr=stderr)
E subprocess.CalledProcessError: Command '['systemctl', 'start', 'dirsrv@supplier1']' returned non-zero exit status 1.

/usr/lib64/python3.9/subprocess.py:528: CalledProcessError
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39001, 'ldap-secureport': 63701, 'server-id': 'supplier1', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier2 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39002, 'ldap-secureport': 63702, 'server-id': 'supplier2', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.topologies:topologies.py:145 Creating replication topology. INFO lib389.topologies:topologies.py:159 Joining supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2084 SUCCESS: bootstrap to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 completed INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is was created INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is was created INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 1e650ca0-ed2e-4deb-8055-00b9fef1e891 / got description=None) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect 622d4c15-15aa-4357-be20-4e2502be4c14 / got description=1e650ca0-ed2e-4deb-8055-00b9fef1e891) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is working INFO lib389.replica:replica.py:2153 SUCCESS: joined supplier from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier1 to supplier2 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 already exists
-------------------------------Captured log call--------------------------------
INFO lib389:ticket47988_test.py:64 ############################################### INFO lib389:ticket47988_test.py:65 ####### INFO lib389:ticket47988_test.py:66 ####### test_ticket47988_init INFO lib389:ticket47988_test.py:67 ####### INFO lib389:ticket47988_test.py:68 ################################################### INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/02common.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/50ns-admin.ldif INFO lib389:ticket47988_test.py:98 replace /etc/dirsrv/slapd-supplier1/schema/99user.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/60nss-ldap.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/60autofs.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/50ns-web.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/60samba.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/10dna-plugin.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/05rfc4523.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/60basev2.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/10automember-plugin.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/05rfc2927.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/10mep-plugin.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/60ipadns.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/10rfc2307.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/50ns-mail.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/05rfc4524.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/60trust.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/60ipaconfig.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/50ns-directory.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/60eduperson.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/60mozilla.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/65ipasudo.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/60rfc3712.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/60rfc2739.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/50ns-value.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/60acctpolicy.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/01core389.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/60sabayon.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/60pam-plugin.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/00core.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/25java-object.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/60sudo.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/70ipaotp.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/60pureftpd.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/61kerberos-ipav3.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/60kerberos.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/60basev3.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/06inetorgperson.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/30ns-common.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/28pilot.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/20subscriber.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/50ns-certificate.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier1/schema/60posix-winsync-plugin.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/02common.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/50ns-admin.ldif INFO lib389:ticket47988_test.py:98 replace /etc/dirsrv/slapd-supplier2/schema/99user.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/60nss-ldap.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/60autofs.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/50ns-web.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/60samba.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/10dna-plugin.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/05rfc4523.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/60basev2.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/10automember-plugin.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/05rfc2927.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/10mep-plugin.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/60ipadns.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/10rfc2307.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/50ns-mail.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/05rfc4524.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/60trust.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/60ipaconfig.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/50ns-directory.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/60eduperson.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/60mozilla.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/65ipasudo.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/60rfc3712.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/60rfc2739.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/50ns-value.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/60acctpolicy.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/01core389.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/60sabayon.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/60pam-plugin.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/00core.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/25java-object.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/60sudo.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/70ipaotp.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/60pureftpd.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/61kerberos-ipav3.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/60kerberos.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/60basev3.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/06inetorgperson.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/30ns-common.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/28pilot.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/20subscriber.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/50ns-certificate.ldif INFO lib389:ticket47988_test.py:102 add /etc/dirsrv/slapd-supplier2/schema/60posix-winsync-plugin.ldif
Failed tickets/ticket47988_test.py::test_ticket47988_1 0.10
topology_m2 = <lib389.topologies.TopologyMain object at 0x7f91cf876cd0>

def test_ticket47988_1(topology_m2):
'''
Check that replication is working and pause replication M2->M1
'''
_header(topology_m2, 'test_ticket47988_1')

topology_m2.ms["supplier1"].log.debug("\n\nCheck that replication is working and pause replication M2->M1\n")
> _do_update_entry(supplier=topology_m2.ms["supplier2"], consumer=topology_m2.ms["supplier1"], attempts=5)

/export/tests/tickets/ticket47988_test.py:234:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/export/tests/tickets/ticket47988_test.py:184: in _do_update_entry
supplier.modify_s(entryDN, mod)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:640: in modify_s
return self.modify_ext_s(dn,modlist,None,None)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:613: in modify_ext_s
resp_type, resp_data, resp_msgid, resp_ctrls = self.result3(msgid,all=1,timeout=self.timeout)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:764: in result3
resp_type, resp_data, resp_msgid, decoded_resp_ctrls, retoid, retval = self.result4(
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:774: in result4
ldap_result = self._ldap_call(self._l.result4,msgid,all,timeout,add_ctrls,add_intermediates,add_extop)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340: in _ldap_call
reraise(exc_type, exc_value, exc_traceback)
/usr/lib64/python3.9/site-packages/ldap/compat.py:46: in reraise
raise exc_value
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d3ea8670>
func = <built-in method result4 of LDAP object at 0x7f91d3ebed50>
args = (27, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.SERVER_DOWN: {'result': -1, 'desc': "Can't contact LDAP server", 'ctrls': []}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: SERVER_DOWN
-------------------------------Captured log call--------------------------------
INFO lib389:ticket47988_test.py:64 ############################################### INFO lib389:ticket47988_test.py:65 ####### INFO lib389:ticket47988_test.py:66 ####### test_ticket47988_1 INFO lib389:ticket47988_test.py:67 ####### INFO lib389:ticket47988_test.py:68 ###################################################
Failed tickets/ticket47988_test.py::test_ticket47988_2 0.10
topology_m2 = <lib389.topologies.TopologyMain object at 0x7f91cf876cd0>

def test_ticket47988_2(topology_m2):
'''
Update M1 schema and trigger update M1->M2
So M1 should learn new/extended definitions that are in M2 schema
'''
_header(topology_m2, 'test_ticket47988_2')

topology_m2.ms["supplier1"].log.debug("\n\nUpdate M1 schema and an entry on M1\n")
> supplier1_schema_csn = topology_m2.ms["supplier1"].schema.get_schema_csn()

/export/tests/tickets/ticket47988_test.py:246:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/schema.py:627: in get_schema_csn
ents = self.conn.search_s(DN_SCHEMA, ldap.SCOPE_BASE,
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:870: in search_s
return self.search_ext_s(base,scope,filterstr,attrlist,attrsonly,None,None,timeout=self.timeout)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:864: in search_ext_s
return self.result(msgid,all=1,timeout=timeout)[1]
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:142: in inner
objtype, data = f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:756: in result
resp_type, resp_data, resp_msgid = self.result2(msgid,all,timeout)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:760: in result2
resp_type, resp_data, resp_msgid, resp_ctrls = self.result3(msgid,all,timeout)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:764: in result3
resp_type, resp_data, resp_msgid, decoded_resp_ctrls, retoid, retval = self.result4(
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:774: in result4
ldap_result = self._ldap_call(self._l.result4,msgid,all,timeout,add_ctrls,add_intermediates,add_extop)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340: in _ldap_call
reraise(exc_type, exc_value, exc_traceback)
/usr/lib64/python3.9/site-packages/ldap/compat.py:46: in reraise
raise exc_value
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91cf8765e0>
func = <built-in method result4 of LDAP object at 0x7f91d3ea8ea0>
args = (62, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.SERVER_DOWN: {'result': -1, 'desc': "Can't contact LDAP server", 'ctrls': []}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: SERVER_DOWN
-------------------------------Captured log call--------------------------------
INFO lib389:ticket47988_test.py:64 ############################################### INFO lib389:ticket47988_test.py:65 ####### INFO lib389:ticket47988_test.py:66 ####### test_ticket47988_2 INFO lib389:ticket47988_test.py:67 ####### INFO lib389:ticket47988_test.py:68 ###################################################
Failed tickets/ticket47988_test.py::test_ticket47988_3 0.10
topology_m2 = <lib389.topologies.TopologyMain object at 0x7f91cf876cd0>

def test_ticket47988_3(topology_m2):
'''
Resume replication M2->M1 and check replication is still working
'''
_header(topology_m2, 'test_ticket47988_3')

> _resume_M2_to_M1(topology_m2)

/export/tests/tickets/ticket47988_test.py:283:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/export/tests/tickets/ticket47988_test.py:222: in _resume_M2_to_M1
ents = topology_m2.ms["supplier2"].agreement.list(suffix=SUFFIX)
/usr/local/lib/python3.9/site-packages/lib389/agreement.py:904: in list
replica_entries = self.conn.replica.list(suffix)
/usr/local/lib/python3.9/site-packages/lib389/replica.py:178: in list
ents = self.conn.search_s(base, ldap.SCOPE_SUBTREE, filtr)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:870: in search_s
return self.search_ext_s(base,scope,filterstr,attrlist,attrsonly,None,None,timeout=self.timeout)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:863: in search_ext_s
msgid = self.search_ext(base,scope,filterstr,attrlist,attrsonly,serverctrls,clientctrls,timeout,sizelimit)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:853: in search_ext
return self._ldap_call(
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340: in _ldap_call
reraise(exc_type, exc_value, exc_traceback)
/usr/lib64/python3.9/site-packages/ldap/compat.py:46: in reraise
raise exc_value
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d3ea8670>
func = <built-in method search_ext of LDAP object at 0x7f91d3ebed50>
args = ('cn=mapping tree,cn=config', 2, '(&(objectclass=nsds5Replica)(nsDS5ReplicaRoot=dc=example,dc=com))', None, 0, None, ...)
kwargs = {}, diagnostic_message_success = None, exc_type = None
exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.SERVER_DOWN: {'result': -1, 'desc': "Can't contact LDAP server", 'ctrls': []}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: SERVER_DOWN
-------------------------------Captured log call--------------------------------
INFO lib389:ticket47988_test.py:64 ############################################### INFO lib389:ticket47988_test.py:65 ####### INFO lib389:ticket47988_test.py:66 ####### test_ticket47988_3 INFO lib389:ticket47988_test.py:67 ####### INFO lib389:ticket47988_test.py:68 ################################################### INFO lib389:ticket47988_test.py:221 ######################### resume RA M2->M1 ######################
Failed tickets/ticket47988_test.py::test_ticket47988_4 0.10
topology_m2 = <lib389.topologies.TopologyMain object at 0x7f91cf876cd0>

def test_ticket47988_4(topology_m2):
'''
Check schemaCSN is identical on both server
And save the nsschemaCSN to later check they do not change unexpectedly
'''
_header(topology_m2, 'test_ticket47988_4')

> supplier1_schema_csn = topology_m2.ms["supplier1"].schema.get_schema_csn()

/export/tests/tickets/ticket47988_test.py:295:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/schema.py:627: in get_schema_csn
ents = self.conn.search_s(DN_SCHEMA, ldap.SCOPE_BASE,
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:870: in search_s
return self.search_ext_s(base,scope,filterstr,attrlist,attrsonly,None,None,timeout=self.timeout)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:863: in search_ext_s
msgid = self.search_ext(base,scope,filterstr,attrlist,attrsonly,serverctrls,clientctrls,timeout,sizelimit)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:853: in search_ext
return self._ldap_call(
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340: in _ldap_call
reraise(exc_type, exc_value, exc_traceback)
/usr/lib64/python3.9/site-packages/ldap/compat.py:46: in reraise
raise exc_value
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91cf8765e0>
func = <built-in method search_ext of LDAP object at 0x7f91d3ea8ea0>
args = ('cn=schema', 0, 'objectclass=*', ['nsSchemaCSN'], 0, None, ...)
kwargs = {}, diagnostic_message_success = None, exc_type = None
exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.SERVER_DOWN: {'result': -1, 'desc': "Can't contact LDAP server", 'ctrls': []}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: SERVER_DOWN
-------------------------------Captured log call--------------------------------
INFO lib389:ticket47988_test.py:64 ############################################### INFO lib389:ticket47988_test.py:65 ####### INFO lib389:ticket47988_test.py:66 ####### test_ticket47988_4 INFO lib389:ticket47988_test.py:67 ####### INFO lib389:ticket47988_test.py:68 ###################################################
Failed tickets/ticket47988_test.py::test_ticket47988_5 0.10
topology_m2 = <lib389.topologies.TopologyMain object at 0x7f91cf876cd0>

def test_ticket47988_5(topology_m2):
'''
Check schemaCSN do not change unexpectedly
'''
_header(topology_m2, 'test_ticket47988_5')

> _do_update_entry(supplier=topology_m2.ms["supplier1"], consumer=topology_m2.ms["supplier2"], attempts=5)

/export/tests/tickets/ticket47988_test.py:313:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/export/tests/tickets/ticket47988_test.py:184: in _do_update_entry
supplier.modify_s(entryDN, mod)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:640: in modify_s
return self.modify_ext_s(dn,modlist,None,None)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:612: in modify_ext_s
msgid = self.modify_ext(dn,modlist,serverctrls,clientctrls)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:609: in modify_ext
return self._ldap_call(self._l.modify_ext,dn,modlist,RequestControlTuples(serverctrls),RequestControlTuples(clientctrls))
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340: in _ldap_call
reraise(exc_type, exc_value, exc_traceback)
/usr/lib64/python3.9/site-packages/ldap/compat.py:46: in reraise
raise exc_value
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91cf8765e0>
func = <built-in method modify_ext of LDAP object at 0x7f91d3ea8ea0>
args = ('cn=other_entry0,dc=example,dc=com', [(2, 'telephonenumber', b'197')], None, None)
kwargs = {}, diagnostic_message_success = None, exc_type = None
exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.SERVER_DOWN: {'result': -1, 'desc': "Can't contact LDAP server", 'ctrls': []}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: SERVER_DOWN
-------------------------------Captured log call--------------------------------
INFO lib389:ticket47988_test.py:64 ############################################### INFO lib389:ticket47988_test.py:65 ####### INFO lib389:ticket47988_test.py:66 ####### test_ticket47988_5 INFO lib389:ticket47988_test.py:67 ####### INFO lib389:ticket47988_test.py:68 ###################################################
Failed tickets/ticket47988_test.py::test_ticket47988_6 0.14
topology_m2 = <lib389.topologies.TopologyMain object at 0x7f91cf876cd0>

def test_ticket47988_6(topology_m2):
'''
Update M1 schema and trigger update M2->M1
So M2 should learn new/extended definitions that are in M1 schema
'''

_header(topology_m2, 'test_ticket47988_6')

topology_m2.ms["supplier1"].log.debug("\n\nUpdate M1 schema and an entry on M1\n")
> supplier1_schema_csn = topology_m2.ms["supplier1"].schema.get_schema_csn()

/export/tests/tickets/ticket47988_test.py:336:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/schema.py:627: in get_schema_csn
ents = self.conn.search_s(DN_SCHEMA, ldap.SCOPE_BASE,
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:870: in search_s
return self.search_ext_s(base,scope,filterstr,attrlist,attrsonly,None,None,timeout=self.timeout)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:863: in search_ext_s
msgid = self.search_ext(base,scope,filterstr,attrlist,attrsonly,serverctrls,clientctrls,timeout,sizelimit)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:853: in search_ext
return self._ldap_call(
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340: in _ldap_call
reraise(exc_type, exc_value, exc_traceback)
/usr/lib64/python3.9/site-packages/ldap/compat.py:46: in reraise
raise exc_value
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91cf8765e0>
func = <built-in method search_ext of LDAP object at 0x7f91d3ea8ea0>
args = ('cn=schema', 0, 'objectclass=*', ['nsSchemaCSN'], 0, None, ...)
kwargs = {}, diagnostic_message_success = None, exc_type = None
exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.SERVER_DOWN: {'result': -1, 'desc': "Can't contact LDAP server", 'ctrls': []}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: SERVER_DOWN
-------------------------------Captured log call--------------------------------
INFO lib389:ticket47988_test.py:64 ############################################### INFO lib389:ticket47988_test.py:65 ####### INFO lib389:ticket47988_test.py:66 ####### test_ticket47988_6 INFO lib389:ticket47988_test.py:67 ####### INFO lib389:ticket47988_test.py:68 ###################################################
Failed tickets/ticket48005_test.py::test_ticket48005_setup 14.35
topology_st = <lib389.topologies.TopologyMain object at 0x7f91cca7b130>

def test_ticket48005_setup(topology_st):
'''
allow dump core
generate a test ldif file using dbgen.pl
import the ldif
'''
log.info("Ticket 48005 setup...")
if hasattr(topology_st.standalone, 'prefix'):
prefix = topology_st.standalone.prefix
else:
prefix = None
sysconfig_dirsrv = os.path.join(topology_st.standalone.get_initconfig_dir(), 'dirsrv')
cmdline = 'egrep "ulimit -c unlimited" %s' % sysconfig_dirsrv
p = os.popen(cmdline, "r")
ulimitc = p.readline()
if ulimitc == "":
log.info('No ulimit -c in %s' % sysconfig_dirsrv)
log.info('Adding it')
cmdline = 'echo "ulimit -c unlimited" >> %s' % sysconfig_dirsrv

sysconfig_dirsrv_systemd = sysconfig_dirsrv + ".systemd"
cmdline = 'egrep LimitCORE=infinity %s' % sysconfig_dirsrv_systemd
p = os.popen(cmdline, "r")
lcore = p.readline()
if lcore == "":
log.info('No LimitCORE in %s' % sysconfig_dirsrv_systemd)
log.info('Adding it')
cmdline = 'echo LimitCORE=infinity >> %s' % sysconfig_dirsrv_systemd

topology_st.standalone.restart(timeout=10)

ldif_file = topology_st.standalone.get_ldif_dir() + "/ticket48005.ldif"
os.system('ls %s' % ldif_file)
os.system('rm -f %s' % ldif_file)
if hasattr(topology_st.standalone, 'prefix'):
prefix = topology_st.standalone.prefix
else:
prefix = ""
dbgen_prog = prefix + '/bin/dbgen.pl'
log.info('dbgen_prog: %s' % dbgen_prog)
os.system('%s -s %s -o %s -u -n 10000' % (dbgen_prog, SUFFIX, ldif_file))
cmdline = 'egrep dn: %s | wc -l' % ldif_file
p = os.popen(cmdline, "r")
dnnumstr = p.readline()
num = int(dnnumstr)
log.info("We have %d entries.\n", num)

importTask = Tasks(topology_st.standalone)
args = {TASK_WAIT: True}
> importTask.importLDIF(SUFFIX, None, ldif_file, args)

/export/tests/tickets/ticket48005_test.py:74:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.tasks.Tasks object at 0x7f91cffed1f0>
suffix = 'dc=example,dc=com', benamebase = None
input_file = '/var/lib/dirsrv/slapd-standalone1/ldif/ticket48005.ldif'
args = {'wait': True}

def importLDIF(self, suffix=None, benamebase=None, input_file=None,
args=None):
'''
Import from a LDIF format a given 'suffix' (or 'benamebase' that stores
that suffix). It uses an internal task to acheive this request.

If 'suffix' and 'benamebase' are specified, it uses 'benamebase' first
else 'suffix'.
If both 'suffix' and 'benamebase' are missing it raise ValueError

'input_file' is the ldif input file

@param suffix - suffix of the backend
@param benamebase - 'commonname'/'cn' of the backend (e.g. 'userRoot')
@param ldif_input - file that will contain the entries in LDIF format
to import
@param args - is a dictionary that contains modifier of the import task
wait: True/[False] - If True, 'export' waits for the completion
of the task before to return

@return None

@raise ValueError

'''
if self.conn.state != DIRSRV_STATE_ONLINE:
raise ValueError("Invalid Server State %s! Must be online" % self.conn.state)

# Checking the parameters
if not benamebase and not suffix:
raise ValueError("Specify either bename or suffix")

if not input_file:
raise ValueError("input_file is mandatory")

if not os.path.exists(input_file):
> raise ValueError("Import file (%s) does not exist" % input_file)
E ValueError: Import file (/var/lib/dirsrv/slapd-standalone1/ldif/ticket48005.ldif) does not exist

/usr/local/lib/python3.9/site-packages/lib389/tasks.py:499: ValueError
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
------------------------------Captured stderr call------------------------------
grep: /etc/sysconfig/dirsrv: No such file or directory grep: /etc/sysconfig/dirsrv.systemd: No such file or directory ls: cannot access '/var/lib/dirsrv/slapd-standalone1/ldif/ticket48005.ldif': No such file or directory sh: line 1: /bin/dbgen.pl: No such file or directory grep: /var/lib/dirsrv/slapd-standalone1/ldif/ticket48005.ldif: No such file or directory
-------------------------------Captured log call--------------------------------
INFO tests.tickets.ticket48005_test:ticket48005_test.py:31 Ticket 48005 setup... INFO tests.tickets.ticket48005_test:ticket48005_test.py:41 No ulimit -c in /etc/sysconfig/dirsrv INFO tests.tickets.ticket48005_test:ticket48005_test.py:42 Adding it INFO tests.tickets.ticket48005_test:ticket48005_test.py:50 No LimitCORE in /etc/sysconfig/dirsrv.systemd INFO tests.tickets.ticket48005_test:ticket48005_test.py:51 Adding it INFO tests.tickets.ticket48005_test:ticket48005_test.py:64 dbgen_prog: /bin/dbgen.pl INFO tests.tickets.ticket48005_test:ticket48005_test.py:70 We have 0 entries.
Failed tickets/ticket48013_test.py::test_ticket48013 10.93
topology_st = <lib389.topologies.TopologyMain object at 0x7f91cffe4f40>

def test_ticket48013(topology_st):
'''
Content Synchonization: Test that invalid cookies are caught
'''

cookies = ('#', '##', 'a#a#a', 'a#a#1')

# Enable dynamic plugins
try:
topology_st.standalone.modify_s(DN_CONFIG, [(ldap.MOD_REPLACE, 'nsslapd-dynamic-plugins', b'on')])
except ldap.LDAPError as e:
log.error('Failed to enable dynamic plugin! {}'.format(e.args[0]['desc']))
assert False

# Enable retro changelog
topology_st.standalone.plugins.enable(name=PLUGIN_RETRO_CHANGELOG)

# Enbale content sync plugin
> topology_st.standalone.plugins.enable(name=PLUGIN_REPL_SYNC)

/export/tests/tickets/ticket48013_test.py:61:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/plugins.py:2120: in enable
plugin.enable()
/usr/local/lib/python3.9/site-packages/lib389/plugins.py:58: in enable
self.set('nsslapd-pluginEnabled', 'on')
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:460: in set
return self._instance.modify_ext_s(self._dn, [(action, key, value)],
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:613: in modify_ext_s
resp_type, resp_data, resp_msgid, resp_ctrls = self.result3(msgid,all=1,timeout=self.timeout)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:764: in result3
resp_type, resp_data, resp_msgid, decoded_resp_ctrls, retoid, retval = self.result4(
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:774: in result4
ldap_result = self._ldap_call(self._l.result4,msgid,all,timeout,add_ctrls,add_intermediates,add_extop)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340: in _ldap_call
reraise(exc_type, exc_value, exc_traceback)
/usr/lib64/python3.9/site-packages/ldap/compat.py:46: in reraise
raise exc_value
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91cca7b430>
func = <built-in method result4 of LDAP object at 0x7f91cf876660>
args = (7, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.SERVER_DOWN: {'result': -1, 'desc': "Can't contact LDAP server", 'ctrls': []}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: SERVER_DOWN
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Failed tickets/ticket48194_test.py::test_run_1 8.07
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d3cb0b80>

def test_run_1(topology_st):
"""
Check nsSSL3Ciphers: +all
All ciphers are enabled except null.
Note: default allowWeakCipher (i.e., off) for +all
"""
_header(topology_st, 'Test Case 2 - Check the ciphers availability for "+all" with default allowWeakCiphers')

topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
topology_st.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', b'64')])
# Make sure allowWeakCipher is not set.
topology_st.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_DELETE, 'allowWeakCipher', None)])

log.info("\n######################### Restarting the server ######################\n")
topology_st.standalone.stop(timeout=10)
os.system('mv %s %s.48194_0' % (topology_st.standalone.errlog, topology_st.standalone.errlog))
os.system('touch %s' % (topology_st.standalone.errlog))
time.sleep(2)
topology_st.standalone.start(timeout=120)

> connectWithOpenssl(topology_st, 'DES-CBC3-SHA', False)

/export/tests/tickets/ticket48194_test.py:158:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

topology_st = <lib389.topologies.TopologyMain object at 0x7f91d3cb0b80>
cipher = 'DES-CBC3-SHA', expect = False

def connectWithOpenssl(topology_st, cipher, expect):
"""
Connect with the given cipher
Condition:
If expect is True, the handshake should be successful.
If expect is False, the handshake should be refused with
access log: "Cannot communicate securely with peer:
no common encryption algorithm(s)."
"""
log.info("Testing %s -- expect to handshake %s", cipher, "successfully" if expect else "failed")

myurl = 'localhost:%s' % LDAPSPORT
cmdline = ['/usr/bin/openssl', 's_client', '-connect', myurl, '-cipher', cipher]

strcmdline = " ".join(cmdline)
log.info("Running cmdline: %s", strcmdline)

try:
proc = subprocess.Popen(cmdline, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT)
except ValueError:
log.info("%s failed: %s", cmdline, ValueError)
proc.kill()

while True:
l = proc.stdout.readline()
if l == b"":
break
if b'Cipher is' in l:
log.info("Found: %s", l)
if expect:
if b'(NONE)' in l:
assert False
else:
proc.stdin.close()
assert True
else:
if b'(NONE)' in l:
assert True
else:
proc.stdin.close()
> assert False
E assert False

/export/tests/tickets/ticket48194_test.py:117: AssertionError
-------------------------------Captured log call--------------------------------
INFO lib389:ticket48194_test.py:40 ############################################### INFO lib389:ticket48194_test.py:41 ####### Test Case 2 - Check the ciphers availability for "+all" with default allowWeakCiphers INFO lib389:ticket48194_test.py:42 ############################################### INFO lib389.utils:ticket48194_test.py:151 ######################### Restarting the server ###################### INFO lib389.utils:ticket48194_test.py:86 Testing DES-CBC3-SHA -- expect to handshake failed INFO lib389.utils:ticket48194_test.py:92 Running cmdline: /usr/bin/openssl s_client -connect localhost:63601 -cipher DES-CBC3-SHA INFO lib389.utils:ticket48194_test.py:105 Found: b'New, TLSv1.3, Cipher is TLS_AES_128_GCM_SHA256\n'
Failed tickets/ticket48194_test.py::test_run_2 7.30
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d3cb0b80>

def test_run_2(topology_st):
"""
Check nsSSL3Ciphers: +rsa_aes_128_sha,+rsa_aes_256_sha
rsa_aes_128_sha, tls_rsa_aes_128_sha, rsa_aes_256_sha, tls_rsa_aes_256_sha are enabled.
default allowWeakCipher
"""
_header(topology_st,
'Test Case 3 - Check the ciphers availability for "+rsa_aes_128_sha,+rsa_aes_256_sha" with default allowWeakCipher')

topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
topology_st.standalone.modify_s(ENCRYPTION_DN,
[(ldap.MOD_REPLACE, 'nsSSL3Ciphers', b'+rsa_aes_128_sha,+rsa_aes_256_sha')])

log.info("\n######################### Restarting the server ######################\n")
topology_st.standalone.stop(timeout=10)
os.system('mv %s %s.48194_1' % (topology_st.standalone.errlog, topology_st.standalone.errlog))
os.system('touch %s' % (topology_st.standalone.errlog))
time.sleep(2)
topology_st.standalone.start(timeout=120)

connectWithOpenssl(topology_st, 'DES-CBC3-SHA', False)
connectWithOpenssl(topology_st, 'AES256-SHA256', False)
> connectWithOpenssl(topology_st, 'AES128-SHA', True)

/export/tests/tickets/ticket48194_test.py:184:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

topology_st = <lib389.topologies.TopologyMain object at 0x7f91d3cb0b80>
cipher = 'AES128-SHA', expect = True

def connectWithOpenssl(topology_st, cipher, expect):
"""
Connect with the given cipher
Condition:
If expect is True, the handshake should be successful.
If expect is False, the handshake should be refused with
access log: "Cannot communicate securely with peer:
no common encryption algorithm(s)."
"""
log.info("Testing %s -- expect to handshake %s", cipher, "successfully" if expect else "failed")

myurl = 'localhost:%s' % LDAPSPORT
cmdline = ['/usr/bin/openssl', 's_client', '-connect', myurl, '-cipher', cipher]

strcmdline = " ".join(cmdline)
log.info("Running cmdline: %s", strcmdline)

try:
proc = subprocess.Popen(cmdline, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT)
except ValueError:
log.info("%s failed: %s", cmdline, ValueError)
proc.kill()

while True:
l = proc.stdout.readline()
if l == b"":
break
if b'Cipher is' in l:
log.info("Found: %s", l)
if expect:
if b'(NONE)' in l:
> assert False
E assert False

/export/tests/tickets/ticket48194_test.py:108: AssertionError
-------------------------------Captured log call--------------------------------
INFO lib389:ticket48194_test.py:40 ############################################### INFO lib389:ticket48194_test.py:41 ####### Test Case 3 - Check the ciphers availability for "+rsa_aes_128_sha,+rsa_aes_256_sha" with default allowWeakCipher INFO lib389:ticket48194_test.py:42 ############################################### INFO lib389.utils:ticket48194_test.py:175 ######################### Restarting the server ###################### INFO lib389.utils:ticket48194_test.py:86 Testing DES-CBC3-SHA -- expect to handshake failed INFO lib389.utils:ticket48194_test.py:92 Running cmdline: /usr/bin/openssl s_client -connect localhost:63601 -cipher DES-CBC3-SHA INFO lib389.utils:ticket48194_test.py:105 Found: b'New, (NONE), Cipher is (NONE)\n' INFO lib389.utils:ticket48194_test.py:86 Testing AES256-SHA256 -- expect to handshake failed INFO lib389.utils:ticket48194_test.py:92 Running cmdline: /usr/bin/openssl s_client -connect localhost:63601 -cipher AES256-SHA256 INFO lib389.utils:ticket48194_test.py:105 Found: b'New, (NONE), Cipher is (NONE)\n' INFO lib389.utils:ticket48194_test.py:86 Testing AES128-SHA -- expect to handshake successfully INFO lib389.utils:ticket48194_test.py:92 Running cmdline: /usr/bin/openssl s_client -connect localhost:63601 -cipher AES128-SHA INFO lib389.utils:ticket48194_test.py:105 Found: b'New, (NONE), Cipher is (NONE)\n'
Failed tickets/ticket48194_test.py::test_run_4 7.94
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d3cb0b80>

def test_run_4(topology_st):
"""
Check no nsSSL3Ciphers
Default ciphers are enabled.
default allowWeakCipher
"""
_header(topology_st, 'Test Case 5 - Check no nsSSL3Ciphers (-all) with default allowWeakCipher')

topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
topology_st.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_DELETE, 'nsSSL3Ciphers', b'-all')])

log.info("\n######################### Restarting the server ######################\n")
topology_st.standalone.stop(timeout=10)
os.system('mv %s %s.48194_3' % (topology_st.standalone.errlog, topology_st.standalone.errlog))
os.system('touch %s' % (topology_st.standalone.errlog))
time.sleep(2)
topology_st.standalone.start(timeout=120)

> connectWithOpenssl(topology_st, 'DES-CBC3-SHA', False)

/export/tests/tickets/ticket48194_test.py:228:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

topology_st = <lib389.topologies.TopologyMain object at 0x7f91d3cb0b80>
cipher = 'DES-CBC3-SHA', expect = False

def connectWithOpenssl(topology_st, cipher, expect):
"""
Connect with the given cipher
Condition:
If expect is True, the handshake should be successful.
If expect is False, the handshake should be refused with
access log: "Cannot communicate securely with peer:
no common encryption algorithm(s)."
"""
log.info("Testing %s -- expect to handshake %s", cipher, "successfully" if expect else "failed")

myurl = 'localhost:%s' % LDAPSPORT
cmdline = ['/usr/bin/openssl', 's_client', '-connect', myurl, '-cipher', cipher]

strcmdline = " ".join(cmdline)
log.info("Running cmdline: %s", strcmdline)

try:
proc = subprocess.Popen(cmdline, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT)
except ValueError:
log.info("%s failed: %s", cmdline, ValueError)
proc.kill()

while True:
l = proc.stdout.readline()
if l == b"":
break
if b'Cipher is' in l:
log.info("Found: %s", l)
if expect:
if b'(NONE)' in l:
assert False
else:
proc.stdin.close()
assert True
else:
if b'(NONE)' in l:
assert True
else:
proc.stdin.close()
> assert False
E assert False

/export/tests/tickets/ticket48194_test.py:117: AssertionError
-------------------------------Captured log call--------------------------------
INFO lib389:ticket48194_test.py:40 ############################################### INFO lib389:ticket48194_test.py:41 ####### Test Case 5 - Check no nsSSL3Ciphers (-all) with default allowWeakCipher INFO lib389:ticket48194_test.py:42 ############################################### INFO lib389.utils:ticket48194_test.py:221 ######################### Restarting the server ###################### INFO lib389.utils:ticket48194_test.py:86 Testing DES-CBC3-SHA -- expect to handshake failed INFO lib389.utils:ticket48194_test.py:92 Running cmdline: /usr/bin/openssl s_client -connect localhost:63601 -cipher DES-CBC3-SHA INFO lib389.utils:ticket48194_test.py:105 Found: b'New, TLSv1.3, Cipher is TLS_AES_128_GCM_SHA256\n'
Failed tickets/ticket48194_test.py::test_run_5 7.77
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d3cb0b80>

def test_run_5(topology_st):
"""
Check nsSSL3Ciphers: default
Default ciphers are enabled.
default allowWeakCipher
"""
_header(topology_st, 'Test Case 6 - Check default nsSSL3Ciphers (default setting) with default allowWeakCipher')

topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
topology_st.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3Ciphers', b'default')])

log.info("\n######################### Restarting the server ######################\n")
topology_st.standalone.stop(timeout=10)
os.system('mv %s %s.48194_4' % (topology_st.standalone.errlog, topology_st.standalone.errlog))
os.system('touch %s' % (topology_st.standalone.errlog))
time.sleep(2)
topology_st.standalone.start(timeout=120)

> connectWithOpenssl(topology_st, 'DES-CBC3-SHA', False)

/export/tests/tickets/ticket48194_test.py:250:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

topology_st = <lib389.topologies.TopologyMain object at 0x7f91d3cb0b80>
cipher = 'DES-CBC3-SHA', expect = False

def connectWithOpenssl(topology_st, cipher, expect):
"""
Connect with the given cipher
Condition:
If expect is True, the handshake should be successful.
If expect is False, the handshake should be refused with
access log: "Cannot communicate securely with peer:
no common encryption algorithm(s)."
"""
log.info("Testing %s -- expect to handshake %s", cipher, "successfully" if expect else "failed")

myurl = 'localhost:%s' % LDAPSPORT
cmdline = ['/usr/bin/openssl', 's_client', '-connect', myurl, '-cipher', cipher]

strcmdline = " ".join(cmdline)
log.info("Running cmdline: %s", strcmdline)

try:
proc = subprocess.Popen(cmdline, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT)
except ValueError:
log.info("%s failed: %s", cmdline, ValueError)
proc.kill()

while True:
l = proc.stdout.readline()
if l == b"":
break
if b'Cipher is' in l:
log.info("Found: %s", l)
if expect:
if b'(NONE)' in l:
assert False
else:
proc.stdin.close()
assert True
else:
if b'(NONE)' in l:
assert True
else:
proc.stdin.close()
> assert False
E assert False

/export/tests/tickets/ticket48194_test.py:117: AssertionError
-------------------------------Captured log call--------------------------------
INFO lib389:ticket48194_test.py:40 ############################################### INFO lib389:ticket48194_test.py:41 ####### Test Case 6 - Check default nsSSL3Ciphers (default setting) with default allowWeakCipher INFO lib389:ticket48194_test.py:42 ############################################### INFO lib389.utils:ticket48194_test.py:243 ######################### Restarting the server ###################### INFO lib389.utils:ticket48194_test.py:86 Testing DES-CBC3-SHA -- expect to handshake failed INFO lib389.utils:ticket48194_test.py:92 Running cmdline: /usr/bin/openssl s_client -connect localhost:63601 -cipher DES-CBC3-SHA INFO lib389.utils:ticket48194_test.py:105 Found: b'New, TLSv1.3, Cipher is TLS_AES_128_GCM_SHA256\n'
Failed tickets/ticket48194_test.py::test_run_6 7.46
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d3cb0b80>

def test_run_6(topology_st):
"""
Check nsSSL3Ciphers: +all,-TLS_RSA_WITH_AES_256_CBC_SHA256
All ciphers are disabled.
default allowWeakCipher
"""
_header(topology_st,
'Test Case 7 - Check nsSSL3Ciphers: +all,-TLS_RSA_WITH_AES_256_CBC_SHA256 with default allowWeakCipher')

topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
topology_st.standalone.modify_s(ENCRYPTION_DN,
[(ldap.MOD_REPLACE, 'nsSSL3Ciphers', b'+all,-TLS_RSA_WITH_AES_256_CBC_SHA256')])

log.info("\n######################### Restarting the server ######################\n")
topology_st.standalone.stop(timeout=10)
os.system('mv %s %s.48194_5' % (topology_st.standalone.errlog, topology_st.standalone.errlog))
os.system('touch %s' % (topology_st.standalone.errlog))
time.sleep(2)
topology_st.standalone.start(timeout=120)

> connectWithOpenssl(topology_st, 'DES-CBC3-SHA', False)

/export/tests/tickets/ticket48194_test.py:274:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

topology_st = <lib389.topologies.TopologyMain object at 0x7f91d3cb0b80>
cipher = 'DES-CBC3-SHA', expect = False

def connectWithOpenssl(topology_st, cipher, expect):
"""
Connect with the given cipher
Condition:
If expect is True, the handshake should be successful.
If expect is False, the handshake should be refused with
access log: "Cannot communicate securely with peer:
no common encryption algorithm(s)."
"""
log.info("Testing %s -- expect to handshake %s", cipher, "successfully" if expect else "failed")

myurl = 'localhost:%s' % LDAPSPORT
cmdline = ['/usr/bin/openssl', 's_client', '-connect', myurl, '-cipher', cipher]

strcmdline = " ".join(cmdline)
log.info("Running cmdline: %s", strcmdline)

try:
proc = subprocess.Popen(cmdline, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT)
except ValueError:
log.info("%s failed: %s", cmdline, ValueError)
proc.kill()

while True:
l = proc.stdout.readline()
if l == b"":
break
if b'Cipher is' in l:
log.info("Found: %s", l)
if expect:
if b'(NONE)' in l:
assert False
else:
proc.stdin.close()
assert True
else:
if b'(NONE)' in l:
assert True
else:
proc.stdin.close()
> assert False
E assert False

/export/tests/tickets/ticket48194_test.py:117: AssertionError
-------------------------------Captured log call--------------------------------
INFO lib389:ticket48194_test.py:40 ############################################### INFO lib389:ticket48194_test.py:41 ####### Test Case 7 - Check nsSSL3Ciphers: +all,-TLS_RSA_WITH_AES_256_CBC_SHA256 with default allowWeakCipher INFO lib389:ticket48194_test.py:42 ############################################### INFO lib389.utils:ticket48194_test.py:267 ######################### Restarting the server ###################### INFO lib389.utils:ticket48194_test.py:86 Testing DES-CBC3-SHA -- expect to handshake failed INFO lib389.utils:ticket48194_test.py:92 Running cmdline: /usr/bin/openssl s_client -connect localhost:63601 -cipher DES-CBC3-SHA INFO lib389.utils:ticket48194_test.py:105 Found: b'New, TLSv1.3, Cipher is TLS_AES_128_GCM_SHA256\n'
Failed tickets/ticket48194_test.py::test_run_8 7.54
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d3cb0b80>

def test_run_8(topology_st):
"""
Check nsSSL3Ciphers: default + allowWeakCipher: off
Strong Default ciphers are enabled.
"""
_header(topology_st, 'Test Case 9 - Check default nsSSL3Ciphers (default setting + allowWeakCipher: off)')

topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
topology_st.standalone.modify_s(ENCRYPTION_DN, [(ldap.MOD_REPLACE, 'nsSSL3Ciphers', b'default'),
(ldap.MOD_REPLACE, 'allowWeakCipher', b'off')])

log.info("\n######################### Restarting the server ######################\n")
topology_st.standalone.stop(timeout=10)
os.system('mv %s %s.48194_7' % (topology_st.standalone.errlog, topology_st.standalone.errlog))
os.system('touch %s' % (topology_st.standalone.errlog))
time.sleep(2)
topology_st.standalone.start(timeout=120)

> connectWithOpenssl(topology_st, 'DES-CBC3-SHA', False)

/export/tests/tickets/ticket48194_test.py:297:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

topology_st = <lib389.topologies.TopologyMain object at 0x7f91d3cb0b80>
cipher = 'DES-CBC3-SHA', expect = False

def connectWithOpenssl(topology_st, cipher, expect):
"""
Connect with the given cipher
Condition:
If expect is True, the handshake should be successful.
If expect is False, the handshake should be refused with
access log: "Cannot communicate securely with peer:
no common encryption algorithm(s)."
"""
log.info("Testing %s -- expect to handshake %s", cipher, "successfully" if expect else "failed")

myurl = 'localhost:%s' % LDAPSPORT
cmdline = ['/usr/bin/openssl', 's_client', '-connect', myurl, '-cipher', cipher]

strcmdline = " ".join(cmdline)
log.info("Running cmdline: %s", strcmdline)

try:
proc = subprocess.Popen(cmdline, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT)
except ValueError:
log.info("%s failed: %s", cmdline, ValueError)
proc.kill()

while True:
l = proc.stdout.readline()
if l == b"":
break
if b'Cipher is' in l:
log.info("Found: %s", l)
if expect:
if b'(NONE)' in l:
assert False
else:
proc.stdin.close()
assert True
else:
if b'(NONE)' in l:
assert True
else:
proc.stdin.close()
> assert False
E assert False

/export/tests/tickets/ticket48194_test.py:117: AssertionError
-------------------------------Captured log call--------------------------------
INFO lib389:ticket48194_test.py:40 ############################################### INFO lib389:ticket48194_test.py:41 ####### Test Case 9 - Check default nsSSL3Ciphers (default setting + allowWeakCipher: off) INFO lib389:ticket48194_test.py:42 ############################################### INFO lib389.utils:ticket48194_test.py:290 ######################### Restarting the server ###################### INFO lib389.utils:ticket48194_test.py:86 Testing DES-CBC3-SHA -- expect to handshake failed INFO lib389.utils:ticket48194_test.py:92 Running cmdline: /usr/bin/openssl s_client -connect localhost:63601 -cipher DES-CBC3-SHA INFO lib389.utils:ticket48194_test.py:105 Found: b'New, TLSv1.3, Cipher is TLS_AES_128_GCM_SHA256\n'
Failed tickets/ticket48228_test.py::test_ticket48228_test_global_policy 13.83
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d0395190>
user = 'uid=user1,dc=example,dc=com', passwd = 'password', times = 6

def update_passwd(topology_st, user, passwd, times):
# Set the default value
cpw = passwd
for i in range(times):
log.info(" Bind as {%s,%s}" % (user, cpw))
topology_st.standalone.simple_bind_s(user, cpw)
# Now update the value for this iter.
cpw = 'password%d' % i
try:
> topology_st.standalone.modify_s(user, [(ldap.MOD_REPLACE, 'userpassword', cpw.encode())])

/export/tests/tickets/ticket48228_test.py:136:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('uid=user1,dc=example,dc=com', [(2, 'userpassword', b'password0')])
kwargs = {}
c_stack = [FrameInfo(frame=<frame at 0x55888a3d0bc0, file '/usr/local/lib/python3.9/site-packages/lib389/__init__.py', line 174,...mbda>', code_context=[' self._inner_hookexec = lambda hook, methods, kwargs: hook.multicall(\n'], index=0), ...]
frame = FrameInfo(frame=<frame at 0x558888aa5c80, file '/export/tests/tickets/ticket48228_test.py', line 141, code update_pass...t=[" topology_st.standalone.modify_s(user, [(ldap.MOD_REPLACE, 'userpassword', cpw.encode())])\n"], index=0)

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
return f(*args, **kwargs)
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d0395850>
dn = 'uid=user1,dc=example,dc=com'
modlist = [(2, 'userpassword', b'password0')]

def modify_s(self,dn,modlist):
> return self.modify_ext_s(dn,modlist,None,None)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:640:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('uid=user1,dc=example,dc=com', [(2, 'userpassword', b'password0')], None, None)
kwargs = {}

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
return f(*args, **kwargs)
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d0395850>
dn = 'uid=user1,dc=example,dc=com'
modlist = [(2, 'userpassword', b'password0')], serverctrls = None
clientctrls = None

def modify_ext_s(self,dn,modlist,serverctrls=None,clientctrls=None):
msgid = self.modify_ext(dn,modlist,serverctrls,clientctrls)
> resp_type, resp_data, resp_msgid, resp_ctrls = self.result3(msgid,all=1,timeout=self.timeout)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:613:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = (10,), kwargs = {'all': 1, 'timeout': -1}

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
return f(*args, **kwargs)
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d0395850>, msgid = 10, all = 1
timeout = -1, resp_ctrl_classes = None

def result3(self,msgid=ldap.RES_ANY,all=1,timeout=None,resp_ctrl_classes=None):
> resp_type, resp_data, resp_msgid, decoded_resp_ctrls, retoid, retval = self.result4(
msgid,all,timeout,
add_ctrls=0,add_intermediates=0,add_extop=0,
resp_ctrl_classes=resp_ctrl_classes
)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:764:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = (10, 1, -1)
kwargs = {'add_ctrls': 0, 'add_extop': 0, 'add_intermediates': 0, 'resp_ctrl_classes': None}

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
return f(*args, **kwargs)
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d0395850>, msgid = 10, all = 1
timeout = -1, add_ctrls = 0, add_intermediates = 0, add_extop = 0
resp_ctrl_classes = None

def result4(self,msgid=ldap.RES_ANY,all=1,timeout=None,add_ctrls=0,add_intermediates=0,add_extop=0,resp_ctrl_classes=None):
if timeout is None:
timeout = self.timeout
> ldap_result = self._ldap_call(self._l.result4,msgid,all,timeout,add_ctrls,add_intermediates,add_extop)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:774:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = (<built-in method result4 of LDAP object at 0x7f91d02edea0>, 10, 1, -1, 0, 0, ...)
kwargs = {}

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
return f(*args, **kwargs)
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d0395850>
func = <built-in method result4 of LDAP object at 0x7f91d02edea0>
args = (10, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
result = func(*args,**kwargs)
if __debug__ and self._trace_level>=2:
if func.__name__!="unbind_ext":
diagnostic_message_success = self._l.get_option(ldap.OPT_DIAGNOSTIC_MESSAGE)
finally:
self._ldap_object_lock.release()
except LDAPError as e:
exc_type,exc_value,exc_traceback = sys.exc_info()
try:
if 'info' not in e.args[0] and 'errno' in e.args[0]:
e.args[0]['info'] = strerror(e.args[0]['errno'])
except IndexError:
pass
if __debug__ and self._trace_level>=2:
self._trace_file.write('=> LDAPError - %s: %s\n' % (e.__class__.__name__,str(e)))
try:
> reraise(exc_type, exc_value, exc_traceback)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

exc_type = <class 'ldap.INSUFFICIENT_ACCESS'>
exc_value = INSUFFICIENT_ACCESS({'msgtype': 103, 'msgid': 10, 'result': 50, 'desc': 'Insufficient access', 'ctrls': [], 'info': "Insufficient 'write' privilege to the 'userPassword' attribute of entry 'uid=user1,dc=example,dc=com'.\n"})
exc_traceback = <traceback object at 0x7f91cca68380>

def reraise(exc_type, exc_value, exc_traceback):
"""Re-raise an exception given information from sys.exc_info()

Note that unlike six.reraise, this does not support replacing the
traceback. All arguments must come from a single sys.exc_info() call.
"""
# In Python 3, all exception info is contained in one object.
> raise exc_value

/usr/lib64/python3.9/site-packages/ldap/compat.py:46:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d0395850>
func = <built-in method result4 of LDAP object at 0x7f91d02edea0>
args = (10, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.INSUFFICIENT_ACCESS: {'msgtype': 103, 'msgid': 10, 'result': 50, 'desc': 'Insufficient access', 'ctrls': [], 'info': "Insufficient 'write' privilege to the 'userPassword' attribute of entry 'uid=user1,dc=example,dc=com'.\n"}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: INSUFFICIENT_ACCESS

During handling of the above exception, another exception occurred:

topology_st = <lib389.topologies.TopologyMain object at 0x7f91d0395190>

def test_ticket48228_test_global_policy(topology_st):
"""
Check global password policy
"""
log.info(' Set inhistory = 6')
set_global_pwpolicy(topology_st, 6)

log.info(' Bind as directory manager')
log.info("Bind as %s" % DN_DM)
topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)

log.info(' Add an entry' + USER1_DN)
try:
topology_st.standalone.add_s(
Entry((USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson".split(),
'sn': '1',
'cn': 'user 1',
'uid': 'user1',
'givenname': 'user',
'mail': 'user1@example.com',
'userpassword': 'password'})))
except ldap.LDAPError as e:
log.fatal('test_ticket48228: Failed to add user' + USER1_DN + ': error ' + e.message['desc'])
assert False

log.info(' Update the password of ' + USER1_DN + ' 6 times')
> update_passwd(topology_st, USER1_DN, 'password', 6)

/export/tests/tickets/ticket48228_test.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

topology_st = <lib389.topologies.TopologyMain object at 0x7f91d0395190>
user = 'uid=user1,dc=example,dc=com', passwd = 'password', times = 6

def update_passwd(topology_st, user, passwd, times):
# Set the default value
cpw = passwd
for i in range(times):
log.info(" Bind as {%s,%s}" % (user, cpw))
topology_st.standalone.simple_bind_s(user, cpw)
# Now update the value for this iter.
cpw = 'password%d' % i
try:
topology_st.standalone.modify_s(user, [(ldap.MOD_REPLACE, 'userpassword', cpw.encode())])
except ldap.LDAPError as e:
log.fatal(
> 'test_ticket48228: Failed to update the password ' + cpw + ' of user ' + user + ': error ' + e.message[
'desc'])
E AttributeError: 'INSUFFICIENT_ACCESS' object has no attribute 'message'

/export/tests/tickets/ticket48228_test.py:139: AttributeError
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Failed tickets/ticket48266_test.py::test_ticket48266_count_csn_evaluation 4.40
topology_m2 = <lib389.topologies.TopologyMain object at 0x7f91d0440eb0>
entries = None

def test_ticket48266_count_csn_evaluation(topology_m2, entries):
ents = topology_m2.ms["supplier1"].agreement.list(suffix=SUFFIX)
assert len(ents) == 1
> first_csn = _get_first_not_replicated_csn(topology_m2)

/export/tests/tickets/ticket48266_test.py:176:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

topology_m2 = <lib389.topologies.TopologyMain object at 0x7f91d0440eb0>

def _get_first_not_replicated_csn(topology_m2):
name = "cn=%s2,%s" % (NEW_ACCOUNT, SUFFIX)

# read the first CSN that will not be replicated
mod = [(ldap.MOD_REPLACE, 'telephonenumber', ensure_bytes('123456'))]
topology_m2.ms["supplier1"].modify_s(name, mod)
msgid = topology_m2.ms["supplier1"].search_ext(name, ldap.SCOPE_SUBTREE, 'objectclass=*', ['nscpentrywsi'])
rtype, rdata, rmsgid = topology_m2.ms["supplier1"].result2(msgid)
attrs = None
for dn, raw_attrs in rdata:
topology_m2.ms["supplier1"].log.info("dn: %s" % dn)
if 'nscpentrywsi' in raw_attrs:
attrs = raw_attrs['nscpentrywsi']
assert attrs
for attr in attrs:
if ensure_str(attr.lower()).startswith('telephonenumber'):
break
assert attr

log.info("############# %s " % name)
# now retrieve the CSN of the operation we are looking for
csn = None
found_ops = topology_m2.ms['supplier1'].ds_access_log.match(".*MOD dn=\"%s\".*" % name)
assert(len(found_ops) > 0)
found_op = topology_m2.ms['supplier1'].ds_access_log.parse_line(found_ops[-1])
log.info(found_op)

# Now look for the related CSN
found_csns = topology_m2.ms['supplier1'].ds_access_log.match(".*conn=%s op=%s RESULT.*" % (found_op['conn'], found_op['op']))
assert(len(found_csns) > 0)
found_csn = topology_m2.ms['supplier1'].ds_access_log.parse_line(found_csns[-1])
log.info(found_csn)
> return found_csn['csn']
E KeyError: 'csn'

/export/tests/tickets/ticket48266_test.py:147: KeyError
-------------------------------Captured log call--------------------------------
INFO lib389:ticket48266_test.py:125 dn: cn=new_account2,dc=example,dc=com INFO tests.tickets.ticket48266_test:ticket48266_test.py:134 ############# cn=new_account2,dc=example,dc=com INFO tests.tickets.ticket48266_test:ticket48266_test.py:140 {'action': 'MOD', 'timestamp': '[18/Aug/2021:01:30:06.830389702 -0400]', 'conn': '1', 'op': '11', 'rem': 'dn="cn=new_account2,dc=example,dc=com"', 'datetime': datetime.datetime(2021, 8, 18, 1, 0, 0, 830389, tzinfo=tzoffset(None, -14400))} INFO tests.tickets.ticket48266_test:ticket48266_test.py:146 {'action': 'RESULT', 'timestamp': '[18/Aug/2021:01:30:06.883076420 -0400]', 'conn': '1', 'op': '11', 'rem': 'err=0 tag=103 nentries=0 wtime=0.000071526 optime=0.052717969 etime=0.052783776 csn=611c9ade000000010000', 'datetime': datetime.datetime(2021, 8, 18, 1, 0, 0, 883076, tzinfo=tzoffset(None, -14400))}
Failed tickets/ticket48325_test.py::test_ticket48325 47.82
topology_m1h1c1 = <lib389.topologies.TopologyMain object at 0x7f91d0246ee0>

def test_ticket48325(topology_m1h1c1):
"""
Test that the RUV element order is correctly maintained when promoting
a hub or consumer.
"""

#
# Promote consumer to supplier
#
C1 = topology_m1h1c1.cs["consumer1"]
M1 = topology_m1h1c1.ms["supplier1"]
H1 = topology_m1h1c1.hs["hub1"]
repl = ReplicationManager(DEFAULT_SUFFIX)
> repl._ensure_changelog(C1)

/export/tests/tickets/ticket48325_test.py:53:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/replica.py:1928: in _ensure_changelog
cl.create(properties={
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:985: in create
return self._create(rdn, properties, basedn, ensure=False)
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:960: in _create
self._instance.add_ext_s(e, serverctrls=self._server_controls, clientctrls=self._client_controls, escapehatch='i am sure')
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:170: in inner
return f(ent.dn, ent.toTupleList(), *args[2:])
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:425: in add_ext_s
resp_type, resp_data, resp_msgid, resp_ctrls = self.result3(msgid,all=1,timeout=self.timeout)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:764: in result3
resp_type, resp_data, resp_msgid, decoded_resp_ctrls, retoid, retval = self.result4(
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:774: in result4
ldap_result = self._ldap_call(self._l.result4,msgid,all,timeout,add_ctrls,add_intermediates,add_extop)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340: in _ldap_call
reraise(exc_type, exc_value, exc_traceback)
/usr/lib64/python3.9/site-packages/ldap/compat.py:46: in reraise
raise exc_value
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d01bb5e0>
func = <built-in method result4 of LDAP object at 0x7f91d3b30240>
args = (15, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.UNWILLING_TO_PERFORM: {'msgtype': 105, 'msgid': 15, 'result': 53, 'desc': 'Server is unwilling to perform', 'ctrls': [], 'info': 'Changelog configuration is part of the backend configuration'}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: UNWILLING_TO_PERFORM
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39001, 'ldap-secureport': 63701, 'server-id': 'supplier1', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for hub1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39101, 'ldap-secureport': 63801, 'server-id': 'hub1', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for consumer1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39201, 'ldap-secureport': 63901, 'server-id': 'consumer1', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.topologies:topologies.py:527 Creating replication topology. INFO lib389.replica:replica.py:2084 SUCCESS: bootstrap to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39101 completed INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39101 is was created INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39101 is NOT working (expect cf4bee4e-52d6-4789-9c37-df0546b0681a / got description=None) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39101 is working INFO lib389.replica:replica.py:2211 SUCCESS: joined consumer from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39101 INFO lib389.replica:replica.py:2084 SUCCESS: bootstrap to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39201 completed INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39101 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39201 is was created INFO lib389.replica:replica.py:2268 SUCCESS: joined consumer from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39101 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39201 INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39201 is NOT working (expect 0fb6506e-c675-4f2e-814a-4d3241b8a9e3 / got description=cf4bee4e-52d6-4789-9c37-df0546b0681a) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39201 is working
Failed tickets/ticket48342_test.py::test_ticket4026 144.46
topology_m3 = <lib389.topologies.TopologyMain object at 0x7f91d01a9ca0>

def test_ticket4026(topology_m3):
"""Write your replication testcase here.

To access each DirSrv instance use: topology_m3.ms["supplier1"], topology_m3.ms["supplier2"],
..., topology_m3.hub1, ..., topology_m3.consumer1, ...

Also, if you need any testcase initialization,
please, write additional fixture for that(include finalizer).
"""

try:
topology_m3.ms["supplier1"].add_s(Entry((PEOPLE_DN, {
'objectclass': "top extensibleObject".split(),
'ou': 'people'})))
except ldap.ALREADY_EXISTS:
pass

topology_m3.ms["supplier1"].add_s(Entry(('ou=ranges,' + SUFFIX, {
'objectclass': 'top organizationalunit'.split(),
'ou': 'ranges'
})))
for cpt in range(MAX_ACCOUNTS):
name = "user%d" % (cpt)
topology_m3.ms["supplier1"].add_s(Entry(("uid=%s,%s" % (name, PEOPLE_DN), {
'objectclass': 'top posixAccount extensibleObject'.split(),
'uid': name,
'cn': name,
'uidNumber': '1',
'gidNumber': '1',
'homeDirectory': '/home/%s' % name
})))

# make supplier3 having more free slots that supplier2
# so supplier1 will contact supplier3
_dna_config(topology_m3.ms["supplier1"], nextValue=100, maxValue=10)
_dna_config(topology_m3.ms["supplier2"], nextValue=200, maxValue=10)
_dna_config(topology_m3.ms["supplier3"], nextValue=300, maxValue=3000)

# Turn on lots of error logging now.

mod = [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', b'16384')]
# mod = [(ldap.MOD_REPLACE, 'nsslapd-errorlog-level', '1')]
topology_m3.ms["supplier1"].modify_s('cn=config', mod)
topology_m3.ms["supplier2"].modify_s('cn=config', mod)
topology_m3.ms["supplier3"].modify_s('cn=config', mod)

# We need to wait for the event in dna.c to fire to start the servers
# see dna.c line 899
time.sleep(60)

# add on supplier1 users with description DNA
for cpt in range(10):
name = "user_with_desc1_%d" % (cpt)
topology_m3.ms["supplier1"].add_s(Entry(("uid=%s,%s" % (name, PEOPLE_DN), {
'objectclass': 'top posixAccount extensibleObject'.split(),
'uid': name,
'cn': name,
'description': '-1',
'uidNumber': '1',
'gidNumber': '1',
'homeDirectory': '/home/%s' % name
})))
# give time to negociate supplier1 <--> supplier3
time.sleep(10)
# add on supplier1 users with description DNA
for cpt in range(11, 20):
name = "user_with_desc1_%d" % (cpt)
> topology_m3.ms["supplier1"].add_s(Entry(("uid=%s,%s" % (name, PEOPLE_DN), {
'objectclass': 'top posixAccount extensibleObject'.split(),
'uid': name,
'cn': name,
'description': '-1',
'uidNumber': '1',
'gidNumber': '1',
'homeDirectory': '/home/%s' % name
})))

/export/tests/tickets/ticket48342_test.py:118:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:170: in inner
return f(ent.dn, ent.toTupleList(), *args[2:])
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:439: in add_s
return self.add_ext_s(dn,modlist,None,None)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:172: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:425: in add_ext_s
resp_type, resp_data, resp_msgid, resp_ctrls = self.result3(msgid,all=1,timeout=self.timeout)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:764: in result3
resp_type, resp_data, resp_msgid, decoded_resp_ctrls, retoid, retval = self.result4(
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:774: in result4
ldap_result = self._ldap_call(self._l.result4,msgid,all,timeout,add_ctrls,add_intermediates,add_extop)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340: in _ldap_call
reraise(exc_type, exc_value, exc_traceback)
/usr/lib64/python3.9/site-packages/ldap/compat.py:46: in reraise
raise exc_value
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d045d910>
func = <built-in method result4 of LDAP object at 0x7f91d01a9a20>
args = (15, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.OPERATIONS_ERROR: {'msgtype': 105, 'msgid': 15, 'result': 1, 'desc': 'Operations error', 'ctrls': [], 'info': 'Allocation of a new value for range cn=dna config,cn=distributed numeric assignment plugin,cn=plugins,cn=config failed! Unable to proceed.'}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: OPERATIONS_ERROR
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39001, 'ldap-secureport': 63701, 'server-id': 'supplier1', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier2 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39002, 'ldap-secureport': 63702, 'server-id': 'supplier2', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier3 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39003, 'ldap-secureport': 63703, 'server-id': 'supplier3', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.topologies:topologies.py:145 Creating replication topology. INFO lib389.topologies:topologies.py:159 Joining supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2084 SUCCESS: bootstrap to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 completed INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is was created INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is was created INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 1058a011-ba10-4ddf-bb0c-d570570d05bc / got description=None) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect c9d00958-5296-43e6-aa7c-c25900a7874b / got description=1058a011-ba10-4ddf-bb0c-d570570d05bc) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is working INFO lib389.replica:replica.py:2153 SUCCESS: joined supplier from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 INFO lib389.topologies:topologies.py:159 Joining supplier supplier3 to supplier1 ... INFO lib389.replica:replica.py:2084 SUCCESS: bootstrap to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 completed INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 is was created INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is was created INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 is NOT working (expect 0b656544-ec54-483b-bd2f-650c53719929 / got description=c9d00958-5296-43e6-aa7c-c25900a7874b) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect cc3d833d-b18c-4414-bde2-1f25e10b12aa / got description=0b656544-ec54-483b-bd2f-650c53719929) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is working INFO lib389.replica:replica.py:2153 SUCCESS: joined supplier from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier1 to supplier2 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier1 to supplier3 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier2 to supplier3 ... INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 is was created INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier3 to supplier1 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier3 to supplier2 ... INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is was created
-------------------------------Captured log call--------------------------------
INFO tests.tickets.ticket48342_test:ticket48342_test.py:19 Add dna plugin config entry...ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 INFO tests.tickets.ticket48342_test:ticket48342_test.py:37 Enable the DNA plugin... INFO tests.tickets.ticket48342_test:ticket48342_test.py:44 Restarting the server... INFO tests.tickets.ticket48342_test:ticket48342_test.py:19 Add dna plugin config entry...ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 INFO tests.tickets.ticket48342_test:ticket48342_test.py:37 Enable the DNA plugin... INFO tests.tickets.ticket48342_test:ticket48342_test.py:44 Restarting the server... INFO tests.tickets.ticket48342_test:ticket48342_test.py:19 Add dna plugin config entry...ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 INFO tests.tickets.ticket48342_test:ticket48342_test.py:37 Enable the DNA plugin... INFO tests.tickets.ticket48342_test:ticket48342_test.py:44 Restarting the server...
Failed tickets/ticket48637_test.py::test_ticket48637 16.72
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d374a2b0>

def test_ticket48637(topology_st):
"""Test for entry cache corruption

This requires automember and managed entry plugins to be configured.

Then remove the group that automember would use to trigger a failure when
adding a new entry. Automember fails, and then managed entry also fails.

Make sure a base search on the entry returns error 32
"""

if DEBUGGING:
# Add debugging steps(if any)...
pass

#
# Add our setup entries
#
try:
topology_st.standalone.add_s(Entry((PEOPLE_OU, {
'objectclass': 'top organizationalunit'.split(),
'ou': 'people'})))
except ldap.ALREADY_EXISTS:
pass
except ldap.LDAPError as e:
log.fatal('Failed to add people ou: ' + str(e))
assert False

try:
topology_st.standalone.add_s(Entry((GROUP_OU, {
'objectclass': 'top organizationalunit'.split(),
'ou': 'groups'})))
except ldap.ALREADY_EXISTS:
pass
except ldap.LDAPError as e:
log.fatal('Failed to add groups ou: ' + str(e))
assert False

try:
topology_st.standalone.add_s(Entry((MEP_OU, {
'objectclass': 'top extensibleObject'.split(),
'ou': 'mep'})))
except ldap.LDAPError as e:
log.fatal('Failed to add MEP ou: ' + str(e))
assert False

try:
topology_st.standalone.add_s(Entry((MEP_TEMPLATE, {
'objectclass': 'top mepTemplateEntry'.split(),
'cn': 'mep template',
'mepRDNAttr': 'cn',
'mepStaticAttr': 'objectclass: groupofuniquenames',
'mepMappedAttr': 'cn: $uid'})))
except ldap.LDAPError as e:
log.fatal('Failed to add MEP ou: ' + str(e))
assert False

#
# Configure automember
#
try:
topology_st.standalone.add_s(Entry((AUTO_DN, {
'cn': 'All Users',
'objectclass': ['top', 'autoMemberDefinition'],
'autoMemberScope': 'dc=example,dc=com',
'autoMemberFilter': 'objectclass=person',
'autoMemberDefaultGroup': GROUP_DN,
'autoMemberGroupingAttr': 'uniquemember:dn'})))
except ldap.LDAPError as e:
log.fatal('Failed to configure automember plugin : ' + str(e))
assert False

#
# Configure managed entry plugin
#
try:
topology_st.standalone.add_s(Entry((MEP_DN, {
'cn': 'MEP Definition',
'objectclass': ['top', 'extensibleObject'],
'originScope': 'ou=people,dc=example,dc=com',
'originFilter': 'objectclass=person',
'managedBase': 'ou=groups,dc=example,dc=com',
'managedTemplate': MEP_TEMPLATE})))
except ldap.LDAPError as e:
log.fatal('Failed to configure managed entry plugin : ' + str(e))
assert False

#
# Restart DS
#
topology_st.standalone.restart(timeout=30)

#
# Add entry that should fail since the automember group does not exist
#
try:
topology_st.standalone.add_s(Entry((USER_DN, {
'uid': 'test',
'objectclass': ['top', 'person', 'extensibleObject'],
'sn': 'test',
'cn': 'test'})))
except ldap.LDAPError as e:
pass

#
# Search for the entry - it should not be returned
#
try:
entry = topology_st.standalone.search_s(USER_DN, ldap.SCOPE_SUBTREE,
'objectclass=*')
if entry:
log.fatal('Entry was incorrectly returned')
> assert False
E assert False

/export/tests/tickets/ticket48637_test.py:139: AssertionError
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
-------------------------------Captured log call--------------------------------
CRITICAL tests.tickets.ticket48637_test:ticket48637_test.py:138 Entry was incorrectly returned
Failed tickets/ticket48784_test.py::test_ticket48784 68.18
Fixture "add_entry" called directly. Fixtures are not meant to be called directly,
but are created automatically when test functions request them as parameters.
See https://docs.pytest.org/en/latest/fixture.html for more information about fixtures, and
https://docs.pytest.org/en/latest/deprecations.html#calling-fixtures-directly about how to update your code.
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39001, 'ldap-secureport': 63701, 'server-id': 'supplier1', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier2 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39002, 'ldap-secureport': 63702, 'server-id': 'supplier2', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.topologies:topologies.py:145 Creating replication topology. INFO lib389.topologies:topologies.py:159 Joining supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2084 SUCCESS: bootstrap to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 completed INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is was created INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is was created INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 5cc98e97-5202-4cb6-b24c-444042a6795a / got description=None) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect dbed5c8c-dca7-4e57-87f1-8056bd027b03 / got description=5cc98e97-5202-4cb6-b24c-444042a6795a) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is working INFO lib389.replica:replica.py:2153 SUCCESS: joined supplier from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier1 to supplier2 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 already exists
-------------------------------Captured log call--------------------------------
INFO tests.tickets.ticket48784_test:ticket48784_test.py:90 Ticket 48784 - Allow usage of OpenLDAP libraries that don't use NSS for crypto INFO tests.tickets.ticket48784_test:ticket48784_test.py:50 ######################### Configure SSL/TLS agreements ###################### INFO tests.tickets.ticket48784_test:ticket48784_test.py:51 ######################## supplier1 <-- startTLS -> supplier2 ##################### INFO tests.tickets.ticket48784_test:ticket48784_test.py:53 ##### Update the agreement of supplier1 INFO tests.tickets.ticket48784_test:ticket48784_test.py:58 ##### Update the agreement of supplier2 INFO tests.tickets.ticket48784_test:ticket48784_test.py:68 ######################### Configure SSL/TLS agreements Done ######################
Failed tickets/ticket48798_test.py::test_ticket48798 20.82
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d04ad2b0>

def test_ticket48798(topology_st):
"""
Test DH param sizes offered by DS.

"""
topology_st.standalone.enable_tls()

# Confirm that we have a connection, and that it has DH

# Open a socket to the port.
# Check the security settings.
> size = check_socket_dh_param_size(topology_st.standalone.host, topology_st.standalone.sslport)

/export/tests/tickets/ticket48798_test.py:46:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/export/tests/tickets/ticket48798_test.py:23: in check_socket_dh_param_size
output = check_output(cmd, shell=True)
/usr/lib64/python3.9/subprocess.py:424: in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

input = None, capture_output = False, timeout = None, check = True
popenargs = ('echo quit | openssl s_client -connect ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:63601 -msg -cipher DH | grep -A 1 ServerKeyExchange',)
kwargs = {'shell': True, 'stdout': -1}
process = <Popen: returncode: 1 args: 'echo quit | openssl s_client -connect ci-vm-10-...>
stdout = b'', stderr = None, retcode = 1

def run(*popenargs,
input=None, capture_output=False, timeout=None, check=False, **kwargs):
"""Run command with arguments and return a CompletedProcess instance.

The returned instance will have attributes args, returncode, stdout and
stderr. By default, stdout and stderr are not captured, and those attributes
will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them.

If check is True and the exit code was non-zero, it raises a
CalledProcessError. The CalledProcessError object will have the return code
in the returncode attribute, and output & stderr attributes if those streams
were captured.

If timeout is given, and the process takes too long, a TimeoutExpired
exception will be raised.

There is an optional argument "input", allowing you to
pass bytes or a string to the subprocess's stdin. If you use this argument
you may not also use the Popen constructor's "stdin" argument, as
it will be used internally.

By default, all communication is in bytes, and therefore any "input" should
be bytes, and the stdout and stderr will be bytes. If in text mode, any
"input" should be a string, and stdout and stderr will be strings decoded
according to locale encoding, or by "encoding" if set. Text mode is
triggered by setting any of text, encoding, errors or universal_newlines.

The other arguments are the same as for the Popen constructor.
"""
if input is not None:
if kwargs.get('stdin') is not None:
raise ValueError('stdin and input arguments may not both be used.')
kwargs['stdin'] = PIPE

if capture_output:
if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None:
raise ValueError('stdout and stderr arguments may not be used '
'with capture_output.')
kwargs['stdout'] = PIPE
kwargs['stderr'] = PIPE

with Popen(*popenargs, **kwargs) as process:
try:
stdout, stderr = process.communicate(input, timeout=timeout)
except TimeoutExpired as exc:
process.kill()
if _mswindows:
# Windows accumulates the output in a single blocking
# read() call run on child threads, with the timeout
# being done in a join() on those threads. communicate()
# _after_ kill() is required to collect that and add it
# to the exception.
exc.stdout, exc.stderr = process.communicate()
else:
# POSIX _communicate already populated the output so
# far into the TimeoutExpired exception.
process.wait()
raise
except: # Including KeyboardInterrupt, communicate handled that.
process.kill()
# We don't call process.wait() as .__exit__ does that for us.
raise
retcode = process.poll()
if check and retcode:
> raise CalledProcessError(retcode, process.args,
output=stdout, stderr=stderr)
E subprocess.CalledProcessError: Command 'echo quit | openssl s_client -connect ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:63601 -msg -cipher DH | grep -A 1 ServerKeyExchange' returned non-zero exit status 1.

/usr/lib64/python3.9/subprocess.py:528: CalledProcessError
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
------------------------------Captured stderr call------------------------------
depth=1 C = AU, ST = Queensland, L = 389ds, O = testing, CN = ssca.389ds.example.com verify return:1 depth=0 C = AU, ST = Queensland, L = 389ds, O = testing, GN = 3ddb9dd7-35bc-4051-99fc-05e93c4aae1a, CN = ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com verify return:1 DONE
Failed tickets/ticket48808_test.py::test_ticket48808 19.41
topology_st = <lib389.topologies.TopologyMain object at 0x7f91cff820d0>
create_user = None

def test_ticket48808(topology_st, create_user):
log.info('Run multiple paging controls on a single connection')
users_num = 100
page_size = 30
users_list = add_users(topology_st, users_num)
search_flt = r'(uid=test*)'
searchreq_attrlist = ['dn', 'sn']

log.info('Set user bind')
topology_st.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD)

log.info('Create simple paged results control instance')
req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='')
controls = [req_ctrl]

for ii in range(3):
log.info('Iteration %d' % ii)
msgid = topology_st.standalone.search_ext(DEFAULT_SUFFIX,
ldap.SCOPE_SUBTREE,
search_flt,
searchreq_attrlist,
serverctrls=controls)
rtype, rdata, rmsgid, rctrls = topology_st.standalone.result3(msgid)
pctrls = [
c
for c in rctrls
if c.controlType == SimplePagedResultsControl.controlType
]

req_ctrl.cookie = pctrls[0].cookie
msgid = topology_st.standalone.search_ext(DEFAULT_SUFFIX,
ldap.SCOPE_SUBTREE,
search_flt,
searchreq_attrlist,
serverctrls=controls)
log.info('Set Directory Manager bind back')
topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
del_users(topology_st, users_list)

log.info('Abandon the search')
users_num = 10
page_size = 0
users_list = add_users(topology_st, users_num)
search_flt = r'(uid=test*)'
searchreq_attrlist = ['dn', 'sn']

log.info('Set user bind')
topology_st.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD)

log.info('Create simple paged results control instance')
req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='')
controls = [req_ctrl]

msgid = topology_st.standalone.search_ext(DEFAULT_SUFFIX,
ldap.SCOPE_SUBTREE,
search_flt,
searchreq_attrlist,
serverctrls=controls)
rtype, rdata, rmsgid, rctrls = topology_st.standalone.result3(msgid)
pctrls = [
c
for c in rctrls
if c.controlType == SimplePagedResultsControl.controlType
]
assert not pctrls[0].cookie

log.info('Set Directory Manager bind back')
topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
del_users(topology_st, users_list)

log.info("Search should fail with 'nsPagedSizeLimit = 5'"
"and 'nsslapd-pagedsizelimit = 15' with 10 users")
conf_attr = b'15'
user_attr = b'5'
expected_rs = ldap.SIZELIMIT_EXCEEDED
users_num = 10
page_size = 10
users_list = add_users(topology_st, users_num)
search_flt = r'(uid=test*)'
searchreq_attrlist = ['dn', 'sn']
conf_attr_bck = change_conf_attr(topology_st, DN_CONFIG,
'nsslapd-pagedsizelimit', conf_attr)
user_attr_bck = change_conf_attr(topology_st, TEST_USER_DN,
'nsPagedSizeLimit', user_attr)

log.info('Set user bind')
topology_st.standalone.simple_bind_s(TEST_USER_DN, TEST_USER_PWD)

log.info('Create simple paged results control instance')
req_ctrl = SimplePagedResultsControl(True, size=page_size, cookie='')
controls = [req_ctrl]

log.info('Expect to fail with SIZELIMIT_EXCEEDED')
with pytest.raises(expected_rs):
> all_results = paged_search(topology_st, controls,
search_flt, searchreq_attrlist)
E Failed: DID NOT RAISE <class 'ldap.SIZELIMIT_EXCEEDED'>

/export/tests/tickets/ticket48808_test.py:252: Failed
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
-------------------------------Captured log call--------------------------------
INFO tests.tickets.ticket48808_test:ticket48808_test.py:159 Run multiple paging controls on a single connection INFO tests.tickets.ticket48808_test:ticket48808_test.py:48 Adding 100 users INFO tests.tickets.ticket48808_test:ticket48808_test.py:166 Set user bind INFO tests.tickets.ticket48808_test:ticket48808_test.py:169 Create simple paged results control instance INFO tests.tickets.ticket48808_test:ticket48808_test.py:174 Iteration 0 INFO tests.tickets.ticket48808_test:ticket48808_test.py:174 Iteration 1 INFO tests.tickets.ticket48808_test:ticket48808_test.py:174 Iteration 2 INFO tests.tickets.ticket48808_test:ticket48808_test.py:193 Set Directory Manager bind back INFO tests.tickets.ticket48808_test:ticket48808_test.py:75 Deleting 100 users INFO tests.tickets.ticket48808_test:ticket48808_test.py:197 Abandon the search INFO tests.tickets.ticket48808_test:ticket48808_test.py:48 Adding 10 users INFO tests.tickets.ticket48808_test:ticket48808_test.py:204 Set user bind INFO tests.tickets.ticket48808_test:ticket48808_test.py:207 Create simple paged results control instance INFO tests.tickets.ticket48808_test:ticket48808_test.py:224 Set Directory Manager bind back INFO tests.tickets.ticket48808_test:ticket48808_test.py:75 Deleting 10 users INFO tests.tickets.ticket48808_test:ticket48808_test.py:228 Search should fail with 'nsPagedSizeLimit = 5'and 'nsslapd-pagedsizelimit = 15' with 10 users INFO tests.tickets.ticket48808_test:ticket48808_test.py:48 Adding 10 users INFO tests.tickets.ticket48808_test:ticket48808_test.py:95 Set nsslapd-pagedsizelimit to b'15'. Previous value - [b'0']. Modified suffix - cn=config. INFO tests.tickets.ticket48808_test:ticket48808_test.py:95 Set nsPagedSizeLimit to b'5'. Previous value - None. Modified suffix - uid=simplepaged_test,dc=example,dc=com. INFO tests.tickets.ticket48808_test:ticket48808_test.py:243 Set user bind INFO tests.tickets.ticket48808_test:ticket48808_test.py:246 Create simple paged results control instance INFO tests.tickets.ticket48808_test:ticket48808_test.py:250 Expect to fail with SIZELIMIT_EXCEEDED INFO tests.tickets.ticket48808_test:ticket48808_test.py:130 Getting page 0
Failed tickets/ticket48896_test.py::test_ticket48896 11.36
server = <lib389.DirSrv object at 0x7f91e0198e20>, curpw = 'password'
newpw = 'Abcd012+', expstr = 'be ok', rc = 0

def replace_pw(server, curpw, newpw, expstr, rc):
log.info('Binding as {%s, %s}' % (TESTDN, curpw))
server.simple_bind_s(TESTDN, curpw)

hit = 0
log.info('Replacing password: %s -> %s, which should %s' % (curpw, newpw, expstr))
try:
> server.modify_s(TESTDN, [(ldap.MOD_REPLACE, 'userPassword', ensure_bytes(newpw))])

/export/tests/tickets/ticket48896_test.py:53:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('uid=buser123,dc=example,dc=com', [(2, 'userPassword', b'Abcd012+')])
kwargs = {}
c_stack = [FrameInfo(frame=<frame at 0x55888a559f50, file '/usr/local/lib/python3.9/site-packages/lib389/__init__.py', line 174,...mbda>', code_context=[' self._inner_hookexec = lambda hook, methods, kwargs: hook.multicall(\n'], index=0), ...]
frame = FrameInfo(frame=<frame at 0x55888a56cb80, file '/export/tests/tickets/ticket48896_test.py', line 57, code replace_pw>,...code_context=[" server.modify_s(TESTDN, [(ldap.MOD_REPLACE, 'userPassword', ensure_bytes(newpw))])\n"], index=0)

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
return f(*args, **kwargs)
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91e0198e20>
dn = 'uid=buser123,dc=example,dc=com'
modlist = [(2, 'userPassword', b'Abcd012+')]

def modify_s(self,dn,modlist):
> return self.modify_ext_s(dn,modlist,None,None)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:640:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('uid=buser123,dc=example,dc=com', [(2, 'userPassword', b'Abcd012+')], None, None)
kwargs = {}

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
return f(*args, **kwargs)
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91e0198e20>
dn = 'uid=buser123,dc=example,dc=com'
modlist = [(2, 'userPassword', b'Abcd012+')], serverctrls = None
clientctrls = None

def modify_ext_s(self,dn,modlist,serverctrls=None,clientctrls=None):
msgid = self.modify_ext(dn,modlist,serverctrls,clientctrls)
> resp_type, resp_data, resp_msgid, resp_ctrls = self.result3(msgid,all=1,timeout=self.timeout)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:613:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = (8,), kwargs = {'all': 1, 'timeout': -1}

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
return f(*args, **kwargs)
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91e0198e20>, msgid = 8, all = 1
timeout = -1, resp_ctrl_classes = None

def result3(self,msgid=ldap.RES_ANY,all=1,timeout=None,resp_ctrl_classes=None):
> resp_type, resp_data, resp_msgid, decoded_resp_ctrls, retoid, retval = self.result4(
msgid,all,timeout,
add_ctrls=0,add_intermediates=0,add_extop=0,
resp_ctrl_classes=resp_ctrl_classes
)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:764:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = (8, 1, -1)
kwargs = {'add_ctrls': 0, 'add_extop': 0, 'add_intermediates': 0, 'resp_ctrl_classes': None}

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
return f(*args, **kwargs)
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91e0198e20>, msgid = 8, all = 1
timeout = -1, add_ctrls = 0, add_intermediates = 0, add_extop = 0
resp_ctrl_classes = None

def result4(self,msgid=ldap.RES_ANY,all=1,timeout=None,add_ctrls=0,add_intermediates=0,add_extop=0,resp_ctrl_classes=None):
if timeout is None:
timeout = self.timeout
> ldap_result = self._ldap_call(self._l.result4,msgid,all,timeout,add_ctrls,add_intermediates,add_extop)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:774:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = (<built-in method result4 of LDAP object at 0x7f91d0430d50>, 8, 1, -1, 0, 0, ...)
kwargs = {}

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
return f(*args, **kwargs)
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91e0198e20>
func = <built-in method result4 of LDAP object at 0x7f91d0430d50>
args = (8, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
result = func(*args,**kwargs)
if __debug__ and self._trace_level>=2:
if func.__name__!="unbind_ext":
diagnostic_message_success = self._l.get_option(ldap.OPT_DIAGNOSTIC_MESSAGE)
finally:
self._ldap_object_lock.release()
except LDAPError as e:
exc_type,exc_value,exc_traceback = sys.exc_info()
try:
if 'info' not in e.args[0] and 'errno' in e.args[0]:
e.args[0]['info'] = strerror(e.args[0]['errno'])
except IndexError:
pass
if __debug__ and self._trace_level>=2:
self._trace_file.write('=> LDAPError - %s: %s\n' % (e.__class__.__name__,str(e)))
try:
> reraise(exc_type, exc_value, exc_traceback)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

exc_type = <class 'ldap.INSUFFICIENT_ACCESS'>
exc_value = INSUFFICIENT_ACCESS({'msgtype': 103, 'msgid': 8, 'result': 50, 'desc': 'Insufficient access', 'ctrls': [], 'info': "Insufficient 'write' privilege to the 'userPassword' attribute of entry 'uid=buser123,dc=example,dc=com'.\n"})
exc_traceback = <traceback object at 0x7f91cffab380>

def reraise(exc_type, exc_value, exc_traceback):
"""Re-raise an exception given information from sys.exc_info()

Note that unlike six.reraise, this does not support replacing the
traceback. All arguments must come from a single sys.exc_info() call.
"""
# In Python 3, all exception info is contained in one object.
> raise exc_value

/usr/lib64/python3.9/site-packages/ldap/compat.py:46:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91e0198e20>
func = <built-in method result4 of LDAP object at 0x7f91d0430d50>
args = (8, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.INSUFFICIENT_ACCESS: {'msgtype': 103, 'msgid': 8, 'result': 50, 'desc': 'Insufficient access', 'ctrls': [], 'info': "Insufficient 'write' privilege to the 'userPassword' attribute of entry 'uid=buser123,dc=example,dc=com'.\n"}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: INSUFFICIENT_ACCESS

During handling of the above exception, another exception occurred:

topology_st = <lib389.topologies.TopologyMain object at 0x7f91e0198ee0>

def test_ticket48896(topology_st):
"""
"""
log.info('Testing Ticket 48896 - Default Setting for passwordMinTokenLength does not work')

log.info("Setting global password policy with password syntax.")
topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
topology_st.standalone.modify_s(CONFIG_DN, [(ldap.MOD_REPLACE, 'passwordCheckSyntax', b'on'),
(ldap.MOD_REPLACE, 'nsslapd-pwpolicy-local', b'on')])

config = topology_st.standalone.search_s(CONFIG_DN, ldap.SCOPE_BASE, 'cn=*')
mintokenlen = config[0].getValue('passwordMinTokenLength')
history = config[0].getValue('passwordInHistory')

log.info('Default passwordMinTokenLength == %s' % mintokenlen)
log.info('Default passwordInHistory == %s' % history)

log.info('Adding a user.')
curpw = 'password'
topology_st.standalone.add_s(Entry((TESTDN,
{'objectclass': "top person organizationalPerson inetOrgPerson".split(),
'cn': 'test user',
'sn': 'user',
'userPassword': curpw})))

newpw = 'Abcd012+'
exp = 'be ok'
rc = 0
> replace_pw(topology_st.standalone, curpw, newpw, exp, rc)

/export/tests/tickets/ticket48896_test.py:94:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

server = <lib389.DirSrv object at 0x7f91e0198e20>, curpw = 'password'
newpw = 'Abcd012+', expstr = 'be ok', rc = 0

def replace_pw(server, curpw, newpw, expstr, rc):
log.info('Binding as {%s, %s}' % (TESTDN, curpw))
server.simple_bind_s(TESTDN, curpw)

hit = 0
log.info('Replacing password: %s -> %s, which should %s' % (curpw, newpw, expstr))
try:
server.modify_s(TESTDN, [(ldap.MOD_REPLACE, 'userPassword', ensure_bytes(newpw))])
except Exception as e:
log.info("Exception (expected): %s" % type(e).__name__)
hit = 1
> assert isinstance(e, rc)
E TypeError: isinstance() arg 2 must be a type or tuple of types

/export/tests/tickets/ticket48896_test.py:57: TypeError
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
-------------------------------Captured log call--------------------------------
INFO tests.tickets.ticket48896_test:ticket48896_test.py:69 Testing Ticket 48896 - Default Setting for passwordMinTokenLength does not work INFO tests.tickets.ticket48896_test:ticket48896_test.py:71 Setting global password policy with password syntax. INFO tests.tickets.ticket48896_test:ticket48896_test.py:80 Default passwordMinTokenLength == b'3' INFO tests.tickets.ticket48896_test:ticket48896_test.py:81 Default passwordInHistory == b'6' INFO tests.tickets.ticket48896_test:ticket48896_test.py:83 Adding a user. INFO tests.tickets.ticket48896_test:ticket48896_test.py:47 Binding as {uid=buser123,dc=example,dc=com, password} INFO tests.tickets.ticket48896_test:ticket48896_test.py:51 Replacing password: password -> Abcd012+, which should be ok INFO tests.tickets.ticket48896_test:ticket48896_test.py:55 Exception (expected): INSUFFICIENT_ACCESS
Failed tickets/ticket48906_test.py::test_ticket48906_dblock_edit_update 2.51
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d0251640>

def test_ticket48906_dblock_edit_update(topology_st):
topology_st.standalone.log.info('###################################')
topology_st.standalone.log.info('###')
topology_st.standalone.log.info('### Check that after stop')
topology_st.standalone.log.info('### - dse.ldif contains DBLOCK_LDAP_UPDATE')
topology_st.standalone.log.info('### - guardian contains DBLOCK_LDAP_UPDATE')
topology_st.standalone.log.info('### Check that edit dse+restart')
topology_st.standalone.log.info('### - monitor contains DBLOCK_EDIT_UPDATE')
topology_st.standalone.log.info('### - configured contains DBLOCK_EDIT_UPDATE')
topology_st.standalone.log.info('### Check that after stop')
topology_st.standalone.log.info('### - dse.ldif contains DBLOCK_EDIT_UPDATE')
topology_st.standalone.log.info('### - guardian contains DBLOCK_EDIT_UPDATE')
topology_st.standalone.log.info('###')
topology_st.standalone.log.info('###################################')

topology_st.standalone.stop(timeout=10)
_check_dse_ldif_value(topology_st, attr=DBLOCK_ATTR_CONFIG, expected_value=DBLOCK_LDAP_UPDATE)
_check_guardian_value(topology_st, attr=DBLOCK_ATTR_GUARDIAN, expected_value=DBLOCK_LDAP_UPDATE)

dse_ref_ldif = topology_st.standalone.confdir + '/dse.ldif'
dse_new_ldif = topology_st.standalone.confdir + '/dse.ldif.new'
dse_ref = open(dse_ref_ldif, "r")
dse_new = open(dse_new_ldif, "w")

# Change the DBLOCK in dse.ldif
value = None
while True:
line = dse_ref.readline()
if (line == ''):
break
elif DBLOCK_ATTR_CONFIG in line.lower():
value = line.split()[1]
> assert (value == DBLOCK_LDAP_UPDATE)
E AssertionError: assert 'on' == '20000'
E - 20000
E + on

/export/tests/tickets/ticket48906_test.py:222: AssertionError
------------------------------Captured stdout call------------------------------
line locks:20000 expected_value 20000 value 20000
-------------------------------Captured log call--------------------------------
INFO lib389:ticket48906_test.py:191 ################################### INFO lib389:ticket48906_test.py:192 ### INFO lib389:ticket48906_test.py:193 ### Check that after stop INFO lib389:ticket48906_test.py:194 ### - dse.ldif contains DBLOCK_LDAP_UPDATE INFO lib389:ticket48906_test.py:195 ### - guardian contains DBLOCK_LDAP_UPDATE INFO lib389:ticket48906_test.py:196 ### Check that edit dse+restart INFO lib389:ticket48906_test.py:197 ### - monitor contains DBLOCK_EDIT_UPDATE INFO lib389:ticket48906_test.py:198 ### - configured contains DBLOCK_EDIT_UPDATE INFO lib389:ticket48906_test.py:199 ### Check that after stop INFO lib389:ticket48906_test.py:200 ### - dse.ldif contains DBLOCK_EDIT_UPDATE INFO lib389:ticket48906_test.py:201 ### - guardian contains DBLOCK_EDIT_UPDATE INFO lib389:ticket48906_test.py:202 ### INFO lib389:ticket48906_test.py:203 ###################################
Failed tickets/ticket48906_test.py::test_ticket48906_dblock_robust 4.28
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d0251640>

def test_ticket48906_dblock_robust(topology_st):
topology_st.standalone.log.info('###################################')
topology_st.standalone.log.info('###')
topology_st.standalone.log.info('### Check that the following values are rejected')
topology_st.standalone.log.info('### - negative value')
topology_st.standalone.log.info('### - insuffisant value')
topology_st.standalone.log.info('### - invalid value')
topology_st.standalone.log.info('### Check that minimum value is accepted')
topology_st.standalone.log.info('###')
topology_st.standalone.log.info('###################################')

topology_st.standalone.start(timeout=10)
> _check_monitored_value(topology_st, DBLOCK_EDIT_UPDATE)

/export/tests/tickets/ticket48906_test.py:256:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

topology_st = <lib389.topologies.TopologyMain object at 0x7f91d0251640>
expected_value = '40000'

def _check_monitored_value(topology_st, expected_value):
entries = topology_st.standalone.search_s(ldbm_monitor, ldap.SCOPE_BASE, '(objectclass=*)')
> assert (entries[0].hasValue(DBLOCK_ATTR_MONITOR) and entries[0].getValue(DBLOCK_ATTR_MONITOR) == ensure_bytes(expected_value))
E AssertionError: assert (True and b'20000' == b'40000'
E + where True = <bound method Entry.hasValue of dn: cn=database,cn=monitor,cn=ldbm database,cn=plugins,cn=config\ncn: database\nnsslapd-...ate: 0\nnsslapd-db-pages-in-use: 11\nnsslapd-db-txn-region-wait-rate: 1\nobjectClass: top\nobjectClass: extensibleObject\n\n>('nsslapd-db-configured-locks')
E + where <bound method Entry.hasValue of dn: cn=database,cn=monitor,cn=ldbm database,cn=plugins,cn=config\ncn: database\nnsslapd-...ate: 0\nnsslapd-db-pages-in-use: 11\nnsslapd-db-txn-region-wait-rate: 1\nobjectClass: top\nobjectClass: extensibleObject\n\n> = dn: cn=database,cn=monitor,cn=ldbm database,cn=plugins,cn=config\ncn: database\nnsslapd-db-abort-rate: 0\nnsslapd-db-acti...rate: 0\nnsslapd-db-pages-in-use: 11\nnsslapd-db-txn-region-wait-rate: 1\nobjectClass: top\nobjectClass: extensibleObject\n\n.hasValue
E At index 0 diff: b'2' != b'4'
E Full diff:
E - b'40000'
E ? ^
E + b'20000'
E ? ^)

/export/tests/tickets/ticket48906_test.py:105: AssertionError
-------------------------------Captured log call--------------------------------
INFO lib389:ticket48906_test.py:245 ################################### INFO lib389:ticket48906_test.py:246 ### INFO lib389:ticket48906_test.py:247 ### Check that the following values are rejected INFO lib389:ticket48906_test.py:248 ### - negative value INFO lib389:ticket48906_test.py:249 ### - insuffisant value INFO lib389:ticket48906_test.py:250 ### - invalid value INFO lib389:ticket48906_test.py:251 ### Check that minimum value is accepted INFO lib389:ticket48906_test.py:252 ### INFO lib389:ticket48906_test.py:253 ###################################
Failed tickets/ticket48916_test.py::test_ticket48916 84.96
topology_m2 = <lib389.topologies.TopologyMain object at 0x7f91e01027c0>

def test_ticket48916(topology_m2):
"""
https://bugzilla.redhat.com/show_bug.cgi?id=1353629

This is an issue with ID exhaustion in DNA causing a crash.

To access each DirSrv instance use: topology_m2.ms["supplier1"], topology_m2.ms["supplier2"],
..., topology_m2.hub1, ..., topology_m2.consumer1,...


"""

if DEBUGGING:
# Add debugging steps(if any)...
pass

# Enable the plugin on both servers

dna_m1 = topology_m2.ms["supplier1"].plugins.get('Distributed Numeric Assignment Plugin')
dna_m2 = topology_m2.ms["supplier2"].plugins.get('Distributed Numeric Assignment Plugin')

# Configure it
# Create the container for the ranges to go into.

topology_m2.ms["supplier1"].add_s(Entry(
('ou=Ranges,%s' % DEFAULT_SUFFIX, {
'objectClass': 'top organizationalUnit'.split(' '),
'ou': 'Ranges',
})
))

# Create the dnaAdmin?

# For now we just pinch the dn from the dna_m* types, and add the relevant child config
# but in the future, this could be a better plugin template type from lib389

config_dn = dna_m1.dn

topology_m2.ms["supplier1"].add_s(Entry(
('cn=uids,%s' % config_dn, {
'objectClass': 'top dnaPluginConfig'.split(' '),
'cn': 'uids',
'dnatype': 'uidNumber gidNumber'.split(' '),
'dnafilter': '(objectclass=posixAccount)',
'dnascope': '%s' % DEFAULT_SUFFIX,
'dnaNextValue': '1',
'dnaMaxValue': '50',
'dnasharedcfgdn': 'ou=Ranges,%s' % DEFAULT_SUFFIX,
'dnaThreshold': '0',
'dnaRangeRequestTimeout': '60',
'dnaMagicRegen': '-1',
'dnaRemoteBindDN': 'uid=dnaAdmin,ou=People,%s' % DEFAULT_SUFFIX,
'dnaRemoteBindCred': 'secret123',
'dnaNextRange': '80-90'
})
))

topology_m2.ms["supplier2"].add_s(Entry(
('cn=uids,%s' % config_dn, {
'objectClass': 'top dnaPluginConfig'.split(' '),
'cn': 'uids',
'dnatype': 'uidNumber gidNumber'.split(' '),
'dnafilter': '(objectclass=posixAccount)',
'dnascope': '%s' % DEFAULT_SUFFIX,
'dnaNextValue': '61',
'dnaMaxValue': '70',
'dnasharedcfgdn': 'ou=Ranges,%s' % DEFAULT_SUFFIX,
'dnaThreshold': '2',
'dnaRangeRequestTimeout': '60',
'dnaMagicRegen': '-1',
'dnaRemoteBindDN': 'uid=dnaAdmin,ou=People,%s' % DEFAULT_SUFFIX,
'dnaRemoteBindCred': 'secret123',
})
))

# Enable the plugins
dna_m1.enable()
dna_m2.enable()

# Restart the instances
topology_m2.ms["supplier1"].restart(60)
topology_m2.ms["supplier2"].restart(60)

# Wait for a replication .....
time.sleep(40)

# Allocate the 10 members to exhaust

for i in range(1, 11):
_create_user(topology_m2.ms["supplier2"], i)

# Allocate the 11th
> _create_user(topology_m2.ms["supplier2"], 11)

/export/tests/tickets/ticket48916_test.py:126:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/export/tests/tickets/ticket48916_test.py:21: in _create_user
inst.add_s(Entry(
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:170: in inner
return f(ent.dn, ent.toTupleList(), *args[2:])
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:439: in add_s
return self.add_ext_s(dn,modlist,None,None)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:172: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:425: in add_ext_s
resp_type, resp_data, resp_msgid, resp_ctrls = self.result3(msgid,all=1,timeout=self.timeout)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:764: in result3
resp_type, resp_data, resp_msgid, decoded_resp_ctrls, retoid, retval = self.result4(
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:774: in result4
ldap_result = self._ldap_call(self._l.result4,msgid,all,timeout,add_ctrls,add_intermediates,add_extop)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340: in _ldap_call
reraise(exc_type, exc_value, exc_traceback)
/usr/lib64/python3.9/site-packages/ldap/compat.py:46: in reraise
raise exc_value
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91e01b4340>
func = <built-in method result4 of LDAP object at 0x7f91e416d1e0>
args = (13, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.OPERATIONS_ERROR: {'msgtype': 105, 'msgid': 13, 'result': 1, 'desc': 'Operations error', 'ctrls': [], 'info': 'Allocation of a new value for range cn=uids,cn=distributed numeric assignment plugin,cn=plugins,cn=config failed! Unable to proceed.'}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: OPERATIONS_ERROR
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39001, 'ldap-secureport': 63701, 'server-id': 'supplier1', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier2 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39002, 'ldap-secureport': 63702, 'server-id': 'supplier2', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.topologies:topologies.py:145 Creating replication topology. INFO lib389.topologies:topologies.py:159 Joining supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2084 SUCCESS: bootstrap to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 completed INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is was created INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is was created INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect a6a084db-41b5-4db3-85ae-e3873be3ddb5 / got description=None) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect 9b92210c-170d-46dd-b9e6-cf461d864f8b / got description=a6a084db-41b5-4db3-85ae-e3873be3ddb5) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is working INFO lib389.replica:replica.py:2153 SUCCESS: joined supplier from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier1 to supplier2 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 already exists
Failed tickets/ticket48956_test.py::test_ticket48956 16.99
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d38e1d00>

def test_ticket48956(topology_st):
"""Write your testcase here...

Also, if you need any testcase initialization,
please, write additional fixture for that(include finalizer).

"""

topology_st.standalone.modify_s(ACCT_POLICY_PLUGIN_DN,
[(ldap.MOD_REPLACE, 'nsslapd-pluginarg0', ensure_bytes(ACCT_POLICY_CONFIG_DN))])

topology_st.standalone.modify_s(ACCT_POLICY_CONFIG_DN, [(ldap.MOD_REPLACE, 'alwaysrecordlogin', b'yes'),
(ldap.MOD_REPLACE, 'stateattrname', b'lastLoginTime'),
(ldap.MOD_REPLACE, 'altstateattrname', b'createTimestamp'),
(ldap.MOD_REPLACE, 'specattrname', b'acctPolicySubentry'),
(ldap.MOD_REPLACE, 'limitattrname',
b'accountInactivityLimit')])

# Enable the plugins
topology_st.standalone.plugins.enable(name=PLUGIN_ACCT_POLICY)
topology_st.standalone.restart(timeout=10)

# Check inactivity on standard suffix (short)
> _check_inactivity(topology_st, SUFFIX)

/export/tests/tickets/ticket48956_test.py:107:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/export/tests/tickets/ticket48956_test.py:78: in _check_inactivity
assert (_check_status(topology_st, TEST_USER_DN, b'- activated'))
/export/tests/tickets/ticket48956_test.py:39: in _check_status
output = subprocess.check_output([nsaccountstatus, '-Z', topology_st.standalone.serverid,
/usr/lib64/python3.9/subprocess.py:424: in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
/usr/lib64/python3.9/subprocess.py:505: in run
with Popen(*popenargs, **kwargs) as process:
/usr/lib64/python3.9/subprocess.py:951: in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <Popen: returncode: 255 args: ['/usr/sbin/ns-accountstatus.pl', '-Z', 'stand...>
args = ['/usr/sbin/ns-accountstatus.pl', '-Z', 'standalone1', '-D', 'cn=Directory Manager', '-w', ...]
executable = b'/usr/sbin/ns-accountstatus.pl', preexec_fn = None
close_fds = True, pass_fds = (), cwd = None, env = None, startupinfo = None
creationflags = 0, shell = False, p2cread = -1, p2cwrite = -1, c2pread = 133
c2pwrite = 134, errread = -1, errwrite = -1, restore_signals = True, gid = None
gids = None, uid = None, umask = -1, start_new_session = False

def _execute_child(self, args, executable, preexec_fn, close_fds,
pass_fds, cwd, env,
startupinfo, creationflags, shell,
p2cread, p2cwrite,
c2pread, c2pwrite,
errread, errwrite,
restore_signals,
gid, gids, uid, umask,
start_new_session):
"""Execute program (POSIX version)"""

if isinstance(args, (str, bytes)):
args = [args]
elif isinstance(args, os.PathLike):
if shell:
raise TypeError('path-like args is not allowed when '
'shell is true')
args = [args]
else:
args = list(args)

if shell:
# On Android the default shell is at '/system/bin/sh'.
unix_shell = ('/system/bin/sh' if
hasattr(sys, 'getandroidapilevel') else '/bin/sh')
args = [unix_shell, "-c"] + args
if executable:
args[0] = executable

if executable is None:
executable = args[0]

sys.audit("subprocess.Popen", executable, args, cwd, env)

if (_USE_POSIX_SPAWN
and os.path.dirname(executable)
and preexec_fn is None
and not close_fds
and not pass_fds
and cwd is None
and (p2cread == -1 or p2cread > 2)
and (c2pwrite == -1 or c2pwrite > 2)
and (errwrite == -1 or errwrite > 2)
and not start_new_session
and gid is None
and gids is None
and uid is None
and umask < 0):
self._posix_spawn(args, executable, env, restore_signals,
p2cread, p2cwrite,
c2pread, c2pwrite,
errread, errwrite)
return

orig_executable = executable

# For transferring possible exec failure from child to parent.
# Data format: "exception name:hex errno:description"
# Pickle is not used; it is complex and involves memory allocation.
errpipe_read, errpipe_write = os.pipe()
# errpipe_write must not be in the standard io 0, 1, or 2 fd range.
low_fds_to_close = []
while errpipe_write < 3:
low_fds_to_close.append(errpipe_write)
errpipe_write = os.dup(errpipe_write)
for low_fd in low_fds_to_close:
os.close(low_fd)
try:
try:
# We must avoid complex work that could involve
# malloc or free in the child process to avoid
# potential deadlocks, thus we do all this here.
# and pass it to fork_exec()

if env is not None:
env_list = []
for k, v in env.items():
k = os.fsencode(k)
if b'=' in k:
raise ValueError("illegal environment variable name")
env_list.append(k + b'=' + os.fsencode(v))
else:
env_list = None # Use execv instead of execve.
executable = os.fsencode(executable)
if os.path.dirname(executable):
executable_list = (executable,)
else:
# This matches the behavior of os._execvpe().
executable_list = tuple(
os.path.join(os.fsencode(dir), executable)
for dir in os.get_exec_path(env))
fds_to_keep = set(pass_fds)
fds_to_keep.add(errpipe_write)
self.pid = _posixsubprocess.fork_exec(
args, executable_list,
close_fds, tuple(sorted(map(int, fds_to_keep))),
cwd, env_list,
p2cread, p2cwrite, c2pread, c2pwrite,
errread, errwrite,
errpipe_read, errpipe_write,
restore_signals, start_new_session,
gid, gids, uid, umask,
preexec_fn)
self._child_created = True
finally:
# be sure the FD is closed no matter what
os.close(errpipe_write)

self._close_pipe_fds(p2cread, p2cwrite,
c2pread, c2pwrite,
errread, errwrite)

# Wait for exec to fail or succeed; possibly raising an
# exception (limited in size)
errpipe_data = bytearray()
while True:
part = os.read(errpipe_read, 50000)
errpipe_data += part
if not part or len(errpipe_data) > 50000:
break
finally:
# be sure the FD is closed no matter what
os.close(errpipe_read)

if errpipe_data:
try:
pid, sts = os.waitpid(self.pid, 0)
if pid == self.pid:
self._handle_exitstatus(sts)
else:
self.returncode = sys.maxsize
except ChildProcessError:
pass

try:
exception_name, hex_errno, err_msg = (
errpipe_data.split(b':', 2))
# The encoding here should match the encoding
# written in by the subprocess implementations
# like _posixsubprocess
err_msg = err_msg.decode()
except ValueError:
exception_name = b'SubprocessError'
hex_errno = b'0'
err_msg = 'Bad exception data from child: {!r}'.format(
bytes(errpipe_data))
child_exception_type = getattr(
builtins, exception_name.decode('ascii'),
SubprocessError)
if issubclass(child_exception_type, OSError) and hex_errno:
errno_num = int(hex_errno, 16)
child_exec_never_called = (err_msg == "noexec")
if child_exec_never_called:
err_msg = ""
# The error must be from chdir(cwd).
err_filename = cwd
else:
err_filename = orig_executable
if errno_num != 0:
err_msg = os.strerror(errno_num)
> raise child_exception_type(errno_num, err_msg, err_filename)
E FileNotFoundError: [Errno 2] No such file or directory: '/usr/sbin/ns-accountstatus.pl'

/usr/lib64/python3.9/subprocess.py:1821: FileNotFoundError
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
-------------------------------Captured log call--------------------------------
INFO tests.tickets.ticket48956_test:ticket48956_test.py:54 ######################### Adding Account Policy entry: cn=Account Inactivation Policy,dc=example,dc=com ###################### INFO tests.tickets.ticket48956_test:ticket48956_test.py:61 ######################### Adding Test User entry: uid=ticket48956user,dc=example,dc=com ######################
Failed tickets/ticket49039_test.py::test_ticket49039 22.13
topo = <lib389.topologies.TopologyMain object at 0x7f91ce734130>

def test_ticket49039(topo):
"""Test "password must change" verses "password min age". Min age should not
block password update if the password was reset.
"""

# Setup SSL (for ldappasswd test)
topo.standalone.enable_tls()

# Configure password policy
try:
policy = PwPolicyManager(topo.standalone)
policy.set_global_policy(properties={'nsslapd-pwpolicy-local': 'on',
'passwordMustChange': 'on',
'passwordExp': 'on',
'passwordMaxAge': '86400000',
'passwordMinAge': '8640000',
'passwordChange': 'on'})
except ldap.LDAPError as e:
log.fatal('Failed to set password policy: ' + str(e))

# Add user, bind, and set password
try:
topo.standalone.add_s(Entry((USER_DN, {
'objectclass': 'top extensibleObject'.split(),
'uid': 'user1',
'userpassword': PASSWORD
})))
except ldap.LDAPError as e:
log.fatal('Failed to add user: error ' + e.args[0]['desc'])
assert False

# Reset password as RootDN
try:
topo.standalone.modify_s(USER_DN, [(ldap.MOD_REPLACE, 'userpassword', ensure_bytes(PASSWORD))])
except ldap.LDAPError as e:
log.fatal('Failed to bind: error ' + e.args[0]['desc'])
assert False

time.sleep(1)

# Reset password as user
try:
topo.standalone.simple_bind_s(USER_DN, PASSWORD)
except ldap.LDAPError as e:
log.fatal('Failed to bind: error ' + e.args[0]['desc'])
assert False

try:
> topo.standalone.modify_s(USER_DN, [(ldap.MOD_REPLACE, 'userpassword', ensure_bytes(PASSWORD))])

/export/tests/tickets/ticket49039_test.py:75:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('uid=user,dc=example,dc=com', [(2, 'userpassword', b'password')])
kwargs = {}
c_stack = [FrameInfo(frame=<frame at 0x55888a424470, file '/usr/local/lib/python3.9/site-packages/lib389/__init__.py', line 174,...93, function='_hookexec', code_context=[' return self._inner_hookexec(hook, methods, kwargs)\n'], index=0), ...]
frame = FrameInfo(frame=<frame at 0x55888a52c670, file '/export/tests/tickets/ticket49039_test.py', line 78, code test_ticket4...[" topo.standalone.modify_s(USER_DN, [(ldap.MOD_REPLACE, 'userpassword', ensure_bytes(PASSWORD))])\n"], index=0)

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
return f(*args, **kwargs)
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91ce7340d0>
dn = 'uid=user,dc=example,dc=com', modlist = [(2, 'userpassword', b'password')]

def modify_s(self,dn,modlist):
> return self.modify_ext_s(dn,modlist,None,None)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:640:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('uid=user,dc=example,dc=com', [(2, 'userpassword', b'password')], None, None)
kwargs = {}

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
return f(*args, **kwargs)
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91ce7340d0>
dn = 'uid=user,dc=example,dc=com', modlist = [(2, 'userpassword', b'password')]
serverctrls = None, clientctrls = None

def modify_ext_s(self,dn,modlist,serverctrls=None,clientctrls=None):
msgid = self.modify_ext(dn,modlist,serverctrls,clientctrls)
> resp_type, resp_data, resp_msgid, resp_ctrls = self.result3(msgid,all=1,timeout=self.timeout)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:613:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = (7,), kwargs = {'all': 1, 'timeout': -1}

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
return f(*args, **kwargs)
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91ce7340d0>, msgid = 7, all = 1
timeout = -1, resp_ctrl_classes = None

def result3(self,msgid=ldap.RES_ANY,all=1,timeout=None,resp_ctrl_classes=None):
> resp_type, resp_data, resp_msgid, decoded_resp_ctrls, retoid, retval = self.result4(
msgid,all,timeout,
add_ctrls=0,add_intermediates=0,add_extop=0,
resp_ctrl_classes=resp_ctrl_classes
)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:764:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = (7, 1, -1)
kwargs = {'add_ctrls': 0, 'add_extop': 0, 'add_intermediates': 0, 'resp_ctrl_classes': None}

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
return f(*args, **kwargs)
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91ce7340d0>, msgid = 7, all = 1
timeout = -1, add_ctrls = 0, add_intermediates = 0, add_extop = 0
resp_ctrl_classes = None

def result4(self,msgid=ldap.RES_ANY,all=1,timeout=None,add_ctrls=0,add_intermediates=0,add_extop=0,resp_ctrl_classes=None):
if timeout is None:
timeout = self.timeout
> ldap_result = self._ldap_call(self._l.result4,msgid,all,timeout,add_ctrls,add_intermediates,add_extop)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:774:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = (<built-in method result4 of LDAP object at 0x7f91ce7341e0>, 7, 1, -1, 0, 0, ...)
kwargs = {}

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
return f(*args, **kwargs)
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91ce7340d0>
func = <built-in method result4 of LDAP object at 0x7f91ce7341e0>
args = (7, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
result = func(*args,**kwargs)
if __debug__ and self._trace_level>=2:
if func.__name__!="unbind_ext":
diagnostic_message_success = self._l.get_option(ldap.OPT_DIAGNOSTIC_MESSAGE)
finally:
self._ldap_object_lock.release()
except LDAPError as e:
exc_type,exc_value,exc_traceback = sys.exc_info()
try:
if 'info' not in e.args[0] and 'errno' in e.args[0]:
e.args[0]['info'] = strerror(e.args[0]['errno'])
except IndexError:
pass
if __debug__ and self._trace_level>=2:
self._trace_file.write('=> LDAPError - %s: %s\n' % (e.__class__.__name__,str(e)))
try:
> reraise(exc_type, exc_value, exc_traceback)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

exc_type = <class 'ldap.INSUFFICIENT_ACCESS'>
exc_value = INSUFFICIENT_ACCESS({'msgtype': 103, 'msgid': 7, 'result': 50, 'desc': 'Insufficient access', 'ctrls': [], 'info': "Insufficient 'write' privilege to the 'userPassword' attribute of entry 'uid=user,dc=example,dc=com'.\n"})
exc_traceback = <traceback object at 0x7f91ce738980>

def reraise(exc_type, exc_value, exc_traceback):
"""Re-raise an exception given information from sys.exc_info()

Note that unlike six.reraise, this does not support replacing the
traceback. All arguments must come from a single sys.exc_info() call.
"""
# In Python 3, all exception info is contained in one object.
> raise exc_value

/usr/lib64/python3.9/site-packages/ldap/compat.py:46:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91ce7340d0>
func = <built-in method result4 of LDAP object at 0x7f91ce7341e0>
args = (7, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.INSUFFICIENT_ACCESS: {'msgtype': 103, 'msgid': 7, 'result': 50, 'desc': 'Insufficient access', 'ctrls': [], 'info': "Insufficient 'write' privilege to the 'userPassword' attribute of entry 'uid=user,dc=example,dc=com'.\n"}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: INSUFFICIENT_ACCESS

During handling of the above exception, another exception occurred:

topo = <lib389.topologies.TopologyMain object at 0x7f91ce734130>

def test_ticket49039(topo):
"""Test "password must change" verses "password min age". Min age should not
block password update if the password was reset.
"""

# Setup SSL (for ldappasswd test)
topo.standalone.enable_tls()

# Configure password policy
try:
policy = PwPolicyManager(topo.standalone)
policy.set_global_policy(properties={'nsslapd-pwpolicy-local': 'on',
'passwordMustChange': 'on',
'passwordExp': 'on',
'passwordMaxAge': '86400000',
'passwordMinAge': '8640000',
'passwordChange': 'on'})
except ldap.LDAPError as e:
log.fatal('Failed to set password policy: ' + str(e))

# Add user, bind, and set password
try:
topo.standalone.add_s(Entry((USER_DN, {
'objectclass': 'top extensibleObject'.split(),
'uid': 'user1',
'userpassword': PASSWORD
})))
except ldap.LDAPError as e:
log.fatal('Failed to add user: error ' + e.args[0]['desc'])
assert False

# Reset password as RootDN
try:
topo.standalone.modify_s(USER_DN, [(ldap.MOD_REPLACE, 'userpassword', ensure_bytes(PASSWORD))])
except ldap.LDAPError as e:
log.fatal('Failed to bind: error ' + e.args[0]['desc'])
assert False

time.sleep(1)

# Reset password as user
try:
topo.standalone.simple_bind_s(USER_DN, PASSWORD)
except ldap.LDAPError as e:
log.fatal('Failed to bind: error ' + e.args[0]['desc'])
assert False

try:
topo.standalone.modify_s(USER_DN, [(ldap.MOD_REPLACE, 'userpassword', ensure_bytes(PASSWORD))])
except ldap.LDAPError as e:
log.fatal('Failed to change password: error ' + e.args[0]['desc'])
> assert False
E assert False

/export/tests/tickets/ticket49039_test.py:78: AssertionError
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
-------------------------------Captured log call--------------------------------
CRITICAL tests.tickets.ticket49039_test:ticket49039_test.py:77 Failed to change password: error Insufficient access
Failed tickets/ticket49072_test.py::test_ticket49072_basedn 14.29
topo = <lib389.topologies.TopologyMain object at 0x7f91d341b9d0>

def test_ticket49072_basedn(topo):
"""memberOf fixup task does not validate args

:id: dce9b898-119d-42b8-a236-1130e59bfe18
:feature: memberOf
:setup: Standalone instance, with memberOf plugin
:steps: 1. Run fixup-memberOf.pl with invalid DN entry
2. Check if error log reports "Failed to get be backend"
:expectedresults: Fixup-memberOf.pl task should complete, but errors logged.
"""

log.info("Ticket 49072 memberof fixup task with invalid basedn...")
topo.standalone.plugins.enable(name=PLUGIN_MEMBER_OF)
topo.standalone.restart(timeout=10)

if ds_is_older('1.3'):
inst_dir = topo.standalone.get_inst_dir()
memof_task = os.path.join(inst_dir, FIXUP_MEMOF)
try:
output = subprocess.check_output([memof_task, '-D', DN_DM, '-w', PASSWORD, '-b', TEST_BASEDN, '-f', FILTER])
except subprocess.CalledProcessError as err:
output = err.output
else:
sbin_dir = topo.standalone.get_sbin_dir()
memof_task = os.path.join(sbin_dir, FIXUP_MEMOF)
try:
> output = subprocess.check_output(
[memof_task, '-D', DN_DM, '-w', PASSWORD, '-b', TEST_BASEDN, '-Z', SERVERID_STANDALONE, '-f', FILTER])

/export/tests/tickets/ticket49072_test.py:55:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib64/python3.9/subprocess.py:424: in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
/usr/lib64/python3.9/subprocess.py:505: in run
with Popen(*popenargs, **kwargs) as process:
/usr/lib64/python3.9/subprocess.py:951: in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <Popen: returncode: 255 args: ['/usr/sbin/fixup-memberof.pl', '-D', 'cn=Dire...>
args = ['/usr/sbin/fixup-memberof.pl', '-D', 'cn=Directory Manager', '-w', 'password', '-b', ...]
executable = b'/usr/sbin/fixup-memberof.pl', preexec_fn = None, close_fds = True
pass_fds = (), cwd = None, env = None, startupinfo = None, creationflags = 0
shell = False, p2cread = -1, p2cwrite = -1, c2pread = 135, c2pwrite = 136
errread = -1, errwrite = -1, restore_signals = True, gid = None, gids = None
uid = None, umask = -1, start_new_session = False

def _execute_child(self, args, executable, preexec_fn, close_fds,
pass_fds, cwd, env,
startupinfo, creationflags, shell,
p2cread, p2cwrite,
c2pread, c2pwrite,
errread, errwrite,
restore_signals,
gid, gids, uid, umask,
start_new_session):
"""Execute program (POSIX version)"""

if isinstance(args, (str, bytes)):
args = [args]
elif isinstance(args, os.PathLike):
if shell:
raise TypeError('path-like args is not allowed when '
'shell is true')
args = [args]
else:
args = list(args)

if shell:
# On Android the default shell is at '/system/bin/sh'.
unix_shell = ('/system/bin/sh' if
hasattr(sys, 'getandroidapilevel') else '/bin/sh')
args = [unix_shell, "-c"] + args
if executable:
args[0] = executable

if executable is None:
executable = args[0]

sys.audit("subprocess.Popen", executable, args, cwd, env)

if (_USE_POSIX_SPAWN
and os.path.dirname(executable)
and preexec_fn is None
and not close_fds
and not pass_fds
and cwd is None
and (p2cread == -1 or p2cread > 2)
and (c2pwrite == -1 or c2pwrite > 2)
and (errwrite == -1 or errwrite > 2)
and not start_new_session
and gid is None
and gids is None
and uid is None
and umask < 0):
self._posix_spawn(args, executable, env, restore_signals,
p2cread, p2cwrite,
c2pread, c2pwrite,
errread, errwrite)
return

orig_executable = executable

# For transferring possible exec failure from child to parent.
# Data format: "exception name:hex errno:description"
# Pickle is not used; it is complex and involves memory allocation.
errpipe_read, errpipe_write = os.pipe()
# errpipe_write must not be in the standard io 0, 1, or 2 fd range.
low_fds_to_close = []
while errpipe_write < 3:
low_fds_to_close.append(errpipe_write)
errpipe_write = os.dup(errpipe_write)
for low_fd in low_fds_to_close:
os.close(low_fd)
try:
try:
# We must avoid complex work that could involve
# malloc or free in the child process to avoid
# potential deadlocks, thus we do all this here.
# and pass it to fork_exec()

if env is not None:
env_list = []
for k, v in env.items():
k = os.fsencode(k)
if b'=' in k:
raise ValueError("illegal environment variable name")
env_list.append(k + b'=' + os.fsencode(v))
else:
env_list = None # Use execv instead of execve.
executable = os.fsencode(executable)
if os.path.dirname(executable):
executable_list = (executable,)
else:
# This matches the behavior of os._execvpe().
executable_list = tuple(
os.path.join(os.fsencode(dir), executable)
for dir in os.get_exec_path(env))
fds_to_keep = set(pass_fds)
fds_to_keep.add(errpipe_write)
self.pid = _posixsubprocess.fork_exec(
args, executable_list,
close_fds, tuple(sorted(map(int, fds_to_keep))),
cwd, env_list,
p2cread, p2cwrite, c2pread, c2pwrite,
errread, errwrite,
errpipe_read, errpipe_write,
restore_signals, start_new_session,
gid, gids, uid, umask,
preexec_fn)
self._child_created = True
finally:
# be sure the FD is closed no matter what
os.close(errpipe_write)

self._close_pipe_fds(p2cread, p2cwrite,
c2pread, c2pwrite,
errread, errwrite)

# Wait for exec to fail or succeed; possibly raising an
# exception (limited in size)
errpipe_data = bytearray()
while True:
part = os.read(errpipe_read, 50000)
errpipe_data += part
if not part or len(errpipe_data) > 50000:
break
finally:
# be sure the FD is closed no matter what
os.close(errpipe_read)

if errpipe_data:
try:
pid, sts = os.waitpid(self.pid, 0)
if pid == self.pid:
self._handle_exitstatus(sts)
else:
self.returncode = sys.maxsize
except ChildProcessError:
pass

try:
exception_name, hex_errno, err_msg = (
errpipe_data.split(b':', 2))
# The encoding here should match the encoding
# written in by the subprocess implementations
# like _posixsubprocess
err_msg = err_msg.decode()
except ValueError:
exception_name = b'SubprocessError'
hex_errno = b'0'
err_msg = 'Bad exception data from child: {!r}'.format(
bytes(errpipe_data))
child_exception_type = getattr(
builtins, exception_name.decode('ascii'),
SubprocessError)
if issubclass(child_exception_type, OSError) and hex_errno:
errno_num = int(hex_errno, 16)
child_exec_never_called = (err_msg == "noexec")
if child_exec_never_called:
err_msg = ""
# The error must be from chdir(cwd).
err_filename = cwd
else:
err_filename = orig_executable
if errno_num != 0:
err_msg = os.strerror(errno_num)
> raise child_exception_type(errno_num, err_msg, err_filename)
E FileNotFoundError: [Errno 2] No such file or directory: '/usr/sbin/fixup-memberof.pl'

/usr/lib64/python3.9/subprocess.py:1821: FileNotFoundError
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
-------------------------------Captured log call--------------------------------
INFO tests.tickets.ticket49072_test:ticket49072_test.py:40 Ticket 49072 memberof fixup task with invalid basedn...
Failed tickets/ticket49072_test.py::test_ticket49072_filter 12.00
topo = <lib389.topologies.TopologyMain object at 0x7f91d341b9d0>

def test_ticket49072_filter(topo):
"""memberOf fixup task does not validate args

:id: dde9e893-119d-42c8-a236-1190e56bfe98
:feature: memberOf
:setup: Standalone instance, with memberOf plugin
:steps: 1. Run fixup-memberOf.pl with invalid filter
2. Check if error log reports "Bad search filter"
:expectedresults: Fixup-memberOf.pl task should complete, but errors logged.
"""
log.info("Ticket 49072 memberof fixup task with invalid filter...")
log.info('Wait for 10 secs and check if task is completed')
time.sleep(10)
task_memof = 'cn=memberOf task,cn=tasks,cn=config'
if topo.standalone.search_s(task_memof, ldap.SCOPE_SUBTREE, 'cn=memberOf_fixup*', ['dn:']):
log.info('memberof task is still running, wait for +10 secs')
time.sleep(10)

if ds_is_older('1.3'):
inst_dir = topo.standalone.get_inst_dir()
memof_task = os.path.join(inst_dir, FIXUP_MEMOF)
try:
output = subprocess.check_output([memof_task, '-D', DN_DM, '-w', PASSWORD, '-b', SUFFIX, '-f', TEST_FILTER])
except subprocess.CalledProcessError as err:
output = err.output
else:
sbin_dir = topo.standalone.get_sbin_dir()
memof_task = os.path.join(sbin_dir, FIXUP_MEMOF)
try:
> output = subprocess.check_output(
[memof_task, '-D', DN_DM, '-w', PASSWORD, '-b', SUFFIX, '-Z', SERVERID_STANDALONE, '-f', TEST_FILTER])

/export/tests/tickets/ticket49072_test.py:96:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib64/python3.9/subprocess.py:424: in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
/usr/lib64/python3.9/subprocess.py:505: in run
with Popen(*popenargs, **kwargs) as process:
/usr/lib64/python3.9/subprocess.py:951: in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <Popen: returncode: 255 args: ['/usr/sbin/fixup-memberof.pl', '-D', 'cn=Dire...>
args = ['/usr/sbin/fixup-memberof.pl', '-D', 'cn=Directory Manager', '-w', 'password', '-b', ...]
executable = b'/usr/sbin/fixup-memberof.pl', preexec_fn = None, close_fds = True
pass_fds = (), cwd = None, env = None, startupinfo = None, creationflags = 0
shell = False, p2cread = -1, p2cwrite = -1, c2pread = 135, c2pwrite = 136
errread = -1, errwrite = -1, restore_signals = True, gid = None, gids = None
uid = None, umask = -1, start_new_session = False

def _execute_child(self, args, executable, preexec_fn, close_fds,
pass_fds, cwd, env,
startupinfo, creationflags, shell,
p2cread, p2cwrite,
c2pread, c2pwrite,
errread, errwrite,
restore_signals,
gid, gids, uid, umask,
start_new_session):
"""Execute program (POSIX version)"""

if isinstance(args, (str, bytes)):
args = [args]
elif isinstance(args, os.PathLike):
if shell:
raise TypeError('path-like args is not allowed when '
'shell is true')
args = [args]
else:
args = list(args)

if shell:
# On Android the default shell is at '/system/bin/sh'.
unix_shell = ('/system/bin/sh' if
hasattr(sys, 'getandroidapilevel') else '/bin/sh')
args = [unix_shell, "-c"] + args
if executable:
args[0] = executable

if executable is None:
executable = args[0]

sys.audit("subprocess.Popen", executable, args, cwd, env)

if (_USE_POSIX_SPAWN
and os.path.dirname(executable)
and preexec_fn is None
and not close_fds
and not pass_fds
and cwd is None
and (p2cread == -1 or p2cread > 2)
and (c2pwrite == -1 or c2pwrite > 2)
and (errwrite == -1 or errwrite > 2)
and not start_new_session
and gid is None
and gids is None
and uid is None
and umask < 0):
self._posix_spawn(args, executable, env, restore_signals,
p2cread, p2cwrite,
c2pread, c2pwrite,
errread, errwrite)
return

orig_executable = executable

# For transferring possible exec failure from child to parent.
# Data format: "exception name:hex errno:description"
# Pickle is not used; it is complex and involves memory allocation.
errpipe_read, errpipe_write = os.pipe()
# errpipe_write must not be in the standard io 0, 1, or 2 fd range.
low_fds_to_close = []
while errpipe_write < 3:
low_fds_to_close.append(errpipe_write)
errpipe_write = os.dup(errpipe_write)
for low_fd in low_fds_to_close:
os.close(low_fd)
try:
try:
# We must avoid complex work that could involve
# malloc or free in the child process to avoid
# potential deadlocks, thus we do all this here.
# and pass it to fork_exec()

if env is not None:
env_list = []
for k, v in env.items():
k = os.fsencode(k)
if b'=' in k:
raise ValueError("illegal environment variable name")
env_list.append(k + b'=' + os.fsencode(v))
else:
env_list = None # Use execv instead of execve.
executable = os.fsencode(executable)
if os.path.dirname(executable):
executable_list = (executable,)
else:
# This matches the behavior of os._execvpe().
executable_list = tuple(
os.path.join(os.fsencode(dir), executable)
for dir in os.get_exec_path(env))
fds_to_keep = set(pass_fds)
fds_to_keep.add(errpipe_write)
self.pid = _posixsubprocess.fork_exec(
args, executable_list,
close_fds, tuple(sorted(map(int, fds_to_keep))),
cwd, env_list,
p2cread, p2cwrite, c2pread, c2pwrite,
errread, errwrite,
errpipe_read, errpipe_write,
restore_signals, start_new_session,
gid, gids, uid, umask,
preexec_fn)
self._child_created = True
finally:
# be sure the FD is closed no matter what
os.close(errpipe_write)

self._close_pipe_fds(p2cread, p2cwrite,
c2pread, c2pwrite,
errread, errwrite)

# Wait for exec to fail or succeed; possibly raising an
# exception (limited in size)
errpipe_data = bytearray()
while True:
part = os.read(errpipe_read, 50000)
errpipe_data += part
if not part or len(errpipe_data) > 50000:
break
finally:
# be sure the FD is closed no matter what
os.close(errpipe_read)

if errpipe_data:
try:
pid, sts = os.waitpid(self.pid, 0)
if pid == self.pid:
self._handle_exitstatus(sts)
else:
self.returncode = sys.maxsize
except ChildProcessError:
pass

try:
exception_name, hex_errno, err_msg = (
errpipe_data.split(b':', 2))
# The encoding here should match the encoding
# written in by the subprocess implementations
# like _posixsubprocess
err_msg = err_msg.decode()
except ValueError:
exception_name = b'SubprocessError'
hex_errno = b'0'
err_msg = 'Bad exception data from child: {!r}'.format(
bytes(errpipe_data))
child_exception_type = getattr(
builtins, exception_name.decode('ascii'),
SubprocessError)
if issubclass(child_exception_type, OSError) and hex_errno:
errno_num = int(hex_errno, 16)
child_exec_never_called = (err_msg == "noexec")
if child_exec_never_called:
err_msg = ""
# The error must be from chdir(cwd).
err_filename = cwd
else:
err_filename = orig_executable
if errno_num != 0:
err_msg = os.strerror(errno_num)
> raise child_exception_type(errno_num, err_msg, err_filename)
E FileNotFoundError: [Errno 2] No such file or directory: '/usr/sbin/fixup-memberof.pl'

/usr/lib64/python3.9/subprocess.py:1821: FileNotFoundError
-------------------------------Captured log call--------------------------------
INFO tests.tickets.ticket49072_test:ticket49072_test.py:77 Ticket 49072 memberof fixup task with invalid filter... INFO tests.tickets.ticket49072_test:ticket49072_test.py:78 Wait for 10 secs and check if task is completed
Failed tickets/ticket49073_test.py::test_ticket49073 40.96
topology_m2 = <lib389.topologies.TopologyMain object at 0x7f91e0124e80>

def test_ticket49073(topology_m2):
"""Write your replication test here.

To access each DirSrv instance use: topology_m2.ms["supplier1"], topology_m2.ms["supplier2"],
..., topology_m2.hub1, ..., topology_m2.consumer1,...

Also, if you need any testcase initialization,
please, write additional fixture for that(include finalizer).
"""
topology_m2.ms["supplier1"].plugins.enable(name=PLUGIN_MEMBER_OF)
topology_m2.ms["supplier1"].restart(timeout=10)
topology_m2.ms["supplier2"].plugins.enable(name=PLUGIN_MEMBER_OF)
topology_m2.ms["supplier2"].restart(timeout=10)

# Configure fractional to prevent total init to send memberof
ents = topology_m2.ms["supplier1"].agreement.list(suffix=SUFFIX)
assert len(ents) == 1
log.info('update %s to add nsDS5ReplicatedAttributeListTotal' % ents[0].dn)
> topology_m2.ms["supplier1"].modify_s(ents[0].dn,
[(ldap.MOD_REPLACE,
'nsDS5ReplicatedAttributeListTotal',
'(objectclass=*) $ EXCLUDE '),
(ldap.MOD_REPLACE,
'nsDS5ReplicatedAttributeList',
'(objectclass=*) $ EXCLUDE memberOf')])

/export/tests/tickets/ticket49073_test.py:97:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:640: in modify_s
return self.modify_ext_s(dn,modlist,None,None)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:612: in modify_ext_s
msgid = self.modify_ext(dn,modlist,serverctrls,clientctrls)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:609: in modify_ext
return self._ldap_call(self._l.modify_ext,dn,modlist,RequestControlTuples(serverctrls),RequestControlTuples(clientctrls))
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d3cb9d60>
func = <built-in method modify_ext of LDAP object at 0x7f91e4166180>
args = ('cn=002,cn=replica,cn=dc\\3Dexample\\2Cdc\\3Dcom,cn=mapping tree,cn=config', [(2, 'nsDS5ReplicatedAttributeListTotal', '(objectclass=*) $ EXCLUDE '), (2, 'nsDS5ReplicatedAttributeList', '(objectclass=*) $ EXCLUDE memberOf')], None, None)
kwargs = {}, diagnostic_message_success = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E TypeError: ('Tuple_to_LDAPMod(): expected a byte string in the list', '(')

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: TypeError
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39001, 'ldap-secureport': 63701, 'server-id': 'supplier1', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier2 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39002, 'ldap-secureport': 63702, 'server-id': 'supplier2', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.topologies:topologies.py:145 Creating replication topology. INFO lib389.topologies:topologies.py:159 Joining supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2084 SUCCESS: bootstrap to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 completed INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is was created INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is was created INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 7978bc5d-6b75-4cd4-8a95-58802b6b5161 / got description=None) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect e8a10d3f-9703-4a5f-a262-657ee73b6250 / got description=7978bc5d-6b75-4cd4-8a95-58802b6b5161) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is working INFO lib389.replica:replica.py:2153 SUCCESS: joined supplier from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier1 to supplier2 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 already exists
-------------------------------Captured log call--------------------------------
INFO tests.tickets.ticket49073_test:ticket49073_test.py:96 update cn=002,cn=replica,cn=dc\3Dexample\2Cdc\3Dcom,cn=mapping tree,cn=config to add nsDS5ReplicatedAttributeListTotal
Failed tickets/ticket49104_test.py::test_ticket49104_setup 9.48
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d279e340>

def test_ticket49104_setup(topology_st):
"""
Generate an ldif file having 10K entries and import it.
"""
# Generate a test ldif (100k entries)
ldif_dir = topology_st.standalone.get_ldif_dir()
import_ldif = ldif_dir + '/49104.ldif'
try:
> topology_st.standalone.buildLDIF(100000, import_ldif)

/export/tests/tickets/ticket49104_test.py:30:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d279ebb0>, num = 100000
ldif_file = '/var/lib/dirsrv/slapd-standalone1/ldif/49104.ldif'
suffix = 'dc=example,dc=com'

def buildLDIF(self, num, ldif_file, suffix='dc=example,dc=com'):
"""Generate a simple ldif file using the dbgen.pl script, and set the
ownership and permissions to match the user that the server runs as.

@param num - number of entries to create
@param ldif_file - ldif file name(including the path)
@suffix - DN of the parent entry in the ldif file
@return - nothing
@raise - OSError
"""
> raise Exception("Perl tools disabled on this system. Try dbgen py module.")
E Exception: Perl tools disabled on this system. Try dbgen py module.

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:3245: Exception
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Failed tickets/ticket49192_test.py::test_ticket49192 11.20
topo = <lib389.topologies.TopologyMain object at 0x7f91ce917f70>

def test_ticket49192(topo):
"""Trigger deadlock when removing suffix
"""

#
# Create a second suffix/backend
#
log.info('Creating second backend...')
> topo.standalone.backends.create(None, properties={
BACKEND_NAME: "Second_Backend",
'suffix': "o=hang.com",
})

/export/tests/tickets/ticket49192_test.py:35:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:1228: in create
return co.create(rdn, properties, self._basedn)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.backend.Backend object at 0x7f91d27bb850>, dn = None
properties = {'name': 'Second_Backend', 'suffix': 'o=hang.com'}
basedn = 'cn=ldbm database,cn=plugins,cn=config', create_mapping_tree = True

def create(self, dn=None, properties=None, basedn=DN_LDBM, create_mapping_tree=True):
"""Add a new backend entry, create mapping tree,
and, if requested, sample entries

:param dn: DN of the new entry
:type dn: str
:param properties: Attributes and parameters for the new entry
:type properties: dict
:param basedn: Base DN of the new entry
:type basedn: str
:param create_mapping_tree: If a related mapping tree node should be created
:type create_mapping_tree: bool

:returns: DSLdapObject of the created entry
"""

sample_entries = False
parent_suffix = False

# normalize suffix (remove spaces between comps)
if dn is not None:
dn_comps = ldap.dn.explode_dn(dn.lower())
dn = ",".join(dn_comps)

if properties is not None:
> suffix_dn = properties['nsslapd-suffix'].lower()
E KeyError: 'nsslapd-suffix'

/usr/local/lib/python3.9/site-packages/lib389/backend.py:613: KeyError
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
-------------------------------Captured log call--------------------------------
INFO tests.tickets.ticket49192_test:ticket49192_test.py:34 Creating second backend...
Failed tickets/ticket49287_test.py::test_ticket49287 44.23
self = <lib389.mappingTree.MappingTreeLegacy object at 0x7f91d340eb20>
suffix = 'dc=test,dc=com', bename = 'test', parent = None

def create(self, suffix=None, bename=None, parent=None):
'''
Create a mapping tree entry (under "cn=mapping tree,cn=config"),
for the 'suffix' and that is stored in 'bename' backend.
'bename' backend must exist before creating the mapping tree entry.

If a 'parent' is provided that means that we are creating a
sub-suffix mapping tree.

@param suffix - suffix mapped by this mapping tree entry. It will
be the common name ('cn') of the entry
@param benamebase - backend common name (e.g. 'userRoot')
@param parent - if provided is a parent suffix of 'suffix'

@return DN of the mapping tree entry

@raise ldap.NO_SUCH_OBJECT - if the backend entry or parent mapping
tree does not exist
ValueError - if missing a parameter,

'''
# Check suffix is provided
if not suffix:
raise ValueError("suffix is mandatory")
else:
nsuffix = normalizeDN(suffix)

# Check backend name is provided
if not bename:
raise ValueError("backend name is mandatory")

# Check that if the parent suffix is provided then
# it exists a mapping tree for it
if parent:
nparent = normalizeDN(parent)
filt = suffixfilt(parent)
try:
entry = self.conn.getEntry(DN_MAPPING_TREE, ldap.SCOPE_SUBTREE,
filt)
pass
except NoSuchEntryError:
raise ValueError("parent suffix has no mapping tree")
else:
nparent = ""

# Check if suffix exists, return
filt = suffixfilt(suffix)
try:
entry = self.conn.getEntry(DN_MAPPING_TREE, ldap.SCOPE_SUBTREE,
filt)
return entry
except ldap.NO_SUCH_OBJECT:
entry = None

#
# Now start the real work
#

# fix me when we can actually used escaped DNs
dn = ','.join(('cn="%s"' % nsuffix, DN_MAPPING_TREE))
entry = Entry(dn)
entry.update({
'objectclass': ['top', 'extensibleObject', MT_OBJECTCLASS_VALUE],
'nsslapd-state': 'backend',
# the value in the dn has to be DN escaped
# internal code will add the quoted value - unquoted value is
# useful for searching.
MT_PROPNAME_TO_ATTRNAME[MT_SUFFIX]: nsuffix,
MT_PROPNAME_TO_ATTRNAME[MT_BACKEND]: bename
})

# possibly add the parent
if parent:
entry.setValues(MT_PROPNAME_TO_ATTRNAME[MT_PARENT_SUFFIX], nparent)

try:
self.log.debug("Creating entry: %s", entry.dn)
self.log.info("Entry %r", entry)
> self.conn.add_s(entry)

/usr/local/lib/python3.9/site-packages/lib389/mappingTree.py:154:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = (dn: cn="dc=test,dc=com",cn=mapping tree,cn=config
cn: dc=test,dc=com
nsslapd-backend: test
nsslapd-state: backend
objectclass: top
objectclass: extensibleObject
objectclass: nsMappingTree

,)
kwargs = {}
c_stack = [FrameInfo(frame=<frame at 0x55888a607530, file '/usr/local/lib/python3.9/site-packages/lib389/__init__.py', line 170,...neno=187, function='_multicall', code_context=[' res = hook_impl.function(*args)\n'], index=0), ...]
frame = FrameInfo(frame=<frame at 0x55888a184b00, file '/usr/local/lib/python3.9/site-packages/lib389/mappingTree.py', line 15.../lib389/mappingTree.py', lineno=154, function='create', code_context=[' self.conn.add_s(entry)\n'], index=0)
ent = dn: cn="dc=test,dc=com",cn=mapping tree,cn=config
cn: dc=test,dc=com
nsslapd-backend: test
nsslapd-state: backend
objectclass: top
objectclass: extensibleObject
objectclass: nsMappingTree



def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
> return f(ent.dn, ent.toTupleList(), *args[2:])

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:170:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d026c4f0>
dn = 'cn="dc=test,dc=com",cn=mapping tree,cn=config'
modlist = [('objectclass', [b'top', b'extensibleObject', b'nsMappingTree']), ('nsslapd-state', [b'backend']), ('cn', [b'dc=test,dc=com']), ('nsslapd-backend', [b'test'])]

def add_s(self,dn,modlist):
> return self.add_ext_s(dn,modlist,None,None)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:439:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('cn="dc=test,dc=com",cn=mapping tree,cn=config', [('objectclass', [b'top', b'extensibleObject', b'nsMappingTree']), ('nsslapd-state', [b'backend']), ('cn', [b'dc=test,dc=com']), ('nsslapd-backend', [b'test'])], None, None)
kwargs = {}, ent = 'cn="dc=test,dc=com",cn=mapping tree,cn=config'

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:172:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d026c4f0>
dn = 'cn="dc=test,dc=com",cn=mapping tree,cn=config'
modlist = [('objectclass', [b'top', b'extensibleObject', b'nsMappingTree']), ('nsslapd-state', [b'backend']), ('cn', [b'dc=test,dc=com']), ('nsslapd-backend', [b'test'])]
serverctrls = None, clientctrls = None

def add_ext_s(self,dn,modlist,serverctrls=None,clientctrls=None):
msgid = self.add_ext(dn,modlist,serverctrls,clientctrls)
> resp_type, resp_data, resp_msgid, resp_ctrls = self.result3(msgid,all=1,timeout=self.timeout)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:425:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = (4,), kwargs = {'all': 1, 'timeout': -1}

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
return f(*args, **kwargs)
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d026c4f0>, msgid = 4, all = 1
timeout = -1, resp_ctrl_classes = None

def result3(self,msgid=ldap.RES_ANY,all=1,timeout=None,resp_ctrl_classes=None):
> resp_type, resp_data, resp_msgid, decoded_resp_ctrls, retoid, retval = self.result4(
msgid,all,timeout,
add_ctrls=0,add_intermediates=0,add_extop=0,
resp_ctrl_classes=resp_ctrl_classes
)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:764:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = (4, 1, -1)
kwargs = {'add_ctrls': 0, 'add_extop': 0, 'add_intermediates': 0, 'resp_ctrl_classes': None}

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
return f(*args, **kwargs)
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d026c4f0>, msgid = 4, all = 1
timeout = -1, add_ctrls = 0, add_intermediates = 0, add_extop = 0
resp_ctrl_classes = None

def result4(self,msgid=ldap.RES_ANY,all=1,timeout=None,add_ctrls=0,add_intermediates=0,add_extop=0,resp_ctrl_classes=None):
if timeout is None:
timeout = self.timeout
> ldap_result = self._ldap_call(self._l.result4,msgid,all,timeout,add_ctrls,add_intermediates,add_extop)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:774:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = (<built-in method result4 of LDAP object at 0x7f91e3f1d510>, 4, 1, -1, 0, 0, ...)
kwargs = {}

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
return f(*args, **kwargs)
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d026c4f0>
func = <built-in method result4 of LDAP object at 0x7f91e3f1d510>
args = (4, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
result = func(*args,**kwargs)
if __debug__ and self._trace_level>=2:
if func.__name__!="unbind_ext":
diagnostic_message_success = self._l.get_option(ldap.OPT_DIAGNOSTIC_MESSAGE)
finally:
self._ldap_object_lock.release()
except LDAPError as e:
exc_type,exc_value,exc_traceback = sys.exc_info()
try:
if 'info' not in e.args[0] and 'errno' in e.args[0]:
e.args[0]['info'] = strerror(e.args[0]['errno'])
except IndexError:
pass
if __debug__ and self._trace_level>=2:
self._trace_file.write('=> LDAPError - %s: %s\n' % (e.__class__.__name__,str(e)))
try:
> reraise(exc_type, exc_value, exc_traceback)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

exc_type = <class 'ldap.UNWILLING_TO_PERFORM'>
exc_value = UNWILLING_TO_PERFORM({'msgtype': 105, 'msgid': 4, 'result': 53, 'desc': 'Server is unwilling to perform', 'ctrls': []})
exc_traceback = <traceback object at 0x7f91d15d37c0>

def reraise(exc_type, exc_value, exc_traceback):
"""Re-raise an exception given information from sys.exc_info()

Note that unlike six.reraise, this does not support replacing the
traceback. All arguments must come from a single sys.exc_info() call.
"""
# In Python 3, all exception info is contained in one object.
> raise exc_value

/usr/lib64/python3.9/site-packages/ldap/compat.py:46:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d026c4f0>
func = <built-in method result4 of LDAP object at 0x7f91e3f1d510>
args = (4, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.UNWILLING_TO_PERFORM: {'msgtype': 105, 'msgid': 4, 'result': 53, 'desc': 'Server is unwilling to perform', 'ctrls': []}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: UNWILLING_TO_PERFORM

During handling of the above exception, another exception occurred:

topology_m2 = <lib389.topologies.TopologyMain object at 0x7f91d026cb80>

def test_ticket49287(topology_m2):
"""
test case for memberof and conflict entries

"""

# return
M1 = topology_m2.ms["supplier1"]
M2 = topology_m2.ms["supplier2"]

config_memberof(M1)
config_memberof(M2)

_enable_spec_logging(M1)
_enable_spec_logging(M2)

_disable_nunc_stans(M1)
_disable_nunc_stans(M2)

M1.restart(timeout=10)
M2.restart(timeout=10)

testbase = 'dc=test,dc=com'
bename = 'test'
> create_backend(M1, M2, testbase, bename)

/export/tests/tickets/ticket49287_test.py:282:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/export/tests/tickets/ticket49287_test.py:204: in create_backend
s1.mappingtree.create(beSuffix, beName)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.mappingTree.MappingTreeLegacy object at 0x7f91d340eb20>
suffix = 'dc=test,dc=com', bename = 'test', parent = None

def create(self, suffix=None, bename=None, parent=None):
'''
Create a mapping tree entry (under "cn=mapping tree,cn=config"),
for the 'suffix' and that is stored in 'bename' backend.
'bename' backend must exist before creating the mapping tree entry.

If a 'parent' is provided that means that we are creating a
sub-suffix mapping tree.

@param suffix - suffix mapped by this mapping tree entry. It will
be the common name ('cn') of the entry
@param benamebase - backend common name (e.g. 'userRoot')
@param parent - if provided is a parent suffix of 'suffix'

@return DN of the mapping tree entry

@raise ldap.NO_SUCH_OBJECT - if the backend entry or parent mapping
tree does not exist
ValueError - if missing a parameter,

'''
# Check suffix is provided
if not suffix:
raise ValueError("suffix is mandatory")
else:
nsuffix = normalizeDN(suffix)

# Check backend name is provided
if not bename:
raise ValueError("backend name is mandatory")

# Check that if the parent suffix is provided then
# it exists a mapping tree for it
if parent:
nparent = normalizeDN(parent)
filt = suffixfilt(parent)
try:
entry = self.conn.getEntry(DN_MAPPING_TREE, ldap.SCOPE_SUBTREE,
filt)
pass
except NoSuchEntryError:
raise ValueError("parent suffix has no mapping tree")
else:
nparent = ""

# Check if suffix exists, return
filt = suffixfilt(suffix)
try:
entry = self.conn.getEntry(DN_MAPPING_TREE, ldap.SCOPE_SUBTREE,
filt)
return entry
except ldap.NO_SUCH_OBJECT:
entry = None

#
# Now start the real work
#

# fix me when we can actually used escaped DNs
dn = ','.join(('cn="%s"' % nsuffix, DN_MAPPING_TREE))
entry = Entry(dn)
entry.update({
'objectclass': ['top', 'extensibleObject', MT_OBJECTCLASS_VALUE],
'nsslapd-state': 'backend',
# the value in the dn has to be DN escaped
# internal code will add the quoted value - unquoted value is
# useful for searching.
MT_PROPNAME_TO_ATTRNAME[MT_SUFFIX]: nsuffix,
MT_PROPNAME_TO_ATTRNAME[MT_BACKEND]: bename
})

# possibly add the parent
if parent:
entry.setValues(MT_PROPNAME_TO_ATTRNAME[MT_PARENT_SUFFIX], nparent)

try:
self.log.debug("Creating entry: %s", entry.dn)
self.log.info("Entry %r", entry)
self.conn.add_s(entry)
except ldap.LDAPError as e:
> raise ldap.LDAPError("Error adding suffix entry " + dn, e)
E ldap.LDAPError: ('Error adding suffix entry cn="dc=test,dc=com",cn=mapping tree,cn=config', UNWILLING_TO_PERFORM({'msgtype': 105, 'msgid': 4, 'result': 53, 'desc': 'Server is unwilling to perform', 'ctrls': []}))

/usr/local/lib/python3.9/site-packages/lib389/mappingTree.py:156: LDAPError
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39001, 'ldap-secureport': 63701, 'server-id': 'supplier1', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier2 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39002, 'ldap-secureport': 63702, 'server-id': 'supplier2', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.topologies:topologies.py:145 Creating replication topology. INFO lib389.topologies:topologies.py:159 Joining supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2084 SUCCESS: bootstrap to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 completed INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is was created INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is was created INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect c64c7202-9b4e-4eeb-be76-a8d3be943392 / got description=None) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect 9c52cd97-b8f2-4628-ba72-1af79e9b2fb9 / got description=c64c7202-9b4e-4eeb-be76-a8d3be943392) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is working INFO lib389.replica:replica.py:2153 SUCCESS: joined supplier from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier1 to supplier2 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 already exists
-------------------------------Captured log call--------------------------------
INFO tests.tickets.ticket49287_test:ticket49287_test.py:77 update cn=002,cn=replica,cn=dc\3Dexample\2Cdc\3Dcom,cn=mapping tree,cn=config to add nsDS5ReplicatedAttributeListTotal INFO tests.tickets.ticket49287_test:ticket49287_test.py:77 update cn=001,cn=replica,cn=dc\3Dexample\2Cdc\3Dcom,cn=mapping tree,cn=config to add nsDS5ReplicatedAttributeListTotal INFO lib389:mappingTree.py:153 Entry dn: cn="dc=test,dc=com",cn=mapping tree,cn=config cn: dc=test,dc=com nsslapd-backend: test nsslapd-state: backend objectclass: top objectclass: extensibleObject objectclass: nsMappingTree
Failed tickets/ticket49303_test.py::test_ticket49303 30.22
topo = <lib389.topologies.TopologyMain object at 0x7f91d15b0670>

def test_ticket49303(topo):
"""
Test the nsTLSAllowClientRenegotiation setting.
"""
sslport = SECUREPORT_STANDALONE1

log.info("Ticket 49303 - Allow disabling of SSL renegotiation")

# No value set, defaults to reneg allowed
enable_ssl(topo.standalone, sslport)
> assert try_reneg(HOST_STANDALONE1, sslport) is True
E AssertionError: assert False is True
E + where False = try_reneg('LOCALHOST', 63601)

/export/tests/tickets/ticket49303_test.py:88: AssertionError
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
-------------------------------Captured log call--------------------------------
INFO tests.tickets.ticket49303_test:ticket49303_test.py:84 Ticket 49303 - Allow disabling of SSL renegotiation
Failed tickets/ticket49412_test.py::test_ticket49412 31.17
topo = <lib389.topologies.TopologyMain object at 0x7f91d33c4b80>

def test_ticket49412(topo):
"""Specify a test case purpose or name here

:id: 4c7681ff-0511-4256-9589-bdcad84c13e6
: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
"""

M1 = topo.ms["supplier1"]

# wrong call with invalid value (should be str(60)
# that create replace with NULL value
# it should fail with UNWILLING_TO_PERFORM
try:
> M1.modify_s(CHANGELOG, [(ldap.MOD_REPLACE, MAXAGE_ATTR, 60),
(ldap.MOD_REPLACE, TRIMINTERVAL, 10)])

/export/tests/tickets/ticket49412_test.py:44:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:640: in modify_s
return self.modify_ext_s(dn,modlist,None,None)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:613: in modify_ext_s
resp_type, resp_data, resp_msgid, resp_ctrls = self.result3(msgid,all=1,timeout=self.timeout)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:764: in result3
resp_type, resp_data, resp_msgid, decoded_resp_ctrls, retoid, retval = self.result4(
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:774: in result4
ldap_result = self._ldap_call(self._l.result4,msgid,all,timeout,add_ctrls,add_intermediates,add_extop)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340: in _ldap_call
reraise(exc_type, exc_value, exc_traceback)
/usr/lib64/python3.9/site-packages/ldap/compat.py:46: in reraise
raise exc_value
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d3924280>
func = <built-in method result4 of LDAP object at 0x7f91d33cadb0>
args = (39, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.NO_SUCH_OBJECT: {'msgtype': 103, 'msgid': 39, 'result': 32, 'desc': 'No such object', 'ctrls': []}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: NO_SUCH_OBJECT
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39001, 'ldap-secureport': 63701, 'server-id': 'supplier1', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for consumer1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39201, 'ldap-secureport': 63901, 'server-id': 'consumer1', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.topologies:topologies.py:145 Creating replication topology. INFO lib389.topologies:topologies.py:172 Joining consumer consumer1 from supplier1 ... INFO lib389.replica:replica.py:2084 SUCCESS: bootstrap to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39201 completed INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39201 is was created INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39201 is NOT working (expect 1d80dcc7-1c78-430a-a390-875fe78dfbf6 / got description=None) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39201 is working INFO lib389.replica:replica.py:2268 SUCCESS: joined consumer from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39201 INFO lib389.topologies:topologies.py:177 Ensuring consumer consumer1 from supplier1 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39201 already exists
Failed tickets/ticket49463_test.py::test_ticket_49463 264.77
topo = <lib389.topologies.TopologyMain object at 0x7f91d04bc100>

def test_ticket_49463(topo):
"""Specify a test case purpose or name here

:id: 2a68e8be-387d-4ac7-9452-1439e8483c13
:setup: Fill in set up configuration here
:steps:
1. Enable fractional replication
2. Enable replication logging
3. Check that replication is working fine
4. Generate skipped updates to create keep alive entries
5. Remove M3 from the topology
6. issue cleanAllRuv FORCE that will run on M1 then propagated M2 and M4
7. Check that Number DEL keep alive '3' is <= 1
8. Check M1 is the originator of cleanAllRuv and M2/M4 the propagated ones
9. Check replication M1,M2 and M4 can recover
10. Remove M4 from the topology
11. Issue cleanAllRuv not force while M2 is stopped (that hangs the cleanAllRuv)
12. Check that nsds5ReplicaCleanRUV is correctly encoded on M1 (last value: 1)
13. Check that nsds5ReplicaCleanRUV encoding survives M1 restart
14. Check that nsds5ReplicaCleanRUV encoding is valid on M2 (last value: 0)
15. Check that (for M4 cleanAllRUV) M1 is Originator and M2 propagation
:expectedresults:
1. No report of failure when the RUV is updated
"""

# Step 1 - Configure fractional (skip telephonenumber) replication
M1 = topo.ms["supplier1"]
M2 = topo.ms["supplier2"]
M3 = topo.ms["supplier3"]
M4 = topo.ms["supplier4"]
repl = ReplicationManager(DEFAULT_SUFFIX)
fractional_server_to_replica(M1, M2)
fractional_server_to_replica(M1, M3)
fractional_server_to_replica(M1, M4)

fractional_server_to_replica(M2, M1)
fractional_server_to_replica(M2, M3)
fractional_server_to_replica(M2, M4)

fractional_server_to_replica(M3, M1)
fractional_server_to_replica(M3, M2)
fractional_server_to_replica(M3, M4)

fractional_server_to_replica(M4, M1)
fractional_server_to_replica(M4, M2)
fractional_server_to_replica(M4, M3)

# Step 2 - enable internal op logging and replication debug
for i in (M1, M2, M3, M4):
i.config.loglevel(vals=[256 + 4], service='access')
i.config.loglevel(vals=[LOG_REPLICA, LOG_DEFAULT], service='error')

# Step 3 - Check that replication is working fine
add_user(M1, 11, desc="add to M1")
add_user(M2, 21, desc="add to M2")
add_user(M3, 31, desc="add to M3")
add_user(M4, 41, desc="add to M4")

for i in (M1, M2, M3, M4):
for j in (M1, M2, M3, M4):
if i == j:
continue
repl.wait_for_replication(i, j)

# Step 4 - Generate skipped updates to create keep alive entries
for i in (M1, M2, M3, M4):
cn = '%s_%d' % (USER_CN, 11)
dn = 'uid=%s,ou=People,%s' % (cn, SUFFIX)
users = UserAccount(i, dn)
for j in range(110):
users.set('telephoneNumber', str(j))

# Step 5 - Remove M3 from the topology
M3.stop()
M1.agreement.delete(suffix=SUFFIX, consumer_host=M3.host, consumer_port=M3.port)
M2.agreement.delete(suffix=SUFFIX, consumer_host=M3.host, consumer_port=M3.port)
M4.agreement.delete(suffix=SUFFIX, consumer_host=M3.host, consumer_port=M3.port)

# Step 6 - Then issue cleanAllRuv FORCE that will run on M1, M2 and M4
M1.tasks.cleanAllRUV(suffix=SUFFIX, replicaid='3',
force=True, args={TASK_WAIT: True})

# Step 7 - Count the number of received DEL of the keep alive 3
for i in (M1, M2, M4):
i.restart()
regex = re.compile(".*DEL dn=.cn=repl keep alive 3.*")
for i in (M1, M2, M4):
count = count_pattern_accesslog(M1, regex)
log.debug("count on %s = %d" % (i, count))

# check that DEL is replicated once (If DEL is kept in the fix)
# check that DEL is is not replicated (If DEL is finally no long done in the fix)
assert ((count == 1) or (count == 0))

# Step 8 - Check that M1 is Originator of cleanAllRuv and M2, M4 propagation
regex = re.compile(".*Original task deletes Keep alive entry .3.*")
assert pattern_errorlog(M1, regex)

regex = re.compile(".*Propagated task does not delete Keep alive entry .3.*")
assert pattern_errorlog(M2, regex)
assert pattern_errorlog(M4, regex)

# Step 9 - Check replication M1,M2 and M4 can recover
add_user(M1, 12, desc="add to M1")
add_user(M2, 22, desc="add to M2")
for i in (M1, M2, M4):
for j in (M1, M2, M4):
if i == j:
continue
repl.wait_for_replication(i, j)

# Step 10 - Remove M4 from the topology
M4.stop()
M1.agreement.delete(suffix=SUFFIX, consumer_host=M4.host, consumer_port=M4.port)
M2.agreement.delete(suffix=SUFFIX, consumer_host=M4.host, consumer_port=M4.port)

# Step 11 - Issue cleanAllRuv not force while M2 is stopped (that hangs the cleanAllRuv)
M2.stop()
M1.tasks.cleanAllRUV(suffix=SUFFIX, replicaid='4',
force=False, args={TASK_WAIT: False})

# Step 12
# CleanAllRuv is hanging waiting for M2 to restart
# Check that nsds5ReplicaCleanRUV is correctly encoded on M1
replicas = Replicas(M1)
replica = replicas.list()[0]
time.sleep(0.5)
replica.present('nsds5ReplicaCleanRUV')
log.info("M1: nsds5ReplicaCleanRUV=%s" % replica.get_attr_val_utf8('nsds5replicacleanruv'))
regex = re.compile("^4:.*:no:1$")
> assert regex.match(replica.get_attr_val_utf8('nsds5replicacleanruv'))
E AssertionError: assert None
E + where None = <built-in method match of re.Pattern object at 0x7f91d3c9a9d0>('4:no:1:dc=example,dc=com')
E + where <built-in method match of re.Pattern object at 0x7f91d3c9a9d0> = re.compile('^4:.*:no:1$').match
E + and '4:no:1:dc=example,dc=com' = <bound method DSLdapObject.get_attr_val_utf8 of <lib389.replica.Replica object at 0x7f91d3920e20>>('nsds5replicacleanruv')
E + where <bound method DSLdapObject.get_attr_val_utf8 of <lib389.replica.Replica object at 0x7f91d3920e20>> = <lib389.replica.Replica object at 0x7f91d3920e20>.get_attr_val_utf8

/export/tests/tickets/ticket49463_test.py:188: AssertionError
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39001, 'ldap-secureport': 63701, 'server-id': 'supplier1', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier2 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39002, 'ldap-secureport': 63702, 'server-id': 'supplier2', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier3 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39003, 'ldap-secureport': 63703, 'server-id': 'supplier3', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier4 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39004, 'ldap-secureport': 63704, 'server-id': 'supplier4', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.topologies:topologies.py:145 Creating replication topology. INFO lib389.topologies:topologies.py:159 Joining supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2084 SUCCESS: bootstrap to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 completed INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is was created INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is was created INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect e24d1ad7-4d4a-4751-9bbf-bd797c6f1bdd / got description=None) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect c9c80478-225f-4c95-b215-89a4a6b6d343 / got description=e24d1ad7-4d4a-4751-9bbf-bd797c6f1bdd) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is working INFO lib389.replica:replica.py:2153 SUCCESS: joined supplier from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 INFO lib389.topologies:topologies.py:159 Joining supplier supplier3 to supplier1 ... INFO lib389.replica:replica.py:2084 SUCCESS: bootstrap to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 completed INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 is was created INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is was created INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 is NOT working (expect 9183cb89-48a4-4ae0-ba8b-7da350634760 / got description=c9c80478-225f-4c95-b215-89a4a6b6d343) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect dcf226df-3772-47e3-bd5b-4172deb27c67 / got description=9183cb89-48a4-4ae0-ba8b-7da350634760) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is working INFO lib389.replica:replica.py:2153 SUCCESS: joined supplier from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 INFO lib389.topologies:topologies.py:159 Joining supplier supplier4 to supplier1 ... INFO lib389.replica:replica.py:2084 SUCCESS: bootstrap to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 completed INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 is was created INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is was created INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 is NOT working (expect cd9181a4-c912-4634-97ac-71005a758ed7 / got description=dcf226df-3772-47e3-bd5b-4172deb27c67) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect 778ebf5c-23b7-479c-9df8-25641582e957 / got description=cd9181a4-c912-4634-97ac-71005a758ed7) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is working INFO lib389.replica:replica.py:2153 SUCCESS: joined supplier from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier1 to supplier2 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier1 to supplier3 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier1 to supplier4 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier2 to supplier3 ... INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 is was created INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier2 to supplier4 ... INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 is was created INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier3 to supplier1 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier3 to supplier2 ... INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is was created INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier3 to supplier4 ... INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 is was created INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier4 to supplier1 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier4 to supplier2 ... INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is was created INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier4 to supplier3 ... INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 is was created
-------------------------------Captured log call--------------------------------
INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 already exists INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 already exists INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 already exists INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 already exists INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 already exists INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 already exists INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 already exists INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 already exists INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 already exists INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 already exists INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 already exists INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 already exists INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 0e271943-0df1-46b2-a61d-6a202c0cc073 / got description=778ebf5c-23b7-479c-9df8-25641582e957) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 is NOT working (expect 33d7680a-1d25-427d-8e6f-67ace50a6570 / got description=0e271943-0df1-46b2-a61d-6a202c0cc073) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 is NOT working (expect aa1618d1-f940-4889-b31d-88e4d355d87d / got description=33d7680a-1d25-427d-8e6f-67ace50a6570) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 is NOT working (expect aa1618d1-f940-4889-b31d-88e4d355d87d / got description=33d7680a-1d25-427d-8e6f-67ace50a6570) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 is NOT working (expect aa1618d1-f940-4889-b31d-88e4d355d87d / got description=33d7680a-1d25-427d-8e6f-67ace50a6570) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 is NOT working (expect aa1618d1-f940-4889-b31d-88e4d355d87d / got description=33d7680a-1d25-427d-8e6f-67ace50a6570) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect e1484557-aced-44ce-84ae-353e6794cdf7 / got description=aa1618d1-f940-4889-b31d-88e4d355d87d) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect e1484557-aced-44ce-84ae-353e6794cdf7 / got description=aa1618d1-f940-4889-b31d-88e4d355d87d) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 is NOT working (expect 5404c913-8d05-4c98-b726-067f3732a371 / got description=e1484557-aced-44ce-84ae-353e6794cdf7) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 is NOT working (expect be364144-06e3-4abf-b35c-1e00da4e5608 / got description=5404c913-8d05-4c98-b726-067f3732a371) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 is NOT working (expect be364144-06e3-4abf-b35c-1e00da4e5608 / got description=5404c913-8d05-4c98-b726-067f3732a371) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect 521556a8-40f1-46eb-b0f5-867b00a48134 / got description=be364144-06e3-4abf-b35c-1e00da4e5608) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect ff4d9223-c6e2-49f7-8e82-f76c283468ef / got description=521556a8-40f1-46eb-b0f5-867b00a48134) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 is NOT working (expect f6403d20-54bc-4b20-bcba-8fc34d0e95b1 / got description=ff4d9223-c6e2-49f7-8e82-f76c283468ef) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect be9192f0-ae0c-4621-b2b0-f188b5b1b7e6 / got description=f6403d20-54bc-4b20-bcba-8fc34d0e95b1) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect cbf5fab0-149e-412b-aa6a-f9d23e73dccb / got description=be9192f0-ae0c-4621-b2b0-f188b5b1b7e6) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 is NOT working (expect fa1805fe-4c5c-4db2-9296-6dab434251c4 / got description=cbf5fab0-149e-412b-aa6a-f9d23e73dccb) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 is working INFO lib389:agreement.py:1094 Agreement (cn=003,cn=replica,cn=dc\3Dexample\2Cdc\3Dcom,cn=mapping tree,cn=config) was successfully removed INFO lib389:agreement.py:1094 Agreement (cn=003,cn=replica,cn=dc\3Dexample\2Cdc\3Dcom,cn=mapping tree,cn=config) was successfully removed INFO lib389:agreement.py:1094 Agreement (cn=003,cn=replica,cn=dc\3Dexample\2Cdc\3Dcom,cn=mapping tree,cn=config) was successfully removed INFO lib389:tasks.py:1475 cleanAllRUV task (task-08182021_020559) completed successfully INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect aefa0ea5-f016-4156-8ae4-6f6b74867a07 / got description=fa1805fe-4c5c-4db2-9296-6dab434251c4) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 is NOT working (expect 26be0a54-1cad-4df7-871c-b09347204f3f / got description=aefa0ea5-f016-4156-8ae4-6f6b74867a07) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect 43c246e5-789a-45c3-a4d1-1dff8351f4e4 / got description=26be0a54-1cad-4df7-871c-b09347204f3f) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 is NOT working (expect a14471b5-8ec7-42ae-b246-33562dd93770 / got description=43c246e5-789a-45c3-a4d1-1dff8351f4e4) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect eae5e362-3f8f-4a62-a70b-a57c79e51b37 / got description=a14471b5-8ec7-42ae-b246-33562dd93770) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect b8496a3a-3a40-42c3-9d47-280a7f72723d / got description=eae5e362-3f8f-4a62-a70b-a57c79e51b37) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39004 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is working INFO lib389:agreement.py:1094 Agreement (cn=004,cn=replica,cn=dc\3Dexample\2Cdc\3Dcom,cn=mapping tree,cn=config) was successfully removed INFO lib389:agreement.py:1094 Agreement (cn=004,cn=replica,cn=dc\3Dexample\2Cdc\3Dcom,cn=mapping tree,cn=config) was successfully removed INFO lib389:tasks.py:1475 cleanAllRUV task (task-08182021_020646) completed successfully INFO lib389.utils:ticket49463_test.py:186 M1: nsds5ReplicaCleanRUV=4:no:1:dc=example,dc=com
Failed tickets/ticket50232_test.py::test_ticket50232_normal 10.97
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d1478880>

def test_ticket50232_normal(topology_st):
"""
The fix for ticket 50232


The test sequence is:
- create suffix
- add suffix entry and some child entries
- "normally" done after populating suffix: enable replication
- get RUV and database generation
- export -r
- import
- get RUV and database generation
- assert database generation has not changed
"""

log.info('Testing Ticket 50232 - export creates not imprtable ldif file, normal creation order')

topology_st.standalone.backend.create(NORMAL_SUFFIX, {BACKEND_NAME: NORMAL_BACKEND_NAME})
topology_st.standalone.mappingtree.create(NORMAL_SUFFIX, bename=NORMAL_BACKEND_NAME, parent=None)

_populate_suffix(topology_st.standalone, NORMAL_BACKEND_NAME)

repl = ReplicationManager(DEFAULT_SUFFIX)
> repl._ensure_changelog(topology_st.standalone)

/export/tests/tickets/ticket50232_test.py:113:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/replica.py:1928: in _ensure_changelog
cl.create(properties={
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:985: in create
return self._create(rdn, properties, basedn, ensure=False)
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:960: in _create
self._instance.add_ext_s(e, serverctrls=self._server_controls, clientctrls=self._client_controls, escapehatch='i am sure')
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:170: in inner
return f(ent.dn, ent.toTupleList(), *args[2:])
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:425: in add_ext_s
resp_type, resp_data, resp_msgid, resp_ctrls = self.result3(msgid,all=1,timeout=self.timeout)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:764: in result3
resp_type, resp_data, resp_msgid, decoded_resp_ctrls, retoid, retval = self.result4(
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:774: in result4
ldap_result = self._ldap_call(self._l.result4,msgid,all,timeout,add_ctrls,add_intermediates,add_extop)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340: in _ldap_call
reraise(exc_type, exc_value, exc_traceback)
/usr/lib64/python3.9/site-packages/ldap/compat.py:46: in reraise
raise exc_value
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d147a670>
func = <built-in method result4 of LDAP object at 0x7f91d14ddf60>
args = (13, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.UNWILLING_TO_PERFORM: {'msgtype': 105, 'msgid': 13, 'result': 53, 'desc': 'Server is unwilling to perform', 'ctrls': [], 'info': 'Changelog configuration is part of the backend configuration'}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: UNWILLING_TO_PERFORM
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
-------------------------------Captured log call--------------------------------
INFO lib389:backend.py:80 List backend with suffix=o=normal INFO lib389:backend.py:290 Creating a local backend INFO lib389:backend.py:76 List backend cn=normal,cn=ldbm database,cn=plugins,cn=config INFO lib389:__init__.py:1726 Found entry dn: cn=normal,cn=ldbm database,cn=plugins,cn=config cn: normal nsslapd-cachememsize: 512000 nsslapd-cachesize: -1 nsslapd-directory: /var/lib/dirsrv/slapd-standalone1/db/normal nsslapd-dncachememsize: 16777216 nsslapd-readonly: off nsslapd-require-index: off nsslapd-require-internalop-index: off nsslapd-suffix: o=normal objectClass: top objectClass: extensibleObject objectClass: nsBackendInstance INFO lib389:mappingTree.py:153 Entry dn: cn="o=normal",cn=mapping tree,cn=config cn: o=normal nsslapd-backend: normal nsslapd-state: backend objectclass: top objectclass: extensibleObject objectclass: nsMappingTree INFO lib389:__init__.py:1726 Found entry dn: cn=o\3Dnormal,cn=mapping tree,cn=config cn: o=normal nsslapd-backend: normal nsslapd-state: backend objectClass: top objectClass: extensibleObject objectClass: nsMappingTree
Failed tickets/ticket50232_test.py::test_ticket50232_reverse 2.64
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d1478880>

def test_ticket50232_reverse(topology_st):
"""
The fix for ticket 50232


The test sequence is:
- create suffix
- enable replication before suffix enztry is added
- add suffix entry and some child entries
- get RUV and database generation
- export -r
- import
- get RUV and database generation
- assert database generation has not changed
"""

log.info('Testing Ticket 50232 - export creates not imprtable ldif file, normal creation order')

#
# Setup Replication
#
log.info('Setting up replication...')
repl = ReplicationManager(DEFAULT_SUFFIX)
# repl.create_first_supplier(topology_st.standalone)
#
# enable dynamic plugins, memberof and retro cl plugin
#
topology_st.standalone.backend.create(REVERSE_SUFFIX, {BACKEND_NAME: REVERSE_BACKEND_NAME})
topology_st.standalone.mappingtree.create(REVERSE_SUFFIX, bename=REVERSE_BACKEND_NAME, parent=None)

> _enable_replica(topology_st.standalone, REVERSE_SUFFIX)

/export/tests/tickets/ticket50232_test.py:155:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/export/tests/tickets/ticket50232_test.py:35: in _enable_replica
repl._ensure_changelog(instance)
/usr/local/lib/python3.9/site-packages/lib389/replica.py:1928: in _ensure_changelog
cl.create(properties={
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:985: in create
return self._create(rdn, properties, basedn, ensure=False)
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:960: in _create
self._instance.add_ext_s(e, serverctrls=self._server_controls, clientctrls=self._client_controls, escapehatch='i am sure')
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:170: in inner
return f(ent.dn, ent.toTupleList(), *args[2:])
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:425: in add_ext_s
resp_type, resp_data, resp_msgid, resp_ctrls = self.result3(msgid,all=1,timeout=self.timeout)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:764: in result3
resp_type, resp_data, resp_msgid, decoded_resp_ctrls, retoid, retval = self.result4(
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:774: in result4
ldap_result = self._ldap_call(self._l.result4,msgid,all,timeout,add_ctrls,add_intermediates,add_extop)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340: in _ldap_call
reraise(exc_type, exc_value, exc_traceback)
/usr/lib64/python3.9/site-packages/ldap/compat.py:46: in reraise
raise exc_value
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d147a670>
func = <built-in method result4 of LDAP object at 0x7f91d14ddf60>
args = (22, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.UNWILLING_TO_PERFORM: {'msgtype': 105, 'msgid': 22, 'result': 53, 'desc': 'Server is unwilling to perform', 'ctrls': [], 'info': 'Changelog configuration is part of the backend configuration'}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: UNWILLING_TO_PERFORM
-------------------------------Captured log call--------------------------------
INFO lib389:backend.py:80 List backend with suffix=o=reverse INFO lib389:backend.py:290 Creating a local backend INFO lib389:backend.py:76 List backend cn=reverse,cn=ldbm database,cn=plugins,cn=config INFO lib389:__init__.py:1726 Found entry dn: cn=reverse,cn=ldbm database,cn=plugins,cn=config cn: reverse nsslapd-cachememsize: 512000 nsslapd-cachesize: -1 nsslapd-directory: /var/lib/dirsrv/slapd-standalone1/db/reverse nsslapd-dncachememsize: 16777216 nsslapd-readonly: off nsslapd-require-index: off nsslapd-require-internalop-index: off nsslapd-suffix: o=reverse objectClass: top objectClass: extensibleObject objectClass: nsBackendInstance INFO lib389:mappingTree.py:153 Entry dn: cn="o=reverse",cn=mapping tree,cn=config cn: o=reverse nsslapd-backend: reverse nsslapd-state: backend objectclass: top objectclass: extensibleObject objectclass: nsMappingTree INFO lib389:__init__.py:1726 Found entry dn: cn=o\3Dreverse,cn=mapping tree,cn=config cn: o=reverse nsslapd-backend: reverse nsslapd-state: backend objectClass: top objectClass: extensibleObject objectClass: nsMappingTree
Failed tickets/ticket548_test.py::test_ticket548_test_with_no_policy 9.54
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d1762dc0>

def test_ticket548_test_with_no_policy(topology_st):
"""
Check shadowAccount under no password policy
"""
log.info("Case 1. No password policy")

log.info("Bind as %s" % DN_DM)
topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)

log.info('Add an entry' + USER1_DN)
try:
topology_st.standalone.add_s(
Entry((USER1_DN, {'objectclass': "top person organizationalPerson inetOrgPerson shadowAccount".split(),
'sn': '1',
'cn': 'user 1',
'uid': 'user1',
'givenname': 'user',
'mail': 'user1@' + DEFAULT_SUFFIX,
'userpassword': USER_PW})))
except ldap.LDAPError as e:
log.fatal('test_ticket548: Failed to add user' + USER1_DN + ': error ' + e.message['desc'])
assert False

edate = int(time.time() / (60 * 60 * 24))
log.info('Search entry %s' % USER1_DN)

log.info("Bind as %s" % USER1_DN)
topology_st.standalone.simple_bind_s(USER1_DN, USER_PW)
> entry = topology_st.standalone.getEntry(USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)", ['shadowLastChange'])

/export/tests/tickets/ticket548_test.py:211:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d17621c0>
args = ('uid=user1,dc=example,dc=com', 0, '(objectclass=*)', ['shadowLastChange'])
kwargs = {}, res = 6, restype = 101, obj = []

def getEntry(self, *args, **kwargs):
"""Wrapper around SimpleLDAPObject.search. It is common to just get
one entry.
@param - entry dn
@param - search scope, in ldap.SCOPE_BASE (default),
ldap.SCOPE_SUB, ldap.SCOPE_ONE
@param filterstr - filterstr, default '(objectClass=*)' from
SimpleLDAPObject
@param attrlist - list of attributes to retrieve. eg ['cn', 'uid']
@oaram attrsonly - default None from SimpleLDAPObject
eg. getEntry(dn, scope, filter, attributes)

XXX This cannot return None
"""
self.log.debug("Retrieving entry with %r", [args])
if len(args) == 1 and 'scope' not in kwargs:
args += (ldap.SCOPE_BASE, )

res = self.search(*args, **kwargs)
restype, obj = self.result(res)
# TODO: why not test restype?
if not obj:
> raise NoSuchEntryError("no such entry for %r", [args])
E lib389.exceptions.NoSuchEntryError: ('no such entry for %r', [('uid=user1,dc=example,dc=com', 0, '(objectclass=*)', ['shadowLastChange'])])

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:1713: NoSuchEntryError
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Failed tickets/ticket548_test.py::test_ticket548_test_global_policy 0.28
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d1762dc0>

def test_ticket548_test_global_policy(topology_st):
"""
Check shadowAccount with global password policy
"""

log.info("Case 2. Check shadowAccount with global password policy")

log.info("Bind as %s" % DN_DM)
topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)

set_global_pwpolicy(topology_st)

log.info('Add an entry' + USER2_DN)
try:
topology_st.standalone.add_s(
Entry((USER2_DN, {'objectclass': "top person organizationalPerson inetOrgPerson shadowAccount".split(),
'sn': '2',
'cn': 'user 2',
'uid': 'user2',
'givenname': 'user',
'mail': 'user2@' + DEFAULT_SUFFIX,
'userpassword': USER_PW})))
except ldap.LDAPError as e:
log.fatal('test_ticket548: Failed to add user' + USER2_DN + ': error ' + e.message['desc'])
assert False

edate = int(time.time() / (60 * 60 * 24))

log.info("Bind as %s" % USER1_DN)
topology_st.standalone.simple_bind_s(USER1_DN, USER_PW)

log.info('Search entry %s' % USER1_DN)
> entry = topology_st.standalone.getEntry(USER1_DN, ldap.SCOPE_BASE, "(objectclass=*)")

/export/tests/tickets/ticket548_test.py:249:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d17621c0>
args = ('uid=user1,dc=example,dc=com', 0, '(objectclass=*)'), kwargs = {}
res = 15, restype = 101, obj = []

def getEntry(self, *args, **kwargs):
"""Wrapper around SimpleLDAPObject.search. It is common to just get
one entry.
@param - entry dn
@param - search scope, in ldap.SCOPE_BASE (default),
ldap.SCOPE_SUB, ldap.SCOPE_ONE
@param filterstr - filterstr, default '(objectClass=*)' from
SimpleLDAPObject
@param attrlist - list of attributes to retrieve. eg ['cn', 'uid']
@oaram attrsonly - default None from SimpleLDAPObject
eg. getEntry(dn, scope, filter, attributes)

XXX This cannot return None
"""
self.log.debug("Retrieving entry with %r", [args])
if len(args) == 1 and 'scope' not in kwargs:
args += (ldap.SCOPE_BASE, )

res = self.search(*args, **kwargs)
restype, obj = self.result(res)
# TODO: why not test restype?
if not obj:
> raise NoSuchEntryError("no such entry for %r", [args])
E lib389.exceptions.NoSuchEntryError: ('no such entry for %r', [('uid=user1,dc=example,dc=com', 0, '(objectclass=*)')])

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:1713: NoSuchEntryError
Failed tickets/ticket548_test.py::test_ticket548_test_subtree_policy 3.53
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d1762dc0>
user = 'uid=user3,dc=example,dc=com', passwd = 'password'
newpasswd = 'password0'

def update_passwd(topology_st, user, passwd, newpasswd):
log.info(" Bind as {%s,%s}" % (user, passwd))
topology_st.standalone.simple_bind_s(user, passwd)
try:
> topology_st.standalone.modify_s(user, [(ldap.MOD_REPLACE, 'userpassword', newpasswd.encode())])

/export/tests/tickets/ticket548_test.py:160:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('uid=user3,dc=example,dc=com', [(2, 'userpassword', b'password0')])
kwargs = {}
c_stack = [FrameInfo(frame=<frame at 0x7f91d1554c40, file '/usr/local/lib/python3.9/site-packages/lib389/__init__.py', line 174,...mbda>', code_context=[' self._inner_hookexec = lambda hook, methods, kwargs: hook.multicall(\n'], index=0), ...]
frame = FrameInfo(frame=<frame at 0x55888a6ce120, file '/export/tests/tickets/ticket548_test.py', line 164, code update_passwd...[" topology_st.standalone.modify_s(user, [(ldap.MOD_REPLACE, 'userpassword', newpasswd.encode())])\n"], index=0)

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
return f(*args, **kwargs)
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d17621c0>
dn = 'uid=user3,dc=example,dc=com'
modlist = [(2, 'userpassword', b'password0')]

def modify_s(self,dn,modlist):
> return self.modify_ext_s(dn,modlist,None,None)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:640:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('uid=user3,dc=example,dc=com', [(2, 'userpassword', b'password0')], None, None)
kwargs = {}

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
return f(*args, **kwargs)
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d17621c0>
dn = 'uid=user3,dc=example,dc=com'
modlist = [(2, 'userpassword', b'password0')], serverctrls = None
clientctrls = None

def modify_ext_s(self,dn,modlist,serverctrls=None,clientctrls=None):
msgid = self.modify_ext(dn,modlist,serverctrls,clientctrls)
> resp_type, resp_data, resp_msgid, resp_ctrls = self.result3(msgid,all=1,timeout=self.timeout)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:613:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = (34,), kwargs = {'all': 1, 'timeout': -1}

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
return f(*args, **kwargs)
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d17621c0>, msgid = 34, all = 1
timeout = -1, resp_ctrl_classes = None

def result3(self,msgid=ldap.RES_ANY,all=1,timeout=None,resp_ctrl_classes=None):
> resp_type, resp_data, resp_msgid, decoded_resp_ctrls, retoid, retval = self.result4(
msgid,all,timeout,
add_ctrls=0,add_intermediates=0,add_extop=0,
resp_ctrl_classes=resp_ctrl_classes
)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:764:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = (34, 1, -1)
kwargs = {'add_ctrls': 0, 'add_extop': 0, 'add_intermediates': 0, 'resp_ctrl_classes': None}

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
return f(*args, **kwargs)
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d17621c0>, msgid = 34, all = 1
timeout = -1, add_ctrls = 0, add_intermediates = 0, add_extop = 0
resp_ctrl_classes = None

def result4(self,msgid=ldap.RES_ANY,all=1,timeout=None,add_ctrls=0,add_intermediates=0,add_extop=0,resp_ctrl_classes=None):
if timeout is None:
timeout = self.timeout
> ldap_result = self._ldap_call(self._l.result4,msgid,all,timeout,add_ctrls,add_intermediates,add_extop)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:774:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = (<built-in method result4 of LDAP object at 0x7f91d3c8a120>, 34, 1, -1, 0, 0, ...)
kwargs = {}

def inner(*args, **kwargs):
if name in [
'add_s',
'bind_s',
'delete_s',
'modify_s',
'modrdn_s',
'rename_s',
'sasl_interactive_bind_s',
'search_s',
'search_ext_s',
'simple_bind_s',
'unbind_s',
'getEntry',
] and not ('escapehatch' in kwargs and kwargs['escapehatch'] == 'i am sure'):
c_stack = inspect.stack()
frame = c_stack[1]

warnings.warn(DeprecationWarning("Use of raw ldap function %s. This will be removed in a future release. "
"Found in: %s:%s" % (name, frame.filename, frame.lineno)))
# Later, we will add a sleep here to make it even more painful.
# Finally, it will raise an exception.
elif 'escapehatch' in kwargs:
kwargs.pop('escapehatch')

if name == 'result':
objtype, data = f(*args, **kwargs)
# data is either a 2-tuple or a list of 2-tuples
# print data
if data:
if isinstance(data, tuple):
return objtype, Entry(data)
elif isinstance(data, list):
# AD sends back these search references
# if objtype == ldap.RES_SEARCH_RESULT and \
# isinstance(data[-1],tuple) and \
# not data[-1][0]:
# print "Received search reference: "
# pprint.pprint(data[-1][1])
# data.pop() # remove the last non-entry element

return objtype, [Entry(x) for x in data]
else:
raise TypeError("unknown data type %s returned by result" %
type(data))
else:
return objtype, data
elif name.startswith('add'):
# the first arg is self
# the second and third arg are the dn and the data to send
# We need to convert the Entry into the format used by
# python-ldap
ent = args[0]
if isinstance(ent, Entry):
return f(ent.dn, ent.toTupleList(), *args[2:])
else:
return f(*args, **kwargs)
else:
> return f(*args, **kwargs)

/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d17621c0>
func = <built-in method result4 of LDAP object at 0x7f91d3c8a120>
args = (34, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
result = func(*args,**kwargs)
if __debug__ and self._trace_level>=2:
if func.__name__!="unbind_ext":
diagnostic_message_success = self._l.get_option(ldap.OPT_DIAGNOSTIC_MESSAGE)
finally:
self._ldap_object_lock.release()
except LDAPError as e:
exc_type,exc_value,exc_traceback = sys.exc_info()
try:
if 'info' not in e.args[0] and 'errno' in e.args[0]:
e.args[0]['info'] = strerror(e.args[0]['errno'])
except IndexError:
pass
if __debug__ and self._trace_level>=2:
self._trace_file.write('=> LDAPError - %s: %s\n' % (e.__class__.__name__,str(e)))
try:
> reraise(exc_type, exc_value, exc_traceback)

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

exc_type = <class 'ldap.INSUFFICIENT_ACCESS'>
exc_value = INSUFFICIENT_ACCESS({'msgtype': 103, 'msgid': 34, 'result': 50, 'desc': 'Insufficient access', 'ctrls': [], 'info': "Insufficient 'write' privilege to the 'userPassword' attribute of entry 'uid=user3,dc=example,dc=com'.\n"})
exc_traceback = <traceback object at 0x7f91d1541140>

def reraise(exc_type, exc_value, exc_traceback):
"""Re-raise an exception given information from sys.exc_info()

Note that unlike six.reraise, this does not support replacing the
traceback. All arguments must come from a single sys.exc_info() call.
"""
# In Python 3, all exception info is contained in one object.
> raise exc_value

/usr/lib64/python3.9/site-packages/ldap/compat.py:46:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91d17621c0>
func = <built-in method result4 of LDAP object at 0x7f91d3c8a120>
args = (34, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.INSUFFICIENT_ACCESS: {'msgtype': 103, 'msgid': 34, 'result': 50, 'desc': 'Insufficient access', 'ctrls': [], 'info': "Insufficient 'write' privilege to the 'userPassword' attribute of entry 'uid=user3,dc=example,dc=com'.\n"}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: INSUFFICIENT_ACCESS

During handling of the above exception, another exception occurred:

topology_st = <lib389.topologies.TopologyMain object at 0x7f91d1762dc0>

def test_ticket548_test_subtree_policy(topology_st):
"""
Check shadowAccount with subtree level password policy
"""

log.info("Case 3. Check shadowAccount with subtree level password policy")

log.info("Bind as %s" % DN_DM)
topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)
# Check the global policy values

set_subtree_pwpolicy(topology_st, 2, 20, 6)

log.info('Add an entry' + USER3_DN)
try:
topology_st.standalone.add_s(
Entry((USER3_DN, {'objectclass': "top person organizationalPerson inetOrgPerson shadowAccount".split(),
'sn': '3',
'cn': 'user 3',
'uid': 'user3',
'givenname': 'user',
'mail': 'user3@' + DEFAULT_SUFFIX,
'userpassword': USER_PW})))
except ldap.LDAPError as e:
log.fatal('test_ticket548: Failed to add user' + USER3_DN + ': error ' + e.message['desc'])
assert False

log.info('Search entry %s' % USER3_DN)
entry0 = topology_st.standalone.getEntry(USER3_DN, ldap.SCOPE_BASE, "(objectclass=*)")

log.info('Expecting shadowLastChange 0 since passwordMustChange is on')
check_shadow_attr_value(entry0, 'shadowLastChange', 0, USER3_DN)

# passwordMinAge -- 2 day
check_shadow_attr_value(entry0, 'shadowMin', 2, USER3_DN)

# passwordMaxAge -- 20 days
check_shadow_attr_value(entry0, 'shadowMax', 20, USER3_DN)

# passwordWarning -- 6 days
check_shadow_attr_value(entry0, 'shadowWarning', 6, USER3_DN)

log.info("Bind as %s" % USER3_DN)
topology_st.standalone.simple_bind_s(USER3_DN, USER_PW)

log.info('Search entry %s' % USER3_DN)
try:
entry1 = topology_st.standalone.getEntry(USER3_DN, ldap.SCOPE_BASE, "(objectclass=*)")
except ldap.UNWILLING_TO_PERFORM:
log.info('test_ticket548: Search by' + USER3_DN + ' failed by UNWILLING_TO_PERFORM as expected')
except ldap.LDAPError as e:
log.fatal('test_ticket548: Failed to serch user' + USER3_DN + ' by self: error ' + e.message['desc'])
assert False

log.info("Bind as %s and updating the password with a new one" % USER3_DN)
topology_st.standalone.simple_bind_s(USER3_DN, USER_PW)

# Bind as DM again, change policy
log.info("Bind as %s" % DN_DM)
topology_st.standalone.simple_bind_s(DN_DM, PASSWORD)

set_subtree_pwpolicy(topology_st, 4, 40, 12)

newpasswd = USER_PW + '0'
> update_passwd(topology_st, USER3_DN, USER_PW, newpasswd)

/export/tests/tickets/ticket548_test.py:372:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

topology_st = <lib389.topologies.TopologyMain object at 0x7f91d1762dc0>
user = 'uid=user3,dc=example,dc=com', passwd = 'password'
newpasswd = 'password0'

def update_passwd(topology_st, user, passwd, newpasswd):
log.info(" Bind as {%s,%s}" % (user, passwd))
topology_st.standalone.simple_bind_s(user, passwd)
try:
topology_st.standalone.modify_s(user, [(ldap.MOD_REPLACE, 'userpassword', newpasswd.encode())])
except ldap.LDAPError as e:
> log.fatal('test_ticket548: Failed to update the password ' + cpw + ' of user ' + user + ': error ' + e.message[
'desc'])
E NameError: name 'cpw' is not defined

/export/tests/tickets/ticket548_test.py:162: NameError
XFailed suites/acl/syntax_test.py::test_aci_invalid_syntax_fail[test_targattrfilters_18] 8.92
topo = <lib389.topologies.TopologyMain object at 0x7f91e3d602e0>
real_value = '(target = ldap:///cn=Jeff Vedder,ou=Product Development,dc=example,dc=com)(targetattr="*")(version 3.0; acl "Name of ...3123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123";)'

@pytest.mark.xfail(reason='https://bugzilla.redhat.com/show_bug.cgi?id=1691473')
@pytest.mark.parametrize("real_value", [a[1] for a in FAILED],
ids=[a[0] for a in FAILED])
def test_aci_invalid_syntax_fail(topo, real_value):
"""

Try to set wrong ACI syntax.

:id: 83c40784-fff5-49c8-9535-7064c9c19e7e
:parametrized: yes
:setup: Standalone Instance
:steps:
1. Create ACI
2. Try to setup the ACI with Instance
:expectedresults:
1. It should pass
2. It should not pass
"""
domain = Domain(topo.standalone, DEFAULT_SUFFIX)
with pytest.raises(ldap.INVALID_SYNTAX):
> domain.add("aci", real_value)
E Failed: DID NOT RAISE <class 'ldap.INVALID_SYNTAX'>

suites/acl/syntax_test.py:213: Failed
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
XFailed suites/acl/syntax_test.py::test_aci_invalid_syntax_fail[test_targattrfilters_20] 0.24
topo = <lib389.topologies.TopologyMain object at 0x7f91e3d602e0>
real_value = '(target = ldap:///cn=Jeff Vedder,ou=Product Development,dc=example,dc=com)(targetattr="*")(version 3.0; acl "Name of the ACI"; deny(write)userdns="ldap:///anyone";)'

@pytest.mark.xfail(reason='https://bugzilla.redhat.com/show_bug.cgi?id=1691473')
@pytest.mark.parametrize("real_value", [a[1] for a in FAILED],
ids=[a[0] for a in FAILED])
def test_aci_invalid_syntax_fail(topo, real_value):
"""

Try to set wrong ACI syntax.

:id: 83c40784-fff5-49c8-9535-7064c9c19e7e
:parametrized: yes
:setup: Standalone Instance
:steps:
1. Create ACI
2. Try to setup the ACI with Instance
:expectedresults:
1. It should pass
2. It should not pass
"""
domain = Domain(topo.standalone, DEFAULT_SUFFIX)
with pytest.raises(ldap.INVALID_SYNTAX):
> domain.add("aci", real_value)
E Failed: DID NOT RAISE <class 'ldap.INVALID_SYNTAX'>

suites/acl/syntax_test.py:213: Failed
XFailed suites/acl/syntax_test.py::test_aci_invalid_syntax_fail[test_bind_rule_set_with_more_than_three] 0.23
topo = <lib389.topologies.TopologyMain object at 0x7f91e3d602e0>
real_value = '(target = ldap:///dc=example,dc=com)(targetattr="*")(version 3.0; acl "Name of the ACI"; deny absolute (all)userdn="ldap:////////anyone";)'

@pytest.mark.xfail(reason='https://bugzilla.redhat.com/show_bug.cgi?id=1691473')
@pytest.mark.parametrize("real_value", [a[1] for a in FAILED],
ids=[a[0] for a in FAILED])
def test_aci_invalid_syntax_fail(topo, real_value):
"""

Try to set wrong ACI syntax.

:id: 83c40784-fff5-49c8-9535-7064c9c19e7e
:parametrized: yes
:setup: Standalone Instance
:steps:
1. Create ACI
2. Try to setup the ACI with Instance
:expectedresults:
1. It should pass
2. It should not pass
"""
domain = Domain(topo.standalone, DEFAULT_SUFFIX)
with pytest.raises(ldap.INVALID_SYNTAX):
> domain.add("aci", real_value)
E Failed: DID NOT RAISE <class 'ldap.INVALID_SYNTAX'>

suites/acl/syntax_test.py:213: Failed
XFailed suites/acl/userattr_test.py::test_mod_see_also_positive[(LEVEL_3, CHILDREN)] 0.17
topo = <lib389.topologies.TopologyMain object at 0x7f91e27fe760>
_add_user = None, user = 'uid=Grandparent,ou=Inheritance,dc=example,dc=com'
entry = 'ou=CHILDREN,ou=PARENTS,ou=GRANDPARENTS,ou=ANCESTORS,ou=Inheritance,dc=example,dc=com'

@pytest.mark.parametrize("user,entry", [
(CAN, ROLEDNACCESS),
(CAN, USERDNACCESS),
(CAN, GROUPDNACCESS),
(CAN, LDAPURLACCESS),
(CAN, ATTRNAMEACCESS),
(LEVEL_0, OU_2),
(LEVEL_1, ANCESTORS),
(LEVEL_2, GRANDPARENTS),
(LEVEL_4, OU_2),
(LEVEL_4, ANCESTORS),
(LEVEL_4, GRANDPARENTS),
(LEVEL_4, PARENTS),
(LEVEL_4, CHILDREN),
pytest.param(LEVEL_3, CHILDREN, marks=pytest.mark.xfail(reason="May be some bug")),
], ids=[
"(CAN,ROLEDNACCESS)",
"(CAN,USERDNACCESS)",
"(CAN,GROUPDNACCESS)",
"(CAN,LDAPURLACCESS)",
"(CAN,ATTRNAMEACCESS)",
"(LEVEL_0, OU_2)",
"(LEVEL_1,ANCESTORS)",
"(LEVEL_2,GRANDPARENTS)",
"(LEVEL_4,OU_2)",
"(LEVEL_4, ANCESTORS)",
"(LEVEL_4,GRANDPARENTS)",
"(LEVEL_4,PARENTS)",
"(LEVEL_4,CHILDREN)",
"(LEVEL_3, CHILDREN)"
])
def test_mod_see_also_positive(topo, _add_user, user, entry):
"""
Try to set seeAlso on entry with binding specific user, it will success
as per the ACI.

:id: 65745426-7a01-11e8-8ac2-8c16451d917b
:parametrized: yes
:setup: Standalone Instance
:steps:
1. Add test entry
2. Add ACI
3. User should follow ACI role
:expectedresults:
1. Entry should be added
2. Operation should succeed
3. Operation should succeed
"""
conn = UserAccount(topo.standalone, user).bind(PW_DM)
> UserAccount(conn, entry).replace('seeAlso', 'cn=1')

suites/acl/userattr_test.py:216:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:294: in replace
self.set(key, value, action=ldap.MOD_REPLACE)
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:460: in set
return self._instance.modify_ext_s(self._dn, [(action, key, value)],
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:613: in modify_ext_s
resp_type, resp_data, resp_msgid, resp_ctrls = self.result3(msgid,all=1,timeout=self.timeout)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:764: in result3
resp_type, resp_data, resp_msgid, decoded_resp_ctrls, retoid, retval = self.result4(
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:774: in result4
ldap_result = self._ldap_call(self._l.result4,msgid,all,timeout,add_ctrls,add_intermediates,add_extop)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:340: in _ldap_call
reraise(exc_type, exc_value, exc_traceback)
/usr/lib64/python3.9/site-packages/ldap/compat.py:46: in reraise
raise exc_value
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91e2830a30>
func = <built-in method result4 of LDAP object at 0x7f91e2821fc0>
args = (5, 1, -1, 0, 0, 0), kwargs = {}, diagnostic_message_success = None
exc_type = None, exc_value = None, exc_traceback = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E ldap.INSUFFICIENT_ACCESS: {'msgtype': 103, 'msgid': 5, 'result': 50, 'desc': 'Insufficient access', 'ctrls': [], 'info': "Insufficient 'write' privilege to the 'seeAlso' attribute of entry 'ou=children,ou=parents,ou=grandparents,ou=ancestors,ou=inheritance,dc=example,dc=com'.\n"}

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: INSUFFICIENT_ACCESS
XFailed suites/clu/dsidm_user_test.py::test_dsidm_user_get_dn 0.10
topology_st = <lib389.topologies.TopologyMain object at 0x7f91e3b66850>
create_test_user = None

@pytest.mark.bz1893667
@pytest.mark.xfail(reason="Will fail because of bz1893667")
@pytest.mark.skipif(ds_is_older("1.4.2"), reason="Not implemented")
def test_dsidm_user_get_dn(topology_st, create_test_user):
""" Test dsidm user get_dn option

:id: 787bf278-87c3-402e-936e-6161799d098d
:setup: Standalone instance
:steps:
1. Run dsidm user get_dn for created user
2. Check the output content is correct
:expectedresults:
1. Success
2. Success
"""

standalone = topology_st.standalone
users = nsUserAccounts(standalone, DEFAULT_SUFFIX)
test_user = users.get('test_user_1000')
args = FakeArgs()
args.dn = test_user.dn

log.info('Empty the log file to prevent false data to check about user')
topology_st.logcap.flush()

log.info('Test dsidm user get_dn without json')
> get_dn(standalone, DEFAULT_SUFFIX, topology_st.logcap.log, args)

suites/clu/dsidm_user_test.py:214:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.9/site-packages/lib389/cli_idm/user.py:38: in get_dn
_generic_get_dn(inst, basedn, log.getChild('_generic_get_dn'), MANY, dn, args)
/usr/local/lib/python3.9/site-packages/lib389/cli_idm/__init__.py:101: in _generic_get_dn
o = mc.get(dn=dn)
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:1157: in get
results = self._get_dn(dn)
/usr/local/lib/python3.9/site-packages/lib389/_mapped_object.py:1175: in _get_dn
return self._instance.search_ext_s(
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:863: in search_ext_s
msgid = self.search_ext(base,scope,filterstr,attrlist,attrsonly,serverctrls,clientctrls,timeout,sizelimit)
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:853: in search_ext
return self._ldap_call(
/usr/local/lib/python3.9/site-packages/lib389/__init__.py:174: in inner
return f(*args, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <lib389.DirSrv object at 0x7f91e3b66100>
func = <built-in method search_ext of LDAP object at 0x7f91e3ce2990>
args = (<function get_dn.<locals>.<lambda> at 0x7f91e41ec430>, 0, '(&(objectclass=nsPerson)(objectclass=nsAccount)(objectclass=nsOrgPerson)(objectclass=posixAccount))', ['dn'], 0, None, ...)
kwargs = {}, diagnostic_message_success = None

def _ldap_call(self,func,*args,**kwargs):
"""
Wrapper method mainly for serializing calls into OpenLDAP libs
and trace logs
"""
self._ldap_object_lock.acquire()
if __debug__:
if self._trace_level>=1:
self._trace_file.write('*** %s %s - %s\n%s\n' % (
repr(self),
self._uri,
'.'.join((self.__class__.__name__,func.__name__)),
pprint.pformat((args,kwargs))
))
if self._trace_level>=9:
traceback.print_stack(limit=self._trace_stack_limit,file=self._trace_file)
diagnostic_message_success = None
try:
try:
> result = func(*args,**kwargs)
E TypeError: search_ext() argument 1 must be str, not function

/usr/lib64/python3.9/site-packages/ldap/ldapobject.py:324: TypeError
-------------------------------Captured log setup-------------------------------
INFO tests.suites.clu.dsidm_user_test:dsidm_user_test.py:34 Create test user
-------------------------------Captured log call--------------------------------
INFO tests.suites.clu.dsidm_user_test:dsidm_user_test.py:210 Empty the log file to prevent false data to check about user INFO tests.suites.clu.dsidm_user_test:dsidm_user_test.py:213 Test dsidm user get_dn without json
-----------------------------Captured log teardown------------------------------
INFO tests.suites.clu.dsidm_user_test:dsidm_user_test.py:42 Delete test user
XFailed suites/config/config_test.py::test_defaultnamingcontext_1 0.35
topo = <lib389.topologies.TopologyMain object at 0x7f91e21bf5b0>

@pytest.mark.xfail(reason="This may fail due to bug 1610234")
def test_defaultnamingcontext_1(topo):
"""This test case should be part of function test_defaultnamingcontext
Please move it back after we have a fix for bug 1610234
"""
log.info("Remove the original suffix which is currently nsslapd-defaultnamingcontext"
"and check nsslapd-defaultnamingcontext become empty.")

""" Please remove these declarations after moving the test
to function test_defaultnamingcontext
"""
backends = Backends(topo.standalone)
test_db2 = 'test2_db'
test_suffix2 = 'dc=test2,dc=com'
b2 = backends.create(properties={'cn': test_db2,
'nsslapd-suffix': test_suffix2})
b2.delete()
> assert topo.standalone.config.get_attr_val_utf8('nsslapd-defaultnamingcontext') == ' '
E AssertionError: assert 'dc=example,dc=com' == ' '
E Strings contain only whitespace, escaping them using repr()
E - ' '
E + 'dc=example,dc=com'

suites/config/config_test.py:300: AssertionError
-------------------------------Captured log call--------------------------------
INFO tests.suites.config.config_test:config_test.py:288 Remove the original suffix which is currently nsslapd-defaultnamingcontextand check nsslapd-defaultnamingcontext become empty.
XFailed suites/export/export_test.py::test_dbtasks_db2ldif_with_non_accessible_ldif_file_path_output 3.65
topo = <lib389.topologies.TopologyMain object at 0x7f91d35ab8b0>

@pytest.mark.bz1860291
@pytest.mark.xfail(reason="bug 1860291")
@pytest.mark.skipif(ds_is_older("1.3.10", "1.4.2"), reason="Not implemented")
def test_dbtasks_db2ldif_with_non_accessible_ldif_file_path_output(topo):
"""Export with db2ldif, giving a ldif file path which can't be accessed by the user (dirsrv by default)

:id: fcc63387-e650-40a7-b643-baa68c190037
:setup: Standalone Instance - entries imported in the db
:steps:
1. Stop the server
2. Launch db2ldif with a non accessible ldif file path
3. check the error reported in the command output
:expected results:
1. Operation successful
2. Operation properly fails
3. An clear error message is reported as output of the cli
"""
export_ldif = '/tmp/nonexistent/export.ldif'

log.info("Stopping the instance...")
topo.standalone.stop()

log.info("Performing an offline export to a non accessible ldif file path - should fail and output a clear error message")
expected_output="No such file or directory"
> run_db2ldif_and_clear_logs(topo, topo.standalone, DEFAULT_BENAME, export_ldif, expected_output)

suites/export/export_test.py:150:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

topology = <lib389.topologies.TopologyMain object at 0x7f91d35ab8b0>
instance = <lib389.DirSrv object at 0x7f91d35ab850>, backend = 'userRoot'
ldif = '/tmp/nonexistent/export.ldif', output_msg = 'No such file or directory'
encrypt = False, repl = False

def run_db2ldif_and_clear_logs(topology, instance, backend, ldif, output_msg, encrypt=False, repl=False):
args = FakeArgs()
args.instance = instance.serverid
args.backend = backend
args.encrypted = encrypt
args.replication = repl
args.ldif = ldif

dbtasks_db2ldif(instance, topology.logcap.log, args)

log.info('checking output msg')
if not topology.logcap.contains(output_msg):
log.error('The output message is not the expected one')
> assert False
E assert False

suites/export/export_test.py:36: AssertionError
------------------------------Captured stderr call------------------------------
ldiffile: /tmp/nonexistent/export.ldif
-------------------------------Captured log call--------------------------------
INFO lib389.utils:export_test.py:145 Stopping the instance... INFO lib389.utils:export_test.py:148 Performing an offline export to a non accessible ldif file path - should fail and output a clear error message CRITICAL LogCapture:dbtasks.py:59 db2ldif failed INFO lib389.utils:export_test.py:33 checking output msg ERROR lib389.utils:export_test.py:35 The output message is not the expected one
XFailed suites/healthcheck/healthcheck_test.py::test_healthcheck_unable_to_query_backend 1.05
topology_st = <lib389.topologies.TopologyMain object at 0x7f91d2e8f190>

@pytest.mark.ds50873
@pytest.mark.bz1796343
@pytest.mark.skipif(ds_is_older("1.4.1"), reason="Not implemented")
@pytest.mark.xfail(reason="Will fail because of bz1837315. Set proper version after bug is fixed")
def test_healthcheck_unable_to_query_backend(topology_st):
"""Check if HealthCheck returns DSBLE0002 code

:id: 716b1ff1-94bd-4780-98b8-96ff8ef21e30
:setup: Standalone instance
:steps:
1. Create DS instance
2. Create a new root suffix and database
3. Disable new suffix
4. Use HealthCheck without --json option
5. Use HealthCheck with --json option
:expectedresults:
1. Success
2. Success
3. Success
4. HealthCheck should return code DSBLE0002
5. HealthCheck should return code DSBLE0002
"""

RET_CODE = 'DSBLE0002'
NEW_SUFFIX = 'dc=test,dc=com'
NEW_BACKEND = 'userData'

standalone = topology_st.standalone

log.info('Create new suffix')
backends = Backends(standalone)
backends.create(properties={
'cn': NEW_BACKEND,
'nsslapd-suffix': NEW_SUFFIX,
})

log.info('Disable the newly created suffix')
mts = MappingTrees(standalone)
mt_new = mts.get(NEW_SUFFIX)
mt_new.replace('nsslapd-state', 'disabled')

run_healthcheck_and_flush_log(topology_st, standalone, RET_CODE, json=False)
run_healthcheck_and_flush_log(topology_st, standalone, RET_CODE, json=True)

log.info('Enable the suffix again and check if nothing is broken')
mt_new.replace('nsslapd-state', 'backend')
> run_healthcheck_and_flush_log(topology_st, standalone, RET_CODE, json=False)

suites/healthcheck/healthcheck_test.py:453:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

topology = <lib389.topologies.TopologyMain object at 0x7f91d2e8f190>
instance = <lib389.DirSrv object at 0x7f91d2a11bb0>, searched_code = 'DSBLE0002'
json = False, searched_code2 = None, list_checks = False, list_errors = False
check = None, searched_list = None

def run_healthcheck_and_flush_log(topology, instance, searched_code=None, json=False, searched_code2=None,
list_checks=False, list_errors=False, check=None, searched_list=None):
args = FakeArgs()
args.instance = instance.serverid
args.verbose = instance.verbose
args.list_errors = list_errors
args.list_checks = list_checks
args.check = check
args.dry_run = False
args.json = json

log.info('Use healthcheck with --json == {} option'.format(json))
health_check_run(instance, topology.logcap.log, args)

if searched_list is not None:
for item in searched_list:
assert topology.logcap.contains(item)
log.info('Healthcheck returned searched item: %s' % item)
else:
> assert topology.logcap.contains(searched_code)
E AssertionError: assert False
E + where False = <bound method LogCapture.contains of <LogCapture (NOTSET)>>('DSBLE0002')
E + where <bound method LogCapture.contains of <LogCapture (NOTSET)>> = <LogCapture (NOTSET)>.contains
E + where <LogCapture (NOTSET)> = <lib389.topologies.TopologyMain object at 0x7f91d2e8f190>.logcap

suites/healthcheck/healthcheck_test.py:49: AssertionError
-------------------------------Captured log call--------------------------------
INFO LogCapture:health.py:94 Beginning lint report, this could take a while ... INFO LogCapture:health.py:99 Checking config:hr_timestamp ... INFO LogCapture:health.py:99 Checking config:passwordscheme ... INFO LogCapture:health.py:99 Checking backends:userdata:cl_trimming ... INFO LogCapture:health.py:99 Checking backends:userdata:mappingtree ... INFO LogCapture:health.py:99 Checking backends:userdata:search ... INFO LogCapture:health.py:99 Checking backends:userdata:virt_attrs ... INFO LogCapture:health.py:99 Checking backends:userroot:cl_trimming ... INFO LogCapture:health.py:99 Checking backends:userroot:mappingtree ... INFO LogCapture:health.py:99 Checking backends:userroot:search ... INFO LogCapture:health.py:99 Checking backends:userroot:virt_attrs ... INFO LogCapture:health.py:99 Checking encryption:check_tls_version ... INFO LogCapture:health.py:99 Checking fschecks:file_perms ... INFO LogCapture:health.py:99 Checking refint:attr_indexes ... INFO LogCapture:health.py:99 Checking refint:update_delay ... INFO LogCapture:health.py:99 Checking monitor-disk-space:disk_space ... INFO LogCapture:health.py:99 Checking replication:agmts_status ... INFO LogCapture:health.py:99 Checking replication:conflicts ... INFO LogCapture:health.py:99 Checking dseldif:nsstate ... INFO LogCapture:health.py:99 Checking tls:certificate_expiration ... INFO LogCapture:health.py:99 Checking logs:notes ... INFO LogCapture:health.py:106 Healthcheck complete. INFO LogCapture:health.py:119 4 Issues found! Generating report ... INFO LogCapture:health.py:45 [1] DS Lint Error: DSBLE0001 INFO LogCapture:health.py:46 -------------------------------------------------------------------------------- INFO LogCapture:health.py:47 Severity: MEDIUM INFO LogCapture:health.py:49 Check: backends:userdata:mappingtree INFO LogCapture:health.py:50 Affects: INFO LogCapture:health.py:52 -- userdata INFO LogCapture:health.py:53 Details: INFO LogCapture:health.py:54 ----------- INFO LogCapture:health.py:55 This backend may be missing the correct mapping tree references. Mapping Trees allow the directory server to determine which backend an operation is routed to in the abscence of other information. This is extremely important for correct functioning of LDAP ADD for example. A correct Mapping tree for this backend must contain the suffix name, the database name and be a backend type. IE: cn=o3Dexample,cn=mapping tree,cn=config cn: o=example nsslapd-backend: userRoot nsslapd-state: backend objectClass: top objectClass: extensibleObject objectClass: nsMappingTree INFO LogCapture:health.py:56 Resolution: INFO LogCapture:health.py:57 ----------- INFO LogCapture:health.py:58 Either you need to create the mapping tree, or you need to repair the related mapping tree. You will need to do this by hand by editing cn=config, or stopping the instance and editing dse.ldif. INFO LogCapture:health.py:45 [2] DS Lint Error: DSBLE0002 INFO LogCapture:health.py:46 -------------------------------------------------------------------------------- INFO LogCapture:health.py:47 Severity: HIGH INFO LogCapture:health.py:49 Check: backends:userdata:search INFO LogCapture:health.py:50 Affects: INFO LogCapture:health.py:52 -- dc=test,dc=com INFO LogCapture:health.py:53 Details: INFO LogCapture:health.py:54 ----------- INFO LogCapture:health.py:55 Unable to query the backend. LDAP error ({'msgtype': 101, 'msgid': 27, 'result': 1, 'desc': 'Operations error', 'ctrls': [], 'info': 'Warning: Operation attempted on a disabled node : dc=example,dc=com\n'}) INFO LogCapture:health.py:56 Resolution: INFO LogCapture:health.py:57 ----------- INFO LogCapture:health.py:58 Check the server's error and access logs for more information. INFO LogCapture:health.py:45 [3] DS Lint Error: DSBLE0001 INFO LogCapture:health.py:46 -------------------------------------------------------------------------------- INFO LogCapture:health.py:47 Severity: MEDIUM INFO LogCapture:health.py:49 Check: backends:userdata:mappingtree INFO LogCapture:health.py:50 Affects: INFO LogCapture:health.py:52 -- userdata INFO LogCapture:health.py:53 Details: INFO LogCapture:health.py:54 ----------- INFO LogCapture:health.py:55 This backend may be missing the correct mapping tree references. Mapping Trees allow the directory server to determine which backend an operation is routed to in the abscence of other information. This is extremely important for correct functioning of LDAP ADD for example. A correct Mapping tree for this backend must contain the suffix name, the database name and be a backend type. IE: cn=o3Dexample,cn=mapping tree,cn=config cn: o=example nsslapd-backend: userRoot nsslapd-state: backend objectClass: top objectClass: extensibleObject objectClass: nsMappingTree INFO LogCapture:health.py:56 Resolution: INFO LogCapture:health.py:57 ----------- INFO LogCapture:health.py:58 Either you need to create the mapping tree, or you need to repair the related mapping tree. You will need to do this by hand by editing cn=config, or stopping the instance and editing dse.ldif. INFO LogCapture:health.py:45 [4] DS Lint Error: DSBLE0002 INFO LogCapture:health.py:46 -------------------------------------------------------------------------------- INFO LogCapture:health.py:47 Severity: HIGH INFO LogCapture:health.py:49 Check: backends:userdata:search INFO LogCapture:health.py:50 Affects: INFO LogCapture:health.py:52 -- dc=test,dc=com INFO LogCapture:health.py:53 Details: INFO LogCapture:health.py:54 ----------- INFO LogCapture:health.py:55 Unable to query the backend. LDAP error ({'msgtype': 101, 'msgid': 27, 'result': 1, 'desc': 'Operations error', 'ctrls': [], 'info': 'Warning: Operation attempted on a disabled node : dc=example,dc=com\n'}) INFO LogCapture:health.py:56 Resolution: INFO LogCapture:health.py:57 ----------- INFO LogCapture:health.py:58 Check the server's error and access logs for more information. INFO LogCapture:health.py:124 ===== End Of Report (4 Issues found) ===== INFO LogCapture:health.py:126 [ { "dsle": "DSBLE0001", "severity": "MEDIUM", "description": "Possibly incorrect mapping tree.", "items": [ "userdata" ], "detail": "This backend may be missing the correct mapping tree references. Mapping Trees allow\nthe directory server to determine which backend an operation is routed to in the\nabscence of other information. This is extremely important for correct functioning\nof LDAP ADD for example.\n\nA correct Mapping tree for this backend must contain the suffix name, the database name\nand be a backend type. IE:\n\ncn=o3Dexample,cn=mapping tree,cn=config\ncn: o=example\nnsslapd-backend: userRoot\nnsslapd-state: backend\nobjectClass: top\nobjectClass: extensibleObject\nobjectClass: nsMappingTree\n\n", "fix": "Either you need to create the mapping tree, or you need to repair the related\nmapping tree. You will need to do this by hand by editing cn=config, or stopping\nthe instance and editing dse.ldif.\n", "check": "backends:userdata:mappingtree" }, { "dsle": "DSBLE0002", "severity": "HIGH", "description": "Unable to query backend.", "items": [ "dc=test,dc=com" ], "detail": "Unable to query the backend. LDAP error ({'msgtype': 101, 'msgid': 27, 'result': 1, 'desc': 'Operations error', 'ctrls': [], 'info': 'Warning: Operation attempted on a disabled node : dc=example,dc=com\\n'})", "fix": "Check the server's error and access logs for more information.", "check": "backends:userdata:search" }, { "dsle": "DSBLE0001", "severity": "MEDIUM", "description": "Possibly incorrect mapping tree.", "items": [ "userdata" ], "detail": "This backend may be missing the correct mapping tree references. Mapping Trees allow\nthe directory server to determine which backend an operation is routed to in the\nabscence of other information. This is extremely important for correct functioning\nof LDAP ADD for example.\n\nA correct Mapping tree for this backend must contain the suffix name, the database name\nand be a backend type. IE:\n\ncn=o3Dexample,cn=mapping tree,cn=config\ncn: o=example\nnsslapd-backend: userRoot\nnsslapd-state: backend\nobjectClass: top\nobjectClass: extensibleObject\nobjectClass: nsMappingTree\n\n", "fix": "Either you need to create the mapping tree, or you need to repair the related\nmapping tree. You will need to do this by hand by editing cn=config, or stopping\nthe instance and editing dse.ldif.\n", "check": "backends:userdata:mappingtree" }, { "dsle": "DSBLE0002", "severity": "HIGH", "description": "Unable to query backend.", "items": [ "dc=test,dc=com" ], "detail": "Unable to query the backend. LDAP error ({'msgtype': 101, 'msgid': 27, 'result': 1, 'desc': 'Operations error', 'ctrls': [], 'info': 'Warning: Operation attempted on a disabled node : dc=example,dc=com\\n'})", "fix": "Check the server's error and access logs for more information.", "check": "backends:userdata:search" } ] INFO LogCapture:health.py:94 Beginning lint report, this could take a while ... INFO LogCapture:health.py:99 Checking config:hr_timestamp ... INFO LogCapture:health.py:99 Checking config:passwordscheme ... INFO LogCapture:health.py:99 Checking backends:userdata:cl_trimming ... INFO LogCapture:health.py:99 Checking backends:userdata:mappingtree ... INFO LogCapture:health.py:99 Checking backends:userdata:search ... INFO LogCapture:health.py:99 Checking backends:userdata:virt_attrs ... INFO LogCapture:health.py:99 Checking backends:userroot:cl_trimming ... INFO LogCapture:health.py:99 Checking backends:userroot:mappingtree ... INFO LogCapture:health.py:99 Checking backends:userroot:search ... INFO LogCapture:health.py:99 Checking backends:userroot:virt_attrs ... INFO LogCapture:health.py:99 Checking encryption:check_tls_version ... INFO LogCapture:health.py:99 Checking fschecks:file_perms ... INFO LogCapture:health.py:99 Checking refint:attr_indexes ... INFO LogCapture:health.py:99 Checking refint:update_delay ... INFO LogCapture:health.py:99 Checking monitor-disk-space:disk_space ... INFO LogCapture:health.py:99 Checking replication:agmts_status ... INFO LogCapture:health.py:99 Checking replication:conflicts ... INFO LogCapture:health.py:99 Checking dseldif:nsstate ... INFO LogCapture:health.py:99 Checking tls:certificate_expiration ... INFO LogCapture:health.py:99 Checking logs:notes ... INFO LogCapture:health.py:106 Healthcheck complete. INFO LogCapture:health.py:119 2 Issues found! Generating report ... INFO LogCapture:health.py:45 [1] DS Lint Error: DSBLE0003 INFO LogCapture:health.py:46 -------------------------------------------------------------------------------- INFO LogCapture:health.py:47 Severity: LOW INFO LogCapture:health.py:49 Check: backends:userdata:search INFO LogCapture:health.py:50 Affects: INFO LogCapture:health.py:52 -- dc=test,dc=com INFO LogCapture:health.py:53 Details: INFO LogCapture:health.py:54 ----------- INFO LogCapture:health.py:55 The backend database has not been initialized yet INFO LogCapture:health.py:56 Resolution: INFO LogCapture:health.py:57 ----------- INFO LogCapture:health.py:58 You need to import an LDIF file, or create the suffix entry, in order to initialize the database. INFO LogCapture:health.py:45 [2] DS Lint Error: DSBLE0003 INFO LogCapture:health.py:46 -------------------------------------------------------------------------------- INFO LogCapture:health.py:47 Severity: LOW INFO LogCapture:health.py:49 Check: backends:userdata:search INFO LogCapture:health.py:50 Affects: INFO LogCapture:health.py:52 -- dc=test,dc=com INFO LogCapture:health.py:53 Details: INFO LogCapture:health.py:54 ----------- INFO LogCapture:health.py:55 The backend database has not been initialized yet INFO LogCapture:health.py:56 Resolution: INFO LogCapture:health.py:57 ----------- INFO LogCapture:health.py:58 You need to import an LDIF file, or create the suffix entry, in order to initialize the database. INFO LogCapture:health.py:124 ===== End Of Report (2 Issues found) =====
XFailed suites/replication/conflict_resolve_test.py::TestTwoSuppliers::test_memberof_groups 9.61
self = <tests.suites.replication.conflict_resolve_test.TestTwoSuppliers object at 0x7f91d3ddf070>
topology_m2 = <lib389.topologies.TopologyMain object at 0x7f91cfb64f40>
base_m2 = <lib389.idm.nscontainer.nsContainer object at 0x7f91cfb50d60>

def test_memberof_groups(self, topology_m2, base_m2):
"""Check that conflict properly resolved for operations
with memberOf and groups

:id: 77f09b18-03d1-45da-940b-1ad2c2908eb3
:setup: Two supplier replication, test container for entries, enable plugin logging,
audit log, error log for replica and access log for internal
:steps:
1. Enable memberOf plugin
2. Add 30 users to m1 and wait for replication to happen
3. Pause replication
4. Create a group on m1 and m2
5. Create a group on m1 and m2, delete from m1
6. Create a group on m1, delete from m1, and create on m2,
7. Create a group on m2 and m1, delete from m1
8. Create two different groups on m2
9. Resume replication
10. Check that the entries on both suppliers are the same and replication is working
:expectedresults:
1. It should pass
2. It should pass
3. It should pass
4. It should pass
5. It should pass
6. It should pass
7. It should pass
8. It should pass
9. It should pass
10. It should pass
"""

> pytest.xfail("Issue 49591 - work in progress")
E _pytest.outcomes.XFailed: Issue 49591 - work in progress

suites/replication/conflict_resolve_test.py:403: XFailed
XFailed suites/replication/conflict_resolve_test.py::TestTwoSuppliers::test_managed_entries 0.10
self = <tests.suites.replication.conflict_resolve_test.TestTwoSuppliers object at 0x7f91cfb39850>
topology_m2 = <lib389.topologies.TopologyMain object at 0x7f91cfb64f40>

def test_managed_entries(self, topology_m2):
"""Check that conflict properly resolved for operations
with managed entries

:id: 77f09b18-03d1-45da-940b-1ad2c2908eb4
:setup: Two supplier replication, test container for entries, enable plugin logging,
audit log, error log for replica and access log for internal
:steps:
1. Create ou=managed_users and ou=managed_groups under test container
2. Configure managed entries plugin and add a template to test container
3. Add a user to m1 and wait for replication to happen
4. Pause replication
5. Create a user on m1 and m2 with a same group ID on both supplier
6. Create a user on m1 and m2 with a different group ID on both supplier
7. Resume replication
8. Check that the entries on both suppliers are the same and replication is working
:expectedresults:
1. It should pass
2. It should pass
3. It should pass
4. It should pass
5. It should pass
6. It should pass
7. It should pass
8. It should pass
"""

> pytest.xfail("Issue 49591 - work in progress")
E _pytest.outcomes.XFailed: Issue 49591 - work in progress

suites/replication/conflict_resolve_test.py:494: XFailed
XFailed suites/replication/conflict_resolve_test.py::TestTwoSuppliers::test_nested_entries_with_children 9.87
self = <tests.suites.replication.conflict_resolve_test.TestTwoSuppliers object at 0x7f91d2d6b8e0>
topology_m2 = <lib389.topologies.TopologyMain object at 0x7f91cfb64f40>
base_m2 = <lib389.idm.nscontainer.nsContainer object at 0x7f91d2fd5550>

def test_nested_entries_with_children(self, topology_m2, base_m2):
"""Check that conflict properly resolved for operations
with nested entries with children

:id: 77f09b18-03d1-45da-940b-1ad2c2908eb5
:setup: Two supplier replication, test container for entries, enable plugin logging,
audit log, error log for replica and access log for internal
:steps:
1. Add 15 containers to m1 and wait for replication to happen
2. Pause replication
3. Create parent-child on supplier2 and supplier1
4. Create parent-child on supplier1 and supplier2
5. Create parent-child on supplier1 and supplier2 different child rdn
6. Create parent-child on supplier1 and delete parent on supplier2
7. Create parent on supplier1, delete it and parent-child on supplier2, delete them
8. Create parent on supplier1, delete it and parent-two children on supplier2
9. Create parent-two children on supplier1 and parent-child on supplier2, delete them
10. Create three subsets inside existing container entry, applying only part of changes on m2
11. Create more combinations of the subset with parent-child on m1 and parent on m2
12. Delete container on m1, modify user1 on m1, create parent on m2 and modify user2 on m2
13. Resume replication
14. Check that the entries on both suppliers are the same and replication is working
:expectedresults:
1. It should pass
2. It should pass
3. It should pass
4. It should pass
5. It should pass
6. It should pass
7. It should pass
8. It should pass
9. It should pass
10. It should pass
11. It should pass
12. It should pass
13. It should pass
14. It should pass
"""

> pytest.xfail("Issue 49591 - work in progress")
E _pytest.outcomes.XFailed: Issue 49591 - work in progress

suites/replication/conflict_resolve_test.py:585: XFailed
XFailed suites/replication/conflict_resolve_test.py::TestThreeSuppliers::test_nested_entries 70.93
self = <tests.suites.replication.conflict_resolve_test.TestThreeSuppliers object at 0x7f91d31978b0>
topology_m3 = <lib389.topologies.TopologyMain object at 0x7f91d2fd5c40>
base_m3 = <lib389.idm.nscontainer.nsContainer object at 0x7f91d2fd55b0>

def test_nested_entries(self, topology_m3, base_m3):
"""Check that conflict properly resolved for operations
with nested entries with children

:id: 77f09b18-03d1-45da-940b-1ad2c2908eb6
:setup: Three supplier replication, test container for entries, enable plugin logging,
audit log, error log for replica and access log for internal
:steps:
1. Add 15 containers to m1 and wait for replication to happen
2. Pause replication
3. Create two child entries under each of two entries
4. Create three child entries under each of three entries
5. Create two parents on m1 and m2, then on m1 - create a child and delete one parent,
on m2 - delete one parent and create a child
6. Test a few more parent-child combinations with three instances
7. Resume replication
8. Check that the entries on both suppliers are the same and replication is working
:expectedresults:
1. It should pass
2. It should pass
3. It should pass
4. It should pass
5. It should pass
6. It should pass
7. It should pass
8. It should pass
"""

> pytest.xfail("Issue 49591 - work in progress")
E _pytest.outcomes.XFailed: Issue 49591 - work in progress

suites/replication/conflict_resolve_test.py:969: XFailed
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39001, 'ldap-secureport': 63701, 'server-id': 'supplier1', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier2 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39002, 'ldap-secureport': 63702, 'server-id': 'supplier2', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier3 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39003, 'ldap-secureport': 63703, 'server-id': 'supplier3', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.topologies:topologies.py:145 Creating replication topology. INFO lib389.topologies:topologies.py:159 Joining supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2084 SUCCESS: bootstrap to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 completed INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is was created INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is was created INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect 6c4ddbb6-295d-436b-ba48-e3e31f9343fa / got description=None) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect b9145c0b-d9a1-4bf5-a522-e2def3149d15 / got description=6c4ddbb6-295d-436b-ba48-e3e31f9343fa) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is working INFO lib389.replica:replica.py:2153 SUCCESS: joined supplier from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 INFO lib389.topologies:topologies.py:159 Joining supplier supplier3 to supplier1 ... INFO lib389.replica:replica.py:2084 SUCCESS: bootstrap to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 completed INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 is was created INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is was created INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 is NOT working (expect 88596759-6852-443f-bbac-9949b0c850e8 / got description=b9145c0b-d9a1-4bf5-a522-e2def3149d15) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect 22f27388-4d35-44c8-9ebe-4c03c3ca197f / got description=88596759-6852-443f-bbac-9949b0c850e8) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect 22f27388-4d35-44c8-9ebe-4c03c3ca197f / got description=88596759-6852-443f-bbac-9949b0c850e8) INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect 22f27388-4d35-44c8-9ebe-4c03c3ca197f / got description=88596759-6852-443f-bbac-9949b0c850e8) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is working INFO lib389.replica:replica.py:2153 SUCCESS: joined supplier from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier1 to supplier2 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier1 to supplier3 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier2 to supplier3 ... INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 is was created INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier3 to supplier1 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier3 to supplier2 ... INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39003 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is was created
XFailed suites/replication/replica_config_test.py::test_agmt_num_add[nsds5ReplicaPort-0-65535-9999999999999999999999999999999999999999999999999999999999999999999-invalid-389] 0.20
topo = <lib389.topologies.TopologyMain object at 0x7f91cfc862b0>
attr = 'nsds5ReplicaPort', too_small = '0', too_big = '65535'
overflow = '9999999999999999999999999999999999999999999999999999999999999999999'
notnum = 'invalid', valid = '389'

@pytest.mark.xfail(reason="Agreement validation current does not work.")
@pytest.mark.parametrize("attr, too_small, too_big, overflow, notnum, valid", agmt_attrs)
def test_agmt_num_add(topo, attr, too_small, too_big, overflow, notnum, valid):
"""Test all the number values you can set for a replica config entry

:id: a8b47d4a-a089-4d70-8070-e6181209bf94
:parametrized: yes
:setup: standalone instance
:steps:
1. Use a value that is too small
2. Use a value that is too big
3. Use a value that overflows the int
4. Use a value with character value (not a number)
5. Use a valid value
:expectedresults:
1. Add is rejected
2. Add is rejected
3. Add is rejected
4. Add is rejected
5. Add is allowed
"""

agmt_reset(topo)
replica = replica_setup(topo)

agmts = Agreements(topo.standalone, basedn=replica.dn)

# Test too small
perform_invalid_create(agmts, agmt_dict, attr, too_small)
# Test too big
> perform_invalid_create(agmts, agmt_dict, attr, too_big)

suites/replication/replica_config_test.py:217:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

many = <lib389.agreement.Agreements object at 0x7f91cfc844c0>
properties = {'cn': 'test_agreement', 'nsDS5ReplicaBindDN': 'uid=tester', 'nsDS5ReplicaBindMethod': 'SIMPLE', 'nsDS5ReplicaHost': 'localhost.localdomain', ...}
attr = 'nsds5ReplicaPort', value = '65535'

def perform_invalid_create(many, properties, attr, value):
my_properties = copy.deepcopy(properties)
my_properties[attr] = value
with pytest.raises(ldap.LDAPError) as ei:
> many.create(properties=my_properties)
E Failed: DID NOT RAISE <class 'ldap.LDAPError'>

suites/replication/replica_config_test.py:108: Failed
XFailed suites/replication/replica_config_test.py::test_agmt_num_modify[nsds5ReplicaPort-0-65535-9999999999999999999999999999999999999999999999999999999999999999999-invalid-389] 0.27
topo = <lib389.topologies.TopologyMain object at 0x7f91cfc862b0>
attr = 'nsds5ReplicaPort', too_small = '0', too_big = '65535'
overflow = '9999999999999999999999999999999999999999999999999999999999999999999'
notnum = 'invalid', valid = '389'

@pytest.mark.xfail(reason="Agreement validation current does not work.")
@pytest.mark.parametrize("attr, too_small, too_big, overflow, notnum, valid", agmt_attrs)
def test_agmt_num_modify(topo, attr, too_small, too_big, overflow, notnum, valid):
"""Test all the number values you can set for a replica config entry

:id: a8b47d4a-a089-4d70-8070-e6181209bf95
:parametrized: yes
:setup: standalone instance
:steps:
1. Replace a value that is too small
2. Replace a value that is too big
3. Replace a value that overflows the int
4. Replace a value with character value (not a number)
5. Replace a vlue with a valid value
:expectedresults:
1. Value is rejected
2. Value is rejected
3. Value is rejected
4. Value is rejected
5. Value is allowed
"""

agmt = agmt_setup(topo)

# Value too small
> perform_invalid_modify(agmt, attr, too_small)

suites/replication/replica_config_test.py:253:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

o = <lib389.agreement.Agreement object at 0x7f91cfc8a580>
attr = 'nsds5ReplicaPort', value = '0'

def perform_invalid_modify(o, attr, value):
with pytest.raises(ldap.LDAPError) as ei:
> o.replace(attr, value)
E Failed: DID NOT RAISE <class 'ldap.LDAPError'>

suites/replication/replica_config_test.py:113: Failed
XFailed suites/replication/replica_config_test.py::test_agmt_num_modify[nsds5ReplicaTimeout--1-9223372036854775807-9999999999999999999999999999999999999999999999999999999999999999999-invalid-6] 0.25
topo = <lib389.topologies.TopologyMain object at 0x7f91cfc862b0>
attr = 'nsds5ReplicaTimeout', too_small = '-1', too_big = '9223372036854775807'
overflow = '9999999999999999999999999999999999999999999999999999999999999999999'
notnum = 'invalid', valid = '6'

@pytest.mark.xfail(reason="Agreement validation current does not work.")
@pytest.mark.parametrize("attr, too_small, too_big, overflow, notnum, valid", agmt_attrs)
def test_agmt_num_modify(topo, attr, too_small, too_big, overflow, notnum, valid):
"""Test all the number values you can set for a replica config entry

:id: a8b47d4a-a089-4d70-8070-e6181209bf95
:parametrized: yes
:setup: standalone instance
:steps:
1. Replace a value that is too small
2. Replace a value that is too big
3. Replace a value that overflows the int
4. Replace a value with character value (not a number)
5. Replace a vlue with a valid value
:expectedresults:
1. Value is rejected
2. Value is rejected
3. Value is rejected
4. Value is rejected
5. Value is allowed
"""

agmt = agmt_setup(topo)

# Value too small
perform_invalid_modify(agmt, attr, too_small)
# Value too big
> perform_invalid_modify(agmt, attr, too_big)

suites/replication/replica_config_test.py:255:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

o = <lib389.agreement.Agreement object at 0x7f91d3bed310>
attr = 'nsds5ReplicaTimeout', value = '9223372036854775807'

def perform_invalid_modify(o, attr, value):
with pytest.raises(ldap.LDAPError) as ei:
> o.replace(attr, value)
E Failed: DID NOT RAISE <class 'ldap.LDAPError'>

suites/replication/replica_config_test.py:113: Failed
XFailed suites/replication/replica_config_test.py::test_agmt_num_modify[nsds5ReplicaBusyWaitTime--1-9223372036854775807-9999999999999999999999999999999999999999999999999999999999999999999-invalid-6] 0.26
topo = <lib389.topologies.TopologyMain object at 0x7f91cfc862b0>
attr = 'nsds5ReplicaBusyWaitTime', too_small = '-1'
too_big = '9223372036854775807'
overflow = '9999999999999999999999999999999999999999999999999999999999999999999'
notnum = 'invalid', valid = '6'

@pytest.mark.xfail(reason="Agreement validation current does not work.")
@pytest.mark.parametrize("attr, too_small, too_big, overflow, notnum, valid", agmt_attrs)
def test_agmt_num_modify(topo, attr, too_small, too_big, overflow, notnum, valid):
"""Test all the number values you can set for a replica config entry

:id: a8b47d4a-a089-4d70-8070-e6181209bf95
:parametrized: yes
:setup: standalone instance
:steps:
1. Replace a value that is too small
2. Replace a value that is too big
3. Replace a value that overflows the int
4. Replace a value with character value (not a number)
5. Replace a vlue with a valid value
:expectedresults:
1. Value is rejected
2. Value is rejected
3. Value is rejected
4. Value is rejected
5. Value is allowed
"""

agmt = agmt_setup(topo)

# Value too small
perform_invalid_modify(agmt, attr, too_small)
# Value too big
> perform_invalid_modify(agmt, attr, too_big)

suites/replication/replica_config_test.py:255:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

o = <lib389.agreement.Agreement object at 0x7f91d23eed90>
attr = 'nsds5ReplicaBusyWaitTime', value = '9223372036854775807'

def perform_invalid_modify(o, attr, value):
with pytest.raises(ldap.LDAPError) as ei:
> o.replace(attr, value)
E Failed: DID NOT RAISE <class 'ldap.LDAPError'>

suites/replication/replica_config_test.py:113: Failed
XFailed suites/replication/replica_config_test.py::test_agmt_num_modify[nsds5ReplicaSessionPauseTime--1-9223372036854775807-9999999999999999999999999999999999999999999999999999999999999999999-invalid-6] 0.30
topo = <lib389.topologies.TopologyMain object at 0x7f91cfc862b0>
attr = 'nsds5ReplicaSessionPauseTime', too_small = '-1'
too_big = '9223372036854775807'
overflow = '9999999999999999999999999999999999999999999999999999999999999999999'
notnum = 'invalid', valid = '6'

@pytest.mark.xfail(reason="Agreement validation current does not work.")
@pytest.mark.parametrize("attr, too_small, too_big, overflow, notnum, valid", agmt_attrs)
def test_agmt_num_modify(topo, attr, too_small, too_big, overflow, notnum, valid):
"""Test all the number values you can set for a replica config entry

:id: a8b47d4a-a089-4d70-8070-e6181209bf95
:parametrized: yes
:setup: standalone instance
:steps:
1. Replace a value that is too small
2. Replace a value that is too big
3. Replace a value that overflows the int
4. Replace a value with character value (not a number)
5. Replace a vlue with a valid value
:expectedresults:
1. Value is rejected
2. Value is rejected
3. Value is rejected
4. Value is rejected
5. Value is allowed
"""

agmt = agmt_setup(topo)

# Value too small
perform_invalid_modify(agmt, attr, too_small)
# Value too big
> perform_invalid_modify(agmt, attr, too_big)

suites/replication/replica_config_test.py:255:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

o = <lib389.agreement.Agreement object at 0x7f91d23eef40>
attr = 'nsds5ReplicaSessionPauseTime', value = '9223372036854775807'

def perform_invalid_modify(o, attr, value):
with pytest.raises(ldap.LDAPError) as ei:
> o.replace(attr, value)
E Failed: DID NOT RAISE <class 'ldap.LDAPError'>

suites/replication/replica_config_test.py:113: Failed
XFailed suites/replication/replica_config_test.py::test_agmt_num_modify[nsds5ReplicaFlowControlWindow--1-9223372036854775807-9999999999999999999999999999999999999999999999999999999999999999999-invalid-6] 0.26
topo = <lib389.topologies.TopologyMain object at 0x7f91cfc862b0>
attr = 'nsds5ReplicaFlowControlWindow', too_small = '-1'
too_big = '9223372036854775807'
overflow = '9999999999999999999999999999999999999999999999999999999999999999999'
notnum = 'invalid', valid = '6'

@pytest.mark.xfail(reason="Agreement validation current does not work.")
@pytest.mark.parametrize("attr, too_small, too_big, overflow, notnum, valid", agmt_attrs)
def test_agmt_num_modify(topo, attr, too_small, too_big, overflow, notnum, valid):
"""Test all the number values you can set for a replica config entry

:id: a8b47d4a-a089-4d70-8070-e6181209bf95
:parametrized: yes
:setup: standalone instance
:steps:
1. Replace a value that is too small
2. Replace a value that is too big
3. Replace a value that overflows the int
4. Replace a value with character value (not a number)
5. Replace a vlue with a valid value
:expectedresults:
1. Value is rejected
2. Value is rejected
3. Value is rejected
4. Value is rejected
5. Value is allowed
"""

agmt = agmt_setup(topo)

# Value too small
perform_invalid_modify(agmt, attr, too_small)
# Value too big
> perform_invalid_modify(agmt, attr, too_big)

suites/replication/replica_config_test.py:255:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

o = <lib389.agreement.Agreement object at 0x7f91d23e9f10>
attr = 'nsds5ReplicaFlowControlWindow', value = '9223372036854775807'

def perform_invalid_modify(o, attr, value):
with pytest.raises(ldap.LDAPError) as ei:
> o.replace(attr, value)
E Failed: DID NOT RAISE <class 'ldap.LDAPError'>

suites/replication/replica_config_test.py:113: Failed
XFailed suites/replication/replica_config_test.py::test_agmt_num_modify[nsds5ReplicaFlowControlPause--1-9223372036854775807-9999999999999999999999999999999999999999999999999999999999999999999-invalid-6] 0.25
topo = <lib389.topologies.TopologyMain object at 0x7f91cfc862b0>
attr = 'nsds5ReplicaFlowControlPause', too_small = '-1'
too_big = '9223372036854775807'
overflow = '9999999999999999999999999999999999999999999999999999999999999999999'
notnum = 'invalid', valid = '6'

@pytest.mark.xfail(reason="Agreement validation current does not work.")
@pytest.mark.parametrize("attr, too_small, too_big, overflow, notnum, valid", agmt_attrs)
def test_agmt_num_modify(topo, attr, too_small, too_big, overflow, notnum, valid):
"""Test all the number values you can set for a replica config entry

:id: a8b47d4a-a089-4d70-8070-e6181209bf95
:parametrized: yes
:setup: standalone instance
:steps:
1. Replace a value that is too small
2. Replace a value that is too big
3. Replace a value that overflows the int
4. Replace a value with character value (not a number)
5. Replace a vlue with a valid value
:expectedresults:
1. Value is rejected
2. Value is rejected
3. Value is rejected
4. Value is rejected
5. Value is allowed
"""

agmt = agmt_setup(topo)

# Value too small
perform_invalid_modify(agmt, attr, too_small)
# Value too big
> perform_invalid_modify(agmt, attr, too_big)

suites/replication/replica_config_test.py:255:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

o = <lib389.agreement.Agreement object at 0x7f91d23e99d0>
attr = 'nsds5ReplicaFlowControlPause', value = '9223372036854775807'

def perform_invalid_modify(o, attr, value):
with pytest.raises(ldap.LDAPError) as ei:
> o.replace(attr, value)
E Failed: DID NOT RAISE <class 'ldap.LDAPError'>

suites/replication/replica_config_test.py:113: Failed
XFailed suites/replication/replica_config_test.py::test_agmt_num_modify[nsds5ReplicaProtocolTimeout--1-9223372036854775807-9999999999999999999999999999999999999999999999999999999999999999999-invalid-6] 0.25
topo = <lib389.topologies.TopologyMain object at 0x7f91cfc862b0>
attr = 'nsds5ReplicaProtocolTimeout', too_small = '-1'
too_big = '9223372036854775807'
overflow = '9999999999999999999999999999999999999999999999999999999999999999999'
notnum = 'invalid', valid = '6'

@pytest.mark.xfail(reason="Agreement validation current does not work.")
@pytest.mark.parametrize("attr, too_small, too_big, overflow, notnum, valid", agmt_attrs)
def test_agmt_num_modify(topo, attr, too_small, too_big, overflow, notnum, valid):
"""Test all the number values you can set for a replica config entry

:id: a8b47d4a-a089-4d70-8070-e6181209bf95
:parametrized: yes
:setup: standalone instance
:steps:
1. Replace a value that is too small
2. Replace a value that is too big
3. Replace a value that overflows the int
4. Replace a value with character value (not a number)
5. Replace a vlue with a valid value
:expectedresults:
1. Value is rejected
2. Value is rejected
3. Value is rejected
4. Value is rejected
5. Value is allowed
"""

agmt = agmt_setup(topo)

# Value too small
perform_invalid_modify(agmt, attr, too_small)
# Value too big
> perform_invalid_modify(agmt, attr, too_big)

suites/replication/replica_config_test.py:255:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

o = <lib389.agreement.Agreement object at 0x7f91d3bf92b0>
attr = 'nsds5ReplicaProtocolTimeout', value = '9223372036854775807'

def perform_invalid_modify(o, attr, value):
with pytest.raises(ldap.LDAPError) as ei:
> o.replace(attr, value)
E Failed: DID NOT RAISE <class 'ldap.LDAPError'>

suites/replication/replica_config_test.py:113: Failed
XFailed suites/replication/ruvstore_test.py::test_memoryruv_sync_with_databaseruv 4.47
topo = <lib389.topologies.TopologyMain object at 0x7f91d3bf97f0>

@pytest.mark.xfail(reason="No method to safety access DB ruv currently exists online.")
def test_memoryruv_sync_with_databaseruv(topo):
"""Check if memory ruv and database ruv are synced

:id: 5f38ac5f-6353-460d-bf60-49cafffda5b3
:setup: Replication with two suppliers.
:steps: 1. Add user to server and compare memory ruv and database ruv.
2. Modify description of user and compare memory ruv and database ruv.
3. Modrdn of user and compare memory ruv and database ruv.
4. Delete user and compare memory ruv and database ruv.
:expectedresults:
1. For add user, the memory ruv and database ruv should be the same.
2. For modify operation, the memory ruv and database ruv should be the same.
3. For modrdn operation, the memory ruv and database ruv should be the same.
4. For delete operation, the memory ruv and database ruv should be the same.
"""

log.info('Adding user: {} to supplier1'.format(TEST_ENTRY_NAME))
users = UserAccounts(topo.ms['supplier1'], DEFAULT_SUFFIX)
tuser = users.create(properties=USER_PROPERTIES)
> _compare_memoryruv_and_databaseruv(topo, 'add')

suites/replication/ruvstore_test.py:139:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

topo = <lib389.topologies.TopologyMain object at 0x7f91d3bf97f0>
operation_type = 'add'

def _compare_memoryruv_and_databaseruv(topo, operation_type):
"""Compare the memoryruv and databaseruv for ldap operations"""

log.info('Checking memory ruv for ldap: {} operation'.format(operation_type))
replicas = Replicas(topo.ms['supplier1'])
replica = replicas.list()[0]
memory_ruv = replica.get_attr_val_utf8('nsds50ruv')

log.info('Checking database ruv for ldap: {} operation'.format(operation_type))
> entry = replicas.get_ruv_entry(DEFAULT_SUFFIX)
E AttributeError: 'Replicas' object has no attribute 'get_ruv_entry'

suites/replication/ruvstore_test.py:81: AttributeError
-------------------------------Captured log call--------------------------------
INFO tests.suites.replication.ruvstore_test:ruvstore_test.py:136 Adding user: rep2lusr to supplier1 INFO tests.suites.replication.ruvstore_test:ruvstore_test.py:75 Checking memory ruv for ldap: add operation INFO tests.suites.replication.ruvstore_test:ruvstore_test.py:80 Checking database ruv for ldap: add operation
XPassed suites/acl/syntax_test.py::test_aci_invalid_syntax_fail[test_Use_double_equal_instead_of_equal_in_the_targetattr] 0.11
No log output captured.
XPassed suites/acl/syntax_test.py::test_aci_invalid_syntax_fail[test_Use_double_equal_instead_of_equal_in_the_targetfilter] 0.10
No log output captured.
XPassed suites/replication/replica_config_test.py::test_agmt_num_add[nsds5ReplicaTimeout--1-9223372036854775807-9999999999999999999999999999999999999999999999999999999999999999999-invalid-6] 0.29
No log output captured.
XPassed suites/replication/replica_config_test.py::test_agmt_num_add[nsds5ReplicaBusyWaitTime--1-9223372036854775807-9999999999999999999999999999999999999999999999999999999999999999999-invalid-6] 0.30
No log output captured.
XPassed suites/replication/replica_config_test.py::test_agmt_num_add[nsds5ReplicaSessionPauseTime--1-9223372036854775807-9999999999999999999999999999999999999999999999999999999999999999999-invalid-6] 0.30
No log output captured.
XPassed suites/replication/replica_config_test.py::test_agmt_num_add[nsds5ReplicaFlowControlWindow--1-9223372036854775807-9999999999999999999999999999999999999999999999999999999999999999999-invalid-6] 0.56
No log output captured.
XPassed suites/replication/replica_config_test.py::test_agmt_num_add[nsds5ReplicaFlowControlPause--1-9223372036854775807-9999999999999999999999999999999999999999999999999999999999999999999-invalid-6] 0.28
No log output captured.
XPassed suites/replication/replica_config_test.py::test_agmt_num_add[nsds5ReplicaProtocolTimeout--1-9223372036854775807-9999999999999999999999999999999999999999999999999999999999999999999-invalid-6] 0.33
No log output captured.
Skipped suites/config/regression_test.py::test_set_cachememsize_to_custom_value 0.00
('suites/config/regression_test.py', 34, 'Skipped: available memory is too low')
Skipped suites/ds_logs/ds_logs_test.py::test_etime_at_border_of_second 0.00
('suites/ds_logs/ds_logs_test.py', 738, 'Skipped: rsearch was removed')
Skipped suites/memory_leaks/MMR_double_free_test.py::test_MMR_double_free 0.00
('suites/memory_leaks/MMR_double_free_test.py', 67, "Skipped: Don't run if ASAN is not enabled")
Skipped suites/memory_leaks/range_search_test.py::test_range_search 0.00
('suites/memory_leaks/range_search_test.py', 24, "Skipped: Don't run if ASAN is not enabled")
Skipped suites/migration/export_data_test.py::test_export_data_from_source_host 0.00
('suites/migration/export_data_test.py', 24, 'Skipped: This test is meant to execute in specific test environment')
Skipped suites/migration/import_data_test.py::test_import_data_to_target_host 0.00
('suites/migration/import_data_test.py', 24, 'Skipped: This test is meant to execute in specific test environment')
Skipped suites/monitor/db_locks_monitor_test.py::test_exhaust_db_locks_basic[70] 0.00
('suites/monitor/db_locks_monitor_test.py', 141, 'Skipped: DB locks monitoring tests may take hours if the feature is not present or another failure exists. Also, the feature requires a big amount of space as we set nsslapd-db-locks to 1300000.')
Skipped suites/monitor/db_locks_monitor_test.py::test_exhaust_db_locks_basic[80] 0.00
('suites/monitor/db_locks_monitor_test.py', 141, 'Skipped: DB locks monitoring tests may take hours if the feature is not present or another failure exists. Also, the feature requires a big amount of space as we set nsslapd-db-locks to 1300000.')
Skipped suites/monitor/db_locks_monitor_test.py::test_exhaust_db_locks_basic[95] 0.00
('suites/monitor/db_locks_monitor_test.py', 141, 'Skipped: DB locks monitoring tests may take hours if the feature is not present or another failure exists. Also, the feature requires a big amount of space as we set nsslapd-db-locks to 1300000.')
Skipped suites/monitor/db_locks_monitor_test.py::test_exhaust_db_locks_big_pause 0.00
('suites/monitor/db_locks_monitor_test.py', 210, 'Skipped: DB locks monitoring tests may take hours if the feature is not present or another failure exists. Also, the feature requires a big amount of space as we set nsslapd-db-locks to 1300000.')
Skipped suites/replication/changelog_test.py::test_cldump_files_removed 0.00
('suites/replication/changelog_test.py', 236, 'Skipped: does not work for prefix builds')
Skipped suites/replication/changelog_test.py::test_changelog_compactdbinterval 0.00
('suites/replication/changelog_test.py', 631, 'Skipped: changelog compaction is done by the backend itself, with id2entry as well, nsslapd-changelogcompactdb-interval is no longer supported')
Skipped suites/rewriters/adfilter_test.py::test_adfilter_objectSid 1.40
('suites/rewriters/adfilter_test.py', 90, 'Skipped: It is missing samba python bindings')
Skipped tickets/ticket47815_test.py::test_ticket47815 0.00
('tickets/ticket47815_test.py', 26, 'Skipped: Not implemented, or invalid by nsMemberOf')
Skipped tickets/ticket49121_test.py::test_ticket49121 0.00
('tickets/ticket49121_test.py', 32, "Skipped: Don't run if ASAN is not enabled")
Passed suites/acl/aci_excl_filter_test.py::test_aci_with_exclude_filter 13.03
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
-------------------------------Captured log call--------------------------------
INFO tests.suites.acl.aci_excl_filter_test:aci_excl_filter_test.py:96 Create an OU for them INFO tests.suites.acl.aci_excl_filter_test:aci_excl_filter_test.py:98 Create an top org users INFO tests.suites.acl.aci_excl_filter_test:aci_excl_filter_test.py:100 Add aci which contains extensible filter. INFO tests.suites.acl.aci_excl_filter_test:aci_excl_filter_test.py:105 Add aci which contains extensible filter. INFO tests.suites.acl.aci_excl_filter_test:aci_excl_filter_test.py:114 Adding OU entries ... INFO tests.suites.acl.aci_excl_filter_test:aci_excl_filter_test.py:117 Adding "ou" : OU0 under "dn" : dc=example,dc=com... INFO tests.suites.acl.aci_excl_filter_test:aci_excl_filter_test.py:47 Organisation OU0 created for ou :ou=OU0,dc=example,dc=com . INFO tests.suites.acl.aci_excl_filter_test:aci_excl_filter_test.py:120 Adding outest under ou=OU0,dc=example,dc=com... INFO tests.suites.acl.aci_excl_filter_test:aci_excl_filter_test.py:47 Organisation outest created for ou :ou=outest,ou=OU0,dc=example,dc=com . INFO tests.suites.acl.aci_excl_filter_test:aci_excl_filter_test.py:117 Adding "ou" : OU1 under "dn" : dc=example,dc=com... INFO tests.suites.acl.aci_excl_filter_test:aci_excl_filter_test.py:47 Organisation OU1 created for ou :ou=OU1,dc=example,dc=com . INFO tests.suites.acl.aci_excl_filter_test:aci_excl_filter_test.py:120 Adding outest under ou=OU1,dc=example,dc=com... INFO tests.suites.acl.aci_excl_filter_test:aci_excl_filter_test.py:47 Organisation outest created for ou :ou=outest,ou=OU1,dc=example,dc=com . INFO tests.suites.acl.aci_excl_filter_test:aci_excl_filter_test.py:128 Adding User: admin0 under ou=outest,ou=OU0,dc=example,dc=com... INFO tests.suites.acl.aci_excl_filter_test:aci_excl_filter_test.py:65 User created for dn :ou=admin0,ou=outest,ou=OU0,dc=example,dc=com . INFO tests.suites.acl.aci_excl_filter_test:aci_excl_filter_test.py:128 Adding User: admin01 under ou=outest,ou=OU1,dc=example,dc=com... INFO tests.suites.acl.aci_excl_filter_test:aci_excl_filter_test.py:65 User created for dn :ou=admin01,ou=outest,ou=OU1,dc=example,dc=com . INFO tests.suites.acl.aci_excl_filter_test:aci_excl_filter_test.py:131 Bind as user admin01 INFO tests.suites.acl.aci_excl_filter_test:aci_excl_filter_test.py:141 Verify 2 Entries returned for cn (cn=admin01) INFO tests.suites.acl.aci_excl_filter_test:aci_excl_filter_test.py:145 Verified the entries do not contain 'telephonenumber' INFO tests.suites.acl.aci_excl_filter_test:aci_excl_filter_test.py:145 Verified the entries do not contain 'telephonenumber' INFO tests.suites.acl.aci_excl_filter_test:aci_excl_filter_test.py:146 Test complete
Passed suites/acl/acivattr_test.py::test_positive[(ENG_USER, ENG_MANAGER, REAL_EQ_ACI)] 10.56
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Passed suites/acl/acivattr_test.py::test_positive[(ENG_USER, ENG_MANAGER, REAL_PRES_ACI)] 0.54
No log output captured.
Passed suites/acl/acivattr_test.py::test_positive[(ENG_USER, ENG_MANAGER, REAL_SUB_ACI)] 0.47
No log output captured.
Passed suites/acl/acivattr_test.py::test_positive[(ENG_USER, ENG_MANAGER, ROLE_PRES_ACI)] 0.49
No log output captured.
Passed suites/acl/acivattr_test.py::test_positive[(ENG_USER, ENG_MANAGER, ROLE_SUB_ACI)] 0.42
No log output captured.
Passed suites/acl/acivattr_test.py::test_positive[(ENG_USER, ENG_MANAGER, COS_EQ_ACI)] 0.51
No log output captured.
Passed suites/acl/acivattr_test.py::test_positive[(ENG_USER, ENG_MANAGER, COS_PRES_ACI)] 0.45
No log output captured.
Passed suites/acl/acivattr_test.py::test_positive[(ENG_USER, ENG_MANAGER, COS_SUB_ACI)] 0.64
No log output captured.
Passed suites/acl/acivattr_test.py::test_positive[(ENG_USER, ENG_MANAGER, LDAPURL_ACI)] 0.48
No log output captured.
Passed suites/acl/acivattr_test.py::test_negative[(ENG_USER, SALES_MANAGER, REAL_EQ_ACI)] 0.48
No log output captured.
Passed suites/acl/acivattr_test.py::test_negative[(ENG_USER, SALES_OU, REAL_PRES_ACI)] 0.46
No log output captured.
Passed suites/acl/acivattr_test.py::test_negative[(ENG_USER, SALES_MANAGER, REAL_SUB_ACI)] 0.48
No log output captured.
Passed suites/acl/acivattr_test.py::test_negative[(ENG_USER, SALES_MANAGER, ROLE_EQ_ACI)] 0.44
No log output captured.
Passed suites/acl/acivattr_test.py::test_negative[(ENG_USER, SALES_MANAGER, ROLE_PRES_ACI)] 0.47
No log output captured.
Passed suites/acl/acivattr_test.py::test_negative[(ENG_USER, SALES_MANAGER, ROLE_SUB_ACI)] 0.51
No log output captured.
Passed suites/acl/acivattr_test.py::test_negative[(ENG_USER, SALES_MANAGER, COS_EQ_ACI)] 0.50
No log output captured.
Passed suites/acl/acivattr_test.py::test_negative[(ENG_USER, SALES_MANAGER, COS_PRES_ACI)] 0.45
No log output captured.
Passed suites/acl/acivattr_test.py::test_negative[(ENG_USER, SALES_MANAGER, COS_SUB_ACI)] 0.45
No log output captured.
Passed suites/acl/acivattr_test.py::test_negative[(SALES_UESER, SALES_MANAGER, LDAPURL_ACI)] 0.50
No log output captured.
Passed suites/acl/acivattr_test.py::test_negative[(ENG_USER, ENG_MANAGER, ROLE_EQ_ACI)] 1.96
No log output captured.
Passed suites/acl/acl_deny_test.py::test_multi_deny_aci 23.35
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created. INFO lib389:acl_deny_test.py:47 Add uid=tuser1,ou=People,dc=example,dc=com INFO lib389:acl_deny_test.py:58 Add uid=tuser,ou=People,dc=example,dc=com
-------------------------------Captured log call--------------------------------
INFO lib389:acl_deny_test.py:90 Pass 1 INFO lib389:acl_deny_test.py:93 Testing two searches behave the same... INFO lib389:acl_deny_test.py:136 Testing search does not return any entries... INFO lib389:acl_deny_test.py:90 Pass 2 INFO lib389:acl_deny_test.py:93 Testing two searches behave the same... INFO lib389:acl_deny_test.py:136 Testing search does not return any entries... INFO lib389:acl_deny_test.py:200 Test PASSED
Passed suites/acl/acl_test.py::test_aci_attr_subtype_targetattr[lang-ja] 24.79
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39001, 'ldap-secureport': 63701, 'server-id': 'supplier1', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier2 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39002, 'ldap-secureport': 63702, 'server-id': 'supplier2', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.topologies:topologies.py:145 Creating replication topology. INFO lib389.topologies:topologies.py:159 Joining supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2084 SUCCESS: bootstrap to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 completed INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is was created INFO lib389.replica:replica.py:2365 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is was created INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is NOT working (expect edd70da0-8d2e-4633-b367-d7995b24f6ae / got description=None) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 is working INFO lib389.replica:replica.py:2498 Retry: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is NOT working (expect f03aafe5-0432-4166-982a-777a7673bf5f / got description=edd70da0-8d2e-4633-b367-d7995b24f6ae) INFO lib389.replica:replica.py:2496 SUCCESS: Replication from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 is working INFO lib389.replica:replica.py:2153 SUCCESS: joined supplier from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier1 to supplier2 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 already exists INFO lib389.topologies:topologies.py:167 Ensuring supplier supplier2 to supplier1 ... INFO lib389.replica:replica.py:2338 SUCCESS: Agreement from ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39002 to ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:39001 already exists INFO tests.suites.acl.acl_test:acl_test.py:76 ========Executing test with 'lang-ja' subtype======== INFO tests.suites.acl.acl_test:acl_test.py:77 Add a target attribute INFO tests.suites.acl.acl_test:acl_test.py:80 Add a user attribute INFO tests.suites.acl.acl_test:acl_test.py:88 Add an ACI with attribute subtype
-------------------------------Captured log call--------------------------------
INFO tests.suites.acl.acl_test:acl_test.py:118 Search for the added attribute INFO tests.suites.acl.acl_test:acl_test.py:125 The added attribute was found
-----------------------------Captured log teardown------------------------------
INFO tests.suites.acl.acl_test:acl_test.py:92 Finally, delete an ACI with the 'lang-ja' subtype
Passed suites/acl/acl_test.py::test_aci_attr_subtype_targetattr[binary] 0.30
-------------------------------Captured log setup-------------------------------
INFO tests.suites.acl.acl_test:acl_test.py:76 ========Executing test with 'binary' subtype======== INFO tests.suites.acl.acl_test:acl_test.py:77 Add a target attribute INFO tests.suites.acl.acl_test:acl_test.py:80 Add a user attribute INFO tests.suites.acl.acl_test:acl_test.py:88 Add an ACI with attribute subtype
-------------------------------Captured log call--------------------------------
INFO tests.suites.acl.acl_test:acl_test.py:118 Search for the added attribute INFO tests.suites.acl.acl_test:acl_test.py:125 The added attribute was found
-----------------------------Captured log teardown------------------------------
INFO tests.suites.acl.acl_test:acl_test.py:92 Finally, delete an ACI with the 'binary' subtype
Passed suites/acl/acl_test.py::test_aci_attr_subtype_targetattr[phonetic] 0.24
-------------------------------Captured log setup-------------------------------
INFO tests.suites.acl.acl_test:acl_test.py:76 ========Executing test with 'phonetic' subtype======== INFO tests.suites.acl.acl_test:acl_test.py:77 Add a target attribute INFO tests.suites.acl.acl_test:acl_test.py:80 Add a user attribute INFO tests.suites.acl.acl_test:acl_test.py:88 Add an ACI with attribute subtype
-------------------------------Captured log call--------------------------------
INFO tests.suites.acl.acl_test:acl_test.py:118 Search for the added attribute INFO tests.suites.acl.acl_test:acl_test.py:125 The added attribute was found
-----------------------------Captured log teardown------------------------------
INFO tests.suites.acl.acl_test:acl_test.py:92 Finally, delete an ACI with the 'phonetic' subtype
Passed suites/acl/acl_test.py::test_mode_default_add_deny 0.35
-------------------------------Captured log setup-------------------------------
INFO lib389:acl_test.py:233 ######## INITIALIZATION ######## INFO lib389:acl_test.py:236 Add uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:254 Add cn=staged user,dc=example,dc=com INFO lib389:acl_test.py:258 Add cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:262 Add cn=excepts,cn=accounts,dc=example,dc=com
-------------------------------Captured log call--------------------------------
INFO lib389:acl_test.py:294 ######## mode moddn_aci : ADD (should fail) ######## INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:302 Try to add cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:311 Exception (expected): INSUFFICIENT_ACCESS
Passed suites/acl/acl_test.py::test_mode_default_delete_deny 0.10
-------------------------------Captured log call--------------------------------
INFO lib389:acl_test.py:329 ######## DELETE (should fail) ######## INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:336 Try to delete cn=staged user,dc=example,dc=com INFO lib389:acl_test.py:341 Exception (expected): INSUFFICIENT_ACCESS
Passed suites/acl/acl_test.py::test_moddn_staging_prod[0-cn=staged user,dc=example,dc=com-cn=accounts,dc=example,dc=com-False] 0.31
-------------------------------Captured log call--------------------------------
INFO lib389:acl_test.py:376 ######## MOVE staging -> Prod (0) ######## INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:388 Try to MODDN uid=new_account0,cn=staged user,dc=example,dc=com -> uid=new_account0,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:395 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:acl_test.py:399 ######## MOVE to and from equality filter ######## INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:406 Try to MODDN uid=new_account0,cn=staged user,dc=example,dc=com -> uid=new_account0,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com
Passed suites/acl/acl_test.py::test_moddn_staging_prod[1-cn=staged user,dc=example,dc=com-cn=accounts,dc=example,dc=com-False] 0.30
-------------------------------Captured log call--------------------------------
INFO lib389:acl_test.py:376 ######## MOVE staging -> Prod (1) ######## INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:388 Try to MODDN uid=new_account1,cn=staged user,dc=example,dc=com -> uid=new_account1,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:395 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:acl_test.py:399 ######## MOVE to and from equality filter ######## INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:406 Try to MODDN uid=new_account1,cn=staged user,dc=example,dc=com -> uid=new_account1,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com
Passed suites/acl/acl_test.py::test_moddn_staging_prod[2-cn=staged user,dc=example,dc=com-cn=bad*,dc=example,dc=com-True] 0.29
-------------------------------Captured log call--------------------------------
INFO lib389:acl_test.py:376 ######## MOVE staging -> Prod (2) ######## INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:388 Try to MODDN uid=new_account2,cn=staged user,dc=example,dc=com -> uid=new_account2,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:395 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:acl_test.py:399 ######## MOVE to and from equality filter ######## INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:406 Try to MODDN uid=new_account2,cn=staged user,dc=example,dc=com -> uid=new_account2,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:409 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com
Passed suites/acl/acl_test.py::test_moddn_staging_prod[3-cn=st*,dc=example,dc=com-cn=accounts,dc=example,dc=com-False] 0.30
-------------------------------Captured log call--------------------------------
INFO lib389:acl_test.py:376 ######## MOVE staging -> Prod (3) ######## INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:388 Try to MODDN uid=new_account3,cn=staged user,dc=example,dc=com -> uid=new_account3,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:395 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:acl_test.py:399 ######## MOVE to and from equality filter ######## INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:406 Try to MODDN uid=new_account3,cn=staged user,dc=example,dc=com -> uid=new_account3,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com
Passed suites/acl/acl_test.py::test_moddn_staging_prod[4-cn=bad*,dc=example,dc=com-cn=accounts,dc=example,dc=com-True] 0.27
-------------------------------Captured log call--------------------------------
INFO lib389:acl_test.py:376 ######## MOVE staging -> Prod (4) ######## INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:388 Try to MODDN uid=new_account4,cn=staged user,dc=example,dc=com -> uid=new_account4,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:395 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:acl_test.py:399 ######## MOVE to and from equality filter ######## INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:406 Try to MODDN uid=new_account4,cn=staged user,dc=example,dc=com -> uid=new_account4,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:409 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com
Passed suites/acl/acl_test.py::test_moddn_staging_prod[5-cn=st*,dc=example,dc=com-cn=ac*,dc=example,dc=com-False] 0.26
-------------------------------Captured log call--------------------------------
INFO lib389:acl_test.py:376 ######## MOVE staging -> Prod (5) ######## INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:388 Try to MODDN uid=new_account5,cn=staged user,dc=example,dc=com -> uid=new_account5,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:395 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:acl_test.py:399 ######## MOVE to and from equality filter ######## INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:406 Try to MODDN uid=new_account5,cn=staged user,dc=example,dc=com -> uid=new_account5,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com
Passed suites/acl/acl_test.py::test_moddn_staging_prod[6-None-cn=ac*,dc=example,dc=com-False] 0.26
-------------------------------Captured log call--------------------------------
INFO lib389:acl_test.py:376 ######## MOVE staging -> Prod (6) ######## INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:388 Try to MODDN uid=new_account6,cn=staged user,dc=example,dc=com -> uid=new_account6,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:395 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:acl_test.py:399 ######## MOVE to and from equality filter ######## INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:406 Try to MODDN uid=new_account6,cn=staged user,dc=example,dc=com -> uid=new_account6,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com
Passed suites/acl/acl_test.py::test_moddn_staging_prod[7-cn=st*,dc=example,dc=com-None-False] 0.25
-------------------------------Captured log call--------------------------------
INFO lib389:acl_test.py:376 ######## MOVE staging -> Prod (7) ######## INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:388 Try to MODDN uid=new_account7,cn=staged user,dc=example,dc=com -> uid=new_account7,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:395 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:acl_test.py:399 ######## MOVE to and from equality filter ######## INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:406 Try to MODDN uid=new_account7,cn=staged user,dc=example,dc=com -> uid=new_account7,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com
Passed suites/acl/acl_test.py::test_moddn_staging_prod[8-None-None-False] 0.25
-------------------------------Captured log call--------------------------------
INFO lib389:acl_test.py:376 ######## MOVE staging -> Prod (8) ######## INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:388 Try to MODDN uid=new_account8,cn=staged user,dc=example,dc=com -> uid=new_account8,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:395 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:acl_test.py:399 ######## MOVE to and from equality filter ######## INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:406 Try to MODDN uid=new_account8,cn=staged user,dc=example,dc=com -> uid=new_account8,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com
Passed suites/acl/acl_test.py::test_moddn_staging_prod_9 0.84
-------------------------------Captured log call--------------------------------
INFO lib389:acl_test.py:453 ######## MOVE staging -> Prod (9) ######## INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:466 Try to MODDN uid=new_account9,cn=staged user,dc=example,dc=com -> uid=new_account9,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:473 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:acl_test.py:479 Disable the moddn right INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:484 ######## MOVE to and from equality filter ######## INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:492 Try to MODDN uid=new_account9,cn=staged user,dc=example,dc=com -> uid=new_account9,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:499 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:521 Try to MODDN uid=new_account9,cn=staged user,dc=example,dc=com -> uid=new_account9,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:532 Enable the moddn right INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:536 ######## MOVE staging -> Prod (10) ######## INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:548 Try to MODDN uid=new_account10,cn=staged user,dc=example,dc=com -> uid=new_account10,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:555 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:572 Try to MODDN uid=new_account10,cn=staged user,dc=example,dc=com -> uid=new_account10,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:579 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:588 ######## MOVE to and from equality filter ######## INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:594 Try to MODDN uid=new_account10,cn=staged user,dc=example,dc=com -> uid=new_account10,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com
Passed suites/acl/acl_test.py::test_moddn_prod_staging 0.45
-------------------------------Captured log call--------------------------------
INFO lib389:acl_test.py:623 ######## MOVE staging -> Prod (11) ######## INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:636 Try to MODDN uid=new_account11,cn=staged user,dc=example,dc=com -> uid=new_account11,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:643 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:acl_test.py:647 ######## MOVE to and from equality filter ######## INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:653 Try to MODDN uid=new_account11,cn=staged user,dc=example,dc=com -> uid=new_account11,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:668 Try to move back MODDN uid=new_account11,cn=accounts,dc=example,dc=com -> uid=new_account11,cn=staged user,dc=example,dc=com INFO lib389:acl_test.py:675 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com
Passed suites/acl/acl_test.py::test_check_repl_M2_to_M1 1.12
-------------------------------Captured log call--------------------------------
INFO lib389:acl_test.py:705 Bind as cn=Directory Manager (M2) INFO lib389:acl_test.py:725 Update (M2) uid=new_account12,cn=staged user,dc=example,dc=com (description) INFO lib389:acl_test.py:738 Update uid=new_account12,cn=staged user,dc=example,dc=com (description) replicated on M1
Passed suites/acl/acl_test.py::test_moddn_staging_prod_except 0.30
-------------------------------Captured log call--------------------------------
INFO lib389:acl_test.py:763 ######## MOVE staging -> Prod (13) ######## INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:775 Try to MODDN uid=new_account13,cn=staged user,dc=example,dc=com -> uid=new_account13,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:782 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:acl_test.py:786 ######## MOVE to and from equality filter ######## INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:160 Add a DENY aci under cn=excepts,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:793 Try to MODDN uid=new_account13,cn=staged user,dc=example,dc=com -> uid=new_account13,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:799 ######## MOVE staging -> Prod/Except (14) ######## INFO lib389:acl_test.py:805 Try to MODDN uid=new_account14,cn=staged user,dc=example,dc=com -> uid=new_account14,cn=excepts,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:812 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:160 Add a DENY aci under cn=excepts,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com
Passed suites/acl/acl_test.py::test_mode_default_ger_no_moddn 0.09
-------------------------------Captured log call--------------------------------
INFO lib389:acl_test.py:839 ######## mode moddn_aci : GER no moddn ######## INFO lib389:acl_test.py:850 dn: cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:850 dn: cn=excepts,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:850 dn: uid=new_account0,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:850 dn: uid=new_account1,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:850 dn: uid=new_account3,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:850 dn: uid=new_account5,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:850 dn: uid=new_account6,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:850 dn: uid=new_account7,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:850 dn: uid=new_account8,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:850 dn: uid=new_account9,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:850 dn: uid=new_account10,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:850 dn: uid=new_account11,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:850 dn: uid=new_account13,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:853 ######## entryLevelRights: b'v'
Passed suites/acl/acl_test.py::test_mode_default_ger_with_moddn 0.24
-------------------------------Captured log call--------------------------------
INFO lib389:acl_test.py:877 ######## mode moddn_aci: GER with moddn ######## INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:895 dn: cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:895 dn: cn=excepts,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:895 dn: uid=new_account0,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:895 dn: uid=new_account1,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:895 dn: uid=new_account3,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:895 dn: uid=new_account5,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:895 dn: uid=new_account6,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:895 dn: uid=new_account7,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:895 dn: uid=new_account8,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:895 dn: uid=new_account9,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:895 dn: uid=new_account10,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:895 dn: uid=new_account11,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:895 dn: uid=new_account13,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:898 ######## entryLevelRights: b'vn' INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com
Passed suites/acl/acl_test.py::test_mode_legacy_ger_no_moddn1 0.14
-------------------------------Captured log call--------------------------------
INFO lib389:acl_test.py:928 ######## Disable the moddn aci mod ######## INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:932 ######## mode legacy 1: GER no moddn ######## INFO lib389:acl_test.py:942 dn: cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:942 dn: cn=excepts,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:942 dn: uid=new_account0,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:942 dn: uid=new_account1,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:942 dn: uid=new_account3,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:942 dn: uid=new_account5,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:942 dn: uid=new_account6,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:942 dn: uid=new_account7,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:942 dn: uid=new_account8,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:942 dn: uid=new_account9,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:942 dn: uid=new_account10,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:942 dn: uid=new_account11,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:942 dn: uid=new_account13,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:945 ######## entryLevelRights: b'v'
Passed suites/acl/acl_test.py::test_mode_legacy_ger_no_moddn2 0.24
-------------------------------Captured log call--------------------------------
INFO lib389:acl_test.py:971 ######## Disable the moddn aci mod ######## INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:975 ######## mode legacy 2: GER no moddn ######## INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:992 dn: cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:992 dn: cn=excepts,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:992 dn: uid=new_account0,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:992 dn: uid=new_account1,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:992 dn: uid=new_account3,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:992 dn: uid=new_account5,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:992 dn: uid=new_account6,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:992 dn: uid=new_account7,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:992 dn: uid=new_account8,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:992 dn: uid=new_account9,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:992 dn: uid=new_account10,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:992 dn: uid=new_account11,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:992 dn: uid=new_account13,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:995 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com
Passed suites/acl/acl_test.py::test_mode_legacy_ger_with_moddn 0.19
-------------------------------Captured log call--------------------------------
INFO lib389:acl_test.py:1031 ######## Disable the moddn aci mod ######## INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:1035 ######## mode legacy : GER with moddn ######## INFO lib389:acl_test.py:133 Bind as cn=Directory Manager INFO lib389:acl_test.py:139 Bind as uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:1057 dn: cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1057 dn: cn=excepts,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1057 dn: uid=new_account0,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1057 dn: uid=new_account1,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1057 dn: uid=new_account3,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1057 dn: uid=new_account5,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1057 dn: uid=new_account6,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1057 dn: uid=new_account7,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1057 dn: uid=new_account8,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1057 dn: uid=new_account9,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1057 dn: uid=new_account10,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1057 dn: uid=new_account11,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1057 dn: uid=new_account13,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1060 ######## entryLevelRights: b'vn' INFO lib389:acl_test.py:133 Bind as cn=Directory Manager
Passed suites/acl/acl_test.py::test_rdn_write_get_ger 0.12
-------------------------------Captured log setup-------------------------------
INFO lib389:acl_test.py:1071 ######## Add entry tuser ########
-------------------------------Captured log call--------------------------------
INFO lib389:acl_test.py:1097 ######## GER rights for anonymous ######## INFO lib389:acl_test.py:1107 dn: dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: ou=groups,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: ou=people,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: ou=permissions,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: ou=services,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: uid=demo_user,ou=people,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: cn=demo_group,ou=groups,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: cn=group_admin,ou=permissions,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: cn=group_modify,ou=permissions,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: cn=user_admin,ou=permissions,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: cn=user_modify,ou=permissions,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: cn=user_passwd_reset,ou=permissions,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: cn=user_private_read,ou=permissions,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: cn=replication_managers,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: cn=ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:63701,ou=services,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: cn=ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:63702,ou=services,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: uid=bind_entry,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: cn=staged user,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: cn=excepts,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: uid=new_account0,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: uid=new_account1,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: uid=new_account2,cn=staged user,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: uid=new_account3,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: uid=new_account4,cn=staged user,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: uid=new_account5,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: uid=new_account6,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: uid=new_account7,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: uid=new_account8,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: uid=new_account9,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: uid=new_account10,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: uid=new_account11,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: uid=new_account12,cn=staged user,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: uid=new_account13,cn=accounts,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: uid=new_account14,cn=staged user,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: uid=new_account15,cn=staged user,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: uid=new_account16,cn=staged user,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: uid=new_account17,cn=staged user,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: uid=new_account18,cn=staged user,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: uid=new_account19,cn=staged user,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v' INFO lib389:acl_test.py:1107 dn: cn=tuser,dc=example,dc=com INFO lib389:acl_test.py:1109 ######## entryLevelRights: b'v'
Passed suites/acl/acl_test.py::test_rdn_write_modrdn_anonymous 3.51
-------------------------------Captured log call--------------------------------
INFO lib389:acl_test.py:1136 dn: INFO lib389:acl_test.py:1138 ######## 'objectClass': [b'top'] INFO lib389:acl_test.py:1138 ######## 'defaultnamingcontext': [b'dc=example,dc=com'] INFO lib389:acl_test.py:1138 ######## 'dataversion': [b'020210818012634'] INFO lib389:acl_test.py:1138 ######## 'netscapemdsuffix': [b'cn=ldap://dc=localhost,dc=localdomain:39001'] INFO lib389:acl_test.py:1143 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:acl_test.py:1150 The entry was not renamed (expected) INFO lib389:acl_test.py:133 Bind as cn=Directory Manager
Passed suites/acl/default_aci_allows_self_write_test.py::test_acl_default_allow_self_write_nsuser 23.04
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Passed suites/acl/default_aci_allows_self_write_test.py::test_acl_default_allow_self_write_user 16.20
------------------------------Captured stdout call------------------------------
uid cn sn uidNumber gidNumber homeDirectory
Passed suites/acl/deladd_test.py::test_allow_delete_access_to_groupdn 9.95
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Passed suites/acl/deladd_test.py::test_allow_add_access_to_anyone 0.32
No log output captured.
Passed suites/acl/deladd_test.py::test_allow_delete_access_to_anyone 0.53
No log output captured.
Passed suites/acl/deladd_test.py::test_allow_delete_access_not_to_userdn 0.59
No log output captured.
Passed suites/acl/deladd_test.py::test_allow_delete_access_not_to_group 0.33
No log output captured.
Passed suites/acl/deladd_test.py::test_allow_add_access_to_parent 0.53
No log output captured.
Passed suites/acl/deladd_test.py::test_allow_delete_access_to_parent 0.31
No log output captured.
Passed suites/acl/deladd_test.py::test_allow_delete_access_to_dynamic_group 0.32
No log output captured.
Passed suites/acl/deladd_test.py::test_allow_delete_access_to_dynamic_group_uid 0.31
No log output captured.
Passed suites/acl/deladd_test.py::test_allow_delete_access_not_to_dynamic_group 3.08
No log output captured.
Passed suites/acl/enhanced_aci_modrnd_test.py::test_enhanced_aci_modrnd 12.22
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created. INFO tests.suites.acl.enhanced_aci_modrnd_test:enhanced_aci_modrnd_test.py:32 Add a container: ou=test_ou_1,dc=example,dc=com INFO tests.suites.acl.enhanced_aci_modrnd_test:enhanced_aci_modrnd_test.py:38 Add a container: ou=test_ou_2,dc=example,dc=com INFO tests.suites.acl.enhanced_aci_modrnd_test:enhanced_aci_modrnd_test.py:44 Add a user: cn=test_user,ou=test_ou_1,dc=example,dc=com INFO tests.suites.acl.enhanced_aci_modrnd_test:enhanced_aci_modrnd_test.py:58 Add an ACI 'allow (all)' by cn=test_user,ou=test_ou_1,dc=example,dc=com to the ou=test_ou_1,dc=example,dc=com INFO tests.suites.acl.enhanced_aci_modrnd_test:enhanced_aci_modrnd_test.py:62 Add an ACI 'allow (all)' by cn=test_user,ou=test_ou_1,dc=example,dc=com to the ou=test_ou_2,dc=example,dc=com
-------------------------------Captured log call--------------------------------
INFO tests.suites.acl.enhanced_aci_modrnd_test:enhanced_aci_modrnd_test.py:93 Bind as cn=test_user,ou=test_ou_1,dc=example,dc=com INFO tests.suites.acl.enhanced_aci_modrnd_test:enhanced_aci_modrnd_test.py:97 User MODRDN operation from ou=test_ou_1,dc=example,dc=com to ou=test_ou_2,dc=example,dc=com INFO tests.suites.acl.enhanced_aci_modrnd_test:enhanced_aci_modrnd_test.py:103 Check there is no user in ou=test_ou_1,dc=example,dc=com INFO tests.suites.acl.enhanced_aci_modrnd_test:enhanced_aci_modrnd_test.py:109 Check there is our user in ou=test_ou_2,dc=example,dc=com
Passed suites/acl/globalgroup_part2_test.py::test_undefined_in_group_eval_five 9.43
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Passed suites/acl/globalgroup_part2_test.py::test_undefined_in_group_eval_six 0.19
No log output captured.
Passed suites/acl/globalgroup_part2_test.py::test_undefined_in_group_eval_seven 0.15
No log output captured.
Passed suites/acl/globalgroup_part2_test.py::test_undefined_in_group_eval_eight 0.14
No log output captured.
Passed suites/acl/globalgroup_part2_test.py::test_undefined_in_group_eval_nine 0.13
No log output captured.
Passed suites/acl/globalgroup_part2_test.py::test_undefined_in_group_eval_ten 0.16
No log output captured.
Passed suites/acl/globalgroup_part2_test.py::test_undefined_in_group_eval_eleven 0.14
No log output captured.
Passed suites/acl/globalgroup_part2_test.py::test_undefined_in_group_eval_twelve 0.13
No log output captured.
Passed suites/acl/globalgroup_part2_test.py::test_undefined_in_group_eval_fourteen 0.16
No log output captured.
Passed suites/acl/globalgroup_part2_test.py::test_undefined_in_group_eval_fifteen 0.17
No log output captured.
Passed suites/acl/globalgroup_part2_test.py::test_undefined_in_group_eval_sixteen 0.14
No log output captured.
Passed suites/acl/globalgroup_part2_test.py::test_undefined_in_group_eval_seventeen 0.11
No log output captured.
Passed suites/acl/globalgroup_part2_test.py::test_undefined_in_group_eval_eighteen 2.59
No log output captured.
Passed suites/acl/globalgroup_test.py::test_caching_changes 10.45
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Passed suites/acl/globalgroup_test.py::test_deny_group_member_all_rights_to_user 0.18
No log output captured.
Passed suites/acl/globalgroup_test.py::test_deny_group_member_all_rights_to_group_members 0.12
No log output captured.
Passed suites/acl/globalgroup_test.py::test_deeply_nested_groups_aci_denial 0.19
No log output captured.
Passed suites/acl/globalgroup_test.py::test_deeply_nested_groups_aci_denial_two 0.12
No log output captured.
Passed suites/acl/globalgroup_test.py::test_deeply_nested_groups_aci_allow 0.11
No log output captured.
Passed suites/acl/globalgroup_test.py::test_deeply_nested_groups_aci_allow_two 0.40
No log output captured.
Passed suites/acl/globalgroup_test.py::test_undefined_in_group_eval 0.14
No log output captured.
Passed suites/acl/globalgroup_test.py::test_undefined_in_group_eval_two 0.12
No log output captured.
Passed suites/acl/globalgroup_test.py::test_undefined_in_group_eval_three 0.12
No log output captured.
Passed suites/acl/globalgroup_test.py::test_undefined_in_group_eval_four 2.08
No log output captured.
Passed suites/acl/keywords_part2_test.py::test_access_from_certain_network_only_ip 14.36
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Passed suites/acl/keywords_part2_test.py::test_connectin_from_an_unauthorized_network 0.36
No log output captured.
Passed suites/acl/keywords_part2_test.py::test_ip_keyword_test_noip_cannot 0.42
No log output captured.
Passed suites/acl/keywords_part2_test.py::test_user_can_access_the_data_at_any_time 0.43
No log output captured.
Passed suites/acl/keywords_part2_test.py::test_user_can_access_the_data_only_in_the_morning 0.19
No log output captured.
Passed suites/acl/keywords_part2_test.py::test_user_can_access_the_data_only_in_the_afternoon 0.17
No log output captured.
Passed suites/acl/keywords_part2_test.py::test_timeofday_keyword 1.23
No log output captured.
Passed suites/acl/keywords_part2_test.py::test_dayofweek_keyword_test_everyday_can_access 0.18
No log output captured.
Passed suites/acl/keywords_part2_test.py::test_dayofweek_keyword_today_can_access 0.19
No log output captured.
Passed suites/acl/keywords_part2_test.py::test_user_cannot_access_the_data_at_all 1.54
No log output captured.
Passed suites/acl/keywords_test.py::test_user_binds_with_a_password_and_can_access_the_data 9.91
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Passed suites/acl/keywords_test.py::test_user_binds_with_a_bad_password_and_cannot_access_the_data 0.09
No log output captured.
Passed suites/acl/keywords_test.py::test_anonymous_user_cannot_access_the_data 0.13
No log output captured.
Passed suites/acl/keywords_test.py::test_authenticated_but_has_no_rigth_on_the_data 0.17
No log output captured.
Passed suites/acl/keywords_test.py::test_the_bind_client_is_accessing_the_directory 0.12
No log output captured.
Passed suites/acl/keywords_test.py::test_users_binds_with_a_password_and_can_access_the_data 0.12
No log output captured.
Passed suites/acl/keywords_test.py::test_user_binds_without_any_password_and_cannot_access_the_data 0.12
No log output captured.
Passed suites/acl/keywords_test.py::test_user_cannot_access_the_data_if_not_from_a_certain_domain 0.15
No log output captured.
Passed suites/acl/keywords_test.py::test_dnsalias_keyword_test_nodns_cannot 1.58
No log output captured.
Passed suites/acl/keywords_test.py::test_user_can_access_from_ipv4_or_ipv6_address[127.0.0.1] 0.15
No log output captured.
Passed suites/acl/keywords_test.py::test_user_can_access_from_ipv4_or_ipv6_address[[::1]] 1.08
No log output captured.
Passed suites/acl/misc_test.py::test_accept_aci_in_addition_to_acl 9.28
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Passed suites/acl/misc_test.py::test_more_then_40_acl_will_crash_slapd 0.54
-------------------------------Captured log setup-------------------------------
INFO lib389:misc_test.py:76 Exception (expected): ALREADY_EXISTS
Passed suites/acl/misc_test.py::test_search_access_should_not_include_read_access 0.15
-------------------------------Captured log setup-------------------------------
INFO lib389:misc_test.py:76 Exception (expected): ALREADY_EXISTS
Passed suites/acl/misc_test.py::test_only_allow_some_targetattr 0.21
-------------------------------Captured log setup-------------------------------
INFO lib389:misc_test.py:76 Exception (expected): ALREADY_EXISTS
Passed suites/acl/misc_test.py::test_only_allow_some_targetattr_two 0.75
-------------------------------Captured log setup-------------------------------
INFO lib389:misc_test.py:76 Exception (expected): ALREADY_EXISTS
Passed suites/acl/misc_test.py::test_memberurl_needs_to_be_normalized 0.39
-------------------------------Captured log setup-------------------------------
INFO lib389:misc_test.py:76 Exception (expected): ALREADY_EXISTS
Passed suites/acl/misc_test.py::test_greater_than_200_acls_can_be_created 4.58
-------------------------------Captured log setup-------------------------------
INFO lib389:misc_test.py:76 Exception (expected): ALREADY_EXISTS
Passed suites/acl/misc_test.py::test_server_bahaves_properly_with_very_long_attribute_names 0.22
-------------------------------Captured log setup-------------------------------
INFO lib389:misc_test.py:76 Exception (expected): ALREADY_EXISTS
Passed suites/acl/misc_test.py::test_do_bind_as_201_distinct_users 34.05
-------------------------------Captured log setup-------------------------------
INFO lib389:misc_test.py:76 Exception (expected): ALREADY_EXISTS
Passed suites/acl/misc_test.py::test_info_disclosure 1.59
No log output captured.
Passed suites/acl/modify_test.py::test_allow_write_access_to_targetattr_with_a_single_attribute 10.06
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Passed suites/acl/modify_test.py::test_allow_write_access_to_targetattr_with_multiple_attibutes 0.29
No log output captured.
Passed suites/acl/modify_test.py::test_allow_write_access_to_userdn_all 0.39
No log output captured.
Passed suites/acl/modify_test.py::test_allow_write_access_to_userdn_with_wildcards_in_dn 0.36
No log output captured.
Passed suites/acl/modify_test.py::test_allow_write_access_to_userdn_with_multiple_dns 0.39
No log output captured.
Passed suites/acl/modify_test.py::test_allow_write_access_to_target_with_wildcards 0.47
No log output captured.
Passed suites/acl/modify_test.py::test_allow_write_access_to_userdnattr 0.34
No log output captured.
Passed suites/acl/modify_test.py::test_allow_selfwrite_access_to_anyone 0.40
No log output captured.
Passed suites/acl/modify_test.py::test_uniquemember_should_also_be_the_owner 0.80
No log output captured.
Passed suites/acl/modify_test.py::test_aci_with_both_allow_and_deny 0.39
No log output captured.
Passed suites/acl/modify_test.py::test_allow_owner_to_modify_entry 2.72
No log output captured.
Passed suites/acl/modrdn_test.py::test_allow_write_privilege_to_anyone 9.84
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Passed suites/acl/modrdn_test.py::test_allow_write_privilege_to_dynamic_group_with_scope_set_to_base_in_ldap_url 0.29
No log output captured.
Passed suites/acl/modrdn_test.py::test_write_access_to_naming_atributes 0.28
No log output captured.
Passed suites/acl/modrdn_test.py::test_write_access_to_naming_atributes_two 0.59
No log output captured.
Passed suites/acl/modrdn_test.py::test_access_aci_list_contains_any_deny_rule 0.64
No log output captured.
Passed suites/acl/modrdn_test.py::test_renaming_target_entry 2.29
No log output captured.
Passed suites/acl/repeated_ldap_add_test.py::test_repeated_ldap_add 42.67
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
------------------------------Captured stdout call------------------------------
Entry uid=buser123,ou=BOU,dc=example,dc=com is locked
-------------------------------Captured log call--------------------------------
INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:184 Testing Bug 1347760 - Information disclosure via repeated use of LDAP ADD operation, etc. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:186 Disabling accesslog logbuffering INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:189 Bind as {cn=Directory Manager,password} INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:192 Adding ou=BOU a bind user belongs to. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:197 Adding a bind user. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:204 Adding a test user. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:211 Deleting aci in dc=example,dc=com. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:214 While binding as DM, acquire an access log path and instance dir INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:220 Bind case 1. the bind user has no rights to read the entry itself, bind should be successful. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:221 Bind as {uid=buser123,ou=BOU,dc=example,dc=com,buser123} who has no access rights. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:229 Access log path: /var/log/dirsrv/slapd-standalone1/access INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:231 Bind case 2-1. the bind user does not exist, bind should fail with error INVALID_CREDENTIALS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:233 Bind as {uid=bogus,dc=example,dc=com,bogus} who does not exist. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:237 Exception (expected): INVALID_CREDENTIALS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:238 Desc Invalid credentials INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:246 Cause found - [17/Aug/2021:21:30:51.690431176 -0400] conn=1 op=11 RESULT err=49 tag=97 nentries=0 wtime=0.000212789 optime=0.004234183 etime=0.004444513 - No such entry INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:249 Bind case 2-2. the bind user's suffix does not exist, bind should fail with error INVALID_CREDENTIALS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:251 Bind as {uid=bogus,ou=people,dc=bogus,bogus} who does not exist. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:260 Cause found - [17/Aug/2021:21:30:52.701891816 -0400] conn=1 op=12 RESULT err=49 tag=97 nentries=0 wtime=0.000190334 optime=0.006925843 etime=0.007107224 - No suffix for bind dn found INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:263 Bind case 2-3. the bind user's password is wrong, bind should fail with error INVALID_CREDENTIALS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:265 Bind as {uid=buser123,ou=BOU,dc=example,dc=com,bogus} who does not exist. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:269 Exception (expected): INVALID_CREDENTIALS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:270 Desc Invalid credentials INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:278 Cause found - [17/Aug/2021:21:30:53.740682201 -0400] conn=1 op=13 RESULT err=49 tag=97 nentries=0 wtime=0.000221385 optime=0.034300767 etime=0.034514618 - Invalid credentials INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:281 Adding aci for uid=buser123,ou=BOU,dc=example,dc=com to ou=BOU,dc=example,dc=com. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:283 aci: (targetattr="*")(version 3.0; acl "buser123"; allow(all) userdn = "ldap:///uid=buser123,ou=BOU,dc=example,dc=com";) INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:284 Bind as {cn=Directory Manager,password} INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:289 Bind case 3. the bind user has the right to read the entry itself, bind should be successful. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:290 Bind as {uid=buser123,ou=BOU,dc=example,dc=com,buser123} which should be ok. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:293 The following operations are against the subtree the bind user uid=buser123,ou=BOU,dc=example,dc=com has no rights. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:297 Search case 1. the bind user has no rights to read the search entry, it should return no search results with <class 'ldap.SUCCESS'> INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Searching existing entry uid=tuser0,ou=people,dc=example,dc=com, which should be ok. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:141 Search should return none INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:303 Search case 2-1. the search entry does not exist, the search should return no search results with SUCCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Searching non-existing entry uid=bogus,dc=example,dc=com, which should be ok. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:141 Search should return none INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:309 Search case 2-2. the search entry does not exist, the search should return no search results with SUCCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Searching non-existing entry uid=bogus,ou=people,dc=example,dc=com, which should be ok. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:141 Search should return none INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:316 Add case 1. the bind user has no rights AND the adding entry exists, it should fail with INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Adding existing entry uid=tuser0,ou=people,dc=example,dc=com, which should fail with INSUFFICIENT_ACCESS. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:131 Exception (expected): INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:132 Desc Insufficient access INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:322 Add case 2-1. the bind user has no rights AND the adding entry does not exist, it should fail with INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Adding non-existing entry uid=bogus,dc=example,dc=com, which should fail with INSUFFICIENT_ACCESS. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:131 Exception (expected): INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:132 Desc Insufficient access INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:328 Add case 2-2. the bind user has no rights AND the adding entry does not exist, it should fail with INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Adding non-existing entry uid=bogus,ou=people,dc=example,dc=com, which should fail with INSUFFICIENT_ACCESS. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:131 Exception (expected): INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:132 Desc Insufficient access INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:335 Modify case 1. the bind user has no rights AND the modifying entry exists, it should fail with INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Modifying existing entry uid=tuser0,ou=people,dc=example,dc=com, which should fail with INSUFFICIENT_ACCESS. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:131 Exception (expected): INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:132 Desc Insufficient access INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:341 Modify case 2-1. the bind user has no rights AND the modifying entry does not exist, it should fail with INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Modifying non-existing entry uid=bogus,dc=example,dc=com, which should fail with INSUFFICIENT_ACCESS. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:131 Exception (expected): INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:132 Desc Insufficient access INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:347 Modify case 2-2. the bind user has no rights AND the modifying entry does not exist, it should fail with INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Modifying non-existing entry uid=bogus,ou=people,dc=example,dc=com, which should fail with INSUFFICIENT_ACCESS. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:131 Exception (expected): INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:132 Desc Insufficient access INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:354 Modrdn case 1. the bind user has no rights AND the renaming entry exists, it should fail with INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Renaming existing entry uid=tuser0,ou=people,dc=example,dc=com, which should fail with INSUFFICIENT_ACCESS. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:131 Exception (expected): INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:132 Desc Insufficient access INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:360 Modrdn case 2-1. the bind user has no rights AND the renaming entry does not exist, it should fail with INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Renaming non-existing entry uid=bogus,dc=example,dc=com, which should fail with INSUFFICIENT_ACCESS. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:131 Exception (expected): INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:132 Desc Insufficient access INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:366 Modrdn case 2-2. the bind user has no rights AND the renaming entry does not exist, it should fail with INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Renaming non-existing entry uid=bogus,ou=people,dc=example,dc=com, which should fail with INSUFFICIENT_ACCESS. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:131 Exception (expected): INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:132 Desc Insufficient access INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:372 Modrdn case 3. the bind user has no rights AND the node moving an entry to exists, it should fail with INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Moving to existing superior ou=groups,dc=example,dc=com, which should fail with INSUFFICIENT_ACCESS. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:131 Exception (expected): INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:132 Desc Insufficient access INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:378 Modrdn case 4-1. the bind user has no rights AND the node moving an entry to does not, it should fail with INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Moving to non-existing superior ou=OU,dc=example,dc=com, which should fail with INSUFFICIENT_ACCESS. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:131 Exception (expected): INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:132 Desc Insufficient access INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:384 Modrdn case 4-2. the bind user has no rights AND the node moving an entry to does not, it should fail with INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Moving to non-existing superior ou=OU,dc=example,dc=com, which should fail with INSUFFICIENT_ACCESS. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:131 Exception (expected): INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:132 Desc Insufficient access INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:391 Delete case 1. the bind user has no rights AND the deleting entry exists, it should fail with INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Deleting existing entry uid=tuser0,ou=people,dc=example,dc=com, which should fail with INSUFFICIENT_ACCESS. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:131 Exception (expected): INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:132 Desc Insufficient access INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:397 Delete case 2-1. the bind user has no rights AND the deleting entry does not exist, it should fail with INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Deleting non-existing entry uid=bogus,dc=example,dc=com, which should fail with INSUFFICIENT_ACCESS. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:131 Exception (expected): INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:132 Desc Insufficient access INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:403 Delete case 2-2. the bind user has no rights AND the deleting entry does not exist, it should fail with INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Deleting non-existing entry uid=bogus,ou=people,dc=example,dc=com, which should fail with INSUFFICIENT_ACCESS. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:131 Exception (expected): INSUFFICIENT_ACCESS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:132 Desc Insufficient access INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:407 EXTRA: Check no regressions INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:408 Adding aci for uid=buser123,ou=BOU,dc=example,dc=com to dc=example,dc=com. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:410 Bind as {cn=Directory Manager,password} INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:415 Bind as {uid=buser123,ou=BOU,dc=example,dc=com,buser123}. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:425 Search case. the search entry does not exist, the search should fail with NO_SUCH_OBJECT INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Searching non-existing entry uid=bogus,ou=people,dc=example,dc=com, which should fail with NO_SUCH_OBJECT. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:131 Exception (expected): NO_SUCH_OBJECT INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:132 Desc No such object INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:431 Add case. the adding entry already exists, it should fail with ALREADY_EXISTS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Adding existing entry uid=tuser0,ou=people,dc=example,dc=com, which should fail with ALREADY_EXISTS. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:131 Exception (expected): ALREADY_EXISTS INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:132 Desc Already exists INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:436 Modify case. the modifying entry does not exist, it should fail with NO_SUCH_OBJECT INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Modifying non-existing entry uid=bogus,dc=example,dc=com, which should fail with NO_SUCH_OBJECT. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:131 Exception (expected): NO_SUCH_OBJECT INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:132 Desc No such object INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:441 Modrdn case 1. the renaming entry does not exist, it should fail with NO_SUCH_OBJECT INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Renaming non-existing entry uid=bogus,dc=example,dc=com, which should fail with NO_SUCH_OBJECT. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:131 Exception (expected): NO_SUCH_OBJECT INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:132 Desc No such object INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:446 Modrdn case 2. the node moving an entry to does not, it should fail with NO_SUCH_OBJECT INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Moving to non-existing superior ou=OU,dc=example,dc=com, which should fail with NO_SUCH_OBJECT. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:131 Exception (expected): NO_SUCH_OBJECT INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:132 Desc No such object INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:451 Delete case. the deleting entry does not exist, it should fail with NO_SUCH_OBJECT INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:108 Deleting non-existing entry uid=bogus,dc=example,dc=com, which should fail with NO_SUCH_OBJECT. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:131 Exception (expected): NO_SUCH_OBJECT INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:132 Desc No such object INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:148 PASSED INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:454 Inactivate uid=buser123,ou=BOU,dc=example,dc=com INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:461 ['/usr/sbin/dsidm', 'standalone1', '-b', 'dc=example,dc=com', 'account', 'lock', 'uid=buser123,ou=BOU,dc=example,dc=com'] INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:465 Bind as {uid=buser123,ou=BOU,dc=example,dc=com,buser123} which should fail with UNWILLING_TO_PERFORM. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:469 Exception (expected): UNWILLING_TO_PERFORM INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:470 Desc Server is unwilling to perform INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:473 Bind as {uid=buser123,ou=BOU,dc=example,dc=com,bogus} which should fail with UNWILLING_TO_PERFORM. INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:477 Exception (expected): UNWILLING_TO_PERFORM INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:478 Desc Server is unwilling to perform INFO tests.suites.acl.repeated_ldap_add_test:repeated_ldap_add_test.py:481 SUCCESS
Passed suites/acl/roledn_test.py::test_mod_seealso_positive[(STEVE_ROLE, NESTED_ROLE_TESTER)] 10.66
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Passed suites/acl/roledn_test.py::test_mod_seealso_positive[(HARRY_ROLE, NESTED_ROLE_TESTER)] 0.14
No log output captured.
Passed suites/acl/roledn_test.py::test_mod_seealso_positive[(MARY_ROLE, NOT_RULE_ACCESS)] 0.13
No log output captured.
Passed suites/acl/roledn_test.py::test_mod_seealso_positive[(STEVE_ROLE, OR_RULE_ACCESS)] 0.14
No log output captured.
Passed suites/acl/roledn_test.py::test_mod_seealso_positive[(HARRY_ROLE, OR_RULE_ACCESS)] 0.14
No log output captured.
Passed suites/acl/roledn_test.py::test_mod_seealso_positive[(STEVE_ROLE, ALL_ACCESS)] 0.15
No log output captured.
Passed suites/acl/roledn_test.py::test_mod_seealso_positive[(HARRY_ROLE, ALL_ACCESS)] 0.14
No log output captured.
Passed suites/acl/roledn_test.py::test_mod_seealso_positive[(MARY_ROLE, ALL_ACCESS)] 0.13
No log output captured.
Passed suites/acl/roledn_test.py::test_mod_seealso_negative[(MARY_ROLE, NESTED_ROLE_TESTER)] 0.13
No log output captured.
Passed suites/acl/roledn_test.py::test_mod_seealso_negative[(STEVE_ROLE, NOT_RULE_ACCESS)] 0.16
No log output captured.
Passed suites/acl/roledn_test.py::test_mod_seealso_negative[(HARRY_ROLE, NOT_RULE_ACCESS)] 0.15
No log output captured.
Passed suites/acl/roledn_test.py::test_mod_seealso_negative[(MARY_ROLE , OR_RULE_ACCESS)] 0.15
No log output captured.
Passed suites/acl/roledn_test.py::test_mod_anonseealso_positive[NOT_RULE_ACCESS] 0.10
No log output captured.
Passed suites/acl/roledn_test.py::test_mod_anonseealso_positive[ALL_ACCESS] 0.10
No log output captured.
Passed suites/acl/roledn_test.py::test_mod_anonseealso_negaive[NESTED_ROLE_TESTER] 0.14
No log output captured.
Passed suites/acl/roledn_test.py::test_mod_anonseealso_negaive[OR_RULE_ACCESS] 1.27
No log output captured.
Passed suites/acl/search_real_part2_test.py::test_deny_all_access_with__target_set_on_non_leaf 10.50
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Passed suites/acl/search_real_part2_test.py::test_deny_all_access_with__target_set_on_wildcard_non_leaf 0.69
No log output captured.
Passed suites/acl/search_real_part2_test.py::test_deny_all_access_with__target_set_on_wildcard_leaf 1.06
No log output captured.
Passed suites/acl/search_real_part2_test.py::test_deny_all_access_with_targetfilter_using_equality_search 0.44
No log output captured.
Passed suites/acl/search_real_part2_test.py::test_deny_all_access_with_targetfilter_using_equality_search_two 0.64
No log output captured.
Passed suites/acl/search_real_part2_test.py::test_deny_all_access_with_targetfilter_using_substring_search 0.48
No log output captured.
Passed suites/acl/search_real_part2_test.py::test_deny_all_access_with_targetfilter_using_substring_search_two 1.88
No log output captured.
Passed suites/acl/search_real_part2_test.py::test_deny_all_access_with_targetfilter_using_boolean_or_of_two_equality_search 0.35
No log output captured.
Passed suites/acl/search_real_part2_test.py::test_deny_all_access_to__userdn_two 0.78
No log output captured.
Passed suites/acl/search_real_part2_test.py::test_deny_all_access_with_userdn 0.60
No log output captured.
Passed suites/acl/search_real_part2_test.py::test_deny_all_access_with_targetfilter_using_presence_search 1.79
No log output captured.
Passed suites/acl/search_real_part3_test.py::test_deny_search_access_to_userdn_with_ldap_url 12.68
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Passed suites/acl/search_real_part3_test.py::test_deny_search_access_to_userdn_with_ldap_url_two 0.82
No log output captured.
Passed suites/acl/search_real_part3_test.py::test_deny_search_access_to_userdn_with_ldap_url_matching_all_users 0.92
No log output captured.
Passed suites/acl/search_real_part3_test.py::test_deny_read_access_to_a_dynamic_group 0.65
No log output captured.
Passed suites/acl/search_real_part3_test.py::test_deny_read_access_to_dynamic_group_with_host_port_set_on_ldap_url 0.51
No log output captured.
Passed suites/acl/search_real_part3_test.py::test_deny_read_access_to_dynamic_group_with_scope_set_to_one_in_ldap_url 0.52
No log output captured.
Passed suites/acl/search_real_part3_test.py::test_deny_read_access_to_dynamic_group_two 0.72
No log output captured.
Passed suites/acl/search_real_part3_test.py::test_deny_access_to_group_should_deny_access_to_all_uniquemember 0.67
No log output captured.
Passed suites/acl/search_real_part3_test.py::test_entry_with_lots_100_attributes 12.27
No log output captured.
Passed suites/acl/search_real_part3_test.py::test_groupdnattr_value_is_another_group 2.38
No log output captured.
Passed suites/acl/search_real_test.py::test_deny_all_access_with_target_set 11.19
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Passed suites/acl/search_real_test.py::test_deny_all_access_to_a_target_with_wild_card 0.37
No log output captured.
Passed suites/acl/search_real_test.py::test_deny_all_access_without_a_target_set 1.87
No log output captured.
Passed suites/acl/search_real_test.py::test_deny_read_search_and_compare_access_with_target_and_targetattr_set 1.49
No log output captured.
Passed suites/acl/search_real_test.py::test_deny_read_access_to_multiple_groupdns 1.30
No log output captured.
Passed suites/acl/search_real_test.py::test_deny_all_access_to_userdnattr 0.75
No log output captured.
Passed suites/acl/search_real_test.py::test_deny_all_access_with__target_set 0.85
No log output captured.
Passed suites/acl/search_real_test.py::test_deny_all_access_with__targetattr_set 1.97
No log output captured.
Passed suites/acl/search_real_test.py::test_deny_all_access_with_targetattr_set 2.53
No log output captured.
Passed suites/acl/selfdn_permissions_test.py::test_selfdn_permission_add 10.57
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created. INFO lib389:selfdn_permissions_test.py:58 Add OCticket47653 that allows 'member' attribute INFO lib389:selfdn_permissions_test.py:63 Add cn=bind_entry, dc=example,dc=com
-------------------------------Captured log call--------------------------------
INFO lib389:selfdn_permissions_test.py:106 ######################### ADD ###################### INFO lib389:selfdn_permissions_test.py:109 Bind as cn=bind_entry, dc=example,dc=com INFO lib389:selfdn_permissions_test.py:139 Try to add Add cn=test_entry, dc=example,dc=com (aci is missing): dn: cn=test_entry, dc=example,dc=com cn: test_entry member: cn=bind_entry, dc=example,dc=com objectclass: top objectclass: person objectclass: OCticket47653 postalAddress: here postalCode: 1234 sn: test_entry INFO lib389:selfdn_permissions_test.py:143 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:selfdn_permissions_test.py:147 Bind as cn=Directory Manager and add the ADD SELFDN aci INFO lib389:selfdn_permissions_test.py:159 Bind as cn=bind_entry, dc=example,dc=com INFO lib389:selfdn_permissions_test.py:164 Try to add Add cn=test_entry, dc=example,dc=com (member is missing) INFO lib389:selfdn_permissions_test.py:172 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:selfdn_permissions_test.py:178 Try to add Add cn=test_entry, dc=example,dc=com (with several member values) INFO lib389:selfdn_permissions_test.py:181 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:selfdn_permissions_test.py:184 Try to add Add cn=test_entry, dc=example,dc=com should be successful
Passed suites/acl/selfdn_permissions_test.py::test_selfdn_permission_search 0.39
-------------------------------Captured log call--------------------------------
INFO lib389:selfdn_permissions_test.py:205 ######################### SEARCH ###################### INFO lib389:selfdn_permissions_test.py:207 Bind as cn=bind_entry, dc=example,dc=com INFO lib389:selfdn_permissions_test.py:211 Try to search cn=test_entry, dc=example,dc=com (aci is missing) INFO lib389:selfdn_permissions_test.py:216 Bind as cn=Directory Manager and add the READ/SEARCH SELFDN aci INFO lib389:selfdn_permissions_test.py:229 Bind as cn=bind_entry, dc=example,dc=com INFO lib389:selfdn_permissions_test.py:233 Try to search cn=test_entry, dc=example,dc=com should be successful
Passed suites/acl/selfdn_permissions_test.py::test_selfdn_permission_modify 0.53
-------------------------------Captured log call--------------------------------
INFO lib389:selfdn_permissions_test.py:256 Bind as cn=bind_entry, dc=example,dc=com INFO lib389:selfdn_permissions_test.py:259 ######################### MODIFY ###################### INFO lib389:selfdn_permissions_test.py:263 Try to modify cn=test_entry, dc=example,dc=com (aci is missing) INFO lib389:selfdn_permissions_test.py:267 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:selfdn_permissions_test.py:271 Bind as cn=Directory Manager and add the WRITE SELFDN aci INFO lib389:selfdn_permissions_test.py:284 Bind as cn=bind_entry, dc=example,dc=com INFO lib389:selfdn_permissions_test.py:288 Try to modify cn=test_entry, dc=example,dc=com. It should succeeds
Passed suites/acl/selfdn_permissions_test.py::test_selfdn_permission_delete 2.32
-------------------------------Captured log call--------------------------------
INFO lib389:selfdn_permissions_test.py:314 ######################### DELETE ###################### INFO lib389:selfdn_permissions_test.py:317 Bind as cn=bind_entry, dc=example,dc=com INFO lib389:selfdn_permissions_test.py:322 Try to delete cn=test_entry, dc=example,dc=com (aci is missing) INFO lib389:selfdn_permissions_test.py:325 Exception (expected): INSUFFICIENT_ACCESS INFO lib389:selfdn_permissions_test.py:329 Bind as cn=Directory Manager and add the READ/SEARCH SELFDN aci INFO lib389:selfdn_permissions_test.py:341 Bind as cn=bind_entry, dc=example,dc=com INFO lib389:selfdn_permissions_test.py:345 Try to delete cn=test_entry, dc=example,dc=com should be successful
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_targattrfilters_1] 0.10
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_targattrfilters_2] 0.10
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_targattrfilters_3] 0.24
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_targattrfilters_4] 0.10
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_targattrfilters_5] 0.10
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_targattrfilters_6] 0.24
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_targattrfilters_7] 0.24
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_targattrfilters_8] 0.10
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_targattrfilters_9] 0.11
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_targattrfilters_10] 0.10
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_targattrfilters_11] 0.11
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_targattrfilters_12] 0.12
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_targattrfilters_13] 0.10
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_targattrfilters_14] 0.10
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_targattrfilters_15] 0.09
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_targattrfilters_16] 0.11
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_targattrfilters_17] 0.10
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_targattrfilters_19] 0.11
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_targattrfilters_21] 0.09
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_targattrfilters_22] 0.10
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_targattrfilters_23] 0.09
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_Missing_acl_mispel] 0.10
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_Missing_acl_string] 0.09
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_Wrong_version_string] 0.11
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_Missing_version_string] 0.10
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_Authenticate_statement] 0.12
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_Multiple_targets] 0.10
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_Target_set_to_self] 0.09
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_target_set_with_ldap_instead_of_ldap] 0.10
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_target_set_with_more_than_three] 0.11
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_target_set_with_less_than_three] 0.10
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_bind_rule_set_with_less_than_three] 0.10
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_Use_semicolon_instead_of_comma_in_permission] 0.10
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_Use_double_equal_instead_of_equal_in_the_target] 0.10
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_use_double_equal_instead_of_equal_in_user_and_group_access] 0.11
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_donot_cote_the_name_of_the_aci] 0.11
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_extra_parentheses_case_1] 0.11
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_extra_parentheses_case_2] 0.12
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_extra_parentheses_case_3] 0.10
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_no_semicolon_at_the_end_of_the_aci] 0.11
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_a_character_different_of_a_semicolon_at_the_end_of_the_aci] 0.11
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_bad_filter] 0.11
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_Use_double_equal_instead_of_equal_in_the_targattrfilters] 0.11
No log output captured.
Passed suites/acl/syntax_test.py::test_aci_invalid_syntax[test_Use_double_equal_instead_of_equal_inside_the_targattrfilters] 0.10
No log output captured.
Passed suites/acl/syntax_test.py::test_target_set_above_the_entry_test 1.36
No log output captured.
Passed suites/acl/userattr_test.py::test_mod_see_also_positive[(CAN,ROLEDNACCESS)] 10.46
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Passed suites/acl/userattr_test.py::test_mod_see_also_positive[(CAN,USERDNACCESS)] 0.09
No log output captured.
Passed suites/acl/userattr_test.py::test_mod_see_also_positive[(CAN,GROUPDNACCESS)] 0.09
No log output captured.
Passed suites/acl/userattr_test.py::test_mod_see_also_positive[(CAN,LDAPURLACCESS)] 0.09
No log output captured.
Passed suites/acl/userattr_test.py::test_mod_see_also_positive[(CAN,ATTRNAMEACCESS)] 0.09
No log output captured.
Passed suites/acl/userattr_test.py::test_mod_see_also_positive[(LEVEL_0, OU_2)] 0.17
No log output captured.
Passed suites/acl/userattr_test.py::test_mod_see_also_positive[(LEVEL_1,ANCESTORS)] 0.12
No log output captured.
Passed suites/acl/userattr_test.py::test_mod_see_also_positive[(LEVEL_2,GRANDPARENTS)] 0.14
No log output captured.
Passed suites/acl/userattr_test.py::test_mod_see_also_positive[(LEVEL_4,OU_2)] 0.12
No log output captured.
Passed suites/acl/userattr_test.py::test_mod_see_also_positive[(LEVEL_4, ANCESTORS)] 0.09
No log output captured.
Passed suites/acl/userattr_test.py::test_mod_see_also_positive[(LEVEL_4,GRANDPARENTS)] 0.10
No log output captured.
Passed suites/acl/userattr_test.py::test_mod_see_also_positive[(LEVEL_4,PARENTS)] 0.09
No log output captured.
Passed suites/acl/userattr_test.py::test_mod_see_also_positive[(LEVEL_4,CHILDREN)] 0.10
No log output captured.
Passed suites/acl/userattr_test.py::test_mod_see_also_negative[(CANNOT,ROLEDNACCESS)] 0.14
No log output captured.
Passed suites/acl/userattr_test.py::test_mod_see_also_negative[(CANNOT,USERDNACCESS)] 0.10
No log output captured.
Passed suites/acl/userattr_test.py::test_mod_see_also_negative[(CANNOT,GROUPDNACCESS)] 0.11
No log output captured.
Passed suites/acl/userattr_test.py::test_mod_see_also_negative[(CANNOT,LDAPURLACCESS)] 0.10
No log output captured.
Passed suites/acl/userattr_test.py::test_mod_see_also_negative[(CANNOT,ATTRNAMEACCESS)] 0.11
No log output captured.
Passed suites/acl/userattr_test.py::test_mod_see_also_negative[(LEVEL_0, ANCESTORS)] 0.13
No log output captured.
Passed suites/acl/userattr_test.py::test_mod_see_also_negative[(LEVEL_0,GRANDPARENTS)] 0.11
No log output captured.
Passed suites/acl/userattr_test.py::test_mod_see_also_negative[(LEVEL_0,PARENTS)] 0.12
No log output captured.
Passed suites/acl/userattr_test.py::test_mod_see_also_negative[(LEVEL_0,CHILDREN)] 0.11
No log output captured.
Passed suites/acl/userattr_test.py::test_mod_see_also_negative[(LEVEL_2,PARENTS)] 0.14
No log output captured.
Passed suites/acl/userattr_test.py::test_mod_see_also_negative[(LEVEL_4,GRANDSONS)] 0.17
No log output captured.
Passed suites/acl/userattr_test.py::test_last_three[uid=Ananda Borah,ou=Accounting,dc=example,dc=com-uid=USERDNACCESS,ou=Accounting,dc=example,dc=com] 0.15
No log output captured.
Passed suites/acl/userattr_test.py::test_last_three[uid=Ananda Borah,ou=Accounting,dc=example,dc=com-uid=ROLEDNACCESS,ou=Accounting,dc=example,dc=com] 0.10
No log output captured.
Passed suites/acl/userattr_test.py::test_last_three[uid=Ananda Borah,ou=Accounting,dc=example,dc=com-uid=GROUPDNACCESS,ou=Accounting,dc=example,dc=com] 2.28
No log output captured.
Passed suites/acl/valueacl_part2_test.py::test_we_can_search_as_expected 9.78
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Passed suites/acl/valueacl_part2_test.py::test_we_can_mod_title_as_expected 0.54
No log output captured.
Passed suites/acl/valueacl_part2_test.py::test_modify_with_multiple_filters 0.73
No log output captured.
Passed suites/acl/valueacl_part2_test.py::test_denied_by_multiple_filters 0.49
No log output captured.
Passed suites/acl/valueacl_part2_test.py::test_allowed_add_one_attribute 0.56
No log output captured.
Passed suites/acl/valueacl_part2_test.py::test_cannot_add_an_entry_with_attribute_values_we_are_not_allowed_add 0.49
No log output captured.
Passed suites/acl/valueacl_part2_test.py::test_on_modrdn 0.99
No log output captured.
Passed suites/acl/valueacl_part2_test.py::test_on_modrdn_allow 1.09
No log output captured.
Passed suites/acl/valueacl_part2_test.py::test_targattrfilters_keyword 1.87
No log output captured.
Passed suites/acl/valueacl_test.py::test_delete_an_attribute_value_we_are_not_allowed_to_delete 11.32
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Passed suites/acl/valueacl_test.py::test_donot_allow_write_access_to_title_if_value_is_not_architect 0.50
No log output captured.
Passed suites/acl/valueacl_test.py::test_delete_an_attribute_value_we_are_allowed_to_delete 0.43
No log output captured.
Passed suites/acl/valueacl_test.py::test_delete_an_attribute_value_we_are_not_allowed_to_deleted 0.73
No log output captured.
Passed suites/acl/valueacl_test.py::test_allow_modify_replace 0.49
No log output captured.
Passed suites/acl/valueacl_test.py::test_allow_modify_delete 0.53
No log output captured.
Passed suites/acl/valueacl_test.py::test_replace_an_attribute_if_we_lack 0.57
No log output captured.
Passed suites/acl/valueacl_test.py::test_remove_an_attribute_if_we_have_del_rights_to_all_attr_value 0.49
No log output captured.
Passed suites/acl/valueacl_test.py::test_remove_an_attribute_if_we_donot_have_del_rights_to_all_attr_value 0.47
No log output captured.
Passed suites/acl/valueacl_test.py::test_remove_an_attribute_if_we_have_del_rights_to_all_attr_values 0.43
No log output captured.
Passed suites/acl/valueacl_test.py::test_cantnot_delete_an_entry_with_attribute_values_we_are_not_allowed_delete 0.46
No log output captured.
Passed suites/acl/valueacl_test.py::test_we_can_add_and_delete_an_entry_with_attribute_values_we_are_allowed_add_and_delete 0.93
No log output captured.
Passed suites/acl/valueacl_test.py::test_allow_title 0.48
No log output captured.
Passed suites/acl/valueacl_test.py::test_allow_to_modify 0.88
No log output captured.
Passed suites/acl/valueacl_test.py::test_selfwrite_does_not_confer_write_on_a_targattrfilters_atribute 0.46
No log output captured.
Passed suites/acl/valueacl_test.py::test_selfwrite_continues_to_give_rights_to_attr_in_targetattr_list 0.49
No log output captured.
Passed suites/acl/valueacl_test.py::test_add_an_attribute_value_we_are_allowed_to_add_with_ldapanyone 0.47
No log output captured.
Passed suites/acl/valueacl_test.py::test_hierarchy 0.49
No log output captured.
Passed suites/acl/valueacl_test.py::test_targattrfilters_and_search_permissions_and_that_ldapmodify_works_as_expected 0.50
No log output captured.
Passed suites/acl/valueacl_test.py::test_targattrfilters_and_search_permissions_and_that_ldapmodify_works_as_expected_two 3.01
No log output captured.
Passed suites/attr_encryption/attr_encryption_test.py::test_basic 28.52
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created. INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:35 Enable TLS for attribute encryption INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:38 Enables attribute encryption INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:42 Enables attribute encryption for employeeNumber and telephoneNumber INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:46 Add a test user with encrypted attributes
-------------------------------Captured log call--------------------------------
INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:81 Restart the server INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:87 Extracting values of cn from the list of objects in encrypt_attrs INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:88 And appending the cn values in a list INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:93 Check employeenumber encryption is enabled INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:96 Check telephoneNumber encryption is enabled INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:99 Check that encrypted attribute is present for user i.e. telephoneNumber
Passed suites/attr_encryption/attr_encryption_test.py::test_export_import_ciphertext 15.55
------------------------------Captured stderr call------------------------------
ldiffile: /var/lib/dirsrv/slapd-standalone1/ldif/export_ciphertext.ldif
-------------------------------Captured log call--------------------------------
INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:127 Export data as ciphertext INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:138 Check that the attribute is present in the exported file INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:139 Check that the encrypted value of attribute is not present in the exported file INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:145 Delete the test user entry with encrypted data INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:148 Import data as ciphertext, which was exported previously INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:159 Check that the data with encrypted attribute is imported properly
Passed suites/attr_encryption/attr_encryption_test.py::test_export_import_plaintext 19.14
------------------------------Captured stderr call------------------------------
[17/Aug/2021:21:35:06.319428849 -0400] - WARN - Security Initialization - /tmp is not a private namespace. pem files not exported there [17/Aug/2021:21:35:06.323295119 -0400] - INFO - slapd_extract_cert - CA CERT NAME: Self-Signed-CA [17/Aug/2021:21:35:06.326089210 -0400] - ERR - slapd_extract_cert - Unable to open "/tmp/slapd-standalone1/Self-Signed-CA.pem" for writing (-5950, 2). [17/Aug/2021:21:35:06.328862838 -0400] - WARN - Security Initialization - SSL alert: Sending pin request to SVRCore. You may need to run systemd-tty-ask-password-agent to provide the password if pin.txt does not exist. [17/Aug/2021:21:35:06.573336828 -0400] - INFO - slapd_extract_cert - SERVER CERT NAME: Server-Cert [17/Aug/2021:21:35:06.577090589 -0400] - WARN - Security Initialization - /tmp is not a private namespace. pem files not exported there [17/Aug/2021:21:35:06.581046061 -0400] - WARN - Security Initialization - /tmp is not a private namespace. pem files not exported there ldiffile: /var/lib/dirsrv/slapd-standalone1/ldif/export_plaintext.ldif [17/Aug/2021:21:35:15.628634051 -0400] - WARN - Security Initialization - /tmp is not a private namespace. pem files not exported there [17/Aug/2021:21:35:15.632887587 -0400] - INFO - slapd_extract_cert - CA CERT NAME: Self-Signed-CA [17/Aug/2021:21:35:15.635797623 -0400] - ERR - slapd_extract_cert - Unable to open "/tmp/slapd-standalone1/Self-Signed-CA.pem" for writing (-5950, 2). [17/Aug/2021:21:35:15.638323724 -0400] - WARN - Security Initialization - SSL alert: Sending pin request to SVRCore. You may need to run systemd-tty-ask-password-agent to provide the password if pin.txt does not exist. [17/Aug/2021:21:35:15.874685690 -0400] - INFO - slapd_extract_cert - SERVER CERT NAME: Server-Cert [17/Aug/2021:21:35:15.965378508 -0400] - WARN - Security Initialization - /tmp is not a private namespace. pem files not exported there [17/Aug/2021:21:35:15.969203418 -0400] - WARN - Security Initialization - /tmp is not a private namespace. pem files not exported there
-------------------------------Captured log call--------------------------------
INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:189 Export data as plain text INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:200 Check that the attribute is present in the exported file INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:201 Check that the plain text value of the encrypted attribute is present in the exported file INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:205 Delete the test user entry with encrypted data INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:208 Import data as plain text, which was exported previously INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:219 Check that the attribute is imported properly
Passed suites/attr_encryption/attr_encryption_test.py::test_attr_encryption_unindexed 6.78
------------------------------Captured stderr call------------------------------
ldiffile: /var/lib/dirsrv/slapd-standalone1/ldif/emp_num_ciphertext.ldif
-------------------------------Captured log call--------------------------------
INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:242 Export data as cipher text INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:253 Check that the attribute is present in the exported file INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:254 Check that the encrypted value of attribute is not present in the exported file
Passed suites/attr_encryption/attr_encryption_test.py::test_attr_encryption_multiple_backends 13.85
------------------------------Captured stderr call------------------------------
ldiffile: /var/lib/dirsrv/slapd-standalone1/ldif/export_db1.ldif ldiffile: /var/lib/dirsrv/slapd-standalone1/ldif/export_db2.ldif
-------------------------------Captured log call--------------------------------
INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:287 Add two test backends INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:307 Enables attribute encryption for telephoneNumber in test_backend1 INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:312 Enables attribute encryption for employeeNumber in test_backend2 INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:317 Add a test user with encrypted attributes in both backends INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:326 Export data as ciphertext from both backends INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:343 Check that the attribute is present in the exported file in db1 INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:344 Check that the encrypted value of attribute is not present in the exported file in db1 INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:350 Check that the attribute is present in the exported file in db2 INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:351 Check that the encrypted value of attribute is not present in the exported file in db2 INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:357 Delete test backends
Passed suites/attr_encryption/attr_encryption_test.py::test_attr_encryption_backends 14.61
------------------------------Captured stderr call------------------------------
ldiffile: /var/lib/dirsrv/slapd-standalone1/ldif/export_db1.ldif ldiffile: /var/lib/dirsrv/slapd-standalone1/ldif/export_db2.ldif
-------------------------------Captured log call--------------------------------
INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:386 Add two test backends INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:405 Enables attribute encryption for telephoneNumber in test_backend1 INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:410 Add a test user with telephoneNumber in both backends INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:419 Export data as ciphertext from both backends INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:436 Check that the attribute is present in the exported file in db1 INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:437 Check that the encrypted value of attribute is not present in the exported file in db1 INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:443 Check that the attribute is present in the exported file in db2 INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:444 Check that the value of attribute is also present in the exported file in db2 INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:450 Delete test backends
-----------------------------Captured log teardown------------------------------
INFO tests.suites.attr_encryption.attr_encryption_test:attr_encryption_test.py:53 Remove attribute encryption for various attributes
Passed suites/auth_token/basic_auth_test.py::test_ldap_auth_token_config 9.46
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Passed suites/auth_token/basic_auth_test.py::test_ldap_auth_token_nsuser 13.19
No log output captured.
Passed suites/auth_token/basic_auth_test.py::test_ldap_auth_token_disabled 13.11
No log output captured.
Passed suites/auth_token/basic_auth_test.py::test_ldap_auth_token_directory_manager 12.89
No log output captured.
Passed suites/auth_token/basic_auth_test.py::test_ldap_auth_token_anonymous 12.76
No log output captured.
Passed suites/automember_plugin/automember_mod_test.py::test_mods 29.37
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
-------------------------------Captured log call--------------------------------
INFO tests.suites.automember_plugin.automember_mod_test:automember_mod_test.py:135 Test PASSED
Passed suites/automember_plugin/automember_test.py::test_automemberscope 13.85
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Passed suites/automember_plugin/automember_test.py::test_automemberfilter 0.49
No log output captured.
Passed suites/automember_plugin/automember_test.py::test_adduser 0.13
No log output captured.
Passed suites/automember_plugin/automember_test.py::test_delete_default_group 4.88
No log output captured.
Passed suites/automember_plugin/automember_test.py::test_no_default_group 4.65
No log output captured.
Passed suites/automember_plugin/automember_test.py::test_delete_target_group 6.88
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_disable_the_plug_in 17.37
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for supplier1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 39001, 'ldap-secureport': 63701, 'server-id': 'supplier1', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.topologies:topologies.py:145 Creating replication topology.
Passed suites/automember_plugin/basic_test.py::test_custom_config_area 0.34
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_ability_to_control_behavior_of_modifiers_name 9.73
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_posixaccount_objectclass_automemberdefaultgroup 0.87
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_duplicated_member_attributes_added_when_the_entry_is_re_created 0.44
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_multi_valued_automemberdefaultgroup_for_hostgroups 0.16
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_plugin_creates_member_attributes_of_the_automemberdefaultgroup 0.17
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_multi_valued_automemberdefaultgroup_with_uniquemember 9.67
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_invalid_automembergroupingattr_member 0.86
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_valid_and_invalid_automembergroupingattr 0.49
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_add_regular_expressions_for_user_groups_and_check_for_member_attribute_after_adding_users 0.23
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_matching_gid_role_inclusive_regular_expression[autoMembers_22-5288-5289-Contractor-5291-5292-Contractors] 0.13
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_matching_gid_role_inclusive_regular_expression[autoMembers_21-1161-1162-Contractor-1162-1163-Contractors] 0.13
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_matching_gid_role_inclusive_regular_expression[autoMembers_20-1188-1189-CEO-1191-1192-Contractors] 0.40
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_matching_gid_role_inclusive_regular_expression[autoMembers_15-9288-9289-Manager-9291-9292-Managers] 0.14
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_matching_gid_role_inclusive_regular_expression[autoMembers_14-561-562-Manager-562-563-Managers] 0.16
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_matching_gid_role_inclusive_regular_expression[autoMembers_13-9788-9789-VPEngg-9392-9393-Managers] 0.19
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_gid_and_role_inclusive_exclusive_regular_expression[autoMembers_26-5788-5789-Intern-Contractors-SuffDef1-5] 0.16
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_gid_and_role_inclusive_exclusive_regular_expression[autoMembers_25-9788-9789-Employee-Contractors-Managers-1] 0.12
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_gid_and_role_inclusive_exclusive_regular_expression[autoMembers_24-1110-1111-Employee-Contractors-SuffDef1-5] 0.16
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_gid_and_role_inclusive_exclusive_regular_expression[autoMembers_23-2788-2789-Contractor-Contractors-SuffDef1-5] 0.16
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_gid_and_role_inclusive_exclusive_regular_expression[autoMembers_19-5788-5789-HRManager-Managers-SuffDef1-5] 0.20
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_gid_and_role_inclusive_exclusive_regular_expression[autoMembers_18-6788-6789-Junior-Managers-SuffDef1-5] 0.19
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_gid_and_role_inclusive_exclusive_regular_expression[autoMembers_17-562-563-Junior-Managers-SuffDef1-5] 0.16
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_gid_and_role_inclusive_exclusive_regular_expression[autoMembers_16-6788-6789-Manager-Managers-SuffDef1-5] 0.15
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_managers_contractors_exclusive_regex_rules_member_uid[autoMembers_32-555-720-Employee-SubDef1-SubDef3] 0.16
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_managers_contractors_exclusive_regex_rules_member_uid[autoMembers_31-515-200-Junior-SubDef1-SubDef5] 0.20
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_managers_contractors_exclusive_regex_rules_member_uid[autoMembers_30-999-400-Supervisor-SubDef1-SubDef2] 0.18
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_managers_contractors_exclusive_regex_rules_member_uid[autoMembers_28-555-3663-ContractHR-Contractors,cn=subsuffGroups-Managers,cn=subsuffGroups] 0.16
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_managers_inclusive_regex_rule[autoMembers_27-595-690-ContractHR-Managers-Contractors] 0.14
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_managers_inclusive_regex_rule[autoMembers_29-8195-2753-Employee-Contractors-Managers] 0.14
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_managers_inclusive_regex_rule[autoMembers_33-545-3333-Supervisor-Contractors-Managers] 0.14
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_managers_inclusive_regex_rule[autoMembers_34-8195-693-Temporary-Managers-Contractors] 0.15
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_reject_invalid_config_and_we_donot_deadlock_the_server 10.62
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_automemtask_re_build_task 16.60
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_automemtask_export_task 11.28
-------------------------------Captured log call--------------------------------
INFO lib389:tasks.py:1090 Automember Export Updates task (task-08172021_213921) completed successfully
Passed suites/automember_plugin/basic_test.py::test_automemtask_mapping 2.62
-------------------------------Captured log call--------------------------------
INFO lib389:tasks.py:1141 Automember Map Updates task (task-08172021_213924) completed successfully
Passed suites/automember_plugin/basic_test.py::test_automemtask_re_build 9.66
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_automemtask_export 13.78
-------------------------------Captured log call--------------------------------
INFO lib389:tasks.py:1090 Automember Export Updates task (task-08172021_213944) completed successfully
Passed suites/automember_plugin/basic_test.py::test_automemtask_run_re_build 23.93
No log output captured.
Passed suites/automember_plugin/basic_test.py::test_automemtask_run_export 18.05
-------------------------------Captured log call--------------------------------
INFO lib389:tasks.py:1090 Automember Export Updates task (task-08172021_214028) completed successfully
Passed suites/automember_plugin/configuration_test.py::test_configuration 17.47
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Passed suites/backups/backup_test.py::test_missing_backend 14.09
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Passed suites/backups/backup_test.py::test_db_home_dir_online_backup 8.95
-------------------------------Captured log call--------------------------------
ERROR lib389:tasks.py:649 Error: backup task backup_08172021_214106 exited with -1
Passed suites/betxns/betxn_test.py::test_betxt_7bit 14.38
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
-------------------------------Captured log call--------------------------------
INFO tests.suites.betxns.betxn_test:betxn_test.py:52 Running test_betxt_7bit... INFO tests.suites.betxns.betxn_test:betxn_test.py:78 test_betxt_7bit: PASSED
Passed suites/betxns/betxn_test.py::test_betxn_attr_uniqueness 4.66
-------------------------------Captured log call--------------------------------
INFO tests.suites.betxns.betxn_test:betxn_test.py:133 test_betxn_attr_uniqueness: PASSED
Passed suites/betxns/betxn_test.py::test_betxn_memberof 5.16
-------------------------------Captured log call--------------------------------
INFO tests.suites.betxns.betxn_test:betxn_test.py:179 test_betxn_memberof: PASSED
Passed suites/betxns/betxn_test.py::test_betxn_modrdn_memberof_cache_corruption 4.68
-------------------------------Captured log call--------------------------------
INFO tests.suites.betxns.betxn_test:betxn_test.py:233 test_betxn_modrdn_memberof: PASSED
Passed suites/betxns/betxn_test.py::test_ri_and_mep_cache_corruption 2.84
-------------------------------Captured log call--------------------------------
INFO tests.suites.betxns.betxn_test:betxn_test.py:357 Test PASSED
Passed suites/chaining_plugin/paged_search_test.py::test_chaining_paged_search 26.70
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created. INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone2 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38902, 'ldap-secureport': 63602, 'server-id': 'standalone2', 'suffix': 'dc=example,dc=com'} was created.
-------------------------------Captured log call--------------------------------
INFO Accounts:_mapped_object.py:1084 Getting page 0 INFO Accounts:_mapped_object.py:1084 Getting page 1 INFO Accounts:_mapped_object.py:1084 Getting page 2 INFO Accounts:_mapped_object.py:1084 Getting page 3
Passed suites/clu/clu_test.py::test_clu_pwdhash 9.86
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
-------------------------------Captured log call--------------------------------
INFO tests.suites.clu.clu_test:clu_test.py:40 Running test_clu_pwdhash... INFO tests.suites.clu.clu_test:clu_test.py:54 pwdhash generated: {SSHA}Rl5egw0F3IhzgY76jCp95wFLbXdYzCCz08597A== INFO tests.suites.clu.clu_test:clu_test.py:55 test_clu_pwdhash: PASSED
Passed suites/clu/clu_test.py::test_clu_pwdhash_mod 2.26
-------------------------------Captured log call--------------------------------
INFO tests.suites.clu.clu_test:clu_test.py:78 Running test_clu_pwdhash_mod... INFO tests.suites.clu.clu_test:clu_test.py:87 pwdhash generated: {SSHA256}GnlitONBLIE//F7dqksnYytgPL+mmBL4wR48Pi+W9xpHiAxKOxgMoA== INFO tests.suites.clu.clu_test:clu_test.py:88 returned the hashed string using the algorithm set in nsslapd-rootpwstoragescheme
Passed suites/clu/dbgen_test.py::test_dsconf_dbgen_users 17.07
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
-------------------------------Captured log call--------------------------------
INFO tests.suites.clu.dbgen_test:dbgen_test.py:119 Run ldifgen to create users ldif INFO tests.suites.clu.dbgen_test:dbgen.py:56 Generating LDIF with the following options: INFO tests.suites.clu.dbgen_test:dbgen.py:61 - suffix=dc=example,dc=com INFO tests.suites.clu.dbgen_test:dbgen.py:61 - parent=ou=people,dc=example,dc=com INFO tests.suites.clu.dbgen_test:dbgen.py:61 - number=1000 INFO tests.suites.clu.dbgen_test:dbgen.py:61 - rdn-cn=False INFO tests.suites.clu.dbgen_test:dbgen.py:61 - generic=True INFO tests.suites.clu.dbgen_test:dbgen.py:61 - start-idx=50 INFO tests.suites.clu.dbgen_test:dbgen.py:61 - localize=False INFO tests.suites.clu.dbgen_test:dbgen.py:62 - ldif-file=/var/lib/dirsrv/slapd-standalone1/ldif/created.ldif INFO tests.suites.clu.dbgen_test:dbgen.py:63 Writing LDIF ... INFO tests.suites.clu.dbgen_test:dbgen.py:196 Successfully created LDIF file: /var/lib/dirsrv/slapd-standalone1/ldif/created.ldif INFO tests.suites.clu.dbgen_test:dbgen_test.py:122 Check if file exists INFO tests.suites.clu.dbgen_test:dbgen_test.py:67 Check if content is present in output INFO tests.suites.clu.dbgen_test:dbgen_test.py:71 Reset log file for next test INFO tests.suites.clu.dbgen_test:dbgen_test.py:127 Get number of accounts before import INFO tests.suites.clu.dbgen_test:dbgen_test.py:48 Stopping the server and running offline import... INFO tests.suites.clu.dbgen_test:dbgen_test.py:133 Check that accounts are imported
-----------------------------Captured log teardown------------------------------
INFO tests.suites.clu.dbgen_test:dbgen_test.py:40 Delete files
Passed suites/clu/dbgen_test.py::test_dsconf_dbgen_groups 45.00
------------------------------Captured stderr call------------------------------
ldap_add: Already exists (68) ldap_add: Already exists (68) ldap_add: Already exists (68)
-------------------------------Captured log call--------------------------------
INFO tests.suites.clu.dbgen_test:dbgen_test.py:183 Run ldifgen to create group ldif INFO tests.suites.clu.dbgen_test:dbgen.py:56 Generating LDIF with the following options: INFO tests.suites.clu.dbgen_test:dbgen.py:61 - NAME=myGroup INFO tests.suites.clu.dbgen_test:dbgen.py:61 - parent=ou=groups,dc=example,dc=com INFO tests.suites.clu.dbgen_test:dbgen.py:61 - suffix=dc=example,dc=com INFO tests.suites.clu.dbgen_test:dbgen.py:61 - number=1 INFO tests.suites.clu.dbgen_test:dbgen.py:61 - num-members=1000 INFO tests.suites.clu.dbgen_test:dbgen.py:61 - create-members=True INFO tests.suites.clu.dbgen_test:dbgen.py:61 - member-attr=uniquemember INFO tests.suites.clu.dbgen_test:dbgen.py:61 - member-parent=ou=people,dc=example,dc=com INFO tests.suites.clu.dbgen_test:dbgen.py:62 - ldif-file=/var/lib/dirsrv/slapd-standalone1/ldif/created.ldif INFO tests.suites.clu.dbgen_test:dbgen.py:63 Writing LDIF ... INFO tests.suites.clu.dbgen_test:dbgen.py:250 Successfully created LDIF file: /var/lib/dirsrv/slapd-standalone1/ldif/created.ldif INFO tests.suites.clu.dbgen_test:dbgen_test.py:186 Check if file exists INFO tests.suites.clu.dbgen_test:dbgen_test.py:67 Check if content is present in output INFO tests.suites.clu.dbgen_test:dbgen_test.py:71 Reset log file for next test INFO tests.suites.clu.dbgen_test:dbgen_test.py:191 Get number of accounts before import INFO tests.suites.clu.dbgen_test:dbgen_test.py:57 Add entries from ldif file with ldapmodify INFO tests.suites.clu.dbgen_test:dbgen_test.py:200 Check that accounts are imported INFO tests.suites.clu.dbgen_test:dbgen_test.py:203 Check that group is imported
-----------------------------Captured log teardown------------------------------
INFO tests.suites.clu.dbgen_test:dbgen_test.py:40 Delete files
Passed suites/clu/dbgen_test.py::test_dsconf_dbgen_cos_classic 0.15
-------------------------------Captured log call--------------------------------
INFO tests.suites.clu.dbgen_test:dbgen_test.py:256 Run ldifgen to create COS definition ldif INFO tests.suites.clu.dbgen_test:dbgen.py:56 Generating LDIF with the following options: INFO tests.suites.clu.dbgen_test:dbgen.py:61 - type=classic INFO tests.suites.clu.dbgen_test:dbgen.py:61 - NAME=My_Postal_Def INFO tests.suites.clu.dbgen_test:dbgen.py:61 - parent=ou=cos definitions,dc=example,dc=com INFO tests.suites.clu.dbgen_test:dbgen.py:61 - create-parent=True INFO tests.suites.clu.dbgen_test:dbgen.py:61 - cos-specifier=businessCategory INFO tests.suites.clu.dbgen_test:dbgen.py:61 - cos-attr=['postalcode', 'telephonenumber'] INFO tests.suites.clu.dbgen_test:dbgen.py:61 - cos-template=cn=sales,cn=classicCoS,dc=example,dc=com INFO tests.suites.clu.dbgen_test:dbgen.py:62 - ldif-file=/var/lib/dirsrv/slapd-standalone1/ldif/created.ldif INFO tests.suites.clu.dbgen_test:dbgen.py:63 Writing LDIF ... INFO tests.suites.clu.dbgen_test:dbgen.py:304 Successfully created LDIF file: /var/lib/dirsrv/slapd-standalone1/ldif/created.ldif INFO tests.suites.clu.dbgen_test:dbgen_test.py:259 Check if file exists INFO tests.suites.clu.dbgen_test:dbgen_test.py:67 Check if content is present in output INFO tests.suites.clu.dbgen_test:dbgen_test.py:71 Reset log file for next test INFO tests.suites.clu.dbgen_test:dbgen_test.py:57 Add entries from ldif file with ldapmodify INFO tests.suites.clu.dbgen_test:dbgen_test.py:267 Check that COS definition is imported
-----------------------------Captured log teardown------------------------------
INFO tests.suites.clu.dbgen_test:dbgen_test.py:40 Delete files
Passed suites/clu/dbgen_test.py::test_dsconf_dbgen_cos_pointer 0.12
-------------------------------Captured log call--------------------------------
INFO tests.suites.clu.dbgen_test:dbgen_test.py:322 Run ldifgen to create COS definition ldif INFO tests.suites.clu.dbgen_test:dbgen.py:56 Generating LDIF with the following options: INFO tests.suites.clu.dbgen_test:dbgen.py:61 - type=pointer INFO tests.suites.clu.dbgen_test:dbgen.py:61 - NAME=My_Postal_Def_pointer INFO tests.suites.clu.dbgen_test:dbgen.py:61 - parent=ou=cos pointer definitions,dc=example,dc=com INFO tests.suites.clu.dbgen_test:dbgen.py:61 - create-parent=True INFO tests.suites.clu.dbgen_test:dbgen.py:61 - cos-attr=['postalcode', 'telephonenumber'] INFO tests.suites.clu.dbgen_test:dbgen.py:61 - cos-template=cn=sales,cn=pointerCoS,dc=example,dc=com INFO tests.suites.clu.dbgen_test:dbgen.py:62 - ldif-file=/var/lib/dirsrv/slapd-standalone1/ldif/created.ldif INFO tests.suites.clu.dbgen_test:dbgen.py:63 Writing LDIF ... INFO tests.suites.clu.dbgen_test:dbgen.py:304 Successfully created LDIF file: /var/lib/dirsrv/slapd-standalone1/ldif/created.ldif INFO tests.suites.clu.dbgen_test:dbgen_test.py:325 Check if file exists INFO tests.suites.clu.dbgen_test:dbgen_test.py:67 Check if content is present in output INFO tests.suites.clu.dbgen_test:dbgen_test.py:71 Reset log file for next test INFO tests.suites.clu.dbgen_test:dbgen_test.py:57 Add entries from ldif file with ldapmodify INFO tests.suites.clu.dbgen_test:dbgen_test.py:333 Check that COS definition is imported
-----------------------------Captured log teardown------------------------------
INFO tests.suites.clu.dbgen_test:dbgen_test.py:40 Delete files
Passed suites/clu/dbgen_test.py::test_dsconf_dbgen_cos_indirect 0.11
-------------------------------Captured log call--------------------------------
INFO tests.suites.clu.dbgen_test:dbgen_test.py:387 Run ldifgen to create COS definition ldif INFO tests.suites.clu.dbgen_test:dbgen.py:56 Generating LDIF with the following options: INFO tests.suites.clu.dbgen_test:dbgen.py:61 - type=indirect INFO tests.suites.clu.dbgen_test:dbgen.py:61 - NAME=My_Postal_Def_indirect INFO tests.suites.clu.dbgen_test:dbgen.py:61 - parent=ou=cos indirect definitions,dc=example,dc=com INFO tests.suites.clu.dbgen_test:dbgen.py:61 - create-parent=True INFO tests.suites.clu.dbgen_test:dbgen.py:61 - cos-specifier=businessCategory INFO tests.suites.clu.dbgen_test:dbgen.py:61 - cos-attr=['postalcode', 'telephonenumber'] INFO tests.suites.clu.dbgen_test:dbgen.py:62 - ldif-file=/var/lib/dirsrv/slapd-standalone1/ldif/created.ldif INFO tests.suites.clu.dbgen_test:dbgen.py:63 Writing LDIF ... INFO tests.suites.clu.dbgen_test:dbgen.py:304 Successfully created LDIF file: /var/lib/dirsrv/slapd-standalone1/ldif/created.ldif INFO tests.suites.clu.dbgen_test:dbgen_test.py:390 Check if file exists INFO tests.suites.clu.dbgen_test:dbgen_test.py:67 Check if content is present in output INFO tests.suites.clu.dbgen_test:dbgen_test.py:71 Reset log file for next test INFO tests.suites.clu.dbgen_test:dbgen_test.py:57 Add entries from ldif file with ldapmodify INFO tests.suites.clu.dbgen_test:dbgen_test.py:398 Check that COS definition is imported
-----------------------------Captured log teardown------------------------------
INFO tests.suites.clu.dbgen_test:dbgen_test.py:40 Delete files
Passed suites/clu/dbgen_test.py::test_dsconf_dbgen_cos_template 0.17
-------------------------------Captured log call--------------------------------
INFO tests.suites.clu.dbgen_test:dbgen_test.py:449 Run ldifgen to create COS template ldif INFO tests.suites.clu.dbgen_test:dbgen.py:56 Generating LDIF with the following options: INFO tests.suites.clu.dbgen_test:dbgen.py:61 - NAME=My_Template INFO tests.suites.clu.dbgen_test:dbgen.py:61 - parent=ou=cos templates,dc=example,dc=com INFO tests.suites.clu.dbgen_test:dbgen.py:61 - create-parent=True INFO tests.suites.clu.dbgen_test:dbgen.py:61 - cos-priority=1 INFO tests.suites.clu.dbgen_test:dbgen.py:61 - cos-attr-val=postalcode:12345 INFO tests.suites.clu.dbgen_test:dbgen.py:62 - ldif-file=/var/lib/dirsrv/slapd-standalone1/ldif/created.ldif INFO tests.suites.clu.dbgen_test:dbgen.py:63 Writing LDIF ... INFO tests.suites.clu.dbgen_test:dbgen.py:341 Successfully created LDIF file: /var/lib/dirsrv/slapd-standalone1/ldif/created.ldif INFO tests.suites.clu.dbgen_test:dbgen_test.py:452 Check if file exists INFO tests.suites.clu.dbgen_test:dbgen_test.py:67 Check if content is present in output INFO tests.suites.clu.dbgen_test:dbgen_test.py:71 Reset log file for next test INFO tests.suites.clu.dbgen_test:dbgen_test.py:57 Add entries from ldif file with ldapmodify INFO tests.suites.clu.dbgen_test:dbgen_test.py:460 Check that COS template is imported
-----------------------------Captured log teardown------------------------------
INFO tests.suites.clu.dbgen_test:dbgen_test.py:40 Delete files
Passed suites/clu/dbgen_test.py::test_dsconf_dbgen_managed_role 0.11
-------------------------------Captured log call--------------------------------
INFO tests.suites.clu.dbgen_test:dbgen_test.py:511 Run ldifgen to create managed role ldif INFO tests.suites.clu.dbgen_test:dbgen.py:56 Generating LDIF with the following options: INFO tests.suites.clu.dbgen_test:dbgen.py:61 - NAME=My_Managed_Role INFO tests.suites.clu.dbgen_test:dbgen.py:61 - parent=ou=managed roles,dc=example,dc=com INFO tests.suites.clu.dbgen_test:dbgen.py:61 - create-parent=True INFO tests.suites.clu.dbgen_test:dbgen.py:61 - type=managed INFO tests.suites.clu.dbgen_test:dbgen.py:62 - ldif-file=/var/lib/dirsrv/slapd-standalone1/ldif/created.ldif INFO tests.suites.clu.dbgen_test:dbgen.py:63 Writing LDIF ... INFO tests.suites.clu.dbgen_test:dbgen.py:391 Successfully created LDIF file: /var/lib/dirsrv/slapd-standalone1/ldif/created.ldif INFO tests.suites.clu.dbgen_test:dbgen_test.py:514 Check if file exists INFO tests.suites.clu.dbgen_test:dbgen_test.py:67 Check if content is present in output INFO tests.suites.clu.dbgen_test:dbgen_test.py:71 Reset log file for next test INFO tests.suites.clu.dbgen_test:dbgen_test.py:57 Add entries from ldif file with ldapmodify INFO tests.suites.clu.dbgen_test:dbgen_test.py:522 Check that managed role is imported
-----------------------------Captured log teardown------------------------------
INFO tests.suites.clu.dbgen_test:dbgen_test.py:40 Delete files
Passed suites/clu/dbgen_test.py::test_dsconf_dbgen_filtered_role 0.12
-------------------------------Captured log call--------------------------------
INFO tests.suites.clu.dbgen_test:dbgen_test.py:571 Run ldifgen to create filtered role ldif INFO tests.suites.clu.dbgen_test:dbgen.py:56 Generating LDIF with the following options: INFO tests.suites.clu.dbgen_test:dbgen.py:61 - NAME=My_Filtered_Role INFO tests.suites.clu.dbgen_test:dbgen.py:61 - parent=ou=filtered roles,dc=example,dc=com INFO tests.suites.clu.dbgen_test:dbgen.py:61 - create-parent=True INFO tests.suites.clu.dbgen_test:dbgen.py:61 - type=filtered INFO tests.suites.clu.dbgen_test:dbgen.py:61 - filter="objectclass=posixAccount" INFO tests.suites.clu.dbgen_test:dbgen.py:62 - ldif-file=/var/lib/dirsrv/slapd-standalone1/ldif/created.ldif INFO tests.suites.clu.dbgen_test:dbgen.py:63 Writing LDIF ... INFO tests.suites.clu.dbgen_test:dbgen.py:391 Successfully created LDIF file: /var/lib/dirsrv/slapd-standalone1/ldif/created.ldif INFO tests.suites.clu.dbgen_test:dbgen_test.py:574 Check if file exists INFO tests.suites.clu.dbgen_test:dbgen_test.py:67 Check if content is present in output INFO tests.suites.clu.dbgen_test:dbgen_test.py:71 Reset log file for next test INFO tests.suites.clu.dbgen_test:dbgen_test.py:57 Add entries from ldif file with ldapmodify INFO tests.suites.clu.dbgen_test:dbgen_test.py:582 Check that filtered role is imported
-----------------------------Captured log teardown------------------------------
INFO tests.suites.clu.dbgen_test:dbgen_test.py:40 Delete files
Passed suites/clu/dbgen_test.py::test_dsconf_dbgen_nested_role 0.13
-------------------------------Captured log call--------------------------------
INFO tests.suites.clu.dbgen_test:dbgen_test.py:632 Run ldifgen to create nested role ldif INFO tests.suites.clu.dbgen_test:dbgen.py:56 Generating LDIF with the following options: INFO tests.suites.clu.dbgen_test:dbgen.py:61 - NAME=My_Nested_Role INFO tests.suites.clu.dbgen_test:dbgen.py:61 - parent=ou=nested roles,dc=example,dc=com INFO tests.suites.clu.dbgen_test:dbgen.py:61 - create-parent=True INFO tests.suites.clu.dbgen_test:dbgen.py:61 - type=nested INFO tests.suites.clu.dbgen_test:dbgen.py:61 - role-dn=['cn=some_role,ou=roles,dc=example,dc=com'] INFO tests.suites.clu.dbgen_test:dbgen.py:62 - ldif-file=/var/lib/dirsrv/slapd-standalone1/ldif/created.ldif INFO tests.suites.clu.dbgen_test:dbgen.py:63 Writing LDIF ... INFO tests.suites.clu.dbgen_test:dbgen.py:391 Successfully created LDIF file: /var/lib/dirsrv/slapd-standalone1/ldif/created.ldif INFO tests.suites.clu.dbgen_test:dbgen_test.py:635 Check if file exists INFO tests.suites.clu.dbgen_test:dbgen_test.py:67 Check if content is present in output INFO tests.suites.clu.dbgen_test:dbgen_test.py:71 Reset log file for next test INFO tests.suites.clu.dbgen_test:dbgen_test.py:57 Add entries from ldif file with ldapmodify INFO tests.suites.clu.dbgen_test:dbgen_test.py:643 Check that nested role is imported
-----------------------------Captured log teardown------------------------------
INFO tests.suites.clu.dbgen_test:dbgen_test.py:40 Delete files
Passed suites/clu/dbgen_test.py::test_dsconf_dbgen_mod_ldif_mixed 48.82
------------------------------Captured stderr call------------------------------
ldap_modify: Operation not allowed on RDN (67) ldap_modify: Operation not allowed on RDN (67) ldap_modify: Operation not allowed on RDN (67) ldap_modify: Operation not allowed on RDN (67) ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldap_rename: Invalid DN syntax (34) additional info: invalid RDN ldapmodify: extra lines at end (line 43453, entry "uid=user0999,dc=example,dc=com")
-------------------------------Captured log call--------------------------------
INFO tests.suites.clu.dbgen_test:dbgen_test.py:702 Run ldifgen to create modification ldif INFO tests.suites.clu.dbgen_test:dbgen.py:56 Generating LDIF with the following options: INFO tests.suites.clu.dbgen_test:dbgen.py:61 - parent=dc=example,dc=com INFO tests.suites.clu.dbgen_test:dbgen.py:61 - create-users=True INFO tests.suites.clu.dbgen_test:dbgen.py:61 - delete-users=True INFO tests.suites.clu.dbgen_test:dbgen.py:61 - create-parent=False INFO tests.suites.clu.dbgen_test:dbgen.py:61 - num-users=1000 INFO tests.suites.clu.dbgen_test:dbgen.py:61 - add-users=100 INFO tests.suites.clu.dbgen_test:dbgen.py:61 - del-users=999 INFO tests.suites.clu.dbgen_test:dbgen.py:61 - modrdn-users=100 INFO tests.suites.clu.dbgen_test:dbgen.py:61 - mod-users=10 INFO tests.suites.clu.dbgen_test:dbgen.py:61 - mod-attrs=['cn', 'uid', 'sn'] INFO tests.suites.clu.dbgen_test:dbgen.py:61 - randomize=False INFO tests.suites.clu.dbgen_test:dbgen.py:62 - ldif-file=/var/lib/dirsrv/slapd-standalone1/ldif/created.ldif INFO tests.suites.clu.dbgen_test:dbgen.py:63 Writing LDIF ... INFO tests.suites.clu.dbgen_test:dbgen.py:467 Successfully created LDIF file: /var/lib/dirsrv/slapd-standalone1/ldif/created.ldif INFO tests.suites.clu.dbgen_test:dbgen_test.py:705 Check if file exists INFO tests.suites.clu.dbgen_test:dbgen_test.py:67 Check if content is present in output INFO tests.suites.clu.dbgen_test:dbgen_test.py:71 Reset log file for next test INFO tests.suites.clu.dbgen_test:dbgen_test.py:710 Get number of accounts before import INFO tests.suites.clu.dbgen_test:dbgen_test.py:57 Add entries from ldif file with ldapmodify INFO tests.suites.clu.dbgen_test:dbgen_test.py:719 Check that some accounts are imported
-----------------------------Captured log teardown------------------------------
INFO tests.suites.clu.dbgen_test:dbgen_test.py:40 Delete files
Passed suites/clu/dbgen_test.py::test_dsconf_dbgen_nested_ldif 33.74
------------------------------Captured stderr call------------------------------
ldap_add: Already exists (68)
-------------------------------Captured log call--------------------------------
INFO tests.suites.clu.dbgen_test:dbgen_test.py:759 Run ldifgen to create nested ldif INFO tests.suites.clu.dbgen_test:dbgen.py:56 Generating LDIF with the following options: INFO tests.suites.clu.dbgen_test:dbgen.py:61 - suffix=dc=example,dc=com INFO tests.suites.clu.dbgen_test:dbgen.py:61 - node-limit=100 INFO tests.suites.clu.dbgen_test:dbgen.py:61 - num-users=600 INFO tests.suites.clu.dbgen_test:dbgen.py:62 - ldif-file=/var/lib/dirsrv/slapd-standalone1/ldif/created.ldif INFO tests.suites.clu.dbgen_test:dbgen.py:63 Writing LDIF ... INFO tests.suites.clu.dbgen_test:dbgen.py:500 Successfully created nested LDIF file (/var/lib/dirsrv/slapd-standalone1/ldif/created.ldif) containing 6 nodes/subtrees INFO tests.suites.clu.dbgen_test:dbgen_test.py:762 Check if file exists INFO tests.suites.clu.dbgen_test:dbgen_test.py:67 Check if content is present in output INFO tests.suites.clu.dbgen_test:dbgen_test.py:71 Reset log file for next test INFO tests.suites.clu.dbgen_test:dbgen_test.py:767 Get number of accounts before import INFO tests.suites.clu.dbgen_test:dbgen_test.py:57 Add entries from ldif file with ldapmodify INFO tests.suites.clu.dbgen_test:dbgen_test.py:779 Check that accounts are imported
-----------------------------Captured log teardown------------------------------
INFO tests.suites.clu.dbgen_test:dbgen_test.py:40 Delete files
Passed suites/clu/dbmon_test.py::test_dsconf_dbmon 11.94
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
-------------------------------Captured log call--------------------------------
INFO tests.suites.clu.dbmon_test:dbmon_test.py:164 Sanity check for syntax INFO LogCapture:monitor.py:247 DB Monitor Report: 2021-08-17 21:44:57 INFO LogCapture:monitor.py:248 -------------------------------------------------------- INFO LogCapture:monitor.py:249 Database Cache: INFO LogCapture:monitor.py:250 - Cache Hit Ratio: 100% INFO LogCapture:monitor.py:251 - Free Space: 486.72 MB INFO LogCapture:monitor.py:252 - Free Percentage: 100.0% INFO LogCapture:monitor.py:253 - RO Page Drops: 0 INFO LogCapture:monitor.py:254 - Pages In: 0 INFO LogCapture:monitor.py:255 - Pages Out: 0 INFO LogCapture:monitor.py:256 INFO LogCapture:monitor.py:257 Normalized DN Cache: INFO LogCapture:monitor.py:258 - Cache Hit Ratio: 0% INFO LogCapture:monitor.py:259 - Free Space: 19.98 MB INFO LogCapture:monitor.py:260 - Free Percentage: 99.9% INFO LogCapture:monitor.py:261 - DN Count: 119 INFO LogCapture:monitor.py:262 - Evictions: 0 INFO LogCapture:monitor.py:263 INFO LogCapture:monitor.py:264 Backends: INFO LogCapture:monitor.py:266 - dc=example,dc=com (userRoot): INFO LogCapture:monitor.py:267 - Entry Cache Hit Ratio: 40% INFO LogCapture:monitor.py:268 - Entry Cache Count: 5 INFO LogCapture:monitor.py:269 - Entry Cache Free Space: 1.31 GB INFO LogCapture:monitor.py:270 - Entry Cache Free Percentage: 100.0% INFO LogCapture:monitor.py:271 - Entry Cache Average Size: 3.65 KB INFO LogCapture:monitor.py:272 - DN Cache Hit Ratio: 0% INFO LogCapture:monitor.py:273 - DN Cache Count: 5 INFO LogCapture:monitor.py:274 - DN Cache Free Space: 192.0 MB INFO LogCapture:monitor.py:275 - DN Cache Free Percentage: 100.0% INFO LogCapture:monitor.py:276 - DN Cache Average Size: 67.0 B INFO LogCapture:monitor.py:286 INFO tests.suites.clu.dbmon_test:dbmon_test.py:133 Clear the log INFO tests.suites.clu.dbmon_test:dbmon_test.py:171 Sanity check for --indexes output INFO LogCapture:monitor.py:247 DB Monitor Report: 2021-08-17 21:44:57 INFO LogCapture:monitor.py:248 -------------------------------------------------------- INFO LogCapture:monitor.py:249 Database Cache: INFO LogCapture:monitor.py:250 - Cache Hit Ratio: 100% INFO LogCapture:monitor.py:251 - Free Space: 486.72 MB INFO LogCapture:monitor.py:252 - Free Percentage: 100.0% INFO LogCapture:monitor.py:253 - RO Page Drops: 0 INFO LogCapture:monitor.py:254 - Pages In: 0 INFO LogCapture:monitor.py:255 - Pages Out: 0 INFO LogCapture:monitor.py:256 INFO LogCapture:monitor.py:257 Normalized DN Cache: INFO LogCapture:monitor.py:258 - Cache Hit Ratio: 0% INFO LogCapture:monitor.py:259 - Free Space: 19.98 MB INFO LogCapture:monitor.py:260 - Free Percentage: 99.9% INFO LogCapture:monitor.py:261 - DN Count: 119 INFO LogCapture:monitor.py:262 - Evictions: 0 INFO LogCapture:monitor.py:263 INFO LogCapture:monitor.py:264 Backends: INFO LogCapture:monitor.py:266 - dc=example,dc=com (userRoot): INFO LogCapture:monitor.py:267 - Entry Cache Hit Ratio: 40% INFO LogCapture:monitor.py:268 - Entry Cache Count: 5 INFO LogCapture:monitor.py:269 - Entry Cache Free Space: 1.31 GB INFO LogCapture:monitor.py:270 - Entry Cache Free Percentage: 100.0% INFO LogCapture:monitor.py:271 - Entry Cache Average Size: 3.65 KB INFO LogCapture:monitor.py:272 - DN Cache Hit Ratio: 0% INFO LogCapture:monitor.py:273 - DN Cache Count: 5 INFO LogCapture:monitor.py:274 - DN Cache Free Space: 192.0 MB INFO LogCapture:monitor.py:275 - DN Cache Free Percentage: 100.0% INFO LogCapture:monitor.py:276 - DN Cache Average Size: 67.0 B INFO LogCapture:monitor.py:278 - Indexes: INFO LogCapture:monitor.py:280 - Index: nsuniqueid.db INFO LogCapture:monitor.py:281 - Cache Hit: 0 INFO LogCapture:monitor.py:282 - Cache Miss: 0 INFO LogCapture:monitor.py:283 - Page In: 0 INFO LogCapture:monitor.py:284 - Page Out: 0 INFO LogCapture:monitor.py:285 INFO LogCapture:monitor.py:280 - Index: cn.db INFO LogCapture:monitor.py:281 - Cache Hit: 0 INFO LogCapture:monitor.py:282 - Cache Miss: 0 INFO LogCapture:monitor.py:283 - Page In: 0 INFO LogCapture:monitor.py:284 - Page Out: 0 INFO LogCapture:monitor.py:285 INFO LogCapture:monitor.py:280 - Index: parentid.db INFO LogCapture:monitor.py:281 - Cache Hit: 0 INFO LogCapture:monitor.py:282 - Cache Miss: 0 INFO LogCapture:monitor.py:283 - Page In: 0 INFO LogCapture:monitor.py:284 - Page Out: 0 INFO LogCapture:monitor.py:285 INFO LogCapture:monitor.py:280 - Index: ancestorid.db INFO LogCapture:monitor.py:281 - Cache Hit: 0 INFO LogCapture:monitor.py:282 - Cache Miss: 0 INFO LogCapture:monitor.py:283 - Page In: 0 INFO LogCapture:monitor.py:284 - Page Out: 0 INFO LogCapture:monitor.py:285 INFO LogCapture:monitor.py:280 - Index: entryrdn.db INFO LogCapture:monitor.py:281 - Cache Hit: 16 INFO LogCapture:monitor.py:282 - Cache Miss: 0 INFO LogCapture:monitor.py:283 - Page In: 0 INFO LogCapture:monitor.py:284 - Page Out: 0 INFO LogCapture:monitor.py:285 INFO LogCapture:monitor.py:280 - Index: id2entry.db INFO LogCapture:monitor.py:281 - Cache Hit: 8 INFO LogCapture:monitor.py:282 - Cache Miss: 0 INFO LogCapture:monitor.py:283 - Page In: 0 INFO LogCapture:monitor.py:284 - Page Out: 0 INFO LogCapture:monitor.py:285 INFO LogCapture:monitor.py:280 - Index: numsubordinates.db INFO LogCapture:monitor.py:281 - Cache Hit: 0 INFO LogCapture:monitor.py:282 - Cache Miss: 0 INFO LogCapture:monitor.py:283 - Page In: 0 INFO LogCapture:monitor.py:284 - Page Out: 0 INFO LogCapture:monitor.py:285 INFO LogCapture:monitor.py:280 - Index: uid.db INFO LogCapture:monitor.py:281 - Cache Hit: 0 INFO LogCapture:monitor.py:282 - Cache Miss: 0 INFO LogCapture:monitor.py:283 - Page In: 0 INFO LogCapture:monitor.py:284 - Page Out: 0 INFO LogCapture:monitor.py:285 INFO LogCapture:monitor.py:280 - Index: objectclass.db INFO LogCapture:monitor.py:281 - Cache Hit: 14 INFO LogCapture:monitor.py:282 - Cache Miss: 0 INFO LogCapture:monitor.py:283 - Page In: 0 INFO LogCapture:monitor.py:284 - Page Out: 0 INFO LogCapture:monitor.py:285 INFO LogCapture:monitor.py:280 - Index: aci.db INFO LogCapture:monitor.py:281 - Cache Hit: 3 INFO LogCapture:monitor.py:282 - Cache Miss: 0 INFO LogCapture:monitor.py:283 - Page In: 0 INFO LogCapture:monitor.py:284 - Page Out: 0 INFO LogCapture:monitor.py:285 INFO LogCapture:monitor.py:286 INFO tests.suites.clu.dbmon_test:dbmon_test.py:133 Clear the log INFO tests.suites.clu.dbmon_test:dbmon_test.py:179 Sanity check for --json output INFO LogCapture:monitor.py:245 { "date": "2021-08-17 21:44:58", "dbcache": { "hit_ratio": "100", "free": "486.72 MB", "free_percentage": "100.0", "roevicts": "0", "pagein": "0", "pageout": "0" }, "ndncache": { "hit_ratio": "0", "free": "19.98 MB", "free_percentage": "99.9", "count": "119", "evictions": "0" }, "backends": { "userRoot": { "suffix": "dc=example,dc=com", "entry_cache_count": "5", "entry_cache_free": "1.31 GB", "entry_cache_free_percentage": "100.0", "entry_cache_size": "3.65 KB", "entry_cache_hit_ratio": "40", "dn_cache_count": "5", "dn_cache_free": "192.0 MB", "dn_cache_free_percentage": "100.0", "dn_cache_size": "67.0 B", "dn_cache_hit_ratio": "0", "indexes": [ { "name": "nsuniqueid.db", "cachehit": "0", "cachemiss": "0", "pagein": "0", "pageout": "0" }, { "name": "cn.db", "cachehit": "0", "cachemiss": "0", "pagein": "0", "pageout": "0" }, { "name": "parentid.db", "cachehit": "0", "cachemiss": "0", "pagein": "0", "pageout": "0" }, { "name": "ancestorid.db", "cachehit": "0", "cachemiss": "0", "pagein": "0", "pageout": "0" }, { "name": "entryrdn.db", "cachehit": "16", "cachemiss": "0", "pagein": "0", "pageout": "0" }, { "name": "id2entry.db", "cachehit": "8", "cachemiss": "0", "pagein": "0", "pageout": "0" }, { "name": "numsubordinates.db", "cachehit": "0", "cachemiss": "0", "pagein": "0", "pageout": "0" }, { "name": "uid.db", "cachehit": "0", "cachemiss": "0", "pagein": "0", "pageout": "0" }, { "name": "objectclass.db", "cachehit": "14", "cachemiss": "0", "pagein": "0", "pageout": "0" }, { "name": "aci.db", "cachehit": "3", "cachemiss": "0", "pagein": "0", "pageout": "0" } ] } } } INFO tests.suites.clu.dbmon_test:dbmon_test.py:133 Clear the log
Passed suites/clu/dbverify_test.py::test_dsctl_dbverify 12.27
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
------------------------------Captured stderr call------------------------------
[17/Aug/2021:21:45:11.719762738 -0400] - INFO - ldbm_instance_config_cachememsize_set - force a minimal value 512000
-------------------------------Captured log call--------------------------------
INFO tests.suites.clu.dbverify_test:dbverify_test.py:63 Run dbverify INFO tests.suites.clu.dbverify_test:dbtasks.py:110 dbverify successful INFO tests.suites.clu.dbverify_test:dbverify_test.py:67 Check dbverify was successful
-----------------------------Captured log teardown------------------------------
INFO tests.suites.clu.dbverify_test:dbverify_test.py:33 Delete log file
Passed suites/clu/dsctl_acceptance_test.py::test_custom_path 22.09
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Passed suites/clu/dsctl_tls_test.py::test_tls_command_returns_error_text 12.09
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
Passed suites/clu/dsidm_account_test.py::test_dsidm_account_entry_status_with_lock 11.82
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created. INFO tests.suites.clu.dsidm_account_test:dsidm_account_test.py:32 Create test user
-------------------------------Captured log call--------------------------------
INFO tests.suites.clu.dsidm_account_test:dsidm_account_test.py:85 Test dsidm account entry-status INFO LogCapture:account.py:56 Entry DN: uid=test_user_1000,ou=people,dc=example,dc=com INFO LogCapture:account.py:62 Entry Creation Date: 20210818014559Z (2021-08-18 01:45:59) INFO LogCapture:account.py:62 Entry Modification Date: 20210818014559Z (2021-08-18 01:45:59) INFO LogCapture:account.py:63 Entry State: activated INFO tests.suites.clu.dsidm_account_test:dsidm_account_test.py:89 Test dsidm account lock INFO LogCapture:account.py:109 Entry uid=test_user_1000,ou=people,dc=example,dc=com is locked INFO tests.suites.clu.dsidm_account_test:dsidm_account_test.py:93 Test dsidm account entry-status with locked account INFO LogCapture:account.py:56 Entry DN: uid=test_user_1000,ou=people,dc=example,dc=com INFO LogCapture:account.py:62 Entry Creation Date: 20210818014559Z (2021-08-18 01:45:59) INFO LogCapture:account.py:62 Entry Modification Date: 20210818014600Z (2021-08-18 01:46:00) INFO LogCapture:account.py:63 Entry State: directly locked through nsAccountLock INFO tests.suites.clu.dsidm_account_test:dsidm_account_test.py:97 Test dsidm account unlock INFO LogCapture:account.py:117 Entry uid=test_user_1000,ou=people,dc=example,dc=com is unlocked INFO tests.suites.clu.dsidm_account_test:dsidm_account_test.py:101 Test dsidm account entry-status with unlocked account INFO LogCapture:account.py:56 Entry DN: uid=test_user_1000,ou=people,dc=example,dc=com INFO LogCapture:account.py:62 Entry Creation Date: 20210818014559Z (2021-08-18 01:45:59) INFO LogCapture:account.py:62 Entry Modification Date: 20210818014600Z (2021-08-18 01:46:00) INFO LogCapture:account.py:63 Entry State: activated
-----------------------------Captured log teardown------------------------------
INFO tests.suites.clu.dsidm_account_test:dsidm_account_test.py:37 Delete test user
Passed suites/clu/dsidm_config_test.py::test_dsidm_config_sssd 15.48
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created.
------------------------------Captured stdout call------------------------------
# # sssd.conf # Generated by 389 Directory Server - dsidm # # For more details see man sssd.conf and man sssd-ldap # Be sure to review the content of this file to ensure it is secure and correct # in your environment. [domain/ldap] # Uncomment this for more verbose logging. # debug_level=3 # Cache hashes of user authentication for offline auth. cache_credentials = True id_provider = ldap auth_provider = ldap access_provider = ldap chpass_provider = ldap ldap_schema = rfc2307 ldap_search_base = dc=example,dc=com ldap_uri = ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:38901 # If you have DNS SRV records, you can use the following instead. This derives # from your ldap_search_base. # ldap_uri = _srv_ ldap_tls_reqcert = demand # To use cacert dir, place *.crt files in this path then run: # /usr/bin/openssl rehash /etc/openldap/certs # or (for older versions of openssl) # /usr/bin/c_rehash /etc/openldap/certs ldap_tls_cacertdir = /etc/openldap/certs # Path to the cacert # ldap_tls_cacert = /etc/openldap/certs/ca.crt # Only users who match this filter can login and authorise to this machine. Note # that users who do NOT match, will still have their uid/gid resolve, but they # can't login. # ldap_access_filter = (memberOf=<dn>) enumerate = false access_provider = ldap ldap_user_member_of = memberof ldap_user_gecos = cn ldap_user_uuid = nsUniqueId ldap_group_uuid = nsUniqueId # This is really important as it allows SSSD to respect nsAccountLock ldap_account_expire_policy = rhds ldap_access_order = filter, expire # Setup for ssh keys # Inside /etc/ssh/sshd_config add the lines: # AuthorizedKeysCommand /usr/bin/sss_ssh_authorizedkeys # AuthorizedKeysCommandUser nobody # You can test with the command: sss_ssh_authorizedkeys <username> ldap_user_ssh_public_key = nsSshPublicKey # This prevents an issue where the Directory is recursively walked on group # and user look ups. It makes the client faster and more responsive in almost # every scenario. ignore_group_members = False [sssd] services = nss, pam, ssh, sudo config_file_version = 2 domains = ldap [nss] homedir_substring = /home # # sssd.conf # Generated by 389 Directory Server - dsidm # # For more details see man sssd.conf and man sssd-ldap # Be sure to review the content of this file to ensure it is secure and correct # in your environment. [domain/ldap] # Uncomment this for more verbose logging. # debug_level=3 # Cache hashes of user authentication for offline auth. cache_credentials = True id_provider = ldap auth_provider = ldap access_provider = ldap chpass_provider = ldap ldap_schema = rfc2307bis ldap_search_base = dc=example,dc=com ldap_uri = ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:38901 # If you have DNS SRV records, you can use the following instead. This derives # from your ldap_search_base. # ldap_uri = _srv_ ldap_tls_reqcert = demand # To use cacert dir, place *.crt files in this path then run: # /usr/bin/openssl rehash /etc/openldap/certs # or (for older versions of openssl) # /usr/bin/c_rehash /etc/openldap/certs ldap_tls_cacertdir = /etc/openldap/certs # Path to the cacert # ldap_tls_cacert = /etc/openldap/certs/ca.crt # Only users who match this filter can login and authorise to this machine. Note # that users who do NOT match, will still have their uid/gid resolve, but they # can't login. ldap_access_filter = (memberOf=cn=new_group,ou=groups,dc=example,dc=com) enumerate = false access_provider = ldap ldap_user_member_of = memberof ldap_user_gecos = cn ldap_user_uuid = nsUniqueId ldap_group_uuid = nsUniqueId # This is really important as it allows SSSD to respect nsAccountLock ldap_account_expire_policy = rhds ldap_access_order = filter, expire # Setup for ssh keys # Inside /etc/ssh/sshd_config add the lines: # AuthorizedKeysCommand /usr/bin/sss_ssh_authorizedkeys # AuthorizedKeysCommandUser nobody # You can test with the command: sss_ssh_authorizedkeys <username> ldap_user_ssh_public_key = nsSshPublicKey # This prevents an issue where the Directory is recursively walked on group # and user look ups. It makes the client faster and more responsive in almost # every scenario. ignore_group_members = False [sssd] services = nss, pam, ssh, sudo config_file_version = 2 domains = ldap [nss] homedir_substring = /home
-------------------------------Captured log call--------------------------------
INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:101 Create sssd.conf content DEBUG tests.suites.clu.dsidm_config_test:client_config.py:114 # # sssd.conf # Generated by 389 Directory Server - dsidm # # For more details see man sssd.conf and man sssd-ldap # Be sure to review the content of this file to ensure it is secure and correct # in your environment. [domain/ldap] # Uncomment this for more verbose logging. # debug_level=3 # Cache hashes of user authentication for offline auth. cache_credentials = True id_provider = ldap auth_provider = ldap access_provider = ldap chpass_provider = ldap ldap_schema = rfc2307 ldap_search_base = dc=example,dc=com ldap_uri = ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:38901 # If you have DNS SRV records, you can use the following instead. This derives # from your ldap_search_base. # ldap_uri = _srv_ ldap_tls_reqcert = demand # To use cacert dir, place *.crt files in this path then run: # /usr/bin/openssl rehash /etc/openldap/certs # or (for older versions of openssl) # /usr/bin/c_rehash /etc/openldap/certs ldap_tls_cacertdir = /etc/openldap/certs # Path to the cacert # ldap_tls_cacert = /etc/openldap/certs/ca.crt # Only users who match this filter can login and authorise to this machine. Note # that users who do NOT match, will still have their uid/gid resolve, but they # can't login. # ldap_access_filter = (memberOf=<dn>) enumerate = false access_provider = ldap ldap_user_member_of = memberof ldap_user_gecos = cn ldap_user_uuid = nsUniqueId ldap_group_uuid = nsUniqueId # This is really important as it allows SSSD to respect nsAccountLock ldap_account_expire_policy = rhds ldap_access_order = filter, expire # Setup for ssh keys # Inside /etc/ssh/sshd_config add the lines: # AuthorizedKeysCommand /usr/bin/sss_ssh_authorizedkeys # AuthorizedKeysCommandUser nobody # You can test with the command: sss_ssh_authorizedkeys <username> ldap_user_ssh_public_key = nsSshPublicKey # This prevents an issue where the Directory is recursively walked on group # and user look ups. It makes the client faster and more responsive in almost # every scenario. ignore_group_members = False [sssd] services = nss, pam, ssh, sudo config_file_version = 2 domains = ldap [nss] homedir_substring = /home INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:104 Check if config creation was successful INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:51 Check if content is present in output INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:56 Check if value is present in output INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:59 Reset log file for next test INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:107 Now we test allowed_group argument INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:108 Enable MemberOf plugin INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:113 Create test group INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:118 Create sssd.conf content with allowed group DEBUG tests.suites.clu.dsidm_config_test:client_config.py:114 # # sssd.conf # Generated by 389 Directory Server - dsidm # # For more details see man sssd.conf and man sssd-ldap # Be sure to review the content of this file to ensure it is secure and correct # in your environment. [domain/ldap] # Uncomment this for more verbose logging. # debug_level=3 # Cache hashes of user authentication for offline auth. cache_credentials = True id_provider = ldap auth_provider = ldap access_provider = ldap chpass_provider = ldap ldap_schema = rfc2307bis ldap_search_base = dc=example,dc=com ldap_uri = ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:38901 # If you have DNS SRV records, you can use the following instead. This derives # from your ldap_search_base. # ldap_uri = _srv_ ldap_tls_reqcert = demand # To use cacert dir, place *.crt files in this path then run: # /usr/bin/openssl rehash /etc/openldap/certs # or (for older versions of openssl) # /usr/bin/c_rehash /etc/openldap/certs ldap_tls_cacertdir = /etc/openldap/certs # Path to the cacert # ldap_tls_cacert = /etc/openldap/certs/ca.crt # Only users who match this filter can login and authorise to this machine. Note # that users who do NOT match, will still have their uid/gid resolve, but they # can't login. ldap_access_filter = (memberOf=cn=new_group,ou=groups,dc=example,dc=com) enumerate = false access_provider = ldap ldap_user_member_of = memberof ldap_user_gecos = cn ldap_user_uuid = nsUniqueId ldap_group_uuid = nsUniqueId # This is really important as it allows SSSD to respect nsAccountLock ldap_account_expire_policy = rhds ldap_access_order = filter, expire # Setup for ssh keys # Inside /etc/ssh/sshd_config add the lines: # AuthorizedKeysCommand /usr/bin/sss_ssh_authorizedkeys # AuthorizedKeysCommandUser nobody # You can test with the command: sss_ssh_authorizedkeys <username> ldap_user_ssh_public_key = nsSshPublicKey # This prevents an issue where the Directory is recursively walked on group # and user look ups. It makes the client faster and more responsive in almost # every scenario. ignore_group_members = False [sssd] services = nss, pam, ssh, sudo config_file_version = 2 domains = ldap [nss] homedir_substring = /home INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:123 Check if config creation was successful INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:47 Check if content is present in output INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:59 Reset log file for next test
-----------------------------Captured log teardown------------------------------
INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:37 Delete log file
Passed suites/clu/dsidm_config_test.py::test_dsidm_config_ldap 0.08
------------------------------Captured stdout call------------------------------
# # OpenLDAP client configuration # Generated by 389 Directory Server - dsidm # # See ldap.conf(5) for details # This file should be world readable but not world writable. BASE dc=example,dc=com # Remember to check this: you can have multiple uris on this line. You may have # multiple servers or load balancers in your environment. URI ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:38901 # If you have DNS SRV records you can use: # URI ldaps:///dc%3Dexample%2Cdc%3Dcom DEREF never # To use cacert dir, place *.crt files in this path then run: # /usr/bin/openssl rehash /etc/openldap/certs # or (for older versions of openssl) # /usr/bin/c_rehash /etc/openldap/certs TLS_CACERTDIR /etc/openldap/certs # TLS_CACERT /etc/openldap/certs/ca.crt
-------------------------------Captured log call--------------------------------
INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:151 Create ldap.conf content DEBUG tests.suites.clu.dsidm_config_test:client_config.py:155 # # OpenLDAP client configuration # Generated by 389 Directory Server - dsidm # # See ldap.conf(5) for details # This file should be world readable but not world writable. BASE dc=example,dc=com # Remember to check this: you can have multiple uris on this line. You may have # multiple servers or load balancers in your environment. URI ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:38901 # If you have DNS SRV records you can use: # URI ldaps:///dc%3Dexample%2Cdc%3Dcom DEREF never # To use cacert dir, place *.crt files in this path then run: # /usr/bin/openssl rehash /etc/openldap/certs # or (for older versions of openssl) # /usr/bin/c_rehash /etc/openldap/certs TLS_CACERTDIR /etc/openldap/certs # TLS_CACERT /etc/openldap/certs/ca.crt INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:154 Check if config creation was successful INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:51 Check if content is present in output INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:59 Reset log file for next test
-----------------------------Captured log teardown------------------------------
INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:37 Delete log file
Passed suites/clu/dsidm_config_test.py::test_dsidm_config_display 6.98
------------------------------Captured stdout call------------------------------
# This is a generic list of LDAP client configuration parameters you may require # for connecting a client to this server. Some of them may or may not apply # to your application, so consult your application documentation for further # assistance. # # This program makes a number of assumptions about your data and configuration # which may not be correct. Be sure to check these values for your situation. ; ldap uri ; This is the uri of the server you will connect to and authenticate to. It ; must be a valid subjectAltName in the presented TLS certificate. Note that this ; is not an exhaustive list of your LDAP servers, and other applications in your ; network like load balancers may affect this. This is just what we derive from ; your current connection. ldap_uri = ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:38901 ; ldap dns discovery uri ; In some environments, you may have DNS SRV records such as ; "_ldap._tcp.<domain name>". If these are present in your dns server, you can ; use the following uri. ldap_uri = ldaps:///dc%3Dexample%2Cdc%3Dcom ; ca_cert ; To correctly use TLS, you require the valid CA cert that issued your LDAP TLS ; certificates. Sometimes a copy of this may be in your server instance as ca_cert = /etc/dirsrv/slapd-<instance>/ca.crt ; However that's not guaranteed. You can show the certs from the LDAP server ; by sshing to the server and running: certutil -L -d /etc/dirsrv/slapd-<instance>/ ; If you can identify the CA certificate name, you can then view it with: certutil -L -n <ca cert name> -a -d /etc/dirsrv/slapd-<instance>/ ; This should be a pem file you can use in your application's CA. ; Some applications don't require a ca certificate parameter, and will use the ; ca certificate from /etc/openldap/ldap.conf. You should configure ldap.conf ; in these cases. See the 'client_config ldap.conf' command in dsidm. ; basedn ; The basedn is the root suffix where all searches will originate from for ; LDAP objects. basedn = dc=example,dc=com ; schema_type ; LDAP servers have different ways to structure their objects and group ; relationships. Legacy servers will use rfc2307, where as modern servers will ; use rfc2307bis (requires MemberOf plugin to be enabled). This is the schema ; setting of your directory based on your running configuration (if we can ; detect it). schema_type = rfc2307bis ; user/account basedn ; Some applications may optionally use a user/account basedn to limit searches ; in the directory. This can be for performance or security reasons. Generally ; you shouldn't need this, preferring to use groups and filters for access ; control. user_basedn = ou=people,dc=example,dc=com ; user filter ; This is an ldap filter that will return only user objects. Additionally some ; applications will template into the filter (similar to sql statements) or they ; will generate the filter based on attributes. We list a number of possible ; filters you might use, but you should customise this for your application. ; ; If you are using rfc2307bis, you can use this filter to provide authorisation ; support by adding filters such as: (memberOf=<groupdn>) user_filter = (&(objectclass=nsPerson)(objectclass=nsAccount)(objectclass=nsOrgPerson)(objectclass=posixAccount)) user_filter = (&(&(objectclass=nsPerson)(objectclass=nsAccount)(objectclass=nsOrgPerson)(objectclass=posixAccount))(|(uid=<PARAM>)(displayName=<PARAM>)(cn=<PARAM>))) ; group basedn ; Some applications may optionnaly use a group basedn to limit searches in the ; directory. This can be for performance or security reasons. Generally you ; shouldn't need this, preferring to use groups and filters for access control. group_basedn = ou=Groups,dc=example,dc=com ; group filter ; This is an ldap filter that will return only group objects. Additionally ; some applications will template into the filter (similar to sql statements) ; or they will generate the filter base on attributes. We list a number of ; possible filters you might use, but you should customise this for your ; application. group_filter = (&(objectclass=groupOfNames)) group_filter = (&(&(objectclass=groupOfNames))(|(cn=<PARAM>))) ; attribute mappings ; Due to the variety of schemas and attribute mappings in LDAP, there are ; different representations of attributes and values. This is a guess at ; the mappings that exist in your server, and what attributes you should ; configure and use. unique id = nsUniqueId user rdn = uid user identifier = uid group rdn = cn group member attribute = member # This is a generic list of LDAP client configuration parameters you may require # for connecting a client to this server. Some of them may or may not apply # to your application, so consult your application documentation for further # assistance. # # This program makes a number of assumptions about your data and configuration # which may not be correct. Be sure to check these values for your situation. ; ldap uri ; This is the uri of the server you will connect to and authenticate to. It ; must be a valid subjectAltName in the presented TLS certificate. Note that this ; is not an exhaustive list of your LDAP servers, and other applications in your ; network like load balancers may affect this. This is just what we derive from ; your current connection. ldap_uri = ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:38901 ; ldap dns discovery uri ; In some environments, you may have DNS SRV records such as ; "_ldap._tcp.<domain name>". If these are present in your dns server, you can ; use the following uri. ldap_uri = ldaps:///dc%3Dexample%2Cdc%3Dcom ; ca_cert ; To correctly use TLS, you require the valid CA cert that issued your LDAP TLS ; certificates. Sometimes a copy of this may be in your server instance as ca_cert = /etc/dirsrv/slapd-<instance>/ca.crt ; However that's not guaranteed. You can show the certs from the LDAP server ; by sshing to the server and running: certutil -L -d /etc/dirsrv/slapd-<instance>/ ; If you can identify the CA certificate name, you can then view it with: certutil -L -n <ca cert name> -a -d /etc/dirsrv/slapd-<instance>/ ; This should be a pem file you can use in your application's CA. ; Some applications don't require a ca certificate parameter, and will use the ; ca certificate from /etc/openldap/ldap.conf. You should configure ldap.conf ; in these cases. See the 'client_config ldap.conf' command in dsidm. ; basedn ; The basedn is the root suffix where all searches will originate from for ; LDAP objects. basedn = dc=example,dc=com ; schema_type ; LDAP servers have different ways to structure their objects and group ; relationships. Legacy servers will use rfc2307, where as modern servers will ; use rfc2307bis (requires MemberOf plugin to be enabled). This is the schema ; setting of your directory based on your running configuration (if we can ; detect it). schema_type = rfc2307bis ; user/account basedn ; Some applications may optionally use a user/account basedn to limit searches ; in the directory. This can be for performance or security reasons. Generally ; you shouldn't need this, preferring to use groups and filters for access ; control. user_basedn = ou=people,dc=example,dc=com ; user filter ; This is an ldap filter that will return only user objects. Additionally some ; applications will template into the filter (similar to sql statements) or they ; will generate the filter based on attributes. We list a number of possible ; filters you might use, but you should customise this for your application. ; ; If you are using rfc2307bis, you can use this filter to provide authorisation ; support by adding filters such as: (memberOf=<groupdn>) user_filter = (&(objectclass=nsPerson)(objectclass=nsAccount)(objectclass=nsOrgPerson)(objectclass=posixAccount)) user_filter = (&(&(objectclass=nsPerson)(objectclass=nsAccount)(objectclass=nsOrgPerson)(objectclass=posixAccount))(|(uid=<PARAM>)(displayName=<PARAM>)(cn=<PARAM>))) ; group basedn ; Some applications may optionnaly use a group basedn to limit searches in the ; directory. This can be for performance or security reasons. Generally you ; shouldn't need this, preferring to use groups and filters for access control. group_basedn = ou=Groups,dc=example,dc=com ; group filter ; This is an ldap filter that will return only group objects. Additionally ; some applications will template into the filter (similar to sql statements) ; or they will generate the filter base on attributes. We list a number of ; possible filters you might use, but you should customise this for your ; application. group_filter = (&(objectclass=groupOfNames)) group_filter = (&(&(objectclass=groupOfNames))(|(cn=<PARAM>))) ; attribute mappings ; Due to the variety of schemas and attribute mappings in LDAP, there are ; different representations of attributes and values. This is a guess at ; the mappings that exist in your server, and what attributes you should ; configure and use. unique id = nsUniqueId user rdn = uid user identifier = uid group rdn = cn group member attribute = member
-------------------------------Captured log call--------------------------------
INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:195 Test dsidm display option DEBUG tests.suites.clu.dsidm_config_test:client_config.py:290 # This is a generic list of LDAP client configuration parameters you may require # for connecting a client to this server. Some of them may or may not apply # to your application, so consult your application documentation for further # assistance. # # This program makes a number of assumptions about your data and configuration # which may not be correct. Be sure to check these values for your situation. ; ldap uri ; This is the uri of the server you will connect to and authenticate to. It ; must be a valid subjectAltName in the presented TLS certificate. Note that this ; is not an exhaustive list of your LDAP servers, and other applications in your ; network like load balancers may affect this. This is just what we derive from ; your current connection. ldap_uri = ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:38901 ; ldap dns discovery uri ; In some environments, you may have DNS SRV records such as ; "_ldap._tcp.<domain name>". If these are present in your dns server, you can ; use the following uri. ldap_uri = ldaps:///dc%3Dexample%2Cdc%3Dcom ; ca_cert ; To correctly use TLS, you require the valid CA cert that issued your LDAP TLS ; certificates. Sometimes a copy of this may be in your server instance as ca_cert = /etc/dirsrv/slapd-<instance>/ca.crt ; However that's not guaranteed. You can show the certs from the LDAP server ; by sshing to the server and running: certutil -L -d /etc/dirsrv/slapd-<instance>/ ; If you can identify the CA certificate name, you can then view it with: certutil -L -n <ca cert name> -a -d /etc/dirsrv/slapd-<instance>/ ; This should be a pem file you can use in your application's CA. ; Some applications don't require a ca certificate parameter, and will use the ; ca certificate from /etc/openldap/ldap.conf. You should configure ldap.conf ; in these cases. See the 'client_config ldap.conf' command in dsidm. ; basedn ; The basedn is the root suffix where all searches will originate from for ; LDAP objects. basedn = dc=example,dc=com ; schema_type ; LDAP servers have different ways to structure their objects and group ; relationships. Legacy servers will use rfc2307, where as modern servers will ; use rfc2307bis (requires MemberOf plugin to be enabled). This is the schema ; setting of your directory based on your running configuration (if we can ; detect it). schema_type = rfc2307bis ; user/account basedn ; Some applications may optionally use a user/account basedn to limit searches ; in the directory. This can be for performance or security reasons. Generally ; you shouldn't need this, preferring to use groups and filters for access ; control. user_basedn = ou=people,dc=example,dc=com ; user filter ; This is an ldap filter that will return only user objects. Additionally some ; applications will template into the filter (similar to sql statements) or they ; will generate the filter based on attributes. We list a number of possible ; filters you might use, but you should customise this for your application. ; ; If you are using rfc2307bis, you can use this filter to provide authorisation ; support by adding filters such as: (memberOf=<groupdn>) user_filter = (&(objectclass=nsPerson)(objectclass=nsAccount)(objectclass=nsOrgPerson)(objectclass=posixAccount)) user_filter = (&(&(objectclass=nsPerson)(objectclass=nsAccount)(objectclass=nsOrgPerson)(objectclass=posixAccount))(|(uid=<PARAM>)(displayName=<PARAM>)(cn=<PARAM>))) ; group basedn ; Some applications may optionnaly use a group basedn to limit searches in the ; directory. This can be for performance or security reasons. Generally you ; shouldn't need this, preferring to use groups and filters for access control. group_basedn = ou=Groups,dc=example,dc=com ; group filter ; This is an ldap filter that will return only group objects. Additionally ; some applications will template into the filter (similar to sql statements) ; or they will generate the filter base on attributes. We list a number of ; possible filters you might use, but you should customise this for your ; application. group_filter = (&(objectclass=groupOfNames)) group_filter = (&(&(objectclass=groupOfNames))(|(cn=<PARAM>))) ; attribute mappings ; Due to the variety of schemas and attribute mappings in LDAP, there are ; different representations of attributes and values. This is a guess at ; the mappings that exist in your server, and what attributes you should ; configure and use. unique id = nsUniqueId user rdn = uid user identifier = uid group rdn = cn group member attribute = member INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:198 Check if display option was successful INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:51 Check if content is present in output INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:56 Check if value is present in output INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:59 Reset log file for next test INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:201 Enable MemberOf plugin INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:206 Test dsidm display option with MemberOf plugin DEBUG tests.suites.clu.dsidm_config_test:client_config.py:290 # This is a generic list of LDAP client configuration parameters you may require # for connecting a client to this server. Some of them may or may not apply # to your application, so consult your application documentation for further # assistance. # # This program makes a number of assumptions about your data and configuration # which may not be correct. Be sure to check these values for your situation. ; ldap uri ; This is the uri of the server you will connect to and authenticate to. It ; must be a valid subjectAltName in the presented TLS certificate. Note that this ; is not an exhaustive list of your LDAP servers, and other applications in your ; network like load balancers may affect this. This is just what we derive from ; your current connection. ldap_uri = ldap://ci-vm-10-0-139-53.hosted.upshift.rdu2.redhat.com:38901 ; ldap dns discovery uri ; In some environments, you may have DNS SRV records such as ; "_ldap._tcp.<domain name>". If these are present in your dns server, you can ; use the following uri. ldap_uri = ldaps:///dc%3Dexample%2Cdc%3Dcom ; ca_cert ; To correctly use TLS, you require the valid CA cert that issued your LDAP TLS ; certificates. Sometimes a copy of this may be in your server instance as ca_cert = /etc/dirsrv/slapd-<instance>/ca.crt ; However that's not guaranteed. You can show the certs from the LDAP server ; by sshing to the server and running: certutil -L -d /etc/dirsrv/slapd-<instance>/ ; If you can identify the CA certificate name, you can then view it with: certutil -L -n <ca cert name> -a -d /etc/dirsrv/slapd-<instance>/ ; This should be a pem file you can use in your application's CA. ; Some applications don't require a ca certificate parameter, and will use the ; ca certificate from /etc/openldap/ldap.conf. You should configure ldap.conf ; in these cases. See the 'client_config ldap.conf' command in dsidm. ; basedn ; The basedn is the root suffix where all searches will originate from for ; LDAP objects. basedn = dc=example,dc=com ; schema_type ; LDAP servers have different ways to structure their objects and group ; relationships. Legacy servers will use rfc2307, where as modern servers will ; use rfc2307bis (requires MemberOf plugin to be enabled). This is the schema ; setting of your directory based on your running configuration (if we can ; detect it). schema_type = rfc2307bis ; user/account basedn ; Some applications may optionally use a user/account basedn to limit searches ; in the directory. This can be for performance or security reasons. Generally ; you shouldn't need this, preferring to use groups and filters for access ; control. user_basedn = ou=people,dc=example,dc=com ; user filter ; This is an ldap filter that will return only user objects. Additionally some ; applications will template into the filter (similar to sql statements) or they ; will generate the filter based on attributes. We list a number of possible ; filters you might use, but you should customise this for your application. ; ; If you are using rfc2307bis, you can use this filter to provide authorisation ; support by adding filters such as: (memberOf=<groupdn>) user_filter = (&(objectclass=nsPerson)(objectclass=nsAccount)(objectclass=nsOrgPerson)(objectclass=posixAccount)) user_filter = (&(&(objectclass=nsPerson)(objectclass=nsAccount)(objectclass=nsOrgPerson)(objectclass=posixAccount))(|(uid=<PARAM>)(displayName=<PARAM>)(cn=<PARAM>))) ; group basedn ; Some applications may optionnaly use a group basedn to limit searches in the ; directory. This can be for performance or security reasons. Generally you ; shouldn't need this, preferring to use groups and filters for access control. group_basedn = ou=Groups,dc=example,dc=com ; group filter ; This is an ldap filter that will return only group objects. Additionally ; some applications will template into the filter (similar to sql statements) ; or they will generate the filter base on attributes. We list a number of ; possible filters you might use, but you should customise this for your ; application. group_filter = (&(objectclass=groupOfNames)) group_filter = (&(&(objectclass=groupOfNames))(|(cn=<PARAM>))) ; attribute mappings ; Due to the variety of schemas and attribute mappings in LDAP, there are ; different representations of attributes and values. This is a guess at ; the mappings that exist in your server, and what attributes you should ; configure and use. unique id = nsUniqueId user rdn = uid user identifier = uid group rdn = cn group member attribute = member INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:209 Check if display option was successful with MemberOf plugin enabled INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:51 Check if content is present in output INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:56 Check if value is present in output INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:59 Reset log file for next test
-----------------------------Captured log teardown------------------------------
INFO tests.suites.clu.dsidm_config_test:dsidm_config_test.py:37 Delete log file
Passed suites/clu/dsidm_organizational_unit_test.py::test_dsidm_organizational_unit_delete 11.72
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:658 Starting installation... INFO lib389.SetupDs:setup.py:686 Completed installation for standalone1 INFO lib389.topologies:topologies.py:112 Instance with parameters {'ldap-port': 38901, 'ldap-secureport': 63601, 'server-id': 'standalone1', 'suffix': 'dc=example,dc=com'} was created. INFO tests.suites.clu.dsidm_organizational_unit_test:dsidm_organizational_unit_test.py:31 Create organizational unit
-------------------------------Captured log call--------------------------------
INFO tests.suites.clu.dsidm_organizational_unit_test:dsidm_organizational_unit_test.py:72 Test dsidm organizationalunit delete INFO LogCapture._generic_delete:__init__.py:117 Successfully deleted ou=toDelete,dc=example,dc=com INFO tests.suites.clu.dsidm_organizational_unit_test:dsidm_organizational_unit_test.py:76 Check the entry is deleted
-----------------------------Captured log teardown------------------------------
INFO tests.suites.clu.dsidm_organizational_unit_test:dsidm_organizational_unit_test.py:39 Delete organizational unit
Passed suites/clu/dsidm_user_test.py::test_dsidm_user_list 9.55
-------------------------------Captured log setup-------------------------------
INFO lib389.SetupDs:setup.py:6