Example #1
0
def test_group_sync_from_udm_to_s4_with_nested_group(group_class, nested_class,
                                                     sync_mode):
    with connector_setup(sync_mode) as s4, UCSTestUDM() as udm:
        udm_group = group_class()
        nested_group = nested_class()
        (udm_group_dn,
         s4_group_dn) = create_udm_group(udm, s4, udm_group,
                                         s4connector.wait_for_sync)

        print("\nModifying UDM group\n")
        (nested_group_dn,
         s4_nested_group_dn) = create_udm_group(udm, s4, nested_group,
                                                s4connector.wait_for_sync)
        udm.modify_object('groups/group',
                          dn=udm_group_dn,
                          nestedGroup=[nested_group_dn])
        s4connector.wait_for_sync()
        s4_group = tcommon.map_udm_group_to_con(udm_group.group)
        s4_group.update({"member": [s4_nested_group_dn]})
        s4.verify_object(s4_group_dn, s4_group)
        delete_udm_group(udm, s4, nested_group_dn, s4_nested_group_dn,
                         s4connector.wait_for_sync)

        delete_udm_group(udm, s4, udm_group_dn, s4_group_dn,
                         s4connector.wait_for_sync)
Example #2
0
def test_group_sync_from_s4_to_udm_with_move(group_class, sync_mode):
    with connector_setup(sync_mode) as s4:
        udm_group = group_class()
        (s4_group, s4_group_dn,
         udm_group_dn) = create_con_group(s4, udm_group,
                                          s4connector.wait_for_sync)

        print("\nMove S4 group {!r} to {!r}\n".format(s4_group_dn,
                                                      udm_group.container))
        container_dn = s4.container_create(udm_group.container)
        s4_group_dn = s4.rename_or_move_user_or_group(s4_group_dn,
                                                      position=container_dn)
        s4.set_attributes(s4_group_dn,
                          **tcommon.map_udm_group_to_con(udm_group.group))
        s4connector.wait_for_sync()

        tcommon.verify_udm_object("groups/group", udm_group_dn, None)
        udm_group_dn = ldap.dn.dn2str(
            [[("CN", udm_group.group.get("name"),
               ldap.AVA_STRING)], [("CN", udm_group.container,
                                    ldap.AVA_STRING)]] +
            ldap.dn.str2dn(tcommon.configRegistry['ldap/base']))
        tcommon.verify_udm_object("groups/group", udm_group_dn,
                                  udm_group.group)

        delete_con_group(s4, s4_group_dn, udm_group_dn,
                         s4connector.wait_for_sync)
Example #3
0
def test_group_sync_from_s4_to_udm(group_class, sync_mode):
    with connector_setup(sync_mode) as s4:
        udm_group = group_class()
        (s4_group, s4_group_dn,
         udm_group_dn) = create_con_group(s4, udm_group,
                                          s4connector.wait_for_sync)
        delete_con_group(s4, s4_group_dn, udm_group_dn,
                         s4connector.wait_for_sync)
