#!/usr/share/ucs-test/runner python
## desc: Rename a container/cn with un-moveable subobjects from lower to upper case special characters
## tags: [udm,apptest]
## roles: [domaincontroller_master]
## exposure: careful
## packages:
##   - univention-config
##   - univention-directory-manager-tools


import univention.testing.utils as utils
import univention.testing.udm as udm_test
import univention.testing.strings as uts
import univention.config_registry as configRegistry
import sys


if __name__ == '__main__':
	ucr = configRegistry.ConfigRegistry()
	ucr.load()

	with udm_test.UCSTestUDM() as udm:
		user_name = uts.random_string()
		network_name = uts.random_string()

		cn_name = uts.random_name_special_characters()
		cn_name_new = cn_name.upper()

		cn = udm.create_object('container/cn', name = cn_name)
		user = udm.create_user(position=cn, username=user_name)
		network = udm.create_object('networks/network', position=cn, name=network_name, network='1.1.1.1', netmask='24')

		try:
			udm.modify_object('container/cn', dn = cn, name = cn_name_new)
		except udm_test.UCSTestUDM_ModifyUDMObjectFailed:
			pass

		new_cn = 'cn=%s,%s' % (cn_name_new,ucr.get('ldap/base'))
		new_user = 'uid=%s,cn=%s,%s' % (user_name, cn_name_new, ucr.get('ldap/base'))
		utils.verify_ldap_object(new_cn, should_exist = True)
		utils.verify_ldap_object(new_user, should_exist = True)

		lo = utils.get_ldap_connection()
		for dn, entry in lo.search(filter='cn=%s' % cn_name):
			if entry.get('cn')[0] != cn_name:
				utils.fail('cn = %s; expected: %s' % (entry.get('cn')[0], cn_name))
