From 86077ec5be85201b9dcf8ec7048300dacc971fb1 Mon Sep 17 00:00:00 2001 From: Anuj Borah Date: Jun 18 2019 11:16:05 +0000 Subject: Issue: 48851 - Investigate and port TET matching rules filter tests(bug772777) Bug description: Investigate and port TET matching rules filter tests(bug772777). Relates: https://pagure.io/389-ds-base/issue/48851 Author: aborah Reviewed by: Matus Honek, Simon Pichugin --- diff --git a/dirsrvtests/tests/suites/filter/large_filter_test.py b/dirsrvtests/tests/suites/filter/large_filter_test.py new file mode 100644 index 0000000..3aa780a --- /dev/null +++ b/dirsrvtests/tests/suites/filter/large_filter_test.py @@ -0,0 +1,163 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2019 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK ---- + + +""" +verify and testing Filter from a search +""" + +import os +import pytest + +from lib389._constants import PW_DM +from lib389.topologies import topology_st as topo +from lib389.idm.user import UserAccounts, UserAccount +from lib389.idm.account import Accounts +from lib389.backend import Backends +from lib389.idm.domain import Domain + +SUFFIX = 'dc=anuj,dc=com' + +pytestmark = pytest.mark.tier1 + + +@pytest.fixture(scope="module") +def _create_entries(request, topo): + """ + Will create necessary users for this script. + """ + # Creating Backend + backends = Backends(topo.standalone) + backend = backends.create(properties={'nsslapd-suffix': SUFFIX, 'cn': 'AnujRoot'}) + # Creating suffix + suffix = Domain(topo.standalone, SUFFIX).create(properties={'dc': 'anuj'}) + # Add ACI + domain = Domain(topo.standalone, SUFFIX) + domain.add("aci", f'(targetattr!="userPassword")(version 3.0; acl ' + f'"Enable anonymous access";allow (read, search, compare) userdn="ldap:///anyone";)') + # Creating Users + users = UserAccounts(topo.standalone, suffix.dn, rdn=None) + + for user in ['scarter', + 'dmiller', + 'jwallace', + 'rdaugherty', + 'tmason', + 'bjablons', + 'bhal2', + 'lulrich', + 'fmcdonnagh', + 'prigden', + 'mlott', + 'tpierce', + 'brentz', + 'ekohler', + 'tschneid', + 'falbers', + 'jburrell', + 'calexand', + 'phunt', + 'rulrich', + 'awhite', + 'jjensen', + 'dward', + 'plorig', + 'mreuter', + 'dswain', + 'jvedder', + 'jlutz', + 'tcouzens', + 'kcope', + 'mvaughan', + 'dcope', + 'ttully', + 'drose', + 'jvaughan', + 'brigden', + 'rjense2', + 'bparker', + 'cnewport']: + users.create(properties={ + 'mail': f'{user}@redhat.com', + 'uid': user, + 'givenName': user.title(), + 'cn': f'bit {user}', + 'sn': user.title(), + 'manager': f'uid={user},{SUFFIX}', + 'userpassword': PW_DM, + 'homeDirectory': '/home/' + user, + 'uidNumber': '1000', + 'gidNumber': '2000', + }) + + def fin(): + """ + Deletes entries after the test. + """ + for user in users.list(): + user.delete() + + suffix.delete() + backend.delete() + + request.addfinalizer(fin) + + +FILTERS = ['(&(objectClass=person)(|(manager=uid=fmcdonnagh,dc=anuj,dc=com)' + '(manager=cn=no_such_entry_with_a_really_long_dn_component_to_stress_the_filter_handling_code_0,dc=anuj,dc=com)' + '(manager=cn=no_such_entry_with_a_really_long_dn_component_to_stress_the_filter_handling_code_1,dc=anuj,dc=com)' + '(manager=cn=no_such_entry_with_a_really_long_dn_component_to_stress_the_filter_handling_code_2,dc=anuj,dc=com)' + '(manager=cn=no_such_entry_with_a_really_long_dn_component_to_stress_the_filter_handling_code_3,dc=anuj,dc=com)' + '(manager=cn=no_such_entry_with_a_really_long_dn_component_to_stress_the_filter_handling_code_4,dc=anuj,dc=com)' + '(manager=cn=no_such_entry_with_a_really_long_dn_component_to_stress_the_filter_handling_code_5,dc=anuj,dc=com)' + '(manager=uid=jvedder, dc=anuj, dc=com)' + '(manager=cn=no_such_entry_with_a_really_long_dn_component_to_stress_the_filter_handling_code_6,dc=anuj,dc=com)' + '(manager=cn=no_such_entry_with_a_really_long_dn_component_to_stress_the_filter_handling_code_7,dc=anuj,dc=com)' + '(manager=cn=no_such_entry_with_a_really_long_dn_component_to_stress_the_filter_handling_code_8,dc=anuj,dc=com)' + '(manager=cn=no_such_entry_with_a_really_long_dn_component_to_stress_the_filter_handling_code_9,dc=anuj,dc=com)' + '(manager=cn=no_such_entry_with_a_really_long_dn_component_to_stress_the_filter_handling_code_10,dc=anuj,dc=com)' + '(manager=uid=cnewport, dc=anuj, dc=com)))', + '(&(objectClass=person)(|(manager=uid=fmcdonnagh *)' + '(manager=cn=no_such_entry_with_a_really_long_dn_component_to_stress_the_filter_handling_code_0,*)' + '(manager=cn=no_such_entry_with_a_really_long_dn_component_to_stress_the_filter_handling_code_1,*)' + '(manager=cn=no_such_entry_with_a_really_long_dn_component_to_stress_the_filter_handling_code_2,*)' + '(manager=cn=no_such_entry_with_a_really_long_dn_component_to_stress_the_filter_handling_code_3,*)' + '(manager=cn=no_such_entry_with_a_really_long_dn_component_to_stress_the_filter_handling_code_4,*)' + '(manager=cn=no_such_entry_with_a_really_long_dn_component_to_stress_the_filter_handling_code_5,*)' + '(manager=uid=jvedder,*)' + '(manager=cn=no_such_entry_with_a_really_long_dn_component_to_stress_the_filter_handling_code_6,*)' + '(manager=cn=no_such_entry_with_a_really_long_dn_component_to_stress_the_filter_handling_code_7,*)' + '(manager=cn=no_such_entry_with_a_really_long_dn_component_to_stress_the_filter_handling_code_8,*)' + '(manager=cn=no_such_entry_with_a_really_long_dn_component_to_stress_the_filter_handling_code_9,*)' + '(manager=cn=no_such_entry_with_a_really_long_dn_component_to_stress_the_filter_handling_code_10,*)' + '(manager=uid=cnewport,*)))'] + + +@pytest.mark.bz772777 +@pytest.mark.parametrize("real_value", FILTERS) +def test_large_filter(topo, _create_entries, real_value): + """Exercise large eq filter with dn syntax attributes + :id: abe3e6de-9ecc-11e8-adf0-8c16451d917b + :setup: Standalone + :steps: + 1. Try to pass filter rules as per the condition. + 2. Bind with any user. + 3. Try to pass filter rules with new binding. + :expected results: + 1. Pass + 2. Pass + 3. Pass + """ + assert len(Accounts(topo.standalone, SUFFIX).filter(real_value)) == 3 + conn = UserAccount(topo.standalone, f'uid=drose,{SUFFIX}').bind(PW_DM) + assert len(Accounts(conn, SUFFIX).filter(real_value)) == 3 + + +if __name__ == '__main__': + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s -v %s" % CURRENT_FILE)