Example #4
0
def test_attribute_sync_from_udm_to_s4(attribute, sync_mode):
	(ucs_attribute, con_attribute, con_other_attribute) = attribute
	udm_user = NormalUser(selection=("username", "lastname", ucs_attribute))
	primary_value = udm_user.basic.get(ucs_attribute)
	all_values = (primary_value, random_number(), random_number())
	secondary_values = all_values[1:]

	with connector_setup(sync_mode) as s4, UCSTestUDM() as udm:
		# A single `phone` number must be synced to `telephoneNumber` in AD.
		(udm_user_dn, s4_user_dn) = create_udm_user(udm, s4, udm_user, s4connector.wait_for_sync)

		# Additional `phone` values must be synced to `otherTelephone`,
		# `telephoneNumber` must keep its value.
		print("\nModifying UDM user: {}={}\n".format(ucs_attribute, all_values))
		udm.modify_object('users/user', dn=udm_user_dn, set={ucs_attribute: all_values})
		s4connector.wait_for_sync()
		s4.verify_object(s4_user_dn,
			{con_attribute: primary_value, con_other_attribute: secondary_values})
		tcommon.verify_udm_object("users/user", udm_user_dn, {ucs_attribute: all_values})

		# If we delete the first `phone` value via UDM, we want to duplicate
		# the first value of `otherTelephone` into `telephoneNumber`.
		(new_primary, next_primary) = secondary_values
		print("\nModifying UDM user: {}={}\n".format(ucs_attribute, secondary_values))
		udm.modify_object('users/user', dn=udm_user_dn, set={ucs_attribute: secondary_values})
		s4connector.wait_for_sync()
		s4.verify_object(s4_user_dn,
			{con_attribute: new_primary, con_other_attribute: secondary_values})
		tcommon.verify_udm_object("users/user", udm_user_dn, {ucs_attribute: secondary_values})

		# If we delete a `phone` value via UDM that is duplicated in AD, we want
		# it to be deleted from `telephoneNumber` and `otherTelephone`.
		print("\nModifying UDM user: {}={}\n".format(ucs_attribute, next_primary))
		udm.modify_object('users/user', dn=udm_user_dn, set={ucs_attribute: next_primary})
		s4connector.wait_for_sync()
		s4.verify_object(s4_user_dn,
			{con_attribute: next_primary, con_other_attribute: next_primary})
		tcommon.verify_udm_object("users/user", udm_user_dn, {ucs_attribute: next_primary})

		# Setting a completely new `phone` value via UDM, this must be synced
		# to `telephoneNumber` and `otherTelephone` must be empty.
		new_phone_who_dis = random_number()
		print("\nModifying UDM user: {}={}\n".format(ucs_attribute, new_phone_who_dis))
		udm.modify_object('users/user', dn=udm_user_dn, set={ucs_attribute: new_phone_who_dis})
		s4connector.wait_for_sync()
		s4.verify_object(s4_user_dn, {con_attribute: new_phone_who_dis, con_other_attribute: []})
		tcommon.verify_udm_object("users/user", udm_user_dn, {ucs_attribute: new_phone_who_dis})

		# No `phone` value via UDM, must result in an empty `telephoneNumber`
		# and `otherTelephone`.
		print("\nModifying UDM user: {}={}\n".format(ucs_attribute, []))
		udm.modify_object('users/user', dn=udm_user_dn, set={ucs_attribute: ''})
		s4connector.wait_for_sync()
		s4.verify_object(s4_user_dn, {con_attribute: [], con_other_attribute: []})
		tcommon.verify_udm_object("users/user", udm_user_dn, {ucs_attribute: []})

		delete_udm_user(udm, s4, udm_user_dn, s4_user_dn, s4connector.wait_for_sync)
Example #5
0
def test_user_sync_from_udm_to_s4(user_class, sync_mode):
    with connector_setup(sync_mode) as s4, UCSTestUDM() as udm:
        udm_user = user_class()
        (udm_user_dn, s4_user_dn) = create_udm_user(udm, s4, udm_user,
                                                    s4connector.wait_for_sync)

        print("\nModifying UDM user\n")
        udm.modify_object('users/user', dn=udm_user_dn, **udm_user.user)
        s4connector.wait_for_sync()
        s4.verify_object(s4_user_dn,
                         tcommon.map_udm_user_to_con(udm_user.user))

        delete_udm_user(udm, s4, udm_user_dn, s4_user_dn,
                        s4connector.wait_for_sync)
Example #6
0
def test_user_sync_from_s4_to_udm(user_class, sync_mode):
    with connector_setup(sync_mode) as s4:
        udm_user = user_class()
        (basic_s4_user, s4_user_dn,
         udm_user_dn) = create_con_user(s4, udm_user,
                                        s4connector.wait_for_sync)

        print("\nModifying S4 user\n")
        s4.set_attributes(s4_user_dn,
                          **tcommon.map_udm_user_to_con(udm_user.user))
        s4connector.wait_for_sync()
        tcommon.verify_udm_object("users/user", udm_user_dn, udm_user.user)

        delete_con_user(s4, s4_user_dn, udm_user_dn, s4connector.wait_for_sync)
