Skip to content

Commit 395b553

Browse files
authored
Merge branch 'master' into enable-top-button
2 parents 4c26252 + 73185b2 commit 395b553

File tree

5 files changed

+55
-93
lines changed

5 files changed

+55
-93
lines changed

bom/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ THE SOFTWARE.
6363
<dependency>
6464
<groupId>org.springframework</groupId>
6565
<artifactId>spring-framework-bom</artifactId>
66-
<version>6.2.4</version>
66+
<version>6.2.5</version>
6767
<type>pom</type>
6868
<scope>import</scope>
6969
</dependency>
@@ -89,7 +89,7 @@ THE SOFTWARE.
8989
<dependency>
9090
<groupId>com.google.guava</groupId>
9191
<artifactId>guava</artifactId>
92-
<version>33.4.0-jre</version>
92+
<version>33.4.5-jre</version>
9393
</dependency>
9494
<dependency>
9595
<groupId>com.sun.xml.txw2</groupId>

core/src/main/java/hudson/Functions.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2633,11 +2633,13 @@ public static String translateModifierKeysForUsersPlatform(String keyboardShortc
26332633
StaplerRequest2 currentRequest = Stapler.getCurrentRequest2();
26342634
currentRequest.getWebApp().getDispatchValidator().allowDispatch(currentRequest, Stapler.getCurrentResponse2());
26352635
String userAgent = currentRequest.getHeader("User-Agent");
2636-
2637-
List<String> platformsThatUseCommand = List.of("MAC", "IPHONE", "IPAD");
2638-
boolean useCmdKey = platformsThatUseCommand.stream().anyMatch(e -> userAgent.toUpperCase().contains(e));
2639-
2640-
return keyboardShortcut.replace("CMD", useCmdKey ? "⌘" : "CTRL");
2636+
if (userAgent != null) {
2637+
List<String> platformsThatUseCommand = List.of("MAC", "IPHONE", "IPAD");
2638+
boolean useCmdKey = platformsThatUseCommand.stream().anyMatch(e -> userAgent.toUpperCase().contains(e));
2639+
return keyboardShortcut.replace("CMD", useCmdKey ? "⌘" : "CTRL");
2640+
} else {
2641+
return keyboardShortcut;
2642+
}
26412643
}
26422644

26432645
@Restricted(NoExternalUse.class)

test/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ THE SOFTWARE.
350350
<artifactItem>
351351
<groupId>io.jenkins.plugins</groupId>
352352
<artifactId>design-library</artifactId>
353-
<version>358.vcc903045e088</version>
353+
<version>371.v171782a_56701</version>
354354
<type>hpi</type>
355355
<outputDirectory>${project.build.outputDirectory}/plugins</outputDirectory>
356356
<destFileName>design-library.jpi</destFileName>

test/src/test/java/hudson/cli/DisconnectNodeCommandTest.java

