mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

ugaston
26.10.2008 ee5a1f4952be32de1ef709afe294b28e49c27ab0
New repl conflict testcases + fixes + style update
1 files modified
519 ■■■■■ changed files
opends/tests/functional-tests/testcases/replication/conflict/conflict.xml 519 ●●●●● patch | view | raw | blame | history
opends/tests/functional-tests/testcases/replication/conflict/conflict.xml
@@ -112,7 +112,6 @@
          <!-- ============================================== -->
          <!-- ============================================== -->
          <!--- Test Case information
          #@TestMarker          Replication Conflict Tests
          #@TestName            Replication: Conflict: Basic check
@@ -2756,6 +2755,7 @@
                               in="[server1, server2]" 
                               indexvar="i">
                <if expr="len(addedEntries[i]) != 0">
                  <paralleliterate var="entryToDelete" in="addedEntries[i]">
                  <call function="'ldapDeleteWithScript'">
                    { 'location'       : clientHost,
                      'dsPath'         : clientPath,
@@ -2763,9 +2763,10 @@
                      'dsInstancePort' : server.getPort(),
                      'dsInstanceDn'   : server.getRootDn(),
                      'dsInstancePswd' : server.getRootPwd(),
                      'dsDn'           : addedEntries[i]
                        'dsDn'           : [entryToDelete]
                    }
                  </call>
                  </paralleliterate>
                </if>
              </paralleliterate>
@@ -3019,6 +3020,7 @@
                               in="[server1, server2]" 
                               indexvar="i">
                <if expr="len(addedEntries[i]) != 0">
                  <paralleliterate var="entryToDelete" in="addedEntries[i]">
                  <call function="'ldapDeleteWithScript'">
                    { 'location'       : clientHost,
                      'dsPath'         : clientPath,
@@ -3026,9 +3028,10 @@
                      'dsInstancePort' : server.getPort(),
                      'dsInstanceDn'   : server.getRootDn(),
                      'dsInstancePswd' : server.getRootPwd(),
                      'dsDn'           : addedEntries[i]
                        'dsDn'           : [entryToDelete]
                    }
                  </call>
                  </paralleliterate>
                </if>
              </paralleliterate>