Example #7
0
def test_user_sync_from_udm_to_s4_with_rename(user_class, sync_mode):
    with connector_setup(sync_mode) as s4, UCSTestUDM() as udm:
        udm_user = user_class()
        (udm_user_dn, s4_user_dn) = create_udm_user(udm, s4, udm_user,
                                                    s4connector.wait_for_sync)

        print("\nRename UDM user\n")
        udm_user_dn = udm.modify_object('users/user',
                                        dn=udm_user_dn,
                                        **udm_user.rename)
        s4connector.wait_for_sync()

        s4.verify_object(s4_user_dn, None)
        s4_user_dn = ldap.dn.dn2str(
            [[("CN", udm_user.rename.get("username"),
               ldap.AVA_STRING)], [("CN", "users", ldap.AVA_STRING)]] +
            ldap.dn.str2dn(s4.adldapbase))
        s4.verify_object(s4_user_dn,
                         tcommon.map_udm_user_to_con(udm_user.rename))

        delete_udm_user(udm, s4, udm_user_dn, s4_user_dn,
                        s4connector.wait_for_sync)
Example #8
0
def test_group_sync_from_s4_to_udm_with_nested_group(group_class, nested_class,
                                                     sync_mode):
    with connector_setup(sync_mode) as s4:
        udm_group = group_class()
        nested_group = nested_class()
        (s4_group, s4_group_dn,
         udm_group_dn) = create_con_group(s4, udm_group,
                                          s4connector.wait_for_sync)

        print("\nModifying S4 group\n")
        (nested_s4_user, nested_s4_user_dn,
         nested_udm_user_dn) = create_con_group(s4, nested_group,
                                                s4connector.wait_for_sync)
        s4.set_attributes(s4_group_dn, member=[nested_s4_user_dn])
        s4connector.wait_for_sync()
        udm_attributes = {"nestedGroup": [nested_udm_user_dn]}
        udm_attributes.update(udm_group.group)
        tcommon.verify_udm_object("groups/group", udm_group_dn, udm_attributes)
        delete_con_group(s4, nested_s4_user_dn, nested_udm_user_dn,
                         s4connector.wait_for_sync)

        delete_con_group(s4, s4_group_dn, udm_group_dn,
                         s4connector.wait_for_sync)
Example #9
0
def test_user_sync_from_s4_to_udm_with_rename(user_class, sync_mode):
    with connector_setup(sync_mode) as s4:
        udm_user = user_class()
        (basic_s4_user, s4_user_dn,
         udm_user_dn) = create_con_user(s4, udm_user,
                                        s4connector.wait_for_sync)

        print("\nRename S4 user {!r} to {!r}\n".format(
            s4_user_dn, udm_user.rename.get("username")))
        s4_user_dn = s4.rename_or_move_user_or_group(
            s4_user_dn, name=udm_user.rename.get("username"))
        s4.set_attributes(s4_user_dn,
                          **tcommon.map_udm_user_to_con(udm_user.rename))
        s4connector.wait_for_sync()

        tcommon.verify_udm_object("users/user", udm_user_dn, None)
        udm_user_dn = ldap.dn.dn2str(
            [[("uid", udm_user.rename.get("username"),
               ldap.AVA_STRING)], [("CN", "users", ldap.AVA_STRING)]] +
            ldap.dn.str2dn(tcommon.configRegistry['ldap/base']))
        tcommon.verify_udm_object("users/user", udm_user_dn, udm_user.rename)

        delete_con_user(s4, s4_user_dn, udm_user_dn, s4connector.wait_for_sync)
Example #10
0
def test_user_sync_from_udm_to_s4_with_move(user_class, sync_mode):
    with connector_setup(sync_mode) as s4, UCSTestUDM() as udm:
        udm_user = user_class()
        (udm_user_dn, s4_user_dn) = create_udm_user(udm, s4, udm_user,
                                                    s4connector.wait_for_sync)

        print("\nMove UDM user\n")
        udm_container_dn = udm.create_object('container/cn',
                                             name=udm_user.container)
        udm_user_dn = udm.move_object('users/user',
                                      dn=udm_user_dn,
                                      position=udm_container_dn)

        s4connector.wait_for_sync()
        s4.verify_object(s4_user_dn, None)
        s4_user_dn = ldap.dn.dn2str([[(
            "CN", udm_user.basic.get("username"),
            ldap.AVA_STRING)], [("CN", udm_user.container, ldap.AVA_STRING)]] +
                                    ldap.dn.str2dn(s4.adldapbase))
        s4.verify_object(s4_user_dn,
                         tcommon.map_udm_user_to_con(udm_user.basic))

        delete_udm_user(udm, s4, udm_user_dn, s4_user_dn,
                        s4connector.wait_for_sync)