Lines changed: 44 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -85,105 +85,73 @@ public void disconnectNodeShouldFailIfNodeDoesNotExist() {
8585
@Test
8686
public void disconnectNodeShouldSucceed() throws Exception {
8787
DumbSlave slave = j.createSlave("aNode", "", null);
88-
slave.toComputer().waitUntilOnline();
89-
assertThat(slave.toComputer().isOnline(), equalTo(true));
90-
assertThat(slave.toComputer().getOfflineCause(), equalTo(null));
88+
assertOnline(slave);
9189

9290
CLICommandInvoker.Result result = command
9391
.authorizedTo(Computer.DISCONNECT, Jenkins.READ)
9492
.invokeWithArgs("aNode");
9593
assertThat(result, succeededSilently());
96-
assertThat(slave.toComputer().isOffline(), equalTo(true));
97-
assertThat(slave.toComputer().getOfflineCause(), instanceOf(OfflineCause.ByCLI.class));
98-
assertThat(((OfflineCause.ByCLI) slave.toComputer().getOfflineCause()).message, equalTo(null));
94+
assertOffline(slave, null);
9995

10096
slave.toComputer().connect(true);
101-
slave.toComputer().waitUntilOnline();
102-
assertThat(slave.toComputer().isOnline(), equalTo(true));
103-
assertThat(slave.toComputer().getOfflineCause(), equalTo(null));
97+
assertOnline(slave);
10498

10599
result = command
106100
.authorizedTo(Computer.DISCONNECT, Jenkins.READ)
107101
.invokeWithArgs("aNode");
108102
assertThat(result, succeededSilently());
109-
assertThat(slave.toComputer().isOffline(), equalTo(true));
110-
assertThat(slave.toComputer().getOfflineCause(), instanceOf(OfflineCause.ByCLI.class));
111-
assertThat(((OfflineCause.ByCLI) slave.toComputer().getOfflineCause()).message, equalTo(null));
103+
assertOffline(slave, null);
112104

113105
result = command
114106
.authorizedTo(Computer.DISCONNECT, Jenkins.READ)
115107
.invokeWithArgs("aNode");
116108
assertThat(result, succeededSilently());
117-
assertThat(slave.toComputer().isOffline(), equalTo(true));
118-
assertThat(slave.toComputer().getOfflineCause(), instanceOf(OfflineCause.ByCLI.class));
119-
assertThat(((OfflineCause.ByCLI) slave.toComputer().getOfflineCause()).message, equalTo(null));
109+
assertOffline(slave, null);
120110
}
121111

122112
@Test
123113
public void disconnectNodeShouldSucceedWithCause() throws Exception {
124114
DumbSlave slave = j.createSlave("aNode", "", null);
125-
slave.toComputer().waitUntilOnline();
126-
assertThat(slave.toComputer().isOnline(), equalTo(true));
127-
assertThat(slave.toComputer().getOfflineCause(), equalTo(null));
115+
assertOnline(slave);
128116

129117
CLICommandInvoker.Result result = command
130118
.authorizedTo(Computer.DISCONNECT, Jenkins.READ)
131119
.invokeWithArgs("aNode", "-m", "aCause");
132120
assertThat(result, succeededSilently());
133-
assertThat(slave.toComputer().isOffline(), equalTo(true));
134-
assertThat(slave.toComputer().getOfflineCause(), instanceOf(OfflineCause.ByCLI.class));
135-
assertThat(((OfflineCause.ByCLI) slave.toComputer().getOfflineCause()).message, equalTo("aCause"));
121+
assertOffline(slave, "aCause");
136122

137123
slave.toComputer().connect(true);
138-
slave.toComputer().waitUntilOnline();
139-
assertThat(slave.toComputer().isOnline(), equalTo(true));
140-
assertThat(slave.toComputer().getOfflineCause(), equalTo(null));
124+
assertOnline(slave);
141125

142126
result = command
143127
.authorizedTo(Computer.DISCONNECT, Jenkins.READ)
144128
.invokeWithArgs("aNode", "-m", "anotherCause");
145129
assertThat(result, succeededSilently());
146-
assertThat(slave.toComputer().isOffline(), equalTo(true));
147-
assertThat(slave.toComputer().getOfflineCause(), instanceOf(OfflineCause.ByCLI.class));
148-
assertThat(((OfflineCause.ByCLI) slave.toComputer().getOfflineCause()).message, equalTo("anotherCause"));
130+
assertOffline(slave, "anotherCause");
149131

150132
result = command
151133
.authorizedTo(Computer.DISCONNECT, Jenkins.READ)
152134
.invokeWithArgs("aNode", "-m", "yetAnotherCause");
153135
assertThat(result, succeededSilently());
154-
assertThat(slave.toComputer().isOffline(), equalTo(true));
155-
assertThat(slave.toComputer().getOfflineCause(), instanceOf(OfflineCause.ByCLI.class));
156-
assertThat(((OfflineCause.ByCLI) slave.toComputer().getOfflineCause()).message, equalTo("yetAnotherCause"));
136+
assertOffline(slave, "yetAnotherCause");
157137
}
158138

159139
@Test
160140
public void disconnectNodeManyShouldSucceed() throws Exception {
161141
DumbSlave slave1 = j.createSlave("aNode1", "", null);
162142
DumbSlave slave2 = j.createSlave("aNode2", "", null);
163143
DumbSlave slave3 = j.createSlave("aNode3", "", null);
164-
slave1.toComputer().waitUntilOnline();
165-
assertThat(slave1.toComputer().isOnline(), equalTo(true));
166-
assertThat(slave1.toComputer().getOfflineCause(), equalTo(null));
167-
slave2.toComputer().waitUntilOnline();
168-
assertThat(slave2.toComputer().isOnline(), equalTo(true));
169-
assertThat(slave2.toComputer().getOfflineCause(), equalTo(null));
170-
slave3.toComputer().waitUntilOnline();
171-
assertThat(slave3.toComputer().isOnline(), equalTo(true));
172-
assertThat(slave3.toComputer().getOfflineCause(), equalTo(null));
144+
assertOnline(slave1);
145+
assertOnline(slave2);
146+
assertOnline(slave3);
173147

174148
final CLICommandInvoker.Result result = command
175149
.authorizedTo(Computer.DISCONNECT, Jenkins.READ)
176150
.invokeWithArgs("aNode1", "aNode2", "aNode3");
177151
assertThat(result, succeededSilently());
178-
assertThat(slave1.toComputer().isOffline(), equalTo(true));
179-
assertThat(slave1.toComputer().getOfflineCause(), instanceOf(OfflineCause.ByCLI.class));
180-
assertThat(((OfflineCause.ByCLI) slave1.toComputer().getOfflineCause()).message, equalTo(null));
181-
assertThat(slave2.toComputer().isOffline(), equalTo(true));
182-
assertThat(slave2.toComputer().getOfflineCause(), instanceOf(OfflineCause.ByCLI.class));
183-
assertThat(((OfflineCause.ByCLI) slave2.toComputer().getOfflineCause()).message, equalTo(null));
184-
assertThat(slave3.toComputer().isOffline(), equalTo(true));
185-
assertThat(slave3.toComputer().getOfflineCause(), instanceOf(OfflineCause.ByCLI.class));
186-
assertThat(((OfflineCause.ByCLI) slave3.toComputer().getOfflineCause()).message, equalTo(null));
152+
assertOffline(slave1, null);
153+
assertOffline(slave2, null);
154+
assertOffline(slave3, null);
187155
}
188156

189157
@Test
@@ -194,10 +162,7 @@ public void disconnectNodeManyShouldSucceedWithCause() throws Exception {
194162
agents.add(j.createSlave("aNode" + i, "", null));
195163
}
196164
for (var agent : agents) {
197-
var computer = agent.toComputer();
198-
computer.waitUntilOnline();
199-
assertThat(computer.isOnline(), equalTo(true));
200-
assertThat(computer.getOfflineCause(), equalTo(null));
165+
assertOnline(agent);
201166
}
202167

203168
var args = new ArrayList<String>();
@@ -211,27 +176,16 @@ public void disconnectNodeManyShouldSucceedWithCause() throws Exception {
211176
.invokeWithArgs(args.toArray(String[]::new));
212177
assertThat(result, succeededSilently());
213178
for (var agent : agents) {
214-
var computer = agent.toComputer();
215-
assertThat(computer.isOffline(), equalTo(true));
216-
var cause = computer.getOfflineCause();
217-
if (cause instanceof OfflineCause.ByCLI cliCause) {
218-
assertThat(cliCause.message, equalTo("aCause"));
219-
} else {
220-
assertThat("seen occasionally in CI", cause, instanceOf(OfflineCause.ChannelTermination.class));
221-
}
179+
assertOffline(agent, "aCause");
222180
}
223181
}
224182

225183
@Test
226184
public void disconnectNodeManyShouldFailIfANodeDoesNotExist() throws Exception {
227185
DumbSlave slave1 = j.createSlave("aNode1", "", null);
228186
DumbSlave slave2 = j.createSlave("aNode2", "", null);
229-
slave1.toComputer().waitUntilOnline();
230-
assertThat(slave1.toComputer().isOnline(), equalTo(true));
231-
assertThat(slave1.toComputer().getOfflineCause(), equalTo(null));
232-
slave2.toComputer().waitUntilOnline();
233-
assertThat(slave2.toComputer().isOnline(), equalTo(true));
234-
assertThat(slave2.toComputer().getOfflineCause(), equalTo(null));
187+
assertOnline(slave1);
188+
assertOnline(slave2);
235189

236190
final CLICommandInvoker.Result result = command
237191
.authorizedTo(Computer.DISCONNECT, Jenkins.READ)
@@ -240,34 +194,40 @@ public void disconnectNodeManyShouldFailIfANodeDoesNotExist() throws Exception {
240194
assertThat(result, hasNoStandardOutput());
241195
assertThat(result.stderr(), containsString("never_created: No such agent \"never_created\" exists. Did you mean \"aNode1\"?"));
242196
assertThat(result.stderr(), containsString("ERROR: " + CLICommand.CLI_LISTPARAM_SUMMARY_ERROR_TEXT));
243-
assertThat(slave1.toComputer().isOffline(), equalTo(true));
244-
assertThat(slave1.toComputer().getOfflineCause(), instanceOf(OfflineCause.ByCLI.class));
245-
assertThat(((OfflineCause.ByCLI) slave1.toComputer().getOfflineCause()).message, equalTo("aCause"));
246-
assertThat(slave2.toComputer().isOffline(), equalTo(true));
247-
assertThat(slave2.toComputer().getOfflineCause(), instanceOf(OfflineCause.ByCLI.class));
248-
assertThat(((OfflineCause.ByCLI) slave2.toComputer().getOfflineCause()).message, equalTo("aCause"));
197+
assertOffline(slave1, "aCause");
198+
assertOffline(slave2, "aCause");
249199
}
250200

251201
@Test
252202
public void disconnectNodeManyShouldSucceedEvenANodeIsSpecifiedTwice() throws Exception {
253203
DumbSlave slave1 = j.createSlave("aNode1", "", null);
254204
DumbSlave slave2 = j.createSlave("aNode2", "", null);
255-
slave1.toComputer().waitUntilOnline();
256-
assertThat(slave1.toComputer().isOnline(), equalTo(true));
257-
assertThat(slave1.toComputer().getOfflineCause(), equalTo(null));
258-
slave2.toComputer().waitUntilOnline();
259-
assertThat(slave2.toComputer().isOnline(), equalTo(true));
260-
assertThat(slave2.toComputer().getOfflineCause(), equalTo(null));
205+
assertOnline(slave1);
206+
assertOnline(slave2);
261207

262208
final CLICommandInvoker.Result result = command
263209
.authorizedTo(Computer.DISCONNECT, Jenkins.READ)
264210
.invokeWithArgs("aNode1", "aNode2", "aNode1", "-m", "aCause");
265211
assertThat(result, succeededSilently());
266-
assertThat(slave1.toComputer().isOffline(), equalTo(true));
267-
assertThat(slave1.toComputer().getOfflineCause(), instanceOf(OfflineCause.ByCLI.class));
268-
assertThat(((OfflineCause.ByCLI) slave1.toComputer().getOfflineCause()).message, equalTo("aCause"));
269-
assertThat(slave2.toComputer().isOffline(), equalTo(true));
270-
assertThat(slave2.toComputer().getOfflineCause(), instanceOf(OfflineCause.ByCLI.class));
271-
assertThat(((OfflineCause.ByCLI) slave2.toComputer().getOfflineCause()).message, equalTo("aCause"));
212+
assertOffline(slave1, "aCause");
213+
assertOffline(slave2, "aCause");
214+
}
215+
216+
private static void assertOnline(DumbSlave slave) throws InterruptedException {
217+
var computer = slave.toComputer();
218+
computer.waitUntilOnline();
219+
assertThat(computer.isOnline(), equalTo(true));
220+
assertThat(computer.getOfflineCause(), equalTo(null));
221+
}
222+
223+
private static void assertOffline(DumbSlave slave, String message) {
224+
var computer = slave.toComputer();
225+
assertThat(computer.isOffline(), equalTo(true));
226+
var offlineCause = computer.getOfflineCause();
227+
if (offlineCause instanceof OfflineCause.ByCLI cliCause) {
228+
assertThat(cliCause.message, equalTo(message));
229+
} else {
230+
assertThat("sometimes overrides ByCLI", offlineCause, instanceOf(OfflineCause.ChannelTermination.class));
231+
}
272232
}
273233
}

war/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ THE SOFTWARE.
375375
<!-- dependency of trilead-api -->
376376
<groupId>io.jenkins.plugins</groupId>
377377
<artifactId>eddsa-api</artifactId>
378-
<version>0.3.0-13.v7cb_69ed68f00</version>
378+
<version>0.3.0.1-16.vcb_4a_98a_3531c</version>
379379
<type>hpi</type>
380380
</artifactItem>
381381
<artifactItem>

0 commit comments

Comments
 (0)