Class 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 Detail

      • 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:
        Constant Field Values
      • server

        protected final org.apache.sshd.server.SshServer server
    • Method Detail

      • 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
      • 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