@@ -3043,6 +3046,516 @@
            </sequence>
          </testcase>            
          <!--- Test Case information
          #@TestMarker         Replication Conflict Tests
          #@TestName           Replication: Conflict: double_add
          #@TestID             double_add
          #@TestPurpose        Double add (same dn, different uid)
          #@TestPreamble
          #@TestSteps          Disconnect Replication Servers
          #@TestSteps          server1: add entry cn=F with uid=1
          #@TestSteps          server2: add entry cn=F with uid=2
          #@TestSteps          Re-connect Replication Servers
          #@TestSteps          Check servers are synchronised
          #@TestPostamble
          #@TestResult         Success if trees are synchronised
          -->
          <testcase name="getTestCaseName
                          ('double_add')">
            <sequence>
              <call function="'testCase_Preamble'"/>
              <message>
                'Replication: Conflict: double_add. \
                Double add (same dn, different uid)'
              </message>
              <script>
                entry1 = Entry('cn=F')
                entry1.addAttr('uid', '1')
                entry1.addAttr('givenname', 'DUMMY ENTRY')
                entry2 = Entry('cn=F')
                entry2.addAttr('uid', '2')
                entry2.addAttr('givenname', 'DUMMY ENTRY')
                entriesToAdd = [entry1, entry2]
              </script>
              <!-- Disconnect Replication Servers -->
              <call function="'disconnectReplicationServers'">
                [ clientHost, clientPath, [server1, server2] ]
              </call>
              <iterate var="server"
                       in="[server1, server2]"
                       indexvar="i">
                <sequence>
                  <!-- Add entry on one of the servers -->
                  <call function="'addAnEntry'">
                    { 'location'       : server.getHostname(),
                      'dsPath'         : '%s/%s' \
                                         % (server.getDir(), OPENDSNAME),
                      'dsInstanceHost' : server.getHostname(),
                      'dsInstancePort' : server.getPort(),
                      'dsInstanceDn'   : server.getRootDn(),
                      'dsInstancePswd' : server.getRootPwd(),
                      'DNToAdd'        : entriesToAdd[i].getDn(),
                      'listAttributes' : entriesToAdd[i].getAttrList()
                    }
                  </call>
                </sequence>
              </iterate>
              <!-- Check modifies have not been propagated -->
              <paralleliterate var="server" in="[server1, server2]">
                <sequence>
                  <call function="'ldapSearchWithScript'">
                    { '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 uid cn',
                      'logStderr'      : False
                    }
                  </call>
                  <script>
                    searchRC = STAXResult[0][0]
                    searchResult = STAXResult[0][1]
                    resultLength = len(searchResult) > 0
                  </script>
                  <if expr="resultLength != 0">
                    <sequence>
                      <message>
                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
                        % (server.getHostname(), server.getPort(), searchResult)
                      </message>
                    </sequence>
                  </if>
                  <call function="'ldapSearchWithScript'">
                    { '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,
                      'logStderr'      : False
                    }
                  </call>
                  <script>
                    searchRC = STAXResult[0][0]
                    searchResult = STAXResult[0][1]
                    resultLength = len(searchResult) > 0
                  </script>
                  <if expr="resultLength != 0">
                    <sequence>
                      <message>
                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
                        % (server.getHostname(), server.getPort(), searchResult)
                      </message>
                    </sequence>
                  </if>
                </sequence>
              </paralleliterate>
              <!-- Reconnect Replication Servers -->
              <call function="'reconnectReplicationServers'">
                [ clientHost, clientPath, [server1, server2] ]
              </call>
              <!-- Check conflict is resolved -->
              <paralleliterate var="server"
                               in="[server1, server2]"
                               indexvar="i">
                <sequence>
                  <call function="'ldapSearchWithScript'">
                    { '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 uid cn',
                      'logStderr'      : False
                    }
                  </call>
                  <script>
                    searchRC = STAXResult[0][0]
                    searchResult = STAXResult[0][1]
                    resultLength = len(searchResult) > 0
                  </script>
                  <if expr="resultLength != 0">
                    <sequence>
                      <message>
                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
                        % (server.getHostname(), server.getPort(), searchResult)
                      </message>
                      <script>
                        resultDnList = []
                        for line in searchResult.splitlines():
                          if line.find('dn: ') != -1:
                            resultDn = line[len('dn: '):]
                            resultDnList.append(resultDn)
                        addedEntries[i] = resultDnList
                      </script>
                    </sequence>
                    <else>
                      <script>
                        addedEntries[i] = []
                      </script>
                    </else>
                  </if>
                  <call function="'ldapSearchWithScript'">
                    { '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,
                      'logStderr'      : False
                    }
                  </call>
                  <script>
                    searchRC = STAXResult[0][0]
                    searchResult = STAXResult[0][1]
                    resultLength = len(searchResult) > 0
                  </script>
                  <if expr="resultLength != 0">
                    <sequence>
                      <message>
                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
                        % (server.getHostname(), server.getPort(), searchResult)
                      </message>
                    </sequence>
                  </if>
                </sequence>
              </paralleliterate>
              <!-- Verify the synchronization of the trees among the servers in
                the topology -->
              <call function="'verifyTrees'">
                [ clientHost, clientPath, server1, [server2], synchroSuffix ]
              </call>
              <!-- Delete added entries -->
              <script>
                list1 = addedEntries[0]
                list2 = addedEntries[1]
                toRemove = []
                # remove potential redundancies, to avoid deleting them twice
                for addedEntry in list2:
                  if addedEntry in list1:
                    toRemove.append(addedEntry)
                for ent in toRemove:
                  list2.remove(ent)
              </script>
              <paralleliterate var="server"
                               in="[server1, server2]"
                               indexvar="i">
                <if expr="len(addedEntries[i]) != 0">
                  <paralleliterate var="entryToDelete" in="addedEntries[i]">
                    <call function="'ldapDeleteWithScript'">
                      { 'location'       : clientHost,
                        'dsPath'         : clientPath,
                        'dsInstanceHost' : server.getHostname(),
                        'dsInstancePort' : server.getPort(),
                        'dsInstanceDn'   : server.getRootDn(),
                        'dsInstancePswd' : server.getRootPwd(),
                        'dsDn'           : [entryToDelete]
                      }
                    </call>
                  </paralleliterate>
                </if>
              </paralleliterate>
              <script>
                knownIssue(3401)
              </script>
              <call function="'testCase_Postamble'"/>
            </sequence>
          </testcase>
          <!--- Test Case information
          #@TestMarker         Replication Conflict Tests
          #@TestName           Replication: Conflict: double_add_single_del_1
          #@TestID             double_add_single_del_1
          #@TestPurpose        Add twice same dn, then delete it in one server
          #@TestPreamble
          #@TestSteps          Disconnect Replication Servers
          #@TestSteps          server1: add entry cn=DN1 with uid=1
          #@TestSteps          server2: add entry cn=DN1 with uid=2
          #@TestSteps          Re-connect Replication Servers
          #@TestSteps          server1: delete entry cn=DN1
          #@TestSteps          Check servers are synchronised
          #@TestPostamble
          #@TestResult         Success if trees are synchronised
          -->
          <testcase name="getTestCaseName
                          ('double_add')">
            <sequence>
              <call function="'testCase_Preamble'"/>
              <message>
                'Replication: Conflict: double_add. \
                Double add (same dn, different uid)'
              </message>
              <script>
                entry1 = Entry('cn=DN1')
                entry1.addAttr('uid', '1')
                entry1.addAttr('givenname', 'DUMMY ENTRY')
                entry2 = Entry('cn=DN1')
                entry2.addAttr('uid', '2')
                entry2.addAttr('givenname', 'DUMMY ENTRY')
                entriesToAdd = [entry1, entry2]
              </script>
              <!-- Disconnect Replication Servers -->
              <call function="'disconnectReplicationServers'">
                [ clientHost, clientPath, [server1, server2] ]
              </call>
              <iterate var="server"
                       in="[server1, server2]"
                       indexvar="i">
                <sequence>
                  <!-- Add entry on one of the servers -->
                  <call function="'addAnEntry'">
                    { 'location'       : server.getHostname(),
                      'dsPath'         : '%s/%s' \
                                         % (server.getDir(), OPENDSNAME),
                      'dsInstanceHost' : server.getHostname(),
                      'dsInstancePort' : server.getPort(),
                      'dsInstanceDn'   : server.getRootDn(),
                      'dsInstancePswd' : server.getRootPwd(),
                      'DNToAdd'        : entriesToAdd[i].getDn(),
                      'listAttributes' : entriesToAdd[i].getAttrList()
                    }
                  </call>
                </sequence>
              </iterate>
              <!-- Check modifies have not been propagated -->
              <paralleliterate var="server" in="[server1, server2]">
                <sequence>
                  <call function="'ldapSearchWithScript'">
                    { '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 uid cn',
                      'logStderr'      : False
                    }
                  </call>
                  <script>
                    searchRC = STAXResult[0][0]
                    searchResult = STAXResult[0][1]
                    resultLength = len(searchResult) > 0
                  </script>
                  <if expr="resultLength != 0">
                    <sequence>
                      <message>
                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
                        % (server.getHostname(), server.getPort(), searchResult)
                      </message>
                    </sequence>
                  </if>
                  <call function="'ldapSearchWithScript'">
                    { '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,
                      'logStderr'      : False
                    }
                  </call>
                  <script>
                    searchRC = STAXResult[0][0]
                    searchResult = STAXResult[0][1]
                    resultLength = len(searchResult) > 0
                  </script>
                  <if expr="resultLength != 0">
                    <sequence>
                      <message>
                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
                        % (server.getHostname(), server.getPort(), searchResult)
                      </message>
                    </sequence>
                  </if>
                </sequence>
              </paralleliterate>
              <!-- Reconnect Replication Servers -->
              <call function="'reconnectReplicationServers'">
                [ clientHost, clientPath, [server1, server2] ]
              </call>
              <!-- Delete entry on server1-->
              <call function="'ldapDeleteWithScript'">
                { 'location'       : clientHost,
                  'dsPath'         : clientPath,
                  'dsInstanceHost' : server1Host,
                  'dsInstancePort' : server1.getPort(),
                  'dsInstanceDn'   : server1.getRootDn(),
                  'dsInstancePswd' : server1.getRootPwd(),
                  'dsDn'           : [entry1.getDn()]
                }
              </call>
              <!-- Check conflict is resolved -->
              <paralleliterate var="server"
                               in="[server1, server2]"
                               indexvar="i">
                <sequence>
                  <call function="'ldapSearchWithScript'">
                    { '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 uid cn',
                      'logStderr'      : False
                    }
                  </call>
                  <script>
                    searchRC = STAXResult[0][0]
                    searchResult = STAXResult[0][1]
                    resultLength = len(searchResult) > 0
                  </script>
                  <if expr="resultLength != 0">
                    <sequence>
                      <message>
                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
                        % (server.getHostname(), server.getPort(), searchResult)
                      </message>
                      <script>
                        resultDnList = []
                        for line in searchResult.splitlines():
                          if line.find('dn: ') != -1:
                            resultDn = line[len('dn: '):]
                            resultDnList.append(resultDn)
                        addedEntries[i] = resultDnList
                      </script>
                    </sequence>
                    <else>
                      <script>
                        addedEntries[i] = []
                      </script>
                    </else>
                  </if>
                  <call function="'ldapSearchWithScript'">
                    { '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,
                      'logStderr'      : False
                    }
                  </call>
                  <script>
                    searchRC = STAXResult[0][0]
                    searchResult = STAXResult[0][1]
                    resultLength = len(searchResult) > 0
                  </script>
                  <if expr="resultLength != 0">
                    <sequence>
                      <message>
                        '+++++++++++ LDAPSEARCH RESULT for %s:%s ++++++++\n%s' \
                        % (server.getHostname(), server.getPort(), searchResult)
                      </message>
                    </sequence>
                  </if>
                </sequence>
              </paralleliterate>
              <!-- Verify the synchronization of the trees among the servers in
                the topology -->
              <call function="'verifyTrees'">
                [ clientHost, clientPath, server1, [server2], synchroSuffix ]
              </call>
              <!-- Delete added entries -->
              <script>
                list1 = addedEntries[0]
                list2 = addedEntries[1]
                toRemove = []
                # remove potential redundancies, to avoid deleting them twice
                for addedEntry in list2:
                  if addedEntry in list1:
                    toRemove.append(addedEntry)
                for ent in toRemove:
                  list2.remove(ent)
              </script>
              <paralleliterate var="server"
                               in="[server1, server2]"
                               indexvar="i">
                <if expr="len(addedEntries[i]) != 0">
                  <paralleliterate var="entryToDelete" in="addedEntries[i]">
                    <call function="'ldapDeleteWithScript'">
                      { 'location'       : clientHost,
                        'dsPath'         : clientPath,
                        'dsInstanceHost' : server.getHostname(),
                        'dsInstancePort' : server.getPort(),
                        'dsInstanceDn'   : server.getRootDn(),
                        'dsInstancePswd' : server.getRootPwd(),
                        'dsDn'           : [entryToDelete]
                      }
                    </call>
                  </paralleliterate>
                </if>
              </paralleliterate>
              <script>
                knownIssue(3401)
              </script>
              <call function="'testCase_Postamble'"/>
            </sequence>
          </testcase>
          <import machine="STAF_LOCAL_HOSTNAME"
            file="'%s/testcases/replication/replication_cleanup.xml' 
                  % (TESTS_DIR)"/>