diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 04ceb6e8..b7814523 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -3,4 +3,8 @@ updates: - package-ecosystem: "maven" directory: "/" schedule: - interval: "weekly" + interval: "daily" + - package-ecosystem: "github-actions" + directory: / + schedule: + interval: "daily" \ No newline at end of file diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 10fb79a1..bbef3509 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -1,6 +1,4 @@ # https://github.com/jenkinsci/.github/blob/master/.github/release-drafter.adoc +# https://www.jenkins.io/doc/developer/publishing/releasing-cd/#release-notes _extends: .github -# Semantic versioning is used d=for this plugin: https://semver.org/ -version-template: $MAJOR.$MINOR.$PATCH -tag-template: ssh-slaves-$NEXT_PATCH_VERSION -name-template: $NEXT_PATCH_VERSION + diff --git a/.github/workflows/cd.yaml b/.github/workflows/cd.yaml new file mode 100644 index 00000000..9d5dd257 --- /dev/null +++ b/.github/workflows/cd.yaml @@ -0,0 +1,59 @@ +# Note: additional setup is required, see https://www.jenkins.io/redirect/continuous-delivery-of-plugins + +name: cd +on: + workflow_dispatch: + check_run: + types: + - completed + +jobs: + validate: + runs-on: ubuntu-latest + outputs: + should_release: ${{ steps.verify-ci-status.outputs.result == 'success' && steps.interesting-categories.outputs.interesting == 'true' }} + steps: + - name: Verify CI status + uses: jenkins-infra/verify-ci-status-action@v1.2.0 + id: verify-ci-status + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + output_result: true + + - name: Release Drafter + uses: release-drafter/release-drafter@v5 + if: steps.verify-ci-status.outputs.result == 'success' + with: + name: next + tag: next + version: next + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Check interesting categories + uses: jenkins-infra/interesting-category-action@v1.1.0 + id: interesting-categories + if: steps.verify-ci-status.outputs.result == 'success' + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + release: + runs-on: ubuntu-latest + needs: [validate] + if: needs.validate.outputs.should_release == 'true' + steps: + - name: Check out + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Set up JDK 8 + uses: actions/setup-java@v3 + with: + distribution: 'adopt' + java-version: 8 + - name: Release + uses: jenkins-infra/jenkins-maven-cd-action@v1.3.0 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }} + MAVEN_TOKEN: ${{ secrets.MAVEN_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/jenkins-security-scan.yml b/.github/workflows/jenkins-security-scan.yml new file mode 100644 index 00000000..17136b16 --- /dev/null +++ b/.github/workflows/jenkins-security-scan.yml @@ -0,0 +1,16 @@ +name: Jenkins Security Scan +on: + push: + branches: + - main +# see https://github.com/jenkins-infra/jenkins-security-scan/issues/3 +# pull_request: +# types: [ opened, synchronize, reopened ] + workflow_dispatch: + +jobs: + security-scan: + uses: jenkins-infra/jenkins-security-scan/.github/workflows/jenkins-security-scan.yaml@v1 + with: + java-cache: '' # Optionally enable use of a build dependency cache. Specify 'maven' or 'gradle' as appropriate. + java-version: 11 # What version of Java to set up for the build. diff --git a/.mvn/extensions.xml b/.mvn/extensions.xml index 43d62816..a65d82e1 100644 --- a/.mvn/extensions.xml +++ b/.mvn/extensions.xml @@ -2,6 +2,6 @@ io.jenkins.tools.incrementals git-changelist-maven-extension - 1.2 + 1.3 diff --git a/.mvn/maven.config b/.mvn/maven.config index 2a0299c4..f7daf60d 100644 --- a/.mvn/maven.config +++ b/.mvn/maven.config @@ -1,2 +1,3 @@ -Pconsume-incrementals -Pmight-produce-incrementals +-Dchangelist.format=%d.v%s diff --git a/doc/CONFIGURE.md b/doc/CONFIGURE.md index a4cf7930..a63fe304 100644 --- a/doc/CONFIGURE.md +++ b/doc/CONFIGURE.md @@ -226,13 +226,16 @@ See [SSH Build Agents and Cygwin](https://wiki.jenkins.io/display/JENKINS/SSH+sl ### Launch Windows agents using Microsoft OpenSSH -The current version of the plugin does not run directly on PowerShell, you have to use prefix and suffix settings to trick the command and make it works, Windows 10 machines can run as SSH agents with the Microsoft OpenSSH server by using: +The current version of the plugin does not run when Powershell is the default shell for the agent system. To connect to the agent you have to use prefix and suffix settings to trick the command and make it work, Windows 10/11 machines can run as SSH agents with the Microsoft OpenSSH server by using: **Prefix Start Agent Command** ``` powershell -Command "cd C:\J\S ; C:\J\S\jdk\bin\java.exe -jar remoting.jar" ; exit 0 ; rem ' ``` + +`C:\J\S` is the path to the agent work directory on the agent system. If java is in a different directory, you will need to specify that directory instead of `C:\J\S\jdk\bin`. + **Suffix Start Agent Command** ``` diff --git a/pom.xml b/pom.xml index 580b2177..b8387ceb 100644 --- a/pom.xml +++ b/pom.xml @@ -5,11 +5,11 @@ org.jenkins-ci.plugins plugin - 4.31 + 4.40 ssh-slaves - ${revision}${changelist} + ${revision}.${changelist} hpi SSH Build Agents plugin @@ -25,9 +25,9 @@ - 1.33.1 - -SNAPSHOT - 2.289.1 + 1 + 999999-SNAPSHOT + 2.319.1 8 1.31.0 @@ -102,8 +102,8 @@ io.jenkins.tools.bom - bom-2.277.x - 961.vf0c9f6f59827 + bom-2.319.x + 1342.v729ca_3818e88 pom import @@ -111,10 +111,6 @@ org.jenkins-ci.plugins jackson2-api - - org.slf4j - slf4j-api - @@ -134,7 +130,7 @@ org.jenkins-ci.modules sshd - 3.1.0 + 3.236.ved5e1b_cb_50b_2 test @@ -162,7 +158,7 @@ org.testcontainers testcontainers - 1.16.2 + 1.17.2 test diff --git a/src/main/java/hudson/plugins/sshslaves/SSHLauncher.java b/src/main/java/hudson/plugins/sshslaves/SSHLauncher.java index 44664078..7e781f74 100644 --- a/src/main/java/hudson/plugins/sshslaves/SSHLauncher.java +++ b/src/main/java/hudson/plugins/sshslaves/SSHLauncher.java @@ -419,60 +419,58 @@ public void launch(final SlaveComputer computer, final TaskListener listener) th launcherExecutorService = Executors.newSingleThreadExecutor( new NamingThreadFactory(Executors.defaultThreadFactory(), "SSHLauncher.launch for '" + computer.getName() + "' node")); Set> callables = new HashSet<>(); - callables.add(new Callable() { - public Boolean call() throws InterruptedException { - Boolean rval = Boolean.FALSE; - try { - String[] preferredKeyAlgorithms = getSshHostKeyVerificationStrategyDefaulted().getPreferredKeyAlgorithms(computer); - if (preferredKeyAlgorithms != null && preferredKeyAlgorithms.length > 0) { // JENKINS-44832 - connection.setServerHostKeyAlgorithms(preferredKeyAlgorithms); - } else { - listener.getLogger().println("Warning: no key algorithms provided; JENKINS-42959 disabled"); - } - - listener.getLogger().println(logConfiguration()); - - openConnection(listener, computer); - - verifyNoHeaderJunk(listener); - reportEnvironment(listener); - - final String workingDirectory = getWorkingDirectory(computer); - if (workingDirectory == null) { - listener.error("Cannot get the working directory for " + computer); - return Boolean.FALSE; - } - - String java = null; - if (StringUtils.isNotBlank(javaPath)) { - java = expandExpression(computer, javaPath); - } else { - checkJavaIsInPath(listener); - //FIXME deprecated on 2020-12-10, it will removed after 2021-09-01 - JavaVersionChecker javaVersionChecker = new JavaVersionChecker(computer, listener, getJvmOptions(), - connection); - java = javaVersionChecker.resolveJava(); - } - - copyAgentJar(listener, workingDirectory); - - startAgent(computer, listener, java, workingDirectory); - - PluginImpl.register(connection); - rval = Boolean.TRUE; - } catch (RuntimeException|Error e) { - String msg = Messages.SSHLauncher_UnexpectedError(); - if(StringUtils.isNotBlank(e.getMessage())){ - msg = e.getMessage(); - } - e.printStackTrace(listener.error(msg)); - } catch (AbortException e) { - listener.getLogger().println(e.getMessage()); - } catch (IOException e) { - e.printStackTrace(listener.getLogger()); - } finally { - return rval; + callables.add(() -> { + Boolean rval = Boolean.FALSE; + try { + String[] preferredKeyAlgorithms = getSshHostKeyVerificationStrategyDefaulted().getPreferredKeyAlgorithms(computer); + if (preferredKeyAlgorithms != null && preferredKeyAlgorithms.length > 0) { // JENKINS-44832 + connection.setServerHostKeyAlgorithms(preferredKeyAlgorithms); + } else { + listener.getLogger().println("Warning: no key algorithms provided; JENKINS-42959 disabled"); + } + + listener.getLogger().println(logConfiguration()); + + openConnection(listener, computer); + + verifyNoHeaderJunk(listener); + reportEnvironment(listener); + + final String workingDirectory = getWorkingDirectory(computer); + if (workingDirectory == null) { + listener.error("Cannot get the working directory for " + computer); + return Boolean.FALSE; + } + + String java = null; + if (StringUtils.isNotBlank(javaPath)) { + java = expandExpression(computer, javaPath); + } else { + checkJavaIsInPath(listener); + //FIXME deprecated on 2020-12-10, it will removed after 2021-09-01 + JavaVersionChecker javaVersionChecker = new JavaVersionChecker(computer, listener, getJvmOptions(), + connection); + java = javaVersionChecker.resolveJava(); + } + + copyAgentJar(listener, workingDirectory); + + startAgent(computer, listener, java, workingDirectory); + + PluginImpl.register(connection); + rval = Boolean.TRUE; + } catch (RuntimeException|Error e) { + String msg = Messages.SSHLauncher_UnexpectedError(); + if(StringUtils.isNotBlank(e.getMessage())){ + msg = e.getMessage(); } + e.printStackTrace(listener.error(msg)); + } catch (AbortException e) { + listener.getLogger().println(e.getMessage()); + } catch (IOException e) { + e.printStackTrace(listener.getLogger()); + } finally { + return rval; } }); diff --git a/src/main/java/hudson/plugins/sshslaves/verifiers/MissingVerificationStrategyAdministrativeMonitor.java b/src/main/java/hudson/plugins/sshslaves/verifiers/MissingVerificationStrategyAdministrativeMonitor.java index 62994a60..4235400f 100644 --- a/src/main/java/hudson/plugins/sshslaves/verifiers/MissingVerificationStrategyAdministrativeMonitor.java +++ b/src/main/java/hudson/plugins/sshslaves/verifiers/MissingVerificationStrategyAdministrativeMonitor.java @@ -65,6 +65,11 @@ public String getDisplayName() { } public String getAgentNames() { - return agentNames != null ? agentNames.toString() : ""; + return agentNames != null ? agentNames.toString() : ""; + } + + @Override + public boolean isSecurity() { + return true; } } diff --git a/src/test/java/hudson/plugins/sshslaves/SSHLauncherTest.java b/src/test/java/hudson/plugins/sshslaves/SSHLauncherTest.java index 3d27c7c9..f0b69b31 100644 --- a/src/test/java/hudson/plugins/sshslaves/SSHLauncherTest.java +++ b/src/test/java/hudson/plugins/sshslaves/SSHLauncherTest.java @@ -76,6 +76,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotSame; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -154,12 +155,7 @@ private static boolean checkSupported(final String testVersionOutput) throws IOE } private static void assertNotSupported(final String testVersionOutput) throws AssertionError { - try { - checkSupported(testVersionOutput); - fail("Expected version " + testVersionOutput + " to be not supported, but it is supported"); - } catch (IOException e) { - // expected - } + assertThrows(IOException.class, () -> checkSupported(testVersionOutput)); } private void checkRoundTrip(String host) throws Exception { @@ -400,7 +396,7 @@ public void getMd5Hash() { try { byte[] bytes = "Leave me alone!".getBytes(); String result = SSHLauncher.getMd5Hash(bytes); - assertTrue("1EB226C8E950BAC1494BE197E84A264C".equals(result)); + assertEquals("1EB226C8E950BAC1494BE197E84A264C", result); } catch (Exception e) { e.printStackTrace(); } @@ -420,7 +416,7 @@ public void readInputStreamIntoByteArrayAndClose() { byte[] bytes = SSHLauncher.readInputStreamIntoByteArrayAndClose(inputStream); assertNotNull(bytes); assertTrue(bytes.length > 0); - assertTrue("Don't change me or add newlines!".equals(new String(bytes))); + assertEquals("Don't change me or add newlines!", new String(bytes)); } catch (Exception e) { e.printStackTrace(); diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentDSAConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentDSAConnectionTest.java index e9184ac7..ff7de11f 100644 --- a/src/test/java/hudson/plugins/sshslaves/agents/AgentDSAConnectionTest.java +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentDSAConnectionTest.java @@ -11,12 +11,14 @@ import hudson.plugins.sshslaves.categories.AgentSSHTest; import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; import static org.junit.Assert.assertTrue; +import org.junit.Ignore; /** * Connect to a remote SSH Agent * * @author Kuisathaverat */ +@Ignore("Only for manual test.") @Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) public class AgentDSAConnectionTest extends AgentConnectionBase { public static final String SSH_AGENT_NAME = "ssh-agent-dsa"; diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentECDHSha2Nistp256ConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentECDHSha2Nistp256ConnectionTest.java index b491c093..37a2b09a 100644 --- a/src/test/java/hudson/plugins/sshslaves/agents/AgentECDHSha2Nistp256ConnectionTest.java +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentECDHSha2Nistp256ConnectionTest.java @@ -11,12 +11,14 @@ import hudson.plugins.sshslaves.categories.AgentSSHTest; import hudson.plugins.sshslaves.categories.SSHKexTest; import static org.junit.Assert.assertTrue; +import org.junit.Ignore; /** * Connect to a remote SSH Agent * * @author Kuisathaverat */ +@Ignore("Only for manual test.") @Category({ AgentSSHTest.class, SSHKexTest.class}) public class AgentECDHSha2Nistp256ConnectionTest extends AgentConnectionBase { public static final String SSH_AGENT_NAME = "ssh-agent-ecdh-sha2-nistp256"; diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentECDHSha2Nistp384ConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentECDHSha2Nistp384ConnectionTest.java index 59666c22..b6a475af 100644 --- a/src/test/java/hudson/plugins/sshslaves/agents/AgentECDHSha2Nistp384ConnectionTest.java +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentECDHSha2Nistp384ConnectionTest.java @@ -11,12 +11,14 @@ import hudson.plugins.sshslaves.categories.AgentSSHTest; import hudson.plugins.sshslaves.categories.SSHKexTest; import static org.junit.Assert.assertTrue; +import org.junit.Ignore; /** * Connect to a remote SSH Agent * * @author Kuisathaverat */ +@Ignore("Only for manual test.") @Category({ AgentSSHTest.class, SSHKexTest.class}) public class AgentECDHSha2Nistp384ConnectionTest extends AgentConnectionBase { public static final String SSH_AGENT_NAME = "ssh-agent-ecdh-sha2-nistp384"; diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA256ConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA256ConnectionTest.java index ed66f2a7..5bfa655e 100644 --- a/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA256ConnectionTest.java +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA256ConnectionTest.java @@ -11,12 +11,14 @@ import hudson.plugins.sshslaves.categories.AgentSSHTest; import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; import static org.junit.Assert.assertTrue; +import org.junit.Ignore; /** * Connect to a remote SSH Agent * * @author Kuisathaverat */ +@Ignore("Only for manual test.") @Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) public class AgentRSA256ConnectionTest extends AgentConnectionBase { public static final String SSH_AGENT_NAME = "ssh-agent-rsa256"; diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_AES128CBC_ConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_AES128CBC_ConnectionTest.java index 6c8b64f0..a12387f9 100644 --- a/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_AES128CBC_ConnectionTest.java +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_AES128CBC_ConnectionTest.java @@ -11,12 +11,14 @@ import hudson.plugins.sshslaves.categories.AgentSSHTest; import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; import static org.junit.Assert.assertTrue; +import org.junit.Ignore; /** * Connect to a remote SSH Agent * * @author Kuisathaverat */ +@Ignore("Only for manual test.") @Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) public class AgentRSA_AES128CBC_ConnectionTest extends AgentConnectionBase { public static final String SSH_AGENT_NAME = "ssh-agent-rsa"; diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_AES192CBC_ConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_AES192CBC_ConnectionTest.java index 12ad532a..ca27295f 100644 --- a/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_AES192CBC_ConnectionTest.java +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_AES192CBC_ConnectionTest.java @@ -11,12 +11,14 @@ import hudson.plugins.sshslaves.categories.AgentSSHTest; import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; import static org.junit.Assert.assertTrue; +import org.junit.Ignore; /** * Connect to a remote SSH Agent * * @author Kuisathaverat */ +@Ignore("Only for manual test.") @Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) public class AgentRSA_AES192CBC_ConnectionTest extends AgentConnectionBase { public static final String SSH_AGENT_NAME = "ssh-agent-rsa"; diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_DESCBC_ConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_DESCBC_ConnectionTest.java index 3527a87f..4a09361b 100644 --- a/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_DESCBC_ConnectionTest.java +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_DESCBC_ConnectionTest.java @@ -11,12 +11,14 @@ import hudson.plugins.sshslaves.categories.AgentSSHTest; import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; import static org.junit.Assert.assertTrue; +import org.junit.Ignore; /** * Connect to a remote SSH Agent * * @author Kuisathaverat */ +@Ignore("Only for manual test.") @Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) public class AgentRSA_DESCBC_ConnectionTest extends AgentConnectionBase { public static final String SSH_AGENT_NAME = "ssh-agent-rsa"; diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_DES_EDE3CBC_ConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_DES_EDE3CBC_ConnectionTest.java index 7403667a..dcfdea27 100644 --- a/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_DES_EDE3CBC_ConnectionTest.java +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentRSA_DES_EDE3CBC_ConnectionTest.java @@ -11,12 +11,14 @@ import hudson.plugins.sshslaves.categories.AgentSSHTest; import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; import static org.junit.Assert.assertTrue; +import org.junit.Ignore; /** * Connect to a remote SSH Agent * * @author Kuisathaverat */ +@Ignore("Only for manual test.") @Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) public class AgentRSA_DES_EDE3CBC_ConnectionTest extends AgentConnectionBase { public static final String SSH_AGENT_NAME = "ssh-agent-rsa"; diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu1404RSAConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu1404RSAConnectionTest.java index 2f643ff2..855159f9 100644 --- a/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu1404RSAConnectionTest.java +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu1404RSAConnectionTest.java @@ -11,12 +11,14 @@ import hudson.plugins.sshslaves.categories.AgentSSHTest; import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; import static org.junit.Assert.assertTrue; +import org.junit.Ignore; /** * Connect to a remote SSH Agent * * @author Kuisathaverat */ +@Ignore("Only for manual test.") @Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) public class AgentUbuntu1404RSAConnectionTest extends AgentConnectionBase { public static final String SSH_AGENT_NAME = "ssh-agent-ubuntu-14.04"; diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu1604RSAConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu1604RSAConnectionTest.java index 1793b399..d73777b5 100644 --- a/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu1604RSAConnectionTest.java +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu1604RSAConnectionTest.java @@ -11,12 +11,14 @@ import hudson.plugins.sshslaves.categories.AgentSSHTest; import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; import static org.junit.Assert.assertTrue; +import org.junit.Ignore; /** * Connect to a remote SSH Agent * * @author Kuisathaverat */ +@Ignore("Only for manual test.") @Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) public class AgentUbuntu1604RSAConnectionTest extends AgentConnectionBase { public static final String SSH_AGENT_NAME = "ssh-agent-ubuntu-16.04"; diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu1804RSAConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu1804RSAConnectionTest.java index 73acbab4..2c0cd94f 100644 --- a/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu1804RSAConnectionTest.java +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu1804RSAConnectionTest.java @@ -11,12 +11,14 @@ import hudson.plugins.sshslaves.categories.AgentSSHTest; import hudson.plugins.sshslaves.categories.SSHKeyAuthenticationTest; import static org.junit.Assert.assertTrue; +import org.junit.Ignore; /** * Connect to a remote SSH Agent * * @author Kuisathaverat */ +@Ignore("Only for manual test.") @Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) public class AgentUbuntu1804RSAConnectionTest extends AgentConnectionBase { public static final String SSH_AGENT_NAME = "ssh-agent-ubuntu-18.04"; diff --git a/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu2004RSAConnectionTest.java b/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu2004RSAConnectionTest.java index 5151f7de..c08d9e48 100644 --- a/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu2004RSAConnectionTest.java +++ b/src/test/java/hudson/plugins/sshslaves/agents/AgentUbuntu2004RSAConnectionTest.java @@ -1,6 +1,7 @@ package hudson.plugins.sshslaves.agents; import java.io.IOException; +import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; @@ -18,6 +19,7 @@ * * @author Kuisathaverat */ +@Ignore("Only for manual test.") @Category({ AgentSSHTest.class, SSHKeyAuthenticationTest.class}) public class AgentUbuntu2004RSAConnectionTest extends AgentConnectionBase { public static final String SSH_AGENT_NAME = "ssh-agent-ubuntu-20.04"; diff --git a/src/test/java/hudson/plugins/sshslaves/verifiers/TrustHostKeyActionTest.java b/src/test/java/hudson/plugins/sshslaves/verifiers/TrustHostKeyActionTest.java index 2ed2c10d..db177361 100644 --- a/src/test/java/hudson/plugins/sshslaves/verifiers/TrustHostKeyActionTest.java +++ b/src/test/java/hudson/plugins/sshslaves/verifiers/TrustHostKeyActionTest.java @@ -187,25 +187,21 @@ private Object newCommandFactory(Class commandFactoryClass) throws ClassNotFound return java.lang.reflect.Proxy.newProxyInstance( commandFactoryClass.getClassLoader(), new java.lang.Class[]{commandFactoryClass}, - new java.lang.reflect.InvocationHandler() { + (proxy, method, args) -> { - @Override - public Object invoke(Object proxy, java.lang.reflect.Method method, Object[] args) throws java.lang.Throwable { + if (method.getName().equals("createCommand")) { + Class commandClass; + try { + commandClass = Class.forName("org.apache.sshd.server.command.UnknownCommand"); + } catch (ClassNotFoundException e) { + commandClass = Class.forName("org.apache.sshd.server.scp.UnknownCommand"); + } - if (method.getName().equals("createCommand")) { - Class commandClass; - try { - commandClass = Class.forName("org.apache.sshd.server.command.UnknownCommand"); - } catch (ClassNotFoundException e) { - commandClass = Class.forName("org.apache.sshd.server.scp.UnknownCommand"); - } + return commandClass.getConstructor(String.class).newInstance(args[0]); + } - return commandClass.getConstructor(String.class).newInstance(args[0]); - } - - return null; - } - }); + return null; + }); } private Class newCommandAuthenticatorClass() throws ClassNotFoundException { @@ -223,18 +219,14 @@ private Object newAuthenticator(Class passwordAuthenticatorClass) throws ClassNo return java.lang.reflect.Proxy.newProxyInstance( passwordAuthenticatorClass.getClassLoader(), new java.lang.Class[]{passwordAuthenticatorClass}, - new java.lang.reflect.InvocationHandler() { - - @Override - public Object invoke(Object proxy, java.lang.reflect.Method method, Object[] args) throws java.lang.Throwable { + (proxy, method, args) -> { - if (method.getName().equals("authenticate")) { - return Boolean.TRUE; - } + if (method.getName().equals("authenticate")) { + return Boolean.TRUE; + } - return null; - } - }); + return null; + }); } private Object invoke(Object target, String methodName, Class[] parameterTypes, Object[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {