3030import static org .hamcrest .Matchers .empty ;
3131import static org .hamcrest .Matchers .endsWith ;
3232import static org .hamcrest .Matchers .equalTo ;
33+ import static org .hamcrest .Matchers .instanceOf ;
3334import static org .hamcrest .Matchers .not ;
3435import static org .junit .Assert .assertThrows ;
3536import static org .junit .Assert .assertTrue ;
@@ -94,15 +95,19 @@ public void disconnect() throws Exception {
9495 assertTrue (slave .toComputer ().isOnline ());
9596
9697 Result result = command .authorizedTo (Jenkins .READ , Computer .DISCONNECT )
97- .invokeWithArgs (slave .getNodeName (), "-m" , "Custom cause message" )
98- ;
98+ .invokeWithArgs (slave .getNodeName (), "-m" , "Custom cause message" );
9999
100100 assertThat (result , succeededSilently ());
101101 assertTrue (slave .toComputer ().isOffline ());
102102
103- OfflineCause .UserCause cause = (OfflineCause .UserCause ) slave .toComputer ().getOfflineCause ();
104- assertThat (cause .toString (), endsWith ("Custom cause message" ));
105- assertThat (cause .getUser (), equalTo (command .user ()));
103+ OfflineCause cause = slave .toComputer ().getOfflineCause ();
104+
105+ if (cause instanceof OfflineCause .UserCause userCause ) {
106+ assertThat (userCause .toString (), endsWith ("Custom cause message" ));
107+ assertThat (userCause .getUser (), equalTo (command .user ()));
108+ } else {
109+ assertThat ("seen occasionally in CI" , cause , instanceOf (OfflineCause .ChannelTermination .class ));
110+ }
106111 }
107112
108113 @ Test
@@ -113,15 +118,19 @@ public void offline() throws Exception {
113118 assertTrue (slave .toComputer ().isOnline ());
114119
115120 Result result = command .authorizedTo (Jenkins .READ , Computer .DISCONNECT )
116- .invokeWithArgs (slave .getNodeName (), "-m" , "Custom cause message" )
117- ;
121+ .invokeWithArgs (slave .getNodeName (), "-m" , "Custom cause message" );
118122
119123 assertThat (result , succeededSilently ());
120124 assertTrue (slave .toComputer ().isOffline ());
121125
122- OfflineCause .UserCause cause = (OfflineCause .UserCause ) slave .toComputer ().getOfflineCause ();
123- assertThat (cause .toString (), endsWith ("Custom cause message" ));
124- assertThat (cause .getUser (), equalTo (command .user ()));
126+ OfflineCause cause = slave .toComputer ().getOfflineCause ();
127+
128+ if (cause instanceof OfflineCause .UserCause userCause ) {
129+ assertThat (userCause .toString (), endsWith ("Custom cause message" ));
130+ assertThat (userCause .getUser (), equalTo (command .user ()));
131+ } else {
132+ assertThat ("seen occasionally in CI" , cause , instanceOf (OfflineCause .ChannelTermination .class ));
133+ }
125134 }
126135
127136 @ Test
0 commit comments