diff --git a/dirsrvtests/tests/suites/replication/cleanallruv_test.py b/dirsrvtests/tests/suites/replication/cleanallruv_test.py index 4486c2f17..c17bd9be1 100644 --- a/dirsrvtests/tests/suites/replication/cleanallruv_test.py +++ b/dirsrvtests/tests/suites/replication/cleanallruv_test.py @@ -61,6 +61,7 @@ class AddUsers(threading.Thread): pass conn.close() + def remove_master4_agmts(msg, topology_m4): """Remove all the repl agmts to master4. """ @@ -71,6 +72,7 @@ def remove_master4_agmts(msg, topology_m4): repl.remove_master(topology_m4.ms["master4"], [topology_m4.ms["master1"], topology_m4.ms["master2"], topology_m4.ms["master3"]]) + def check_ruvs(msg, topology_m4, m4rid): """Check masters 1- 3 for master 4's rid.""" for inst in (topology_m4.ms["master1"], topology_m4.ms["master2"], topology_m4.ms["master3"]): @@ -90,6 +92,7 @@ def check_ruvs(msg, topology_m4, m4rid): raise Exception("Master %s was not cleaned in time." % inst.serverid) return True + def task_done(topology_m4, task_dn, timeout=60): """Check if the task is complete""" @@ -136,6 +139,7 @@ def restore_master4(topology_m4): log.info('Master 4 has been successfully restored.') + @pytest.fixture() def m4rid(request, topology_m4): log.debug("-------------- BEGIN RESET of m4 -----------------") @@ -146,10 +150,15 @@ def m4rid(request, topology_m4): def fin(): try: + # Restart the masters and rerun cleanallruv + for inst in topology_m4.ms.values(): + inst.restart() + cruv_task = CleanAllRUVTask(topology_m4.ms["master1"]) cruv_task.create(properties={ 'replica-id': m4rid, - 'replica-base-dn': DEFAULT_SUFFIX + 'replica-base-dn': DEFAULT_SUFFIX, + 'replica-force-cleaning': 'no', }) cruv_task.wait() except ldap.UNWILLING_TO_PERFORM: @@ -162,6 +171,7 @@ def m4rid(request, topology_m4): log.debug("-------------- FINISH RESET of m4 -----------------") return m4rid + def test_clean(topology_m4, m4rid): """Check that cleanallruv task works properly @@ -192,7 +202,8 @@ def test_clean(topology_m4, m4rid): cruv_task = CleanAllRUVTask(topology_m4.ms["master1"]) cruv_task.create(properties={ 'replica-id': m4rid, - 'replica-base-dn': DEFAULT_SUFFIX + 'replica-base-dn': DEFAULT_SUFFIX, + 'replica-force-cleaning': 'no' }) cruv_task.wait() @@ -247,7 +258,9 @@ def test_clean_restart(topology_m4, m4rid): cruv_task = CleanAllRUVTask(topology_m4.ms["master1"]) cruv_task.create(properties={ 'replica-id': m4rid, - 'replica-base-dn': DEFAULT_SUFFIX + 'replica-base-dn': DEFAULT_SUFFIX, + 'replica-force-cleaning': 'no', + 'replica-certify-all': 'yes' }) # Sleep a bit, then stop master 1 @@ -272,6 +285,7 @@ def test_clean_restart(topology_m4, m4rid): log.info('test_clean_restart PASSED, restoring master 4...') + def test_clean_force(topology_m4, m4rid): """Check that multiple tasks with a 'force' option work properly @@ -362,7 +376,9 @@ def test_abort(topology_m4, m4rid): cruv_task = CleanAllRUVTask(topology_m4.ms["master1"]) cruv_task.create(properties={ 'replica-id': m4rid, - 'replica-base-dn': DEFAULT_SUFFIX + 'replica-base-dn': DEFAULT_SUFFIX, + 'replica-force-cleaning': 'no', + 'replica-certify-all': 'yes' }) # Wait a bit time.sleep(2) @@ -382,6 +398,7 @@ def test_abort(topology_m4, m4rid): log.info('test_abort PASSED, restoring master 4...') + def test_abort_restart(topology_m4, m4rid): """Test the abort task can handle a restart, and then resume @@ -424,13 +441,15 @@ def test_abort_restart(topology_m4, m4rid): cruv_task = CleanAllRUVTask(topology_m4.ms["master1"]) cruv_task.create(properties={ 'replica-id': m4rid, - 'replica-base-dn': DEFAULT_SUFFIX + 'replica-base-dn': DEFAULT_SUFFIX, + 'replica-force-cleaning': 'no', + 'replica-certify-all': 'yes' }) # Wait a bit time.sleep(2) # Abort the task - abort_task = cruv_task.abort() + cruv_task.abort(certify=True) # Check master 1 does not have the clean task running log.info('test_abort_abort: check master 1 no longer has a cleanAllRUV task...') @@ -488,7 +507,9 @@ def test_abort_certify(topology_m4, m4rid): cruv_task = CleanAllRUVTask(topology_m4.ms["master1"]) cruv_task.create(properties={ 'replica-id': m4rid, - 'replica-base-dn': DEFAULT_SUFFIX + 'replica-base-dn': DEFAULT_SUFFIX, + 'replica-force-cleaning': 'no', + 'replica-certify-all': 'yes' }) # Wait a bit time.sleep(2) @@ -498,10 +519,9 @@ def test_abort_certify(topology_m4, m4rid): abort_task = cruv_task.abort(certify=True) # Wait a while and make sure the abort task is still running - log.info('test_abort_certify: sleep for 5 seconds') - time.sleep(5) + log.info('test_abort_certify...') - if task_done(topology_m4, abort_task.dn, 60): + if task_done(topology_m4, abort_task.dn, 10): log.fatal('test_abort_certify: abort task incorrectly finished') assert False @@ -510,7 +530,7 @@ def test_abort_certify(topology_m4, m4rid): topology_m4.ms["master2"].start() # Wait for the abort task to stop - if not task_done(topology_m4, abort_task.dn, 60): + if not task_done(topology_m4, abort_task.dn, 90): log.fatal('test_abort_certify: The abort CleanAllRUV task was not aborted') assert False @@ -577,7 +597,8 @@ def test_stress_clean(topology_m4, m4rid): cruv_task = CleanAllRUVTask(topology_m4.ms["master1"]) cruv_task.create(properties={ 'replica-id': m4rid, - 'replica-base-dn': DEFAULT_SUFFIX + 'replica-base-dn': DEFAULT_SUFFIX, + 'replica-force-cleaning': 'no' }) cruv_task.wait() @@ -657,18 +678,21 @@ def test_multiple_tasks_with_force(topology_m4, m4rid): cruv_task.create(properties={ 'replica-id': m4rid, 'replica-base-dn': DEFAULT_SUFFIX, - 'replica-force-cleaning': 'yes' + 'replica-force-cleaning': 'yes', + 'replica-certify-all': 'no' }) log.info('test_multiple_tasks_with_force: run the cleanAllRUV task with "force" off...') # NOTE: This must be try not py.test raises, because the above may or may - # not have completed yet .... + # not have completed yet .... try: cruv_task_fail = CleanAllRUVTask(topology_m4.ms["master1"]) cruv_task_fail.create(properties={ 'replica-id': m4rid, - 'replica-base-dn': DEFAULT_SUFFIX + 'replica-base-dn': DEFAULT_SUFFIX, + 'replica-force-cleaning': 'no', + 'replica-certify-all': 'no' }) cruv_task_fail.wait() except ldap.UNWILLING_TO_PERFORM: