#!/usr/share/ucs-test/runner python3
## desc: s4connector ucs2con sync of _msdcs DNS SRV record
## exposure: dangerous
## packages:
##   - univention-config
##   - univention-directory-manager-tools
##   - univention-s4-connector
##   - dnsutils

from __future__ import print_function
import univention.testing.strings as uts
import univention.testing.utils as utils
import dnstests
import s4connector
import subprocess


if __name__ == '__main__':
	s4connector.exit_if_connector_not_running()

	print("========== Create DNS SRV record via univention-dnsedit ==========")
	s4_RR_val = uts.random_name()

	domainname = dnstests.ucr["domainname"]
	hostname = dnstests.ucr["hostname"]
	fqdn = ".".join((hostname, domainname))
	location = "0 100 389 %s." % fqdn

	account = utils.UCSTestDomainAdminCredentials()

	cmd = ["/usr/share/univention-directory-manager-tools/univention-dnsedit", "--binddn=%s" % (account.binddn,), "--bindpwd=%s" % (account.bindpw,), "--ignore-exists", domainname, "add", "srv", s4_RR_val, "msdcs"] + location.split(" ")
	print(" ".join(cmd))
	p = subprocess.Popen(cmd)
	p.wait()
	if p.returncode:
		print("WARNING: command exited with non-zero return code:\n%s" % (" ".join(cmd),))
	forward_zone_dn = "zoneName=%s,cn=dns,%s" % (domainname, dnstests.ucr["ldap/base"])

	test_relativeDomainName = "_%s._msdcs" % s4_RR_val
	test_srv_record_dn = "relativeDomainName=%s,%s" % (test_relativeDomainName, forward_zone_dn)
	test_fqdn = ".".join((test_relativeDomainName, domainname))

	dnstests.check_ldap_object(test_srv_record_dn, 'Service Record', 'sRVRecord', location)
	s4connector.wait_for_sync(30)
	dnstests.test_dns_service_record(test_fqdn, location)
	dnstests.check_ldap_object(test_srv_record_dn, 'Modified Service Record', 'sRVRecord', location)

	dnstests.udm_remove_dns_record_object('dns/srv_record', test_srv_record_dn)
	utils.verify_ldap_object(test_srv_record_dn, should_exist=False)
	s4connector.wait_for_sync()
	dnstests.test_dns_service_record(test_fqdn, ".*", should_exist=False)
