From a7317dc2bbe4eb85a38d07663cfe084ad18cc7da Mon Sep 17 00:00:00 2001
From: andrug <andrug@localhost>
Date: Tue, 22 Apr 2008 12:29:27 +0000
Subject: [PATCH] allow verdict to check opendsreplication using dsreplication status CLI

---
 opends/tests/system-tests/phases/shared/functions/opendstools.xml |   15 +-
 opends/tests/system-tests/phases/shared/functions/opendsadm.xml   |  226 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 232 insertions(+), 9 deletions(-)

diff --git a/opends/tests/system-tests/phases/shared/functions/opendsadm.xml b/opends/tests/system-tests/phases/shared/functions/opendsadm.xml
index a43c005..76c1464 100755
--- a/opends/tests/system-tests/phases/shared/functions/opendsadm.xml
+++ b/opends/tests/system-tests/phases/shared/functions/opendsadm.xml
@@ -903,5 +903,229 @@
       
     </sequence>
   </function>
-
+  
+  
+  
+  <!-- This function stops DS using the stop-ds script -->
+  <function name="checkOpendsReplication" scope="local">
+    <function-prolog>
+      This function uses dsreplication status to check the replication 
+      of the topology
+    </function-prolog>
+    <function-map-args>
+      <function-arg-def name="instance" type="required">
+        <function-arg-description>
+          opends instance object to run the command
+        </function-arg-description>
+      </function-arg-def>
+      <function-arg-def name="instances" type="required">
+        <function-arg-description>
+          list of opends instances objects
+        </function-arg-description>
+      </function-arg-def>
+      <function-arg-def name="suffix" type="required">
+        <function-arg-description>
+          suffix object of the topology
+        </function-arg-description>
+      </function-arg-def>
+      <function-arg-def name="adminDN" type="optional"
+                                       default="DIRECTORY_INSTANCE_DN">
+        <function-arg-description>
+          Admin Bind DN
+        </function-arg-description>
+        <function-arg-property name="type" value="DN"/>
+      </function-arg-def>
+      <function-arg-def name="adminPwd" type="optional"
+                                       default="DIRECTORY_INSTANCE_PSWD">
+        <function-arg-description>
+          Admin Bind password
+        </function-arg-description>
+        <function-arg-property name="type" value="string"/>
+      </function-arg-def>
+      <function-arg-def name="expectedRC" type="optional" default="0">
+        <function-arg-description>
+          Expected return code value. Default value is 0.
+          Wildcard 'noCheck' to not check the RC
+        </function-arg-description>
+      </function-arg-def>
+      <function-arg-def name="fileFd" type="optional" default="''">
+        <function-arg-description>
+          file descriptor to write message in if needed
+        </function-arg-description>
+      </function-arg-def>
+      
+    </function-map-args>
+    
+    <sequence>
+    
+      <!-- Build the Command -->
+      <script>
+        STAFCmdParamsList=[]
+        STAFCmdParams=''
+        
+        dsBinPath='%s/bin' % (instance.getInstallDir()) 
+        STAFCmd='%s/dsreplication' % (dsBinPath)
+        
+        STAFCmdParamsList.append('status -n')
+        STAFCmdParamsList.append('-h %s' % instance.getHost())
+        STAFCmdParamsList.append('-p %s' % instance.getLDAPPort())
+        STAFCmdParamsList.append('-b %s' % suffix.getSuffixDn())
+        STAFCmdParamsList.append('-I "%s"' % adminDN)
+        STAFCmdParamsList.append('-w "%s"' % adminPwd)
+        STAFCmdParams=' '.join(STAFCmdParamsList)
+      </script>
+      
+      <call function="'writeStartTagOperation'">
+      { 'tagName' : 'checkOpendsReplication',
+        'fileFd'  : fileFd }
+      </call>
+      <call function="'writeMessage'">
+      { 'fileFd'  : fileFd,
+        'content' : '%s %s' % (STAFCmd, STAFCmdParams)
+      }
+      </call>
+      
+      
+      <!--== Run dsreplication status ==-->
+      <call function="'runCommand'">
+        { 'name'      : 'opendsReplicationStatus on %s' % \
+                        instance.getHost(),
+          'location'  : instance.getHost(),
+          'command'   : STAFCmd,
+          'arguments' : STAFCmdParams,
+          'path'      : dsBinPath,
+          'fileFd'    : fileFd
+        }
+      </call>
+      <script>
+        cmdRC     = STAXResult[0]
+        cmdOutput = STAXResult[1]
+      </script>
+      
+      
+      <!--== Check dsreplication status outputs if command succedded ==-->
+      <if expr="cmdRC == 0">
+        <sequence>
+          <call function="'writeStartTagOperation'">
+          { 'tagName' : 'checkReplicationResults',
+            'fileFd'  : fileFd }
+          </call>
+          
+          <script>
+            # transform output string into a list (each element is a line)
+            cmdOutput = cmdOutput.split('\n')
+            list = STAXGlobal([])
+          </script>
+          
+          <!--== For each instances, get nb of replicated entries ==-->
+          <iterate in="instances" var="instance">
+            <sequence>
+              <script>
+                serverName = '%s:%s' % \
+                             (instance.getHost(),instance.getLDAPPort())
+                nbEntries = NOT_DEFINED
+                
+                for e in cmdOutput:
+                  if e.count(serverName) > 0 :
+                    # serverName line is found, extract nb of entries
+                    e = e.split(':')
+                    nbEntries = e[2].strip()
+                
+                list = list.append([serverName,nbEntries])
+              </script>
+            </sequence>
+          </iterate>
+          
+          <!--== Check that all instances have the same nb of entries    ==-->
+          <!--== Build sList [[serverName1 serverName2 .., nbEntry1],..] ==-->
+          <script>
+            sList = STAXGlobal([])
+            while list != []:
+              element1 = list.pop(0)
+              isRecorded = 0
+              i = 0
+              for element2 in list:
+                if element1[1] == element2[1]:
+                  # same nb of entries
+                  isAlreadyExist = 0
+                  j = 0
+                  for e in sList:
+                    if element1[1] == e[1]:
+                      # some serverName already recorded with same
+                      # nb of entries, add new serverName to the list
+                      sList[j] = '%s %s' % (e[0],element1[0])
+                      isAlreadyExist = 1
+                      isRecorded = 1
+                    j += 1
+                  
+                  if isAlreadyExist == 0:
+                    # new nb of entries, add a new sub list
+                    s1 = '%s %s' % (element1[0],element2[0])
+                    sList = sList.append( [s1 ,element1[1]] )
+                    isRecorded = 1
+                  
+                  # remove element2 from the main list
+                  trash = list.pop(i)
+                  break
+                i += 1
+              # end of for
+              
+              if isRecorded == 0:
+                # record only element1
+                sList = sList.append([element1[0],element1[1]])
+          </script>
+          <message>'TRACE : sList = %s' % sList</message>
+          
+          <if expr="len(sList) == 1">
+            <sequence>
+              <script>
+                cmdOutput='All intances have the same number of entries (%s)'%\
+                      sList[0][1]
+                cmdRC = 0
+              </script>
+            </sequence>
+          <else>
+            <sequence>
+              <script>
+                cmdOutput='All intances have NOT the same nb of entries (%s)'%\
+                      sList[0][1]
+                cmdRC = 1
+              </script>
+              <iterate in="sList" var="_list">
+                <call function="'writeMessage'">
+                { 'fileFd'  : fileFd,
+                  'content' : 'INFO : instances %s have %s nb of entries' % \
+                              (_list[0],_list[1])
+                }
+                </call>
+              </iterate>
+            </sequence>
+          </else>
+          </if>
+          <call function="'checkRC'">
+            { 'returncode' : cmdRC,
+              'result'     : cmdOutput,
+              'fileFd'     : fileFd }
+          </call>
+          <call function="'writeEndTagOperation'">
+            {'fileFd'  : fileFd}
+          </call>
+          
+        </sequence>
+      </if>
+      
+      <!--== End of function ==-->
+      <call function="'checkRC'">
+        { 'returncode' : cmdRC,
+          'result'     : cmdOutput,
+          'fileFd'     : fileFd }
+      </call>
+      <call function="'writeEndTagOperation'">
+        {'fileFd'  : fileFd}
+      </call>
+      <return>cmdRC</return>
+  </sequence>
+  </function>
+  
 </stax>
+
diff --git a/opends/tests/system-tests/phases/shared/functions/opendstools.xml b/opends/tests/system-tests/phases/shared/functions/opendstools.xml
index a51accd..ee3c0d2 100644
--- a/opends/tests/system-tests/phases/shared/functions/opendstools.xml
+++ b/opends/tests/system-tests/phases/shared/functions/opendstools.xml
@@ -74,16 +74,15 @@
       
       
       <!--==== Check replication synchronization =========-->
-      <!--
-      <call function="'checkReplicationSynchro'">
-          { 'instance' : instance,
-            'fileFd'   : fileFd
+      <call function="'checkOpendsReplication'">
+          {
+            'instance'  : instance,
+            'instances' : instances,
+            'suffix'    : suffix,
+            'fileFd'    : fileFd
           }
       </call>
-      <script>
-        errNum += STAXResult[0][0]
-      </script>
-      -->
+      <script> _errNum += STAXResult </script>
       
       
       <!--==== Compare entries =========-->

--
Gitblit v1.10.0