Added kill old test runs to test models pipeline

Change-Id: I892d00ad0605cda7ea0f64d0e3e0f4f6d9693287
diff --git a/test-groovy-pipeline.groovy b/test-groovy-pipeline.groovy
index 918fc98..61dfae7 100644
--- a/test-groovy-pipeline.groovy
+++ b/test-groovy-pipeline.groovy
@@ -28,6 +28,15 @@
 
 node("docker"){
     try {
+        stage("stop old tests"){
+          if (gerritRef) {
+            def runningTestBuildNums = _getRunningTriggeredTestsBuildNumbers(env["JOB_NAME"], GERRIT_CHANGE_NUMBER, GERRIT_PATCHSET_NUMBER)
+            for(int i=0; i<runningTestBuildNums.size(); i++){
+              common.infoMsg("Old test with run number ${runningTestBuildNums[i]} found, stopping")
+              Jenkins.instance.getItemByFullName(env["JOB_NAME"]).getBuildByNumber(runningTestBuildNums[i]).finish(hudson.model.Result.ABORTED, new java.io.IOException("Aborting build"));
+            }
+          }
+        }
         stage ('Checkout source code'){
           if (gerritRef) {
             // job is triggered by Gerrit
@@ -72,3 +81,14 @@
         common.sendNotification(currentBuild.result, "" ,["slack"])
     }
 }
+@NonCPS
+def _getRunningTriggeredTestsBuildNumbers(jobName, gerritChangeNumber, excludePatchsetNumber){
+  def gerrit = new com.mirantis.mk.Gerrit()
+  def jenkinsUtils = new com.mirantis.mk.JenkinsUtils()
+  def triggeredBuilds= gerrit.getGerritTriggeredBuilds(jenkinsUtils.getJobRunningBuilds(jobName), gerritChangeNumber, excludePatchsetNumber)
+  def buildNums =[]
+  for(int i=0;i<triggeredBuilds.size();i++){
+      buildNums.add(triggeredBuilds[i].number)
+  }
+  return buildNums
+}
diff --git a/test-salt-models-pipeline.groovy b/test-salt-models-pipeline.groovy
index 56c11c3..fad3d4e 100644
--- a/test-salt-models-pipeline.groovy
+++ b/test-salt-models-pipeline.groovy
@@ -4,6 +4,7 @@
  *  DEFAULT_GIT_REF
  *  DEFAULT_GIT_URL
  *  CREDENTIALS_ID
+ *  EXTRA_FORMULAS
  */
 
 def common = new com.mirantis.mk.Common()
@@ -30,6 +31,15 @@
 def merged = false
 node("python&&docker") {
   try{
+    stage("stop old tests"){
+      if (gerritRef) {
+        def runningTestBuildNums = _getRunningTriggeredTestsBuildNumbers(env["JOB_NAME"], GERRIT_CHANGE_NUMBER, GERRIT_PATCHSET_NUMBER)
+        for(int i=0; i<runningTestBuildNums.size(); i++){
+          common.infoMsg("Old test with run number ${runningTestBuildNums[i]} found, stopping")
+          Jenkins.instance.getItemByFullName(env["JOB_NAME"]).getBuildByNumber(runningTestBuildNums[i]).finish(hudson.model.Result.ABORTED, new java.io.IOException("Aborting build"));
+        }
+      }
+    }
     stage("checkout") {
       if (gerritRef) {
         // job is triggered by Gerrit
@@ -118,7 +128,7 @@
       sh("ls -lRa /srv/salt/reclass")
 
       // setup iniot and verify salt master and minions
-      withEnv(["FORMULAS_SOURCE=pkg", "DEBUG=1", "MASTER_HOSTNAME=${masterName}", "MINION_ID=${masterName}", "HOSTNAME=cfg01", "DOMAIN=mk-ci.local"]){
+      withEnv(["FORMULAS_SOURCE=pkg", "EXTRA_FORMULAS=${EXTRA_FORMULAS}", "DEBUG=1", "MASTER_HOSTNAME=${masterName}", "MINION_ID=${masterName}", "HOSTNAME=cfg01", "DOMAIN=mk-ci.local"]){
           sh("bash -c 'echo $MASTER_HOSTNAME'")
           sh("bash -c 'source /srv/salt/scripts/salt-master-init.sh; cd /srv/salt/scripts && system_config'")
           sh("bash -c 'source /srv/salt/scripts/salt-master-init.sh; cd /srv/salt/scripts && saltmaster_bootstrap'")
@@ -145,4 +155,16 @@
 def testMinion(minionName)
 {
   sh("service salt-master restart && service salt-minion restart && sleep 5 && bash -c 'source /srv/salt/scripts/salt-master-init.sh; cd /srv/salt/scripts && verify_salt_minion ${minionName}'")
+}
+
+@NonCPS
+def _getRunningTriggeredTestsBuildNumbers(jobName, gerritChangeNumber, excludePatchsetNumber){
+  def gerrit = new com.mirantis.mk.Gerrit()
+  def jenkinsUtils = new com.mirantis.mk.JenkinsUtils()
+  def triggeredBuilds= gerrit.getGerritTriggeredBuilds(jenkinsUtils.getJobRunningBuilds(jobName), gerritChangeNumber, excludePatchsetNumber)
+  def buildNums =[]
+  for(int i=0;i<triggeredBuilds.size();i++){
+      buildNums.add(triggeredBuilds[i].number)
+  }
+  return buildNums
 }
\ No newline at end of file