|
39 | 39 |
|
40 | 40 | import edu.umd.cs.findbugs.annotations.NonNull; |
41 | 41 | import hudson.EnvVars; |
| 42 | +import hudson.ExtensionList; |
42 | 43 | import hudson.FilePath; |
43 | 44 | import hudson.model.Node.Mode; |
44 | 45 | import hudson.model.Queue.WaitingItem; |
|
61 | 62 | import java.util.GregorianCalendar; |
62 | 63 | import java.util.List; |
63 | 64 | import jenkins.model.Jenkins; |
| 65 | +import jenkins.model.NodeListener; |
64 | 66 | import jenkins.security.QueueItemAuthenticatorConfiguration; |
65 | 67 | import org.htmlunit.HttpMethod; |
66 | 68 | import org.htmlunit.Page; |
@@ -91,23 +93,40 @@ public void before() { |
91 | 93 | j.jenkins.setSecurityRealm(j.createDummySecurityRealm()); |
92 | 94 | } |
93 | 95 |
|
| 96 | + @TestExtension("testSetTemporaryOfflineCause") |
| 97 | + public static class NodeListenerImpl extends NodeListener { |
| 98 | + private int count; |
| 99 | + |
| 100 | + public static int getCount() { |
| 101 | + return ExtensionList.lookupSingleton(NodeListenerImpl.class).count; |
| 102 | + } |
| 103 | + |
| 104 | + @Override |
| 105 | + protected void onUpdated(@NonNull Node oldOne, @NonNull Node newOne) { |
| 106 | + count++; |
| 107 | + } |
| 108 | + } |
| 109 | + |
94 | 110 | @Test |
95 | 111 | public void testSetTemporaryOfflineCause() throws Exception { |
96 | 112 | Node node = j.createOnlineSlave(); |
97 | 113 | FreeStyleProject project = j.createFreeStyleProject(); |
98 | 114 | project.setAssignedLabel(j.jenkins.getLabel(node.getDisplayName())); |
99 | 115 | OfflineCause cause = new OfflineCause.ByCLI("message"); |
100 | 116 | node.setTemporaryOfflineCause(cause); |
| 117 | + assertThat(NodeListenerImpl.getCount(), is(1)); |
101 | 118 | for (ComputerListener l : ComputerListener.all()) { |
102 | 119 | l.onOnline(node.toComputer(), TaskListener.NULL); |
103 | 120 | } |
104 | 121 | assertEquals("Node should have offline cause which was set.", cause, node.toComputer().getOfflineCause()); |
105 | 122 | OfflineCause cause2 = new OfflineCause.ByCLI("another message"); |
106 | 123 | node.setTemporaryOfflineCause(cause2); |
| 124 | + assertThat(NodeListenerImpl.getCount(), is(2)); |
107 | 125 | assertEquals("Node should have the new offline cause.", cause2, node.toComputer().getOfflineCause()); |
108 | 126 | // Exists in some plugins |
109 | 127 | node.toComputer().setTemporarilyOffline(false, new OfflineCause.ByCLI("A third message")); |
110 | 128 | assertThat(node.getTemporaryOfflineCause(), nullValue()); |
| 129 | + assertThat(NodeListenerImpl.getCount(), is(3)); |
111 | 130 | } |
112 | 131 |
|
113 | 132 | @Test |
|
0 commit comments