#!/usr/share/ucs-test/runner python3
## desc: Test serverctrls of ldap server
## tags: [udm,apptest,SKIP]
## roles: [domaincontroller_master]
## exposure: careful
## packages:
##   - univention-config
##   - univention-directory-manager-tools

from __future__ import print_function
import univention.testing.udm as udm_test
from univention.testing.strings import random_username

from ldap.controls import SimplePagedResultsControl
from ldap.controls.sss import SSSRequestControl
import univention.admin.modules


if __name__ == '__main__':
	with udm_test.UCSTestUDM() as udm:
		name = random_username()
		dns = [udm.create_user(username=name + str(i), wait_for_replication=False, check_for_drs_replication=False, wait_for=False)[0] for i in range(1, 8)]
		print(('Created users:', dns))

		univention.admin.modules.update()

		lo = univention.uldap.getMachineConnection()
		res = {}
		page_size = 2
		pctrl = SimplePagedResultsControl(True, size=page_size, cookie='')
		sctrl = SSSRequestControl(ordering_rules=['uid:caseIgnoreOrderingMatch'])
		users = univention.admin.modules.get('users/user')
		ctrls = [sctrl, pctrl]
		entries = []

		while True:
			entries.append([x.dn for x in users.lookup(None, lo, 'username=%s*' % (name,), serverctrls=ctrls, response=res)])
			print(('Found', entries[-1]))
			for control in res['ctrls']:
				if control.controlType == SimplePagedResultsControl.controlType:
					pctrl.cookie = control.cookie
			if not pctrl.cookie:
				break

			assert len(entries[-1]) == page_size

		found = []
		for entry in entries:
			found.extend(entry)

		assert sorted(found) == sorted(dns)
