Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[JENKINS-42584] Fix upstream job priority retrieval
- Tests added - incorporated PR change requests
- Loading branch information
Ronny Schuetz
committed
Apr 10, 2017
1 parent
be0592c
commit df09df3
Showing
6 changed files
with
229 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
73 changes: 73 additions & 0 deletions
73
src/test/java/jenkins/advancedqueue/test/UpstreamTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
package jenkins.advancedqueue.test; | ||
|
||
import java.lang.reflect.Constructor; | ||
import java.util.Arrays; | ||
import java.util.Collections; | ||
import java.util.List; | ||
|
||
import org.junit.Rule; | ||
import org.junit.Test; | ||
import org.jvnet.hudson.test.JenkinsRule; | ||
import org.jvnet.hudson.test.recipes.LocalData; | ||
|
||
import hudson.model.Cause; | ||
import hudson.model.Cause.UpstreamCause; | ||
import hudson.model.Cause.UserIdCause; | ||
import jenkins.advancedqueue.testutil.ExpectedItem; | ||
import jenkins.advancedqueue.testutil.JobHelper; | ||
import jenkins.advancedqueue.testutil.TestRunListener; | ||
|
||
public class UpstreamTest { | ||
@Rule | ||
public JenkinsRule j = new JenkinsRule(); | ||
|
||
private final JobHelper jobHelper = new JobHelper(j); | ||
|
||
@Test | ||
@LocalData | ||
public void testOrphanDownstreamJob() throws Exception { | ||
// Job 0 should run with default priority, as upstream build is unknown | ||
TestRunListener.init(new ExpectedItem("Job 0", 5)); | ||
jobHelper.scheduleProjects(createUpstreamCause("Job X", 987)).go(); | ||
j.waitUntilNoActivity(); | ||
|
||
TestRunListener.assertStartedItems(); | ||
} | ||
|
||
@Test | ||
@LocalData | ||
public void testUserJobAndAssociatedDownstreamJob() throws Exception { | ||
// Upstream job should run with high priority (user triggered) | ||
TestRunListener.init(new ExpectedItem("Upstream", 1)); | ||
jobHelper.scheduleProject("Upstream", new UserIdCause()).go(); | ||
j.waitUntilNoActivity(); | ||
|
||
// Downstream job 1 should run with priority of upstream job build 1 | ||
TestRunListener.init(new ExpectedItem("Downstream1", 1)); | ||
jobHelper.scheduleProject("Downstream1", createUpstreamCause("Upstream", 1)).go(); | ||
j.waitUntilNoActivity(); | ||
|
||
// Downstream job 2 should run with priority of upstream job build 2 (not present, i.e. default priority | ||
// should be used) | ||
TestRunListener.init(new ExpectedItem("Downstream2", 5)); | ||
jobHelper.scheduleProject("Downstream2", createUpstreamCause("Upstream", 2)).go(); | ||
j.waitUntilNoActivity(); | ||
|
||
TestRunListener.assertStartedItems(); | ||
} | ||
|
||
private UpstreamCause createUpstreamCause(final String upstreamProject, final int upstreamBuild) throws Exception { | ||
final Class<?> clazz = UpstreamCause.class; | ||
final Constructor<?>[] constructors = clazz.getDeclaredConstructors(); | ||
|
||
for (final Constructor<?> cons : constructors) { | ||
if (Arrays.equals(cons.getParameterTypes(), | ||
new Class<?>[] { String.class, int.class, String.class, List.class })) { | ||
cons.setAccessible(true); | ||
return (UpstreamCause) cons.newInstance(upstreamProject, upstreamBuild, "url", | ||
Collections.<Cause>emptyList()); | ||
} | ||
} | ||
return null; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
85 changes: 85 additions & 0 deletions
85
src/test/resources/jenkins/advancedqueue/test/UpstreamTest/config.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
<?xml version='1.0' encoding='UTF-8'?> | ||
<hudson> | ||
<disabledAdministrativeMonitors> | ||
<string>OldData</string> | ||
</disabledAdministrativeMonitors> | ||
<version>1.520</version> | ||
<numExecutors>0</numExecutors> | ||
<mode>NORMAL</mode> | ||
<useSecurity>true</useSecurity> | ||
<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/> | ||
<securityRealm class="hudson.security.SecurityRealm$None"/> | ||
<projectNamingStrategy class="jenkins.model.ProjectNamingStrategy$DefaultProjectNamingStrategy"/> | ||
<workspaceDir>${ITEM_ROOTDIR}/workspace</workspaceDir> | ||
<buildsDir>${ITEM_ROOTDIR}/builds</buildsDir> | ||
<markupFormatter class="hudson.markup.RawHtmlMarkupFormatter"> | ||
<disableSyntaxHighlighting>false</disableSyntaxHighlighting> | ||
</markupFormatter> | ||
<jdks/> | ||
<viewsTabBar class="hudson.views.DefaultViewsTabBar"/> | ||
<myViewsTabBar class="hudson.views.DefaultMyViewsTabBar"/> | ||
<clouds/> | ||
<slaves/> | ||
<quietPeriod>5</quietPeriod> | ||
<scmCheckoutRetryCount>0</scmCheckoutRetryCount> | ||
<views> | ||
<hudson.model.AllView> | ||
<owner class="hudson" reference="../../.."/> | ||
<name>All</name> | ||
<filterExecutors>false</filterExecutors> | ||
<filterQueue>false</filterQueue> | ||
<properties class="hudson.model.View$PropertyList"/> | ||
</hudson.model.AllView> | ||
<listView> | ||
<owner class="hudson" reference="../../.."/> | ||
<name>First</name> | ||
<filterExecutors>false</filterExecutors> | ||
<filterQueue>false</filterQueue> | ||
<properties class="hudson.model.View$PropertyList"/> | ||
<jobNames> | ||
<comparator class="hudson.util.CaseInsensitiveComparator"/> | ||
<string>Matrix</string> | ||
</jobNames> | ||
<jobFilters/> | ||
<columns> | ||
<hudson.views.StatusColumn/> | ||
<hudson.views.WeatherColumn/> | ||
<hudson.views.JobColumn/> | ||
<hudson.views.LastSuccessColumn/> | ||
<hudson.views.LastFailureColumn/> | ||
<hudson.views.LastDurationColumn/> | ||
<hudson.views.BuildButtonColumn/> | ||
<hudson.queueSorter.PrioritySorterJobColumn/> | ||
</columns> | ||
<recurse>false</recurse> | ||
</listView> | ||
<listView> | ||
<owner class="hudson" reference="../../.."/> | ||
<name>ALL</name> | ||
<filterExecutors>false</filterExecutors> | ||
<filterQueue>false</filterQueue> | ||
<properties class="hudson.model.View$PropertyList"/> | ||
<jobNames> | ||
<comparator class="hudson.util.CaseInsensitiveComparator"/> | ||
</jobNames> | ||
<jobFilters/> | ||
<columns> | ||
<hudson.views.StatusColumn/> | ||
<hudson.views.WeatherColumn/> | ||
<hudson.views.JobColumn/> | ||
<hudson.views.LastSuccessColumn/> | ||
<hudson.views.LastFailureColumn/> | ||
<hudson.views.LastDurationColumn/> | ||
<hudson.views.BuildButtonColumn/> | ||
<hudson.queueSorter.PrioritySorterJobColumn/> | ||
</columns> | ||
<includeRegex>.*</includeRegex> | ||
<recurse>false</recurse> | ||
</listView> | ||
</views> | ||
<primaryView>All</primaryView> | ||
<slaveAgentPort>0</slaveAgentPort> | ||
<label></label> | ||
<nodeProperties/> | ||
<globalNodeProperties/> | ||
</hudson> |
27 changes: 27 additions & 0 deletions
27
...s/jenkins/advancedqueue/test/UpstreamTest/jenkins.advancedqueue.PriorityConfiguration.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
<?xml version='1.0' encoding='UTF-8'?> | ||
<jenkins.advancedqueue.PriorityConfiguration plugin="PrioritySorter@3.5.1-SNAPSHOT"> | ||
<jobGroups class="linked-list"> | ||
<jenkins.advancedqueue.JobGroup> | ||
<id>0</id> | ||
<priority>-1</priority> | ||
<jobGroupStrategy class="jenkins.advancedqueue.jobinclusion.strategy.AllJobsJobInclusionStrategy"/> | ||
<description>Upstream cause test</description> | ||
<runExclusive>false</runExclusive> | ||
<useJobFilter>false</useJobFilter> | ||
<jobPattern>.*</jobPattern> | ||
<usePriorityStrategies>true</usePriorityStrategies> | ||
<priorityStrategies> | ||
<jenkins.advancedqueue.JobGroup_-PriorityStrategyHolder> | ||
<id>0</id> | ||
<priorityStrategy class="jenkins.advancedqueue.priority.strategy.UserIdCauseStrategy"> | ||
<priority>1</priority> | ||
</priorityStrategy> | ||
</jenkins.advancedqueue.JobGroup_-PriorityStrategyHolder> | ||
<jenkins.advancedqueue.JobGroup_-PriorityStrategyHolder> | ||
<id>1</id> | ||
<priorityStrategy class="jenkins.advancedqueue.priority.strategy.UpstreamCauseStrategy"/> | ||
</jenkins.advancedqueue.JobGroup_-PriorityStrategyHolder> | ||
</priorityStrategies> | ||
</jenkins.advancedqueue.JobGroup> | ||
</jobGroups> | ||
</jenkins.advancedqueue.PriorityConfiguration> |
18 changes: 18 additions & 0 deletions
18
...ins/advancedqueue/test/UpstreamTest/jenkins.advancedqueue.PrioritySorterConfiguration.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
<?xml version='1.0' encoding='UTF-8'?> | ||
<jenkins.advancedqueue.PrioritySorterConfiguration> | ||
<legacyMode>false</legacyMode> | ||
<legacyMaxPriority>2147483647</legacyMaxPriority> | ||
<legacyMinPriority>-2147483648</legacyMinPriority> | ||
<allowPriorityOnJobs>true</allowPriorityOnJobs> | ||
<strategy class="jenkins.advancedqueue.sorter.strategy.FQStrategy"> | ||
<ifCondition></ifCondition> | ||
<unlessCondition></unlessCondition> | ||
<children/> | ||
<location> | ||
<lineNumber>0</lineNumber> | ||
<columnNumber>0</columnNumber> | ||
</location> | ||
<numberOfPriorities>10</numberOfPriorities> | ||
<defaultPriority>5</defaultPriority> | ||
</strategy> | ||
</jenkins.advancedqueue.PrioritySorterConfiguration> |