提交 edf932be 编写于 作者: M mcdonan

[FIXED JENKINS-18813] Add/RemoveTrigger now works

Ensure the addTrigger and removeTrigger methods only use methods that are
supported by DescribableList. This means no indexed operations are
supported, so use only Iterator#remove and Collection#add

Add Integration Tests to ensure methods work as expected
上级 3396247e
...@@ -122,6 +122,7 @@ import java.util.Collection; ...@@ -122,6 +122,7 @@ import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.ListIterator; import java.util.ListIterator;
import java.util.Map; import java.util.Map;
...@@ -1644,15 +1645,8 @@ public abstract class AbstractProject<P extends AbstractProject<P,R>,R extends A ...@@ -1644,15 +1645,8 @@ public abstract class AbstractProject<P extends AbstractProject<P,R>,R extends A
protected final synchronized <T extends Describable<T>> protected final synchronized <T extends Describable<T>>
void addToList( T item, List<T> collection ) throws IOException { void addToList( T item, List<T> collection ) throws IOException {
for( int i=0; i<collection.size(); i++ ) { //No support to replace item in position, remove then add
if(collection.get(i).getDescriptor()==item.getDescriptor()) { removeFromList(item.getDescriptor(), collection);
// replace
collection.set(i,item);
save();
return;
}
}
// add
collection.add(item); collection.add(item);
save(); save();
updateTransientActions(); updateTransientActions();
...@@ -1660,10 +1654,12 @@ public abstract class AbstractProject<P extends AbstractProject<P,R>,R extends A ...@@ -1660,10 +1654,12 @@ public abstract class AbstractProject<P extends AbstractProject<P,R>,R extends A
protected final synchronized <T extends Describable<T>> protected final synchronized <T extends Describable<T>>
void removeFromList(Descriptor<T> item, List<T> collection) throws IOException { void removeFromList(Descriptor<T> item, List<T> collection) throws IOException {
for( int i=0; i< collection.size(); i++ ) { final Iterator<T> iCollection = collection.iterator();
if(collection.get(i).getDescriptor()==item) { while(iCollection.hasNext()) {
final T next = iCollection.next();
if(next.getDescriptor()==item) {
// found it // found it
collection.remove(i); iCollection.remove();
save(); save();
updateTransientActions(); updateTransientActions();
return; return;
......
...@@ -38,6 +38,8 @@ import hudson.Functions; ...@@ -38,6 +38,8 @@ import hudson.Functions;
import hudson.Util; import hudson.Util;
import hudson.tasks.ArtifactArchiver import hudson.tasks.ArtifactArchiver
import hudson.triggers.SCMTrigger; import hudson.triggers.SCMTrigger;
import hudson.triggers.TimerTrigger
import hudson.triggers.TriggerDescriptor;
import hudson.util.StreamTaskListener; import hudson.util.StreamTaskListener;
import hudson.util.OneShotEvent import hudson.util.OneShotEvent
import jenkins.model.Jenkins; import jenkins.model.Jenkins;
...@@ -447,4 +449,38 @@ public class AbstractProjectTest extends HudsonTestCase { ...@@ -447,4 +449,38 @@ public class AbstractProjectTest extends HudsonTestCase {
assert t.class==SCMTrigger.class; assert t.class==SCMTrigger.class;
assert t.spec=="*/10 * * * *" assert t.spec=="*/10 * * * *"
} }
@Bug(18813)
public void testRemoveTrigger() {
AbstractProject j = jenkins.createProjectFromXML("foo", getClass().getResourceAsStream("AbstractProjectTest/vectorTriggers.xml"))
TriggerDescriptor SCM_TRIGGER_DESCRIPTOR = Hudson.instance.getDescriptorOrDie(SCMTrigger.class)
j.removeTrigger(SCM_TRIGGER_DESCRIPTOR);
assert j.triggers().size()==0
}
@Bug(18813)
public void testAddTriggerSameType() {
AbstractProject j = jenkins.createProjectFromXML("foo", getClass().getResourceAsStream("AbstractProjectTest/vectorTriggers.xml"))
def newTrigger = new SCMTrigger("H/5 * * * *")
j.addTrigger(newTrigger);
assert j.triggers().size()==1
def t = j.triggers()[0]
assert t.class==SCMTrigger.class;
assert t.spec=="H/5 * * * *"
}
@Bug(18813)
public void testAddTriggerDifferentType() {
AbstractProject j = jenkins.createProjectFromXML("foo", getClass().getResourceAsStream("AbstractProjectTest/vectorTriggers.xml"))
def newTrigger = new TimerTrigger("20 * * * *")
j.addTrigger(newTrigger);
assert j.triggers().size()==2
def t = j.triggers()[1]
assert t == newTrigger
}
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册