package net.sourceforge.cruisecontrol.builders; import junit.framework.TestCase; import net.sourceforge.cruisecontrol.Builder; import net.sourceforge.cruisecontrol.CruiseControlException; import net.sourceforge.cruisecontrol.distributed.core.MulticastDiscoveryTest; import net.sourceforge.cruisecontrol.distributed.core.PropertiesHelper; import net.sourceforge.cruisecontrol.distributed.core.RemoteResult; import net.sourceforge.cruisecontrol.distributed.core.RemoteResultTest; import java.util.HashMap; import java.util.Map; /** * @author Dan Rollo * Date: Jan 5, 2007 * Time: 2:08:30 AM */ public class DistributedMasterBuilderNoLookupTest extends TestCase { protected void setUp() throws Exception { DistributedMasterBuilderTest.setupInsecurePolicy(); } public void testDistAttribs() throws Exception { final DistributedMasterBuilder masterBuilder = new DistributedMasterBuilder(); try { masterBuilder.validate(); fail("mising child builder"); } catch (CruiseControlException e) { assertEquals("A nested Builder is required for DistributedMasterBuilder", e.getMessage()); } final Builder mockBuilder = new MockBuilder(); masterBuilder.add(mockBuilder); assertNull(masterBuilder.getRemoteResultsInfo()); final RemoteResult remoteResult = (RemoteResult) masterBuilder.createRemoteResult(); assertEquals(1, masterBuilder.getRemoteResultsInfo().length); assertEquals(remoteResult, masterBuilder.getRemoteResultsInfo()[0]); try { masterBuilder.validate(); fail("invalid remote result"); } catch (CruiseControlException e) { assertEquals("'agentDir' is required for " + RemoteResultTest.MSG_SUFFIX_BAD_DISTRIBUTED_CHILD_ELEMENT_RESULT, e.getMessage()); } remoteResult.setAgentDir("agentDir"); try { masterBuilder.validate(); fail("invalid remote result"); } catch (CruiseControlException e) { assertEquals("'masterDir' is required for " + RemoteResultTest.MSG_SUFFIX_BAD_DISTRIBUTED_CHILD_ELEMENT_RESULT, e.getMessage()); } remoteResult.setMasterDir("masterDir"); masterBuilder.validate(); final RemoteResult remoteResult2 = (RemoteResult) masterBuilder.createRemoteResult(); remoteResult2.setAgentDir("."); remoteResult2.setMasterDir("."); assertEquals(2, masterBuilder.getRemoteResultsInfo().length); assertEquals(remoteResult, masterBuilder.getRemoteResultsInfo()[0]); assertEquals(remoteResult2, masterBuilder.getRemoteResultsInfo()[1]); } public void testScheduleDay() throws Exception { final DistributedMasterBuilder masterBuilder = new DistributedMasterBuilder(); final Builder nestedBuilder = new MockBuilder(); nestedBuilder.setDay("Saturday"); nestedBuilder.setMultiple(2); masterBuilder.add(nestedBuilder); assertEquals("Distributed builder should wrap nested builder schedule fields", 7, masterBuilder.getDay()); assertEquals("Distributed builder should wrap nested builder schedule fields", Builder.NOT_SET, masterBuilder.getTime()); assertEquals("Distributed builder should wrap nested builder schedule fields", 2, masterBuilder.getMultiple()); } public void testScheduleTime() throws Exception { final DistributedMasterBuilder masterBuilder = new DistributedMasterBuilder(); final Builder nestedBuilder = new MockBuilder(); nestedBuilder.setTime("530"); masterBuilder.add(nestedBuilder); assertEquals("Distributed builder should wrap nested builder schedule fields", 530, masterBuilder.getTime()); assertEquals("Distributed builder should wrap nested builder schedule fields", Builder.NOT_SET, masterBuilder.getDay()); assertEquals("Distributed builder should wrap nested builder schedule fields", Builder.NOT_SET, masterBuilder.getMultiple()); assertTrue(masterBuilder.isTimeBuilder()); } public void testScheduleMultiple() throws Exception { final DistributedMasterBuilder masterBuilder = new DistributedMasterBuilder(); final Builder nestedBuilder = new MockBuilder(); nestedBuilder.setMultiple(2); masterBuilder.add(nestedBuilder); assertEquals("Distributed builder should wrap nested builder schedule fields", 2, masterBuilder.getMultiple()); assertEquals("Distributed builder should wrap nested builder schedule fields", Builder.NOT_SET, masterBuilder.getTime()); assertEquals("Distributed builder should wrap nested builder schedule fields", Builder.NOT_SET, masterBuilder.getDay()); assertFalse(masterBuilder.isTimeBuilder()); } public void testProjectNameValue() throws Exception { final DistributedMasterBuilder masterBuilder = DistributedMasterBuilderTest.getMasterBuilder_LocalhostONLY(); final Builder nestedBuilder = new MockBuilder(); masterBuilder.add(nestedBuilder); try { masterBuilder.build(new HashMap<String, String>(), null); fail("Missing projectname property should have failed."); } catch (CruiseControlException e) { assertEquals(DistributedMasterBuilder.MSG_MISSING_PROJECT_NAME, e.getMessage()); } final Map<String, String> projectProperties = new HashMap<String, String>(); projectProperties.put(PropertiesHelper.PROJECT_NAME, "testProjectName"); try { masterBuilder.build(projectProperties, null); fail("Null agent should have failed."); } catch (CruiseControlException e) { assertEquals("Distributed build runtime exception", e.getMessage()); } } /** * This test lives here so we don't have to kill the Jini LUS to run it. * @throws Exception if test fails */ public void testPickAgentNoRegistrars() throws Exception { // setup discovery so default logic will not wait to find a LUS MulticastDiscoveryTest.setDiscovery(MulticastDiscoveryTest.getLocalDiscovery()); DistributedMasterBuilder masterBuilder = DistributedMasterBuilderTest.getMasterBuilder_LocalhostONLY(); assertNull("Shouldn't find any available agents", masterBuilder.pickAgent(null, null)); } public void testGetBuildOutputConsumerFails() throws Exception { final DistributedMasterBuilder masterBuilder = new DistributedMasterBuilder(); try { masterBuilder.getBuildOutputConsumer(null, null, null); fail("should be illegal"); } catch (IllegalStateException e) { assertTrue(e.getMessage().contains("never be called")); } } }