buildframework/helium/tools/common/java/src/com/nokia/ant/AtsCondition.java
changeset 179 d8ac696cc51f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/common/java/src/com/nokia/ant/AtsCondition.java	Wed Dec 23 19:29:07 2009 +0200
@@ -0,0 +1,113 @@
+/*
+* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+ 
+package com.nokia.ant;
+
+import com.nokia.helium.core.ant.types.ConditionType;
+import com.nokia.helium.core.ant.types.*;
+import com.nokia.helium.signal.ant.taskdefs.*;
+import com.nokia.helium.signal.ant.types.*;
+
+import org.apache.log4j.Logger;
+import java.util.Iterator;
+import java.net.URL;
+
+import org.dom4j.Document;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+
+/**
+ * Condition to read check from diamonds and tell if ats has failed
+ * @ant.type name="hasAtsPassed"
+ */
+public class AtsCondition extends ConditionType
+{
+    private Logger log = Logger.getLogger(AtsCondition.class);
+    private int sleeptimesecs = 60;
+    
+    public void setSleeptime(int seconds)
+    {
+        sleeptimesecs = seconds;
+    }
+    
+    /** Read from diamonds and signal if ats failed */
+    public boolean eval()
+    {
+        String bid = project.getProperty("diamonds.build.id");
+        if (bid == null)
+            log.info("Diamonds not enabled");
+        else
+        {
+            boolean testsfound = false;
+            log.info("Looking for tests in diamonds");
+            SAXReader xmlReader = new SAXReader();
+            
+            while (!testsfound)
+            {
+                Document antDoc = null;
+                
+                try {
+                    URL url = new URL("http://" + project.getProperty("diamonds.host") + bid + "?fmt=xml");
+                    antDoc = xmlReader.read(url);
+                } catch (Exception e) {
+                    // We are Ignoring the errors as no need to fail the build.
+                    log.error("Not able to read the Diamonds URL http://" + project.getProperty("diamonds.host") + bid + "?fmt=xml" + e.getMessage());
+                }
+                  
+                for (Iterator iterator = antDoc.selectNodes("//test/failed").iterator(); iterator.hasNext();)
+                {
+                    testsfound = true;
+                    Element e = (Element) iterator.next();
+                    String failed = e.getText();
+                    if (!failed.equals("0"))
+                    {
+                        log.error("ATS tests failed");
+                        
+                        for (Iterator iterator2 = antDoc.selectNodes("//actual_result").iterator(); iterator2.hasNext();)
+                        {
+                            Element e2 = (Element) iterator2.next();
+                            log.error(e2.getText());
+                        }
+                        return false;
+                    }
+                }
+                
+                int noofdrops = Integer.parseInt(project.getProperty("drop.file.counter"));
+                if (noofdrops > 0)
+                {
+                    int testsrun = antDoc.selectNodes("//test").size();
+                    if (testsrun < noofdrops)
+                    {
+                        log.info(testsrun + " test completed, " + noofdrops + " total");
+                        testsfound = false;
+                    }
+                }
+                if (!testsfound)
+                {
+                    log.info("Tests not found sleeping for " + sleeptimesecs + " seconds");
+                    try {
+                    Thread.sleep(sleeptimesecs * 1000);
+                    } catch (InterruptedException e) {
+                        // This will not affect the build process so ignoring.
+                        log.debug("Interrupted while reading ATS build status " + e.getMessage());
+                    }
+                }
+            }
+        }
+        return true;
+    }
+}
\ No newline at end of file