/******************************************************************************** * CruiseControl, a Continuous Integration Toolkit * Copyright (c) 2001, ThoughtWorks, Inc. * 200 E. Randolph, 25th Floor * Chicago, IL 60601 USA * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * + Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * + Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. * * + Neither the name of ThoughtWorks, Inc., CruiseControl, nor the * names of its contributors may be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ********************************************************************************/ package net.sourceforge.cruisecontrol.builders; // import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.PipedInputStream; import java.io.PipedOutputStream; import junit.framework.TestCase; import net.sourceforge.cruisecontrol.CruiseControlException; import net.sourceforge.cruisecontrol.util.Commandline; import net.sourceforge.cruisecontrol.util.MockCommandline; import net.sourceforge.cruisecontrol.util.MockProcess; // import org.jdom.Element; public class RakeBuilderTest extends TestCase { static class InputBasedMockCommandLineBuilder { Commandline buildCommandline(final InputStream inputStream) { final MockCommandline mockCommandline = getMockCommandline(); mockCommandline.setAssertCorrectCommandline(false); mockCommandline.setProcessErrorStream(new PipedInputStream()); mockCommandline.setProcessInputStream(inputStream); mockCommandline.setProcessOutputStream(new PipedOutputStream()); return mockCommandline; } MockCommandline getMockCommandline() { return new MockCommandline(); } } // process that times out... static class TimeoutProcess extends MockProcess { private long timeoutMillis; TimeoutProcess(long timeoutMillis) { this.timeoutMillis = timeoutMillis; } public synchronized void destroy() { notifyAll(); } public int waitFor() throws InterruptedException { synchronized (this) { try { this.wait(timeoutMillis); } catch (InterruptedException e) { } } return super.waitFor(); } } protected void setUp() throws Exception { //properties = new Hashtable(); //properties.put("label", "200.1.23"); } public void tearDown() { //properties = null; } public void testValidate() { RakeBuilder builder = new RakeBuilder(); try { builder.validate(); } catch (CruiseControlException e) { fail("rakebuilder has no required attributes"); } builder.setTime("0100"); builder.setBuildFile("buildfile"); builder.setTarget("target"); try { builder.validate(); } catch (CruiseControlException e) { fail("validate should not throw exceptions when options are set."); } } /* public void testBuild() throws Exception { final InputStream emptyInputStream = new ByteArrayInputStream("".getBytes()); final RakeBuilder builder = new RakeBuilder() { protected RakeScript getRakeScript() { return new RakeScript() { public Commandline getCommandLine() { return new InputBasedMockCommandLineBuilder().buildCommandline(emptyInputStream); } }; } }; builder.setBuildFile("rakefile.rb"); builder.setTarget("target"); builder.validate(); HashMap buildProperties = new HashMap(); Element buildElement = builder.build(buildProperties); int infoCount = getInfoCount(buildElement); assertEquals(1, infoCount); } */ /* public void testBuildTimeout() throws Exception { final InputStream emptyInputStream = new ByteArrayInputStream("".getBytes()); final RakeBuilder builder = new RakeBuilder() { protected RakeScript getRakeScript() { return new RakeScript() { public Commandline getCommandLine() { return new InputBasedMockCommandLineBuilder().buildCommandline(emptyInputStream); } }; } }; builder.setBuildFile("rakefile.rb"); builder.setTarget("target"); builder.setTimeout(5); builder.validate(); HashMap buildProperties = new HashMap(); long startTime = System.currentTimeMillis(); Element buildElement = builder.build(buildProperties); assertTrue((System.currentTimeMillis() - startTime) < 9 * 1000L); assertTrue(buildElement.getAttributeValue("error").indexOf("timeout") >= 0); } */ /*public void testValidateBuildFileWorksForNonDefaultDirectory() throws IOException, CruiseControlException { File rakeworkdir = new File("rakeworkdir"); rakeworkdir.mkdir(); File file = File.createTempFile("rakefile", ".rb", rakeworkdir); RakeBuilder builder = new RakeBuilder(); builder.setTarget("target"); builder.setBuildFile("buildfile"); builder.setWorkingDir(rakeworkdir.getAbsolutePath()); builder.setBuildFile(file.getName()); builder.validateBuildFileExists(); builder.setBuildFile(file.getAbsolutePath()); builder.validateBuildFileExists(); file.delete(); try { builder.validateBuildFileExists(); fail(); } catch (CruiseControlException expected) { } builder.setBuildFile(file.getName()); try { builder.validateBuildFileExists(); fail(); } catch (CruiseControlException expected) { } }*/ /* private int getInfoCount(Element buildElement) { int infoFoundCount = 0; Iterator targetIterator = buildElement.getChildren("message").iterator(); String name; while (targetIterator.hasNext()) { name = ((Element) targetIterator.next()).getAttributeValue("priority"); if (name.equals("info")) { infoFoundCount++; } } return infoFoundCount; } */ }