/******************************************************************************* * * Copyright (c) 2011 Oracle Corporation. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * * Nikita Levyankov, Anton Kozak * *******************************************************************************/ package hudson.model; import hudson.tasks.Mailer; import hudson.tasks.Maven; import hudson.tasks.Publisher; import hudson.tasks.junit.JUnitResultArchiver; import hudson.triggers.SCMTrigger; import hudson.triggers.TimerTrigger; import hudson.triggers.Trigger; import hudson.triggers.TriggerDescriptor; import hudson.util.CopyOnWriteList; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.util.List; import org.eclipse.hudson.model.project.property.CopyOnWriteListProjectProperty; import org.junit.Before; import org.junit.Ignore; 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.*; import static org.easymock.EasyMock.expect; import static org.junit.Assert.assertFalse; import static org.powermock.api.easymock.PowerMock.*; /** * Test for legacy * <p/> * Date: 9/23/11 * * @author Nikita Levyankov */ @RunWith(PowerMockRunner.class) @PrepareForTest({Hudson.class, SCMTrigger.DescriptorImpl.class, TimerTrigger.DescriptorImpl.class, Mailer.DescriptorImpl.class, JUnitResultArchiver.DescriptorImpl.class}) public class LegacyProjectTest { private File config; @Before public void setUp() throws URISyntaxException { config = new File(FreeStyleProject.class.getResource("/hudson/model/freestyle").toURI()); } /** * Tests unmarshalls FreeStyleProject configuration and checks whether CustomWorkspace is configured based * on legacy value. * * @throws Exception if any. */ @Test public void testConvertLegacyCustomWorkspaceProperty() throws Exception { FreeStyleProject project = (FreeStyleProject) Items.getConfigFile(config).read(); project.setAllowSave(false); project.initProjectProperties(); assertNull(project.getProperty(FreeStyleProject.CUSTOM_WORKSPACE_PROPERTY_NAME)); project.convertCustomWorkspaceProperty(); assertNotNull(project.getProperty(FreeStyleProject.CUSTOM_WORKSPACE_PROPERTY_NAME)); } /** * Tests unmarshalls FreeStyleProject configuration and checks whether Builders * from Project are configured * * @throws Exception if any. */ @Test public void testConvertLegacyBuildersProperty() throws Exception { Project project = (Project) Items.getConfigFile(config).read(); project.setAllowSave(false); project.initProjectProperties(); //Property should be null, because of legacy implementation. Version < 2.2.0 assertNull(project.getProperty(Project.BUILDERS_PROPERTY_NAME)); project.convertBuildersProjectProperty(); //Verify builders assertNotNull(project.getProperty(Project.BUILDERS_PROPERTY_NAME)); assertFalse(project.getBuildersList().isEmpty()); assertEquals(1, project.getBuildersList().size()); assertTrue(project.getBuildersList().get(0) instanceof Maven); } /** * Tests unmarshalls FreeStyleProject configuration and checks whether BuildWrappers * from Project are configured * * @throws Exception if any. */ @Test @Ignore //TODO re-implement this method according to new implementation. Logic is similar to testConvertPublishersProperty public void testConvertLegacyBuildWrappersProperty() throws Exception { Project project = (Project) Items.getConfigFile(config).read(); project.setAllowSave(false); project.initProjectProperties(); //Property should be null, because of legacy implementation. Version < 2.2.0 project.convertBuildWrappersProperties(); //Verify buildWrappers assertTrue(project.getBuildWrappersList().isEmpty()); } /** * Tests unmarshalls FreeStyleProject configuration and checks whether publishers * from Project are configured * * @throws Exception if any. */ @Test public void testConvertPublishersProperty() throws Exception { Project project = (Project) Items.getConfigFile(config).read(); project.setAllowSave(false); project.initProjectProperties(); Hudson hudson = createMock(Hudson.class); String mailerKey = "hudson-tasks-Mailer"; Descriptor<Publisher> mailerDescriptor = createMock(Mailer.DescriptorImpl.class); expect(mailerDescriptor.getJsonSafeClassName()).andReturn(mailerKey); expect(hudson.getDescriptorOrDie(Mailer.class)).andReturn(mailerDescriptor); String jUnitKey = "hudson-task-JUnitResultArchiver"; Descriptor<Publisher> junitDescriptor = createMock(JUnitResultArchiver.DescriptorImpl.class); expect(junitDescriptor.getJsonSafeClassName()).andReturn(jUnitKey); expect(hudson.getDescriptorOrDie(JUnitResultArchiver.class)).andReturn(junitDescriptor); mockStatic(Hudson.class); expect(Hudson.getInstance()).andReturn(hudson).anyTimes(); replayAll(); //Publishers should be null, because of legacy implementation. Version < 2.2.0 assertNull(project.getProperty(mailerKey)); assertNull(project.getProperty(jUnitKey)); project.convertPublishersProperties(); //Verify publishers assertNotNull(project.getProperty(mailerKey).getValue()); assertNotNull(project.getProperty(jUnitKey).getValue()); verifyAll(); } /** * Tests unmarshalls FreeStyleProject configuration and checks whether expected property * from AbstractProject is configured * * @throws Exception if any. */ @Test public void testConvertLegacyBlockBuildWhenDownstreamBuildingProperty() throws Exception { AbstractProject project = (AbstractProject) Items.getConfigFile(config).read(); project.setAllowSave(false); project.initProjectProperties(); assertNull(project.getProperty(AbstractProject.BLOCK_BUILD_WHEN_DOWNSTREAM_BUILDING_PROPERTY_NAME)); project.convertBlockBuildWhenDownstreamBuildingProperty(); assertNotNull(project.getProperty(AbstractProject.BLOCK_BUILD_WHEN_DOWNSTREAM_BUILDING_PROPERTY_NAME)); } /** * Tests unmarshalls FreeStyleProject configuration and checks whether expected property * from AbstractProject is configured * * @throws Exception if any. */ @Test public void testConvertLegacyBlockBuildWhenUpstreamBuildingProperty() throws Exception { AbstractProject project = (AbstractProject) Items.getConfigFile(config).read(); project.setAllowSave(false); project.initProjectProperties(); assertNull(project.getProperty(AbstractProject.BLOCK_BUILD_WHEN_UPSTREAM_BUILDING_PROPERTY_NAME)); project.convertBlockBuildWhenUpstreamBuildingProperty(); assertNotNull(project.getProperty(AbstractProject.BLOCK_BUILD_WHEN_UPSTREAM_BUILDING_PROPERTY_NAME)); } /** * Tests unmarshalls FreeStyleProject configuration and checks whether expected property * from AbstractProject is configured * * @throws Exception if any. */ @Test public void testConvertLegacyConcurrentBuildProperty() throws Exception { AbstractProject project = (AbstractProject) Items.getConfigFile(config).read(); project.setAllowSave(false); project.initProjectProperties(); assertNull(project.getProperty(AbstractProject.CONCURRENT_BUILD_PROPERTY_NAME)); project.convertConcurrentBuildProperty(); assertNotNull(project.getProperty(AbstractProject.CONCURRENT_BUILD_PROPERTY_NAME)); } /** * Tests unmarshalls FreeStyleProject configuration and checks whether expected property * from AbstractProject is configured * * @throws Exception if any. */ @Test public void testConvertLegacyCleanWorkspaceRequiredProperty() throws Exception { AbstractProject project = (AbstractProject) Items.getConfigFile(config).read(); project.setAllowSave(false); project.initProjectProperties(); assertNull(project.getProperty(AbstractProject.CLEAN_WORKSPACE_REQUIRED_PROPERTY_NAME)); project.convertCleanWorkspaceRequiredProperty(); assertNotNull(project.getProperty(AbstractProject.CLEAN_WORKSPACE_REQUIRED_PROPERTY_NAME)); } /** * Tests unmarshalls FreeStyleProject configuration and checks whether expected property * from AbstractProject is configured * * @throws Exception if any. */ @Test public void testConvertLegacyQuietPeriodProperty() throws Exception { AbstractProject project = (AbstractProject) Items.getConfigFile(config).read(); project.setAllowSave(false); project.initProjectProperties(); assertNull(project.getProperty(AbstractProject.QUIET_PERIOD_PROPERTY_NAME)); project.convertQuietPeriodProperty(); assertNotNull(project.getProperty(AbstractProject.QUIET_PERIOD_PROPERTY_NAME)); } /** * Tests unmarshalls FreeStyleProject configuration and checks whether expected property * from AbstractProject is configured * * @throws Exception if any. */ @Test public void testConvertLegacyScmCheckoutRetryCountProperty() throws Exception { AbstractProject project = (AbstractProject) Items.getConfigFile(config).read(); project.setAllowSave(false); project.initProjectProperties(); assertNull(project.getProperty(AbstractProject.SCM_CHECKOUT_RETRY_COUNT_PROPERTY_NAME)); project.convertScmCheckoutRetryCountProperty(); assertNotNull(project.getProperty(AbstractProject.SCM_CHECKOUT_RETRY_COUNT_PROPERTY_NAME)); } /** * Tests unmarshalls FreeStyleProject configuration and checks whether expected property * from AbstractProject is configured * * @throws Exception if any. */ @Test public void testConvertLegacyJDKProperty() throws Exception { AbstractProject project = (AbstractProject) Items.getConfigFile(config).read(); project.setAllowSave(false); project.initProjectProperties(); assertNull(project.getProperty(AbstractProject.JDK_PROPERTY_NAME)); project.convertJDKProperty(); assertNotNull(project.getProperty(AbstractProject.JDK_PROPERTY_NAME)); } /** * Tests unmarshalls FreeStyleProject configuration and checks whether LogRotator * from Job are configured * * @throws Exception if any. */ @Test public void testConvertLegacyLogRotatorProperty() throws Exception { Job project = (Job) Items.getConfigFile(config).read(); project.setAllowSave(false); project.initProjectProperties(); assertNull(project.getProperty(Job.LOG_ROTATOR_PROPERTY_NAME)); project.convertLogRotatorProperty(); assertNotNull(project.getProperty(Job.LOG_ROTATOR_PROPERTY_NAME)); } /** * Tests unmarshalling FreeStyleProject configuration and checks whether Triggers properties * from Job are configured. * * @throws Exception if any. */ @Test public void testConvertLegacyTriggers() throws Exception { AbstractProject project = (AbstractProject) Items.getConfigFile(config).read(); project.setAllowSave(false); project.initProjectProperties(); Hudson hudson = createMock(Hudson.class); String scmTriggerPropertyKey = "hudson-trigger-SCMTrigger"; TriggerDescriptor scmTriggerDescriptor = createMock(SCMTrigger.DescriptorImpl.class); expect(scmTriggerDescriptor.getJsonSafeClassName()).andReturn(scmTriggerPropertyKey); expect(hudson.getDescriptorOrDie(SCMTrigger.class)).andReturn(scmTriggerDescriptor); String timerTriggerPropertyKey = "hudson-trigger-TimerTrigger"; TriggerDescriptor timerTriggerDescriptor = createMock(TimerTrigger.DescriptorImpl.class); expect(timerTriggerDescriptor.getJsonSafeClassName()).andReturn(timerTriggerPropertyKey); expect(hudson.getDescriptorOrDie(TimerTrigger.class)).andReturn(timerTriggerDescriptor); mockStatic(Hudson.class); expect(Hudson.getInstance()).andReturn(hudson).anyTimes(); replayAll(); project.setAllowSave(false); project.initProjectProperties(); assertNull(project.getProperty(scmTriggerPropertyKey)); assertNull(project.getProperty(timerTriggerPropertyKey)); project.convertTriggerProperties(); assertNotNull(project.getProperty(scmTriggerPropertyKey)); Trigger trigger = (Trigger) project.getProperty(scmTriggerPropertyKey).getValue(); assertEquals("5 * * * *", trigger.getSpec()); assertNotNull(project.getProperty(timerTriggerPropertyKey)); trigger = (Trigger) project.getProperty(timerTriggerPropertyKey).getValue(); assertEquals("*/10 * * * *", trigger.getSpec()); verifyAll(); } /** * Tests unmarshalling FreeStyleProject configuration and checks whether assignedNode and advancedAffinityChooser * properties from AbstractProject are configured. * * @throws java.io.IOException if any */ @Test public void testConvertLegacyNodeProperties() throws IOException { AbstractProject project = (AbstractProject) Items.getConfigFile(config).read(); project.setAllowSave(false); project.initProjectProperties(); assertNull(project.getProperty(AbstractProject.APPOINTED_NODE_PROPERTY_NAME)); project.convertAppointedNode(); assertNotNull(project.getProperty(AbstractProject.APPOINTED_NODE_PROPERTY_NAME)); assertTrue(project.isAdvancedAffinityChooser()); } @Test @SuppressWarnings("unchecked") public void testConvertLegacyParameterDefinitionProperties() throws IOException { Job project = (Job) Items.getConfigFile(config).read(); project.setAllowSave(false); project.initProjectProperties(); assertNull(project.getProperty(Job.PARAMETERS_DEFINITION_JOB_PROPERTY_PROPERTY_NAME)); project.convertJobProperties(); //Properties should be initialized assertNotNull(project.properties); CopyOnWriteListProjectProperty property = (CopyOnWriteListProjectProperty) project.getProperty( Job.PARAMETERS_DEFINITION_JOB_PROPERTY_PROPERTY_NAME); assertNotNull(property); CopyOnWriteList<ParametersDefinitionProperty> propertyValue = property.getValue(); assertFalse(propertyValue.isEmpty()); assertEquals(1, propertyValue.size()); ParametersDefinitionProperty pdp = propertyValue.get(0); List<ParameterDefinition> parameterDefinitions = pdp.getParameterDefinitions(); assertNotNull(parameterDefinitions); assertFalse(parameterDefinitions.isEmpty()); String parameterName1 = "test1"; String parameterName2 = "test2"; assertTrue(pdp.getParameterDefinitionNames().contains(parameterName1)); assertTrue(pdp.getParameterDefinitionNames().contains(parameterName2)); ParameterDefinition parameterDefinition = pdp.getParameterDefinition(parameterName1); assertNotNull(parameterDefinition); assertTrue(parameterDefinition instanceof StringParameterDefinition); assertEquals(parameterName1, parameterDefinition.getName()); assertEquals("df1", ((StringParameterDefinition) parameterDefinition).getDefaultValue()); assertEquals("string value description", parameterDefinition.getDescription()); parameterDefinition = pdp.getParameterDefinition(parameterName2); assertNotNull(parameterDefinition); assertTrue(parameterDefinition instanceof BooleanParameterDefinition); assertEquals(parameterName2, parameterDefinition.getName()); assertEquals(true, ((BooleanParameterDefinition) parameterDefinition).isDefaultValue()); assertEquals("boolean value description", parameterDefinition.getDescription()); } }