{ 'topologyFile' : '%s/config/replication/basic_topology.txt'\ % TESTS_DIR, 'dataFile' : 'Short_Example.ldif', 'isolateLdapServers' : True, 'enableDebugLogs' : False } 'Replication: Conflict: Basic check 0. \ Check replication assures synchronization after a simultaneous \ conflictuous modify on 2 different servers (regardless of the \ prevailing modify)' { 'location' : server1Host, 'dsPath' : server1Path, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'DNToAdd' : entry.getDn(), 'listAttributes' : entry.getAttrList() } { 'sleepForMilliSeconds' : 2000 } { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'DNToModify' : entry.getDn(), 'attributeName' : 'employeeNumber', 'newAttributeValue' : '%i' % (i + 1), 'changetype' : 'replace' } { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'employeeNumber' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, server1, [server2], synchroSuffix ] { 'location' : clientHost, 'dsPath' : clientPath, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'dsDn' : [entry.getDn()] } 'Replication: Conflict: double_replace_multi. \ Double replace a multi-valued attribute' { 'location' : server1Host, 'dsPath' : server1Path, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'DNToAdd' : entry.getDn(), 'listAttributes' : entry.getAttrList() } [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'DNToModify' : entry.getDn(), 'listAttributes' : mods[i], 'changetype' : 'replace' } { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'description' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'description' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, server1, [server2], synchroSuffix ] { 'location' : clientHost, 'dsPath' : clientPath, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'dsDn' : [entry.getDn()] } 'Replication: Conflict: double_replace_single. \ Double replace a single-valued attribute' { 'location' : server1Host, 'dsPath' : server1Path, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'DNToAdd' : entry.getDn(), 'listAttributes' : entry.getAttrList() } [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'DNToModify' : entry.getDn(), 'attributeName' : 'employeeNumber', 'newAttributeValue' : '%i' % (i + 1), 'changetype' : 'replace' } { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'employeeNumber' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'employeeNumber' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, server1, [server2], synchroSuffix ] { 'location' : clientHost, 'dsPath' : clientPath, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'dsDn' : [entry.getDn()] } 'Replication: Conflict: double_mod_del_add_multi_1. \ Double replace (del+add) same value with any value of a \ multi-valued attribute' { 'location' : server1Host, 'dsPath' : server1Path, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'DNToAdd' : entry.getDn(), 'listAttributes' : entry.getAttrList() } [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'DNToModify' : entry.getDn(), 'listAttributes' : mods[i][0], 'changetype' : 'delete' } { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'DNToModify' : entry.getDn(), 'listAttributes' : mods[i][1], 'changetype' : 'add' } { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'description' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'description' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, server1, [server2], synchroSuffix ] { 'location' : clientHost, 'dsPath' : clientPath, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'dsDn' : [entry.getDn()] } 'Replication: Conflict: double_mod_del_add_multi_2. \ Double replace (del+add) any value with same value of a \ multi-valued attribute' { 'location' : server1Host, 'dsPath' : server1Path, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'DNToAdd' : entry.getDn(), 'listAttributes' : entry.getAttrList() } [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'DNToModify' : entry.getDn(), 'listAttributes' : mods[i][0], 'changetype' : 'delete' } { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'DNToModify' : entry.getDn(), 'listAttributes' : mods[i][1], 'changetype' : 'add' } { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'description' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'description' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, server1, [server2], synchroSuffix ] { 'location' : clientHost, 'dsPath' : clientPath, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'dsDn' : [entry.getDn()] } 'Replication: Conflict: double_mod_add_multi. \ Double mod_add a multi-valued attribute' { 'location' : server1Host, 'dsPath' : server1Path, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'DNToAdd' : entry.getDn(), 'listAttributes' : entry.getAttrList() } [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'DNToModify' : entry.getDn(), 'listAttributes' : mods[i][0], 'changetype' : 'add' } { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'description' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'description' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, server1, [server2], synchroSuffix ] { 'location' : clientHost, 'dsPath' : clientPath, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'dsDn' : [entry.getDn()] } 'Replication: Conflict: double_mod_add_single. \ Double mod_add a single-valued attribute' { 'location' : server1Host, 'dsPath' : server1Path, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'DNToAdd' : entry.getDn(), 'listAttributes' : entry.getAttrList() } [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'DNToModify' : entry.getDn(), 'listAttributes' : mods[i][0], 'changetype' : 'add' } { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'employeeNumber' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'employeeNumber' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, server1, [server2], synchroSuffix ] { 'location' : clientHost, 'dsPath' : clientPath, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'dsDn' : [entry.getDn()] } 'Replication: Conflict: double_mod_del_multi. \ Double mod_delete a multi-valued attribute' { 'location' : server1Host, 'dsPath' : server1Path, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'DNToAdd' : entry.getDn(), 'listAttributes' : entry.getAttrList() } [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'DNToModify' : entry.getDn(), 'listAttributes' : mods[i][0], 'changetype' : 'delete' } { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'description' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'description' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, server1, [server2], synchroSuffix ] { 'location' : clientHost, 'dsPath' : clientPath, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'dsDn' : [entry.getDn()] } 'Replication: Conflict: double_mod_del_single. \ Double mod_delete a single-valued attribute' { 'location' : server1Host, 'dsPath' : server1Path, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'DNToAdd' : entry.getDn(), 'listAttributes' : entry.getAttrList() } [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'DNToModify' : entry.getDn(), 'listAttributes' : mods[i][0], 'changetype' : 'delete' } { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'employeeNumber' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'employeeNumber' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, server1, [server2], synchroSuffix ] { 'location' : clientHost, 'dsPath' : clientPath, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'dsDn' : [entry.getDn()] } 'Replication: Conflict: mod_del_add_vs_mod_add_del_multi. \ Modify: Delete+Add then Add+Delete on 2 multi-valued attributes' { 'location' : server1Host, 'dsPath' : server1Path, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'DNToAdd' : entry.getDn(), 'listAttributes' : entry.getAttrList() } [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'DNToModify' : entry.getDn(), 'listAttributes' : mods[i][0], 'changetype' : changetypes[i][0] } { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'DNToModify' : entry.getDn(), 'listAttributes' : mods[i][1], 'changetype' : changetypes[i][1] } { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'description telephoneNumber' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'description telephoneNumber' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, server1, [server2], synchroSuffix ] { 'location' : clientHost, 'dsPath' : clientPath, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'dsDn' : [entry.getDn()] } 'Replication: Conflict: mod_add_vs_mod_replace_multi. \ mod_add vs mod_replace on a multi-valued attribute' { 'location' : server1Host, 'dsPath' : server1Path, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'DNToAdd' : entry.getDn(), 'listAttributes' : entry.getAttrList() } [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'DNToModify' : entry.getDn(), 'listAttributes' : mods[i][0], 'changetype' : changetypes[i][0] } { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'description' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'description' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, server1, [server2], synchroSuffix ] { 'location' : clientHost, 'dsPath' : clientPath, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'dsDn' : [entry.getDn()] } 'Replication: Conflict: mod_replace_vs_mod_add_multi. \ mod_replace vs mod_add on a multi-valued attribute' { 'location' : server1Host, 'dsPath' : server1Path, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'DNToAdd' : entry.getDn(), 'listAttributes' : entry.getAttrList() } [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'DNToModify' : entry.getDn(), 'listAttributes' : mods[i][0], 'changetype' : changetypes[i][0] } { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'description' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'description' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, server1, [server2], synchroSuffix ] { 'location' : clientHost, 'dsPath' : clientPath, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'dsDn' : [entry.getDn()] } 'Replication: Conflict: mod_del_vs_mod_replace_multi. \ mod_del vs mod_replace on a multi-valued attribute' { 'location' : server1Host, 'dsPath' : server1Path, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'DNToAdd' : entry.getDn(), 'listAttributes' : entry.getAttrList() } [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'DNToModify' : entry.getDn(), 'listAttributes' : mods[i][0], 'changetype' : changetypes[i][0] } { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'description' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'description' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, server1, [server2], synchroSuffix ] { 'location' : clientHost, 'dsPath' : clientPath, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'dsDn' : [entry.getDn()] } 'Replication: Conflict: mod_replace_vs_mod_del_multi. \ mod_replace vs mod_del on a multi-valued attribute' { 'location' : server1Host, 'dsPath' : server1Path, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'DNToAdd' : entry.getDn(), 'listAttributes' : entry.getAttrList() } [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'DNToModify' : entry.getDn(), 'listAttributes' : mods[i][0], 'changetype' : changetypes[i][0] } { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'description' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : entry.getDn(), 'dsFilter' : 'objectclass=*', 'dsAttributes' : 'description' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, server1, [server2], synchroSuffix ] { 'location' : clientHost, 'dsPath' : clientPath, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'dsDn' : [entry.getDn()] } 'Replication: Conflict: add_child_del_parent. \ Add a child vs delete his parent' { 'location' : server1Host, 'dsPath' : server1Path, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'DNToAdd' : parentEntry.getDn(), 'listAttributes' : parentEntry.getAttrList() } [ clientHost, clientPath, [server1, server2] ] { 'location' : server2Host, 'dsPath' : server2Path, 'dsInstanceHost' : server2Host, 'dsInstancePort' : server2.getPort(), 'dsInstanceDn' : server2.getRootDn(), 'dsInstancePswd' : server2.getRootPwd(), 'DNToAdd' : childEntry.getDn(), 'listAttributes' : childEntry.getAttrList() } { 'location' : clientHost, 'dsPath' : clientPath, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'dsDn' : [parentEntry.getDn()] } { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : synchroSuffix, 'dsFilter' : 'givenname=DUMMY ENTRY', 'dsAttributes' : 'ds-sync-conflict cn' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : 'cn=monitor', 'dsFilter' : monitorFilter, 'dsAttributes' : monitorCounters } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : synchroSuffix, 'dsFilter' : 'givenname=DUMMY ENTRY', 'dsAttributes' : 'ds-sync-conflict cn' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : 'cn=monitor', 'dsFilter' : monitorFilter, 'dsAttributes' : monitorCounters } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, server1, [server2], synchroSuffix ] { 'location' : clientHost, 'dsPath' : clientPath, 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsDn' : addedEntries[i] } 'Replication: Conflict: del_parent_add_child. \ Delete a parent vs add his child' { 'location' : server1Host, 'dsPath' : server1Path, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'DNToAdd' : parentEntry.getDn(), 'listAttributes' : parentEntry.getAttrList() } [ clientHost, clientPath, [server1, server2] ] { 'location' : clientHost, 'dsPath' : clientPath, 'dsInstanceHost' : server1Host, 'dsInstancePort' : server1.getPort(), 'dsInstanceDn' : server1.getRootDn(), 'dsInstancePswd' : server1.getRootPwd(), 'dsDn' : [parentEntry.getDn()] } { 'location' : server2Host, 'dsPath' : server2Path, 'dsInstanceHost' : server2Host, 'dsInstancePort' : server2.getPort(), 'dsInstanceDn' : server2.getRootDn(), 'dsInstancePswd' : server2.getRootPwd(), 'DNToAdd' : childEntry.getDn(), 'listAttributes' : childEntry.getAttrList() } { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : synchroSuffix, 'dsFilter' : 'givenname=DUMMY ENTRY', 'dsAttributes' : 'ds-sync-conflict cn' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : 'cn=monitor', 'dsFilter' : monitorFilter, 'dsAttributes' : monitorCounters } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, [server1, server2] ] { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : synchroSuffix, 'dsFilter' : 'givenname=DUMMY ENTRY', 'dsAttributes' : 'ds-sync-conflict cn' } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) { 'location' : server.getHostname(), 'dsPath' : '%s/%s' \ % (server.getDir(), OPENDSNAME), 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsBaseDN' : 'cn=monitor', 'dsFilter' : monitorFilter, 'dsAttributes' : monitorCounters } '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \ % (server.getHostname(), server.getPort(), searchResult) [ clientHost, clientPath, server1, [server2], synchroSuffix ] { 'location' : clientHost, 'dsPath' : clientPath, 'dsInstanceHost' : server.getHostname(), 'dsInstancePort' : server.getPort(), 'dsInstanceDn' : server.getRootDn(), 'dsInstancePswd' : server.getRootPwd(), 'dsDn' : addedEntries[i] }