Class SshTestGitServer

java.lang.Object
org.eclipse.jgit.junit.ssh.SshTestGitServer

public class SshTestGitServer extends Object
A simple ssh/sftp git test server based on Apache MINA sshd.

Supports only a single repository. Authenticates only the given test user against his given test public key. Supports fetch and push.

Since:
5.2
  • Field Details

    • ECHO_COMMAND

      public static final String ECHO_COMMAND
      Simple echo test command. Replies with the command string as passed. If of the form "echo [int] anything", takes the integer value as a delay in seconds before replying, which may be useful to test various timeout-related things.
      Since:
      5.9
      See Also:
    • testUser

      @NonNull protected final String testUser
    • repository

      @NonNull protected final Repository repository
    • hostKeys

      @NonNull protected final List<KeyPair> hostKeys
    • server

      protected final org.apache.sshd.server.SshServer server
    • testKey

      @NonNull protected PublicKey testKey
    • executorService

      private final org.apache.sshd.common.util.threads.CloseableExecutorService executorService
  • Constructor Details

  • Method Details

    • getSignatureFactories

      private static List<org.apache.sshd.common.NamedFactory<org.apache.sshd.common.signature.Signature>> getSignatureFactories()
      Apache MINA sshd 2.6.0 has removed DSA, DSA_CERT and RSA_CERT. We have to set it up explicitly to still allow users to connect with DSA keys.
      Returns:
      a list of supported signature factories
    • readPublicKey

      private static PublicKey readPublicKey(Path key) throws IOException, GeneralSecurityException
      Throws:
      IOException
      GeneralSecurityException
    • readKeyPair

      private static KeyPair readKeyPair(byte[] keyMaterial) throws IOException, GeneralSecurityException
      Throws:
      IOException
      GeneralSecurityException
    • getAuthFactories

      private List<org.apache.sshd.server.auth.UserAuthFactory> getAuthFactories()
    • configureAuthentication

      protected void configureAuthentication()
      Configures the authentication mechanisms of this test server. Invoked from the constructor. The default sets up public key authentication for the test user, and a gssapi-with-mic authenticator that pretends to support this mechanism, but that then refuses to authenticate anyone.
    • configureSubsystems

      @NonNull protected List<org.apache.sshd.server.subsystem.SubsystemFactory> configureSubsystems()
      Configures the test server's subsystems (sftp, scp). Invoked from the constructor. The default provides a simple SFTP setup with the root directory as the given repository's .git directory's parent. (I.e., at the directory containing the .git directory.)
      Returns:
      A possibly empty collection of subsystems.
    • configureShell

      protected void configureShell()
      Configures shell access for the test server. The default provides no shell at all.
    • addHostKey

      public void addHostKey(@NonNull Path key, boolean inFront) throws IOException, GeneralSecurityException
      Adds an additional host key to the server.
      Parameters:
      key - path to the private key file; should not be encrypted
      inFront - whether to add the new key before other existing keys
      Throws:
      IOException - if the file denoted by the Path key cannot be read
      GeneralSecurityException - if the key contained in the file cannot be read
    • addHostKey

      public void addHostKey(@NonNull KeyPair key, boolean inFront)
      Adds an additional host key to the server.
      Parameters:
      key - KeyPair to add
      inFront - whether to add the new key before other existing keys
      Since:
      5.8
    • enablePasswordAuthentication

      public void enablePasswordAuthentication()
      Enable password authentication. The server will accept the test user's name, converted to all upper-case, as password.
    • enableKeyboardInteractiveAuthentication

      public void enableKeyboardInteractiveAuthentication()
      Enable keyboard-interactive authentication. The server will accept the test user's name, converted to all upper-case, as password.
    • getPropertyResolver

      public org.apache.sshd.common.PropertyResolver getPropertyResolver()
      Retrieves the server's PropertyResolver, giving access to server properties.
      Returns:
      the PropertyResolver
      Since:
      5.9
    • start

      public int start() throws IOException
      Starts the test server, listening on a random port.
      Returns:
      the port the server listens on; test clients should connect to that port
      Throws:
      IOException
    • stop

      public void stop() throws IOException
      Stops the test server.
      Throws:
      IOException
    • setTestUserPublicKey

      public void setTestUserPublicKey(Path key) throws IOException, GeneralSecurityException
      Sets the test user's public key on the server.
      Parameters:
      key - to set
      Throws:
      IOException - if the file cannot be read
      GeneralSecurityException - if the public key cannot be extracted from the file
    • setTestUserPublicKey

      public void setTestUserPublicKey(@NonNull PublicKey key)
      Sets the test user's public key on the server.
      Parameters:
      key - to set
      Since:
      5.8
    • setPreamble

      public void setPreamble(String... lines)
      Sets the lines the server sends before its server identification in the initial protocol version exchange.
      Parameters:
      lines - to send
      Since:
      5.5