#!/usr/share/ucs-test/runner python
## desc: set default umc users
## roles: [domaincontroller_master]
## tags: [apptest]
## exposure: dangerous
## packages: []

from univention.config_registry import handler_set
from univention.uldap import getMachineConnection
import ldap
import univention.testing.ucr as ucr_test
import univention.testing.utils as utils


def main():
	with ucr_test.UCSTestConfigRegistry() as ucr:
		lo = getMachineConnection()
		handler_set(['ucsschool/import/attach/policy/default-umc-users=no'])
		# UCR variables are loaded for ucsschool at the import stage
		# That's why the import should be after setting the ucr variable
		import univention.testing.ucsschool as utu
		with utu.UCSTestSchool() as schoolenv:
			school1, oudn = schoolenv.create_ou()
			school2, oudn2 = schoolenv.create_ou(use_cli=True)

			utils.wait_for_replication_and_postrun()

			for school in [school1, school2]:
				try:
					print 'Checking school %s' % school
					expected_attr = "cn=default-umc-users,cn=UMC,cn=policies,%s" % (ucr.get('ldap/base'),)
					base = "cn=Domain Users %s,cn=groups,%s" % (school.lower(), schoolenv.get_ou_base_dn(school))
					found_attr = lo.search(base=base, scope='base', attr=['univentionPolicyReference'])[0][1]['univentionPolicyReference']
					if expected_attr in found_attr:
						utils.fail('Incorrect attributes found: %r\nexpected: %r' % (
							found_attr, expected_attr))
				except IndexError:
					utils.fail('Attribute %s was not found in ldap object %r' % (
						'univentionPolicyReference', base))
				except ldap.NO_SUCH_OBJECT as e:
					if "cn=groups,%s" % (schoolenv.get_ou_base_dn(school),) in str(e):
						print ('* Cought an expected exception: %r' % e)
					else:
						utils.fail('Unexpected Exception: %r' % e)


if __name__ == '__main__':
	main()
