提交 6d29dd45 编写于 作者: T Thomas Pilot 提交者: Oleg Nenashev

[FIXED JENKINS-36232] NPE during SCM polling (#2425)

* [FIXED JENKINS-36232] NPE during SCM polling

* add test to trigger the "no veto" code path that has the NPE

* incorporate remark on using @Issue reference
上级 213363d3
......@@ -121,7 +121,7 @@ public interface SCMTriggerItem {
}
@Override public PollingResult poll(TaskListener listener) {
SCMDecisionHandler veto = SCMDecisionHandler.firstShouldPollVeto(asItem());
if (!veto.shouldPoll(asItem())) {
if (veto != null && !veto.shouldPoll(asItem())) {
listener.getLogger().println(Messages.SCMTriggerItem_PollingVetoed(veto));
return PollingResult.NO_CHANGES;
}
......
package jenkins.triggers;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.verify;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.jvnet.hudson.test.Issue;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import hudson.model.Item;
import hudson.model.SCMedItem;
import hudson.model.TaskListener;
import jenkins.scm.SCMDecisionHandler;
@SuppressWarnings("deprecation")
@RunWith(PowerMockRunner.class)
public class SCMTriggerItemTest {
@Test
@Issue("JENKINS-36232")
@PrepareForTest(SCMDecisionHandler.class)
public void noVetoDelegatesPollingToAnSCMedItem() {
// given
PowerMockito.mockStatic(SCMDecisionHandler.class);
PowerMockito.when(SCMDecisionHandler.firstShouldPollVeto(any(Item.class))).thenReturn(null);
SCMedItem scMedItem = Mockito.mock(SCMedItem.class);
TaskListener listener = Mockito.mock(TaskListener.class);
// when
SCMTriggerItem.SCMTriggerItems.asSCMTriggerItem(scMedItem).poll(listener);
// then
verify(scMedItem).poll(listener);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册