Example #11
0
def test_attribute_sync_from_s4_to_udm(attribute, sync_mode):
	(ucs_attribute, con_attribute, con_other_attribute) = attribute
	udm_user = NormalUser(selection=("username", "lastname", ucs_attribute))
	primary_value = udm_user.basic.get(ucs_attribute)
	all_values = (primary_value, random_number(), random_number())
	secondary_values = all_values[1:]

	with connector_setup(sync_mode) as s4:
		# A single `telephoneNumber` must be synced to `phone` in UDM.
		(basic_s4_user, s4_user_dn, udm_user_dn) = create_con_user(s4,
			udm_user, s4connector.wait_for_sync)

		# Additional values in `otherTelephone` must be appended to `phone`.
		print("\nModifying S4 user: {}={}, {}={}\n".format(con_attribute,
			primary_value, con_other_attribute, secondary_values))
		s4.set_attributes(s4_user_dn,
			**{con_attribute: primary_value, con_other_attribute: secondary_values})
		s4connector.wait_for_sync()
		tcommon.verify_udm_object("users/user", udm_user_dn, {ucs_attribute: all_values})
		s4.verify_object(s4_user_dn,
			{con_attribute: primary_value, con_other_attribute: secondary_values})

		if sync_mode == "sync":  # otherwise the connector can't write into AD
			# If we delete the value of `telephoneNumber` from AD, we expect to get
			# the first value of `otherTelephone` duplicated into
			# `telephoneNumber`.
			(new_primary, _) = secondary_values
			print("\nModifying S4 user: {}={}\n".format(con_attribute, []))
			s4.set_attributes(s4_user_dn, **{con_attribute: []})
			s4connector.wait_for_sync()
			tcommon.verify_udm_object("users/user", udm_user_dn, {ucs_attribute: secondary_values})
			s4.verify_object(s4_user_dn,
				{con_attribute: new_primary, con_other_attribute: secondary_values})

			# Deleting the duplicate from `otherTelephone` must retain the value of
			# `telephoneNumber` and `phone` in UDM.
			print("\nModifying S4 user: {}={}\n".format(con_other_attribute, []))
			s4.set_attributes(s4_user_dn, **{con_other_attribute: []})
			s4connector.wait_for_sync()
			tcommon.verify_udm_object("users/user", udm_user_dn, {ucs_attribute: new_primary})
			s4.verify_object(s4_user_dn,
				{con_attribute: new_primary, con_other_attribute: []})

		# Setting a new `telephoneNumber` and no `otherTelephone` in AD must
		# result in a single new value in `phone`.
		new_phone_who_dis = random_number()
		print("\nModifying S4 user: {}={}\n".format(con_attribute, new_phone_who_dis))
		s4.set_attributes(s4_user_dn, **{con_attribute: new_phone_who_dis, con_other_attribute: []})
		s4connector.wait_for_sync()
		tcommon.verify_udm_object("users/user", udm_user_dn, {ucs_attribute: new_phone_who_dis})
		s4.verify_object(s4_user_dn,
			{con_attribute: new_phone_who_dis, con_other_attribute: []})

		# Setting no `telephoneNumber` and no `otherTelephone` in AD must
		# result in no value in `phone`.
		print("\nModifying S4 user: {}={}\n".format(con_attribute, []))
		s4.set_attributes(s4_user_dn, **{con_attribute: [], con_other_attribute: []})
		s4connector.wait_for_sync()
		tcommon.verify_udm_object("users/user", udm_user_dn, {ucs_attribute: []})
		s4.verify_object(s4_user_dn, {con_attribute: [], con_other_attribute: []})

		delete_con_user(s4, s4_user_dn, udm_user_dn, s4connector.wait_for_sync)