def tombstone_cleanup(inst, basedn, log, args): plugin = USNPlugin(inst) log.info( 'Attempting to add task entry... This will fail if replication is enabled or if USN plug-in is disabled.' ) task = plugin.cleanup(args.suffix, args.backend, args.maxusn) log.info('Successfully added task entry ' + task.dn)
def test_entryusn_after_repl_delete(topology_m2): """Verify that entryUSN is incremented on 1 after delete operation which creates a tombstone :id: 1704cf65-41bc-4347-bdaf-20fc2431b218 :setup: An instance with replication, Users, USN enabled :steps: 1. Try to delete a user 2. Check the tombstone has the incremented USN 3. Try to delete ou=People with users 4. Check the entry has a not incremented entryUSN :expectedresults: 1. Success 2. Success 3. Should fail with Not Allowed On Non-leaf error 4. Success """ inst = topology_m2.ms["supplier1"] plugin = USNPlugin(inst) plugin.enable() inst.restart() users = UserAccounts(inst, DEFAULT_SUFFIX) try: user_1 = users.create_test_user() user_rdn = user_1.rdn tombstones = Tombstones(inst, DEFAULT_SUFFIX) user_1.replace('description', 'update_ts') user_usn = user_1.get_attr_val_int('entryusn') user_1.delete() time.sleep(1) # Gives a little time for tombstone creation to complete ts = tombstones.get(user_rdn) ts_usn = ts.get_attr_val_int('entryusn') assert (user_usn + 1) == ts_usn user_1 = users.create_test_user() org = OrganizationalUnit(inst, f"ou=People,{DEFAULT_SUFFIX}") org.replace('description', 'update_ts') ou_usn_before = org.get_attr_val_int('entryusn') try: org.delete() except ldap.NOT_ALLOWED_ON_NONLEAF: pass ou_usn_after = org.get_attr_val_int('entryusn') assert ou_usn_before == ou_usn_after finally: try: user_1.delete() except ldap.NO_SUCH_OBJECT: pass
def tombstone_cleanup(inst, basedn, log, args): plugin = USNPlugin(inst) log.info('Attempting to add task entry...') if not plugin.status(): log.error("'%s' is disabled. Fix up task can't be executed" % plugin.rdn) task = plugin.cleanup(args.suffix, args.backend, args.max_usn) task.wait() exitcode = task.get_exit_code() if exitcode != 0: log.error('USM tombstone cleanup task has failed. Please, check logs') else: log.info('Successfully added task entry')
def test_deletions_are_not_replicated(topo_m2): """usn + mmr = deletions are not replicated :id: aa4f67ce-a64c-11ea-a6fd-8c16451d917b :setup: MMR with 2 masters :steps: 1. Enable USN plugin on both servers 2. Enable USN plugin on Supplier 2 3. Add user 4. Check that user propagated to Supplier 2 5. Check user`s USN on Supplier 1 6. Check user`s USN on Supplier 2 7. Delete user 8. Check that deletion of user propagated to Supplier 1 :expected results: 1. Should succeeds 2. Should succeeds 3. Should succeeds 4. Should succeeds 5. Should succeeds 6. Should succeeds 7. Should succeeds 8. Should succeeds """ m1 = topo_m2.ms["master1"] m2 = topo_m2.ms["master2"] # Enable USN plugin on both servers usn1 = USNPlugin(m1) usn2 = USNPlugin(m2) for usn_usn in [usn1, usn2]: usn_usn.enable() for instance in [m1, m2]: instance.restart() # Add user user = UserAccounts(m1, DEFAULT_SUFFIX, rdn=None).create_test_user(uid=1, gid=1) repl_manager = ReplicationManager(DEFAULT_SUFFIX) repl_manager.wait_for_replication(m1, m2, timeout=100) # Check that user propagated to Supplier 2 assert user.dn in [ i.dn for i in UserAccounts(m2, DEFAULT_SUFFIX, rdn=None).list() ] user2 = UserAccount(m2, f'uid=test_user_1,{DEFAULT_SUFFIX}') # Check user`s USN on Supplier 1 assert user.get_attr_val_utf8('entryusn') # Check user`s USN on Supplier 2 assert user2.get_attr_val_utf8('entryusn') # Delete user user2.delete() repl_manager.wait_for_replication(m1, m2, timeout=100) # Check that deletion of user propagated to Supplier 1 with pytest.raises(ldap.NO_SUCH_OBJECT): user.status()
def topology(request): topology = default_topology(request) plugin = USNPlugin(topology.standalone) if not plugin.exists(): plugin.create() # we need to restart the server after enabling the plugin plugin.enable() topology.standalone.restart() topology.logcap.flush() return topology
def setup(topology_st, request): """ Enable USN plug-in Enable MEMBEROF plugin Add test entries """ inst = topology_st.standalone log.info("Enable the USN plugin...") plugin = USNPlugin(inst) plugin.enable() log.info("Enable the MEMBEROF plugin...") plugin = MemberOfPlugin(inst) plugin.enable() inst.restart() users_list = [] log.info("Adding test entries...") users = UserAccounts(inst, DEFAULT_SUFFIX) for id in range(USER_NUM): user = users.create_test_user(uid=id) users_list.append(user) groups_list = [] log.info("Adding test groups...") groups = Groups(inst, DEFAULT_SUFFIX) for id in range(GROUP_NUM): group = groups.create(properties={'cn': f'test_group{id}'}) groups_list.append(group) def fin(): for user in users_list: try: user.delete() except ldap.NO_SUCH_OBJECT: pass for group in groups_list: try: group.delete() except ldap.NO_SUCH_OBJECT: pass request.addfinalizer(fin) return {"users": users_list, "groups": groups_list}
def disable_global_mode(inst, basedn, log, args): plugin = USNPlugin(inst) plugin.disable_global_mode() log.info("USN global mode disabled")
def display_usn_mode(inst, basedn, log, args): plugin = USNPlugin(inst) if plugin.is_global_mode_set(): log.info("USN global mode is enabled") else: log.info("USN global mode is disabled")
def plugin(request): topology = topology_st(request) plugin = USNPlugin(topology.standalone) return plugin