package hudson.model; /* * The MIT License * * Copyright (c) 2011, Oracle Corporation, Anton Kozak * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ import com.google.common.collect.Lists; import hudson.matrix.MatrixProject; import hudson.security.AuthorizationMatrixProperty; import hudson.security.AuthorizationStrategy; import hudson.security.GlobalMatrixAuthorizationStrategy; import hudson.security.ProjectMatrixAuthorizationStrategy; import hudson.tasks.LogRotator; import hudson.util.CascadingUtil; import java.io.IOException; import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertNull; import static junit.framework.Assert.assertTrue; import static org.easymock.EasyMock.expect; import static org.powermock.api.easymock.PowerMock.createMock; import static org.powermock.api.easymock.PowerMock.mockStatic; import static org.powermock.api.easymock.PowerMock.replayAll; import static org.powermock.api.easymock.PowerMock.verifyAll; /** * Test for {@link FreeStyleProject} * <p/> * Date: 5/20/11 * * @author Anton Kozak */ @RunWith(PowerMockRunner.class) @PrepareForTest({Hudson.class, User.class}) public class FreeStyleProjectTest { private static final String USER = "admin"; @Test public void testOnCreatedFromScratch() { Hudson hudson = createMock(Hudson.class); AuthorizationStrategy authorizationStrategy = createMock(ProjectMatrixAuthorizationStrategy.class); expect(hudson.getAuthorizationStrategy()).andReturn(authorizationStrategy); mockStatic(Hudson.class); expect(Hudson.getInstance()).andReturn(hudson).anyTimes(); User user = createMock(User.class); expect(user.getId()).andReturn(USER).times(2); mockStatic(User.class); expect(User.current()).andReturn(user); replayAll(); FreeStyleProject freeStyleProject = new FreeStyleProjectMock("testJob"); freeStyleProject.onCreatedFromScratch(); verifyAll(); assertNotNull(freeStyleProject.getCreationTime()); assertEquals(freeStyleProject.getCreatedBy(), USER); List properties = freeStyleProject.getAllProperties(); assertEquals(properties.size(), 1); AuthorizationMatrixProperty property = (AuthorizationMatrixProperty) properties.get(0); assertEquals(property.getGrantedPermissions().keySet().size(), 7); assertNotNull(property.getGrantedPermissions().get(Item.CONFIGURE)); assertTrue(property.getGrantedPermissions().get(Item.CONFIGURE).contains(USER)); } @Test public void testOnCreatedFromScratchGlobalMatrixAuthorizationStrategy() { Hudson hudson = createMock(Hudson.class); AuthorizationStrategy authorizationStrategy = createMock(GlobalMatrixAuthorizationStrategy.class); expect(hudson.getAuthorizationStrategy()).andReturn(authorizationStrategy); mockStatic(Hudson.class); expect(Hudson.getInstance()).andReturn(hudson).anyTimes(); User user = createMock(User.class); expect(user.getId()).andReturn(USER).times(1); mockStatic(User.class); expect(User.current()).andReturn(user); replayAll(); FreeStyleProject freeStyleProject = new FreeStyleProjectMock("testJob"); freeStyleProject.onCreatedFromScratch(); verifyAll(); assertNotNull(freeStyleProject.getCreationTime()); assertEquals(freeStyleProject.getCreatedBy(), USER); List properties = freeStyleProject.getAllProperties(); assertEquals(properties.size(), 0); } @Test public void testOnCreatedFromScratchAnonymousAuthentication() { Hudson hudson = createMock(Hudson.class); mockStatic(Hudson.class); expect(Hudson.getInstance()).andReturn(hudson).anyTimes(); mockStatic(User.class); expect(User.current()).andReturn(null); replayAll(); FreeStyleProject freeStyleProject = new FreeStyleProjectMock("testJob"); freeStyleProject.onCreatedFromScratch(); verifyAll(); assertNotNull(freeStyleProject.getCreationTime()); assertNull(freeStyleProject.getCreatedBy()); List properties = freeStyleProject.getAllProperties(); assertEquals(properties.size(), 0); } @Test public void testOnCopiedFrom() { Hudson hudson = createMock(Hudson.class); AuthorizationStrategy authorizationStrategy = createMock(ProjectMatrixAuthorizationStrategy.class); expect(hudson.getAuthorizationStrategy()).andReturn(authorizationStrategy); mockStatic(Hudson.class); expect(Hudson.getInstance()).andReturn(hudson).anyTimes(); User user = createMock(User.class); expect(user.getId()).andReturn(USER).times(2); mockStatic(User.class); expect(User.current()).andReturn(user); replayAll(); MatrixProject matrixProjectProject = new MatrixProject("matrixProject"); FreeStyleProject freeStyleProject = new FreeStyleProjectMock("testJob"); freeStyleProject.onCopiedFrom(matrixProjectProject); verifyAll(); assertEquals(freeStyleProject.getNextBuildNumber(), 1); assertTrue(freeStyleProject.isHoldOffBuildUntilSave()); assertNotNull(freeStyleProject.getCreationTime()); assertEquals(freeStyleProject.getCreatedBy(), USER); List properties = freeStyleProject.getAllProperties(); assertEquals(properties.size(), 1); AuthorizationMatrixProperty property = (AuthorizationMatrixProperty) properties.get(0); assertEquals(property.getGrantedPermissions().keySet().size(), 7); assertNotNull(property.getGrantedPermissions().get(Item.CONFIGURE)); assertTrue(property.getGrantedPermissions().get(Item.CONFIGURE).contains(USER)); } @Test public void testOnCopiedFromGlobalMatrixAuthorizationStrategy() { Hudson hudson = createMock(Hudson.class); AuthorizationStrategy authorizationStrategy = createMock(GlobalMatrixAuthorizationStrategy.class); expect(hudson.getAuthorizationStrategy()).andReturn(authorizationStrategy); mockStatic(Hudson.class); expect(Hudson.getInstance()).andReturn(hudson).anyTimes(); User user = createMock(User.class); expect(user.getId()).andReturn(USER).times(1); mockStatic(User.class); expect(User.current()).andReturn(user); replayAll(); MatrixProject matrixProjectProject = new MatrixProject("matrixProject"); FreeStyleProject freeStyleProject = new FreeStyleProjectMock("testJob"); freeStyleProject.onCopiedFrom(matrixProjectProject); verifyAll(); assertEquals(freeStyleProject.getNextBuildNumber(), 1); assertTrue(freeStyleProject.isHoldOffBuildUntilSave()); assertNotNull(freeStyleProject.getCreationTime()); assertEquals(freeStyleProject.getCreatedBy(), USER); assertEquals(freeStyleProject.getAllProperties().size(), 0); } @Test public void testOnCopiedFromAnonymousAuthentication() { Hudson hudson = createMock(Hudson.class); mockStatic(Hudson.class); expect(Hudson.getInstance()).andReturn(hudson).anyTimes(); mockStatic(User.class); expect(User.current()).andReturn(null); replayAll(); MatrixProject matrixProjectProject = new MatrixProject("matrixProject"); FreeStyleProject freeStyleProject = new FreeStyleProjectMock("testJob"); freeStyleProject.onCopiedFrom(matrixProjectProject); verifyAll(); assertEquals(freeStyleProject.getNextBuildNumber(), 1); assertTrue(freeStyleProject.isHoldOffBuildUntilSave()); assertNotNull(freeStyleProject.getCreationTime()); assertNull(freeStyleProject.getCreatedBy()); List properties = freeStyleProject.getAllProperties(); assertEquals(properties.size(), 0); } @Test public void testGetLogRotatorFromParent() { FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); parentProject.setLogRotator(new LogRotator(10, 11, 12, 13)); FreeStyleProjectMock childProject1 = new FreeStyleProjectMock("child1"); childProject1.setCascadingProject(parentProject); LogRotator result = childProject1.getLogRotator(); assertNotNull(result); assertEquals(result.getDaysToKeep(), 10); } @Test public void testGetLogRotatorFromChild() { FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); parentProject.setLogRotator(new LogRotator(10, 10, 10, 10)); FreeStyleProjectMock childProject1 = new FreeStyleProjectMock("child1"); childProject1.setLogRotator(new LogRotator(20, 20, 20, 20)); childProject1.setCascadingProject(parentProject); LogRotator result = childProject1.getLogRotator(); assertNotNull(result); assertEquals(result.getDaysToKeep(), 20); } @Test public void testSetLogRotatorValueEqualsWithParent() { FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); parentProject.setLogRotator(new LogRotator(10, 11, 12, 13)); FreeStyleProjectMock childProject1 = new FreeStyleProjectMock("child1"); childProject1.setCascadingProject(parentProject); childProject1.setLogRotator(new LogRotator(10, 11, 12, 13)); childProject1.setCascadingProject(null); // else log rotator will be taken from parent assertNull(childProject1.getLogRotator()); } @Test public void testSetLogRotatorParentNull() { FreeStyleProject childProject1 = new FreeStyleProjectMock("child1"); childProject1.setLogRotator(new LogRotator(10, 11, 12, 13)); assertNotNull(childProject1.getLogRotator()); assertEquals(childProject1.getLogRotator().getDaysToKeep(), 10); } @Test public void testSetCustomWorkspaceValueEqualsWithParent() throws IOException { FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); String customWorkspace = "/tmp"; parentProject.setCustomWorkspace(customWorkspace); FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); childProject.setCascadingProject(parentProject); childProject.setCustomWorkspace(customWorkspace); childProject.setCascadingProject(null); assertNull(childProject.getCustomWorkspace()); } @Test public void testSetCustomWorkspaceValueNotEqualsWithParent() throws IOException { FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); String parentCustomWorkspace = "/tmp"; String childCustomWorkspace = "/tmp1"; parentProject.setCustomWorkspace(parentCustomWorkspace); FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); childProject.setCascadingProject(parentProject); childProject.setCustomWorkspace(childCustomWorkspace); assertEquals(childCustomWorkspace, childProject.getCustomWorkspace()); } @Test public void testSetCustomWorkspaceValueParentNull() throws IOException { String childCustomWorkspace = "/tmp"; FreeStyleProject childProject = new FreeStyleProjectMock("child"); childProject.setCustomWorkspace(childCustomWorkspace); assertEquals(childCustomWorkspace, childProject.getCustomWorkspace()); } @Test public void testGetCustomWorkspace() throws IOException { String customWorkspace = "/tmp"; FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); childProject.setCustomWorkspace(customWorkspace); assertEquals(customWorkspace, childProject.getCustomWorkspace()); FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); parentProject.setCustomWorkspace(customWorkspace); childProject.setCustomWorkspace(" "); childProject.setCascadingProject(parentProject); assertEquals(customWorkspace, childProject.getCustomWorkspace()); parentProject.setCustomWorkspace(" "); assertNull(childProject.getCustomWorkspace()); } @Test public void testSetJdkValueEqualsWithParent() throws IOException { FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); String jdkName = "sun-java5-jdk32"; parentProject.setJDK(jdkName); FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); childProject.setCascadingProject(parentProject); childProject.setJDK(jdkName); childProject.setCascadingProject(null); assertNull(childProject.getJDKName()); } @Test public void testSetJdkValueNotEqualsWithParent() throws IOException { FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); String parentJdkName = "sun-java5-jdk32"; String childJdkName = "sun-java6-jdk32"; parentProject.setJDK(parentJdkName); FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); childProject.setCascadingProject(parentProject); childProject.setJDK(childJdkName); assertEquals(childJdkName, childProject.getJDKName()); } @Test public void testSetJdkValueParentNull() throws IOException { String childJdkName = "sun-java6-jdk32"; FreeStyleProject childProject = new FreeStyleProjectMock("child"); childProject.setJDK(childJdkName); assertEquals(childJdkName, childProject.getJDKName()); } @Test public void testGetJdkName() throws IOException { String JdkName = "sun-java6-jdk32"; FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); childProject.setJDK(JdkName); assertEquals(JdkName, childProject.getJDKName()); FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); parentProject.setJDK(JdkName); childProject.setJDK(" "); childProject.setCascadingProject(parentProject); assertEquals(JdkName, childProject.getJDKName()); parentProject.setJDK(" "); assertNull(childProject.getJDKName()); } @Test public void testSetQuietPeriodEqualsWithParent() throws IOException { String quietPeriod = "10"; int globalQuietPeriod = 4; FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); Hudson hudson = createMock(Hudson.class); expect(hudson.getQuietPeriod()).andReturn(globalQuietPeriod).anyTimes(); mockStatic(Hudson.class); expect(Hudson.getInstance()).andReturn(hudson).anyTimes(); replayAll(); parentProject.setQuietPeriod(quietPeriod); childProject.setCascadingProject(parentProject); childProject.setQuietPeriod(quietPeriod); childProject.setCascadingProject(null); assertEquals(childProject.getQuietPeriod(), globalQuietPeriod); verifyAll(); } @Test public void testSetQuietPeriodEqualsGlobal() throws IOException { String quietPeriod = "4"; int globalQuietPeriod = 4; FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); Hudson hudson = createMock(Hudson.class); expect(hudson.getQuietPeriod()).andReturn(globalQuietPeriod).anyTimes(); mockStatic(Hudson.class); expect(Hudson.getInstance()).andReturn(hudson).anyTimes(); replayAll(); parentProject.setQuietPeriod(quietPeriod); childProject.setCascadingProject(parentProject); childProject.setQuietPeriod(quietPeriod); childProject.setCascadingProject(null); assertEquals(childProject.getQuietPeriod(), globalQuietPeriod); verifyAll(); } @Test public void testSetQuietPeriodNotEqualsWithParent() throws IOException { String parentQuietPeriod = "10"; String childQuietPeriod = "11"; FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); parentProject.setQuietPeriod(parentQuietPeriod); FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); childProject.setCascadingProject(parentProject); childProject.setQuietPeriod(childQuietPeriod); Hudson hudson = createMock(Hudson.class); mockStatic(Hudson.class); expect(Hudson.getInstance()).andReturn(hudson).anyTimes(); replayAll(); assertEquals(childProject.getQuietPeriod(), Integer.parseInt(childQuietPeriod)); verifyAll(); } @Test public void testSetQuietPeriodParentNull() throws IOException { String quietPeriod = "10"; FreeStyleProject childProject = new FreeStyleProjectMock("child"); childProject.setQuietPeriod(quietPeriod); assertEquals(Integer.parseInt(quietPeriod), childProject.getQuietPeriod()); } @Test public void testSetInvalidQuietPeriod() throws IOException { String quietPeriod = "asd10asdasd"; int globalQuietPeriod = 4; FreeStyleProject childProject = new FreeStyleProjectMock("child"); childProject.setQuietPeriod(quietPeriod); Hudson hudson = createMock(Hudson.class); expect(hudson.getQuietPeriod()).andReturn(globalQuietPeriod).anyTimes(); mockStatic(Hudson.class); expect(Hudson.getInstance()).andReturn(hudson).anyTimes(); replayAll(); assertEquals(globalQuietPeriod, childProject.getQuietPeriod()); verifyAll(); } @Test public void testGetQuietPeriod() throws IOException { String quietPeriodString = "10"; int globalQuietPeriod = 4; int quietPeriod = Integer.parseInt(quietPeriodString); FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); Hudson hudson = createMock(Hudson.class); expect(hudson.getQuietPeriod()).andReturn(globalQuietPeriod).anyTimes(); mockStatic(Hudson.class); expect(Hudson.getInstance()).andReturn(hudson).anyTimes(); replayAll(); childProject.setQuietPeriod(quietPeriodString); assertEquals(quietPeriod, childProject.getQuietPeriod()); parentProject.setQuietPeriod(quietPeriodString); childProject.setQuietPeriod(" "); childProject.setCascadingProject(parentProject); assertEquals(childProject.getQuietPeriod(), quietPeriod); parentProject.setQuietPeriod(" "); assertEquals(globalQuietPeriod, childProject.getQuietPeriod()); verifyAll(); } @Test public void testSetScmCheckoutRetryCountEqualsWithParent() throws IOException { String scmCheckoutRetryCount = "10"; int globalScmCheckoutRetryCount = 4; FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); parentProject.setScmCheckoutRetryCount(scmCheckoutRetryCount); FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); Hudson hudson = createMock(Hudson.class); expect(hudson.getScmCheckoutRetryCount()).andReturn(globalScmCheckoutRetryCount); mockStatic(Hudson.class); expect(Hudson.getInstance()).andReturn(hudson).anyTimes(); replayAll(); assertEquals(childProject.getScmCheckoutRetryCount(), globalScmCheckoutRetryCount); childProject.setCascadingProject(parentProject); childProject.setScmCheckoutRetryCount(scmCheckoutRetryCount); assertEquals(childProject.getScmCheckoutRetryCount(), Integer.parseInt(scmCheckoutRetryCount)); verifyAll(); } @Test public void testSetScmCheckoutRetryCountNotEqualsWithParent() throws IOException { String parentScmCheckoutRetryCount = "10"; String childScmCheckoutRetryCount = "11"; FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); parentProject.setScmCheckoutRetryCount(parentScmCheckoutRetryCount); FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); childProject.setCascadingProject(parentProject); childProject.setScmCheckoutRetryCount(childScmCheckoutRetryCount); Hudson hudson = createMock(Hudson.class); mockStatic(Hudson.class); expect(Hudson.getInstance()).andReturn(hudson).anyTimes(); replayAll(); assertEquals(childProject.getScmCheckoutRetryCount(), Integer.parseInt(childScmCheckoutRetryCount)); verifyAll(); } @Test public void testSetScmCheckoutRetryCountParentNull() throws IOException { String scmCheckoutRetryCount = "10"; FreeStyleProject childProject = new FreeStyleProjectMock("child"); childProject.setScmCheckoutRetryCount(scmCheckoutRetryCount); assertEquals(Integer.parseInt(scmCheckoutRetryCount), childProject.getScmCheckoutRetryCount()); } @Test public void testSetInvalidScmCheckoutRetryCount() throws IOException { String scmCheckoutRetryCount = "asd10asdasd"; int globalScmCheckoutRetryCount = 4; FreeStyleProject childProject = new FreeStyleProjectMock("child"); childProject.setScmCheckoutRetryCount(scmCheckoutRetryCount); Hudson hudson = createMock(Hudson.class); expect(hudson.getScmCheckoutRetryCount()).andReturn(globalScmCheckoutRetryCount).anyTimes(); mockStatic(Hudson.class); expect(Hudson.getInstance()).andReturn(hudson).anyTimes(); replayAll(); assertEquals(globalScmCheckoutRetryCount, childProject.getScmCheckoutRetryCount()); verifyAll(); } @Test public void testGetScmCheckoutRetryCount() throws IOException { String scmCheckoutRetryCountString = "10"; int globalScmCheckoutRetryCount = 4; int scmCheckoutRetryCount = Integer.parseInt(scmCheckoutRetryCountString); FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); Hudson hudson = createMock(Hudson.class); expect(hudson.getScmCheckoutRetryCount()).andReturn(globalScmCheckoutRetryCount).anyTimes(); mockStatic(Hudson.class); expect(Hudson.getInstance()).andReturn(hudson).anyTimes(); replayAll(); childProject.setScmCheckoutRetryCount(scmCheckoutRetryCountString); assertEquals(scmCheckoutRetryCount, childProject.getScmCheckoutRetryCount()); parentProject.setScmCheckoutRetryCount(scmCheckoutRetryCountString); childProject.setScmCheckoutRetryCount(" "); childProject.setCascadingProject(parentProject); assertEquals(childProject.getScmCheckoutRetryCount(), scmCheckoutRetryCount); parentProject.setScmCheckoutRetryCount(" "); assertEquals(globalScmCheckoutRetryCount, childProject.getScmCheckoutRetryCount()); verifyAll(); } @Test public void testSetBlockBuildWhenDownstreamBuildingEqualsWithParent() throws IOException { Boolean blockBuildWhenDownstreamBuilding = true; FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); parentProject.setBlockBuildWhenDownstreamBuilding(blockBuildWhenDownstreamBuilding); FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); childProject.setCascadingProject(parentProject); childProject.setBlockBuildWhenDownstreamBuilding(blockBuildWhenDownstreamBuilding); assertFalse(childProject.blockBuildWhenDownstreamBuilding); } @Test public void testSetBlockBuildWhenDownstreamBuildingNotEqualsWithParent() throws IOException { Boolean childBlockBuildWhenDownstreamBuilding = false; Boolean parentBlockBuildWhenDownstreamBuilding = true; FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); parentProject.setBlockBuildWhenDownstreamBuilding(parentBlockBuildWhenDownstreamBuilding); FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); childProject.setCascadingProject(parentProject); childProject.setBlockBuildWhenDownstreamBuilding(childBlockBuildWhenDownstreamBuilding); //if child value is not equals to parent one, field should be populated assertNotNull(childProject.blockBuildWhenDownstreamBuilding); } @Test public void testSetBlockBuildWhenDownstreamBuildingParentNull() throws IOException { Boolean blockBuildWhenDownstreamBuilding = true; FreeStyleProject childProject = new FreeStyleProjectMock("child"); childProject.setBlockBuildWhenDownstreamBuilding(blockBuildWhenDownstreamBuilding); //if parent is not set, value should be populated according to existing logic assertEquals(blockBuildWhenDownstreamBuilding, CascadingUtil.getBooleanProjectProperty(childProject, AbstractProject.BLOCK_BUILD_WHEN_DOWNSTREAM_BUILDING_PROPERTY_NAME).getOriginalValue()); } @Test public void testBlockBuildWhenDownstreamBuilding() throws IOException { boolean childBlockBuildWhenDownstreamBuilding = false; boolean parentBlockBuildWhenDownstreamBuilding = true; FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); parentProject.setBlockBuildWhenDownstreamBuilding(parentBlockBuildWhenDownstreamBuilding); assertEquals(parentBlockBuildWhenDownstreamBuilding, parentProject.blockBuildWhenDownstreamBuilding()); FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); //Set equal to parent in order to inherit from cascading project childProject.setCascadingProject(parentProject); childProject.setBlockBuildWhenDownstreamBuilding(parentBlockBuildWhenDownstreamBuilding); //Value should be taken from cascadingProject assertEquals(parentBlockBuildWhenDownstreamBuilding, childProject.blockBuildWhenDownstreamBuilding()); childProject.setBlockBuildWhenDownstreamBuilding(childBlockBuildWhenDownstreamBuilding); //Child value is not equals to parent - override value in child. assertEquals(childBlockBuildWhenDownstreamBuilding, childProject.blockBuildWhenDownstreamBuilding()); } @Test public void testSetBlockBuildWhenUpstreamBuildingEqualsWithParent() throws IOException { boolean blockBuildWhenUpstreamBuilding = true; FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); parentProject.setBlockBuildWhenUpstreamBuilding(blockBuildWhenUpstreamBuilding); FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); childProject.setCascadingProject(parentProject); childProject.setBlockBuildWhenUpstreamBuilding(blockBuildWhenUpstreamBuilding); assertFalse(CascadingUtil.getBooleanProjectProperty(childProject, AbstractProject.BLOCK_BUILD_WHEN_UPSTREAM_BUILDING_PROPERTY_NAME).getOriginalValue()); } @Test public void testSetBlockBuildWhenUpstreamBuildingNotEqualsWithParent() throws IOException { Boolean childBlockBuildWhenUpstreamBuilding = false; Boolean parentBlockBuildWhenUpstreamBuilding = true; FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); parentProject.setBlockBuildWhenUpstreamBuilding(parentBlockBuildWhenUpstreamBuilding); FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); childProject.setCascadingProject(parentProject); childProject.setBlockBuildWhenUpstreamBuilding(childBlockBuildWhenUpstreamBuilding); //if child value is not equals to parent one, field should be populated assertNotNull(childProject.blockBuildWhenUpstreamBuilding); } @Test public void testSetBlockBuildWhenUpstreamBuildingParentNull() throws IOException { Boolean blockBuildWhenUpstreamBuilding = true; FreeStyleProject childProject = new FreeStyleProjectMock("child"); childProject.setBlockBuildWhenUpstreamBuilding(blockBuildWhenUpstreamBuilding); //if parent is not set, value should be populated according to existing logic assertEquals(blockBuildWhenUpstreamBuilding, CascadingUtil.getBooleanProjectProperty(childProject, AbstractProject.BLOCK_BUILD_WHEN_UPSTREAM_BUILDING_PROPERTY_NAME).getOriginalValue()); } @Test public void testBlockBuildWhenUpstreamBuilding() throws IOException { boolean childBlockBuildWhenUpstreamBuilding = false; boolean parentBlockBuildWhenUpstreamBuilding = true; FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); parentProject.setBlockBuildWhenUpstreamBuilding(parentBlockBuildWhenUpstreamBuilding); FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); //Set equal to parent in order to inherit from cascading project childProject.setBlockBuildWhenUpstreamBuilding(parentBlockBuildWhenUpstreamBuilding); childProject.setCascadingProject(parentProject); //Value should be taken from cascadingProject assertEquals(parentBlockBuildWhenUpstreamBuilding, childProject.blockBuildWhenUpstreamBuilding()); childProject.setBlockBuildWhenUpstreamBuilding(childBlockBuildWhenUpstreamBuilding); //Child value is not equals to parent - override value in child. assertEquals(childBlockBuildWhenUpstreamBuilding, childProject.blockBuildWhenUpstreamBuilding()); } // --- @Test public void testSetCleanWorkspaceRequiredEqualsWithParent() throws IOException { boolean cleanWorkspaceRequired = true; FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); parentProject.setCleanWorkspaceRequired(cleanWorkspaceRequired); FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); childProject.setCascadingProject(parentProject); childProject.setCleanWorkspaceRequired(cleanWorkspaceRequired); assertFalse(CascadingUtil.getBooleanProjectProperty(childProject, AbstractProject.CLEAN_WORKSPACE_REQUIRED_PROPERTY_NAME).getOriginalValue()); } @Test public void testSetCleanWorkspaceRequiredNotEqualsWithParent() throws IOException { Boolean childCleanWorkspaceRequired = false; Boolean parentCleanWorkspaceRequired = true; FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); parentProject.setCleanWorkspaceRequired(parentCleanWorkspaceRequired); FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); childProject.setCascadingProject(parentProject); childProject.setCleanWorkspaceRequired(childCleanWorkspaceRequired); //if child value is not equals to parent one, field should be populated assertFalse(CascadingUtil.getBooleanProjectProperty(childProject, AbstractProject.CLEAN_WORKSPACE_REQUIRED_PROPERTY_NAME).getOriginalValue()); } @Test public void testSetCleanWorkspaceRequiredParentNull() throws IOException { Boolean cleanWorkspaceRequired = true; FreeStyleProject childProject = new FreeStyleProjectMock("child"); childProject.setCleanWorkspaceRequired(cleanWorkspaceRequired); //if parent is not set, value should be populated according to existing logic assertEquals(cleanWorkspaceRequired, CascadingUtil.getBooleanProjectProperty(childProject, AbstractProject.CLEAN_WORKSPACE_REQUIRED_PROPERTY_NAME).getOriginalValue()); } @Test public void testIsCleanWorkspaceRequired() throws IOException { boolean childCleanWorkspaceRequired = false; boolean parentCleanWorkspaceRequired = true; FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); parentProject.setCleanWorkspaceRequired(parentCleanWorkspaceRequired); FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); childProject.setCleanWorkspaceRequired(parentCleanWorkspaceRequired); childProject.setCascadingProject(parentProject); //Value should be taken from cascadingProject assertEquals(parentCleanWorkspaceRequired, childProject.isCleanWorkspaceRequired()); childProject.setCleanWorkspaceRequired(childCleanWorkspaceRequired); //Child value is not equals to parent - override value in child. assertEquals(childCleanWorkspaceRequired, childProject.isCleanWorkspaceRequired()); } @Test public void testSetConcurrentBuildEqualsWithParent() throws IOException { Boolean concurrentBuild = true; FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); parentProject.setConcurrentBuild(concurrentBuild); FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); childProject.setCascadingProject(parentProject); childProject.setConcurrentBuild(concurrentBuild); assertFalse(CascadingUtil.getBooleanProjectProperty(childProject, AbstractProject.CONCURRENT_BUILD_PROPERTY_NAME).getOriginalValue()); } @Test public void testSetConcurrentBuildNotEqualsWithParent() throws IOException { Boolean childConcurrentBuild = false; Boolean parentConcurrentBuild = true; FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); parentProject.setConcurrentBuild(parentConcurrentBuild); FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); childProject.setCascadingProject(parentProject); childProject.setConcurrentBuild(childConcurrentBuild); //if child value is not equals to parent one, field should be populated assertEquals(childConcurrentBuild, CascadingUtil.getBooleanProjectProperty(childProject, AbstractProject.CONCURRENT_BUILD_PROPERTY_NAME).getOriginalValue()); } @Test public void testSetConcurrentBuildParentNull() throws IOException { Boolean concurrentBuild = true; FreeStyleProject childProject = new FreeStyleProjectMock("child"); childProject.setConcurrentBuild(concurrentBuild); //if parent is not set, value should be populated according to existing logic assertEquals(concurrentBuild, CascadingUtil.getBooleanProjectProperty(childProject, AbstractProject.CONCURRENT_BUILD_PROPERTY_NAME).getOriginalValue()); } @Test public void testIsConcurrentBuild() throws IOException { boolean childConcurrentBuild = false; boolean parentConcurrentBuild = true; FreeStyleProject parentProject = new FreeStyleProjectMock("parent"); parentProject.setConcurrentBuild(parentConcurrentBuild); FreeStyleProjectMock childProject = new FreeStyleProjectMock("child"); childProject.setCascadingProject(parentProject); childProject.setConcurrentBuild(true); //Value should be taken from cascadingProject assertEquals(parentConcurrentBuild, childProject.isConcurrentBuild()); childProject.setConcurrentBuild(childConcurrentBuild); //Child value is not equals to parent - override value in child. assertEquals(childConcurrentBuild, childProject.isConcurrentBuild()); } }