Utilisation d’Apache Mina en tant que serveur SFTP en mémoire tampon / en mémoire pour les tests unitaires

J’ai un peu de mal à comprendre comment utiliser Apache Mina. Leur documentation est un peu maigre pour mon cerveau sans talent. J’ai vu le code de départ utile dans la bibliothèque du serveur Java SFTP?

Ce que je n’arrive pas à comprendre, c’est comment l’utiliser. Je souhaite configurer un test unitaire qui vérifie mon code sftp, en utilisant Mina comme une sorte de serveur factice, c’est-à-dire capable d’écrire un test unitaire comme

@Before public void beforeTestSetup() { sshd = SshServer.setUpDefaultServer(); sshd.setPort(22); sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider("hostkey.ser")); List<NamedFactory> userAuthFactories = new ArrayList<NamedFactory>(); userAuthFactories.add(new UserAuthNone.Factory()); sshd.setUserAuthFactories(userAuthFactories); sshd.setPublickeyAuthenticator(new PublickeyAuthenticator()); sshd.setCommandFactory(new ScpCommandFactory()); List<NamedFactory> namedFactoryList = new ArrayList<NamedFactory>(); namedFactoryList.add(new SftpSubsystem.Factory()); sshd.setSubsystemFactories(namedFactoryList); try { sshd.start(); } catch (Exception e) { e.printStackTrace(); } } @Test public void testGetFile() { } 

La question est de savoir quoi mettre dans testGetFile() .

J’ai parcouru le code de test en me demandant s’il fallait davantage de configuration dans ce qui précède pour spécifier un répertoire racine, un nom d’utilisateur et un nom de fichier de clé d’authentification. Ensuite, je devrai récupérer et extraire des fichiers à l’aide d’un client ou de mon propre code API SFTP?

Je suis sûr que c’est une excellente API, il n’y a tout simplement pas beaucoup d’instructions à ce sujet, quelqu’un peut-il aider?

Voici ce que j’ai fait (JUnit):

  @Test public void testPutAndGetFile() throws JSchException, SftpException, IOException { JSch jsch = new JSch(); Hashtable config = new Hashtable(); config.put("SsortingctHostKeyChecking", "no"); JSch.setConfig(config); Session session = jsch.getSession( "remote-username", "localhost", PORT); session.setPassword("remote-password"); session.connect(); Channel channel = session.openChannel( "sftp" ); channel.connect(); ChannelSftp sftpChannel = (ChannelSftp) channel; final Ssortingng testFileContents = "some file contents"; Ssortingng uploadedFileName = "uploadFile"; sftpChannel.put(new ByteArrayInputStream(testFileContents.getBytes()), uploadedFileName); Ssortingng downloadedFileName = "downLoadFile"; sftpChannel.get(uploadedFileName, downloadedFileName); File downloadedFile = new File(downloadedFileName); Assert.assertTrue(downloadedFile.exists()); Ssortingng fileData = getFileContents(downloadedFile); Assert.assertEquals(testFileContents, fileData); if (sftpChannel.isConnected()) { sftpChannel.exit(); System.out.println("Disconnected channel"); } if (session.isConnected()) { session.disconnect(); System.out.println("Disconnected session"); } } private Ssortingng getFileContents(File downloadedFile) throws FileNotFoundException, IOException { SsortingngBuffer fileData = new SsortingngBuffer(); BufferedReader reader = new BufferedReader(new FileReader(downloadedFile)); try { char[] buf = new char[1024]; for(int numRead = 0; (numRead = reader.read(buf)) != -1; buf = new char[1024]) { fileData.append(Ssortingng.valueOf(buf, 0, numRead)); } } finally { reader.close(); } return fileData.toSsortingng(); }