This is an automated email from the git hooks/post-receive script.
spichugi pushed a change to branch master in repository 389-ds-base.
from 0c8906b Bug Description: Add support for managing automember to dsconf new 66ecdf9 Ticket 49446 - Add CI test case
The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference.
Summary of changes: .../tests/suites/replication/regression_test.py | 113 ++++++++++++++++++++- 1 file changed, 112 insertions(+), 1 deletion(-)
This is an automated email from the git hooks/post-receive script.
spichugi pushed a commit to branch master in repository 389-ds-base.
commit 66ecdf9998f3ec46771f1484d0199855701a1de2 Author: Amita Sharma amsharma@redhat.com Date: Tue Jan 30 19:47:36 2018 +0530
Ticket 49446 - Add CI test case
Description: Add a test case to suites/replication/regression_test.py Test that cleanallruv could not break replication if startCsn originated from deleted replica
https://pagure.io/389-ds-base/issue/49446
Reviewed by: Simon, Thierry and William
Signed-off-by: Simon Pichugin spichugi@redhat.com --- .../tests/suites/replication/regression_test.py | 113 ++++++++++++++++++++- 1 file changed, 112 insertions(+), 1 deletion(-)
diff --git a/dirsrvtests/tests/suites/replication/regression_test.py b/dirsrvtests/tests/suites/replication/regression_test.py index 3fa4d51..d67bea4 100644 --- a/dirsrvtests/tests/suites/replication/regression_test.py +++ b/dirsrvtests/tests/suites/replication/regression_test.py @@ -9,16 +9,21 @@ import pytest from lib389.idm.user import TEST_USER_PROPERTIES, UserAccounts from lib389.utils import * -from lib389.topologies import topology_m2 as topo_m2, TopologyMain +from lib389.topologies import topology_m2 as topo_m2, TopologyMain, topology_m3 as topo_m3 from lib389._constants import * from . import get_repl_entries from lib389.idm.organisationalunit import OrganisationalUnits from lib389.idm.user import UserAccount from lib389.replica import Replicas, ReplicationManager +from lib389.changelog import Changelog5
NEW_SUFFIX_NAME = 'test_repl' NEW_SUFFIX = 'o={}'.format(NEW_SUFFIX_NAME) NEW_BACKEND = 'repl_base' +MAXAGE_ATTR = 'nsslapd-changelogmaxage' +MAXAGE_STR = '30' +TRIMINTERVAL_STR = '5' +TRIMINTERVAL = 'nsslapd-changelogtrim-interval'
DEBUGGING = os.getenv("DEBUGGING", default=False) if DEBUGGING: @@ -249,6 +254,112 @@ def test_invalid_agmt(topo_m2): repl.test_replication(m1, m2) repl.test_replication(m2, m1)
+ +def test_cleanallruv_repl(topo_m3): + """Test that cleanallruv could not break replication if anchor csn in ruv originated in deleted replica + :id: 46faba9a-897e-45b8-98dc-aec7fa8cec9a + :setup: 3 Masters + :steps: + 1. Configure error log level to 8192 in all masters + 2. Modify nsslapd-changelogmaxage=30 and nsslapd-changelogtrim-interval=5 for M1 and M2 + 3. Add test users to 3 masters + 4. Launch ClearRuv but withForce + 5. Check the users after CleanRUV, because of changelog trimming, it will effect the CLs + :expectedresults: + 1. Error logs should be configured successfully + 2. Modify should be successful + 3. Test users should be added successfully + 4. ClearRuv should be launched successfully + 5. Users should be present according to the changelog trimming effect + """ + + M1 = topo_m3.ms["master1"] + M2 = topo_m3.ms["master2"] + M3 = topo_m3.ms["master3"] + + log.info("Change the error log levels for all masters") + for s in (M1, M2, M3): + s.config.replace('nsslapd-errorlog-level', "8192") + + log.info("Get the replication agreements for all 3 masters") + m1_m2 = M1.agreement.list(suffix=SUFFIX, consumer_host=M2.host, consumer_port=M2.port) + m1_m3 = M1.agreement.list(suffix=SUFFIX, consumer_host=M3.host, consumer_port=M3.port) + m3_m1 = M3.agreement.list(suffix=SUFFIX, consumer_host=M1.host, consumer_port=M1.port) + + log.info("Get the changelog enteries for M1 and M2") + changelog_m1 = Changelog5(M1) + changelog_m2 = Changelog5(M2) + + log.info("Modify nsslapd-changelogmaxage=30 and nsslapd-changelogtrim-interval=5 for M1 and M2") + changelog_m1.set_max_age(MAXAGE_STR) + changelog_m1.set_trim_interval(TRIMINTERVAL_STR) + + log.info("Add test users to 3 masters") + users_m1 = UserAccounts(M1, DEFAULT_SUFFIX) + users_m2 = UserAccounts(M2, DEFAULT_SUFFIX) + users_m3 = UserAccounts(M3, DEFAULT_SUFFIX) + user_props = TEST_USER_PROPERTIES.copy() + + user_props.update({'uid': "testuser10"}) + user10 = users_m1.create(properties=user_props) + + user_props.update({'uid': "testuser20"}) + user20 = users_m2.create(properties=user_props) + + user_props.update({'uid': "testuser30"}) + user30 = users_m3.create(properties=user_props) + + # ::important:: the testuser31 is the oldest csn in M2, + # because it will be cleared by changelog trimming + user_props.update({'uid': "testuser31"}) + user31 = users_m3.create(properties=user_props) + + user_props.update({'uid': "testuser11"}) + user11 = users_m1.create(properties=user_props) + + user_props.update({'uid': "testuser21"}) + user21 = users_m2.create(properties=user_props) + # this is to trigger changelog trim and interval values + time.sleep(40) + + # Here M1, M2, M3 should have 11,21,31 and 10,20,30 are CL cleared + M2.stop() + M1.agreement.pause(m1_m2[0].dn) + user_props.update({'uid': "testuser32"}) + user32 = users_m3.create(properties=user_props) + + user_props.update({'uid': "testuser33"}) + user33 = users_m3.create(properties=user_props) + + user_props.update({'uid': "testuser12"}) + user12 = users_m1.create(properties=user_props) + + M3.agreement.pause(m3_m1[0].dn) + M3.agreement.resume(m3_m1[0].dn) + time.sleep(40) + + # Here because of changelog trimming testusers 31 and 32 are CL cleared + # ClearRuv is launched but with Force + M3.stop() + M1.tasks.cleanAllRUV(suffix=SUFFIX, replicaid='3', + force=True,args={TASK_WAIT: False}) + + # here M1 should clear 31 + M2.start() + M1.agreement.pause(m1_m2[0].dn) + M1.agreement.resume(m1_m2[0].dn) + time.sleep(10) + + #Check the users after CleanRUV + expected_m1_users = [user31.dn, user11.dn, user21.dn, user32.dn, user33.dn, user12.dn] + expected_m2_users = [user31.dn, user11.dn, user21.dn, user12.dn] + current_m1_users = [user.dn for user in users_m1.list()] + current_m2_users = [user.dn for user in users_m2.list()] + + assert set(expected_m1_users).issubset(current_m1_users) + assert set(expected_m2_users).issubset(current_m2_users) + + if __name__ == '__main__': # Run isolated # -s for DEBUG mode
389-commits@lists.fedoraproject.org