diff -r be27ed110b50 -r d8ac696cc51f buildframework/helium/tools/common/java/src/com/nokia/ant/AtsCondition.java --- /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