2012-08-07 16 views
13

Mam problem ze zrozumieniem jak używać Apache Mina. Ich dokumentacja jest trochę skąpa, aby mój beztalentowy mózg mógł wypracować. Widziałem pomocny kod startowy pod Java SFTP server library?Używanie Apache Mina jako pozornego/pamięciowego serwera SFTP do testowania jednostek

Czego nie mogę się dowiedzieć, jak go używać. Chcę konfiguracji testów jednostkowych, które sprawdza mój kod sftp, używając Mina jako rodzaj makiety serwera, to znaczy móc napisać badanej jednostki jak:

@Before 
public void beforeTestSetup() { 
    sshd = SshServer.setUpDefaultServer(); 
    sshd.setPort(22); 
    sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider("hostkey.ser")); 

    List<NamedFactory<UserAuth>> userAuthFactories = new ArrayList<NamedFactory<UserAuth>>(); 
    userAuthFactories.add(new UserAuthNone.Factory()); 
    sshd.setUserAuthFactories(userAuthFactories); 
    sshd.setPublickeyAuthenticator(new PublickeyAuthenticator()); 


    sshd.setCommandFactory(new ScpCommandFactory()); 

    List<NamedFactory<Command>> namedFactoryList = new ArrayList<NamedFactory<Command>>(); 
    namedFactoryList.add(new SftpSubsystem.Factory()); 
    sshd.setSubsystemFactories(namedFactoryList); 

    try { 
     sshd.start(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

@Test 
public void testGetFile() { 

} 

Pytanie brzmi, co umieścić w testGetFile().

Przeszukałem kod testowy zastanawiając się, czy w powyższym przykładzie wymagana jest większa konfiguracja, aby określić katalog główny, nazwę użytkownika i nazwę pliku klucza uwierzytelniającego. Czy muszę pobierać i pobierać z niego pliki za pomocą klienta lub mojego własnego kodu SFP?

Jestem pewien, że to doskonałe API, po prostu nie ma za dużo instrukcji, czy ktoś może pomóc?

Odpowiedz

7

Oto co zrobiłem (JUnit):

@Test 
    public void testPutAndGetFile() throws JSchException, SftpException, IOException 
    { 
    JSch jsch = new JSch(); 

    Hashtable<String, String> config = new Hashtable<String, String>(); 
    config.put("StrictHostKeyChecking", "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 String testFileContents = "some file contents"; 

    String uploadedFileName = "uploadFile"; 
    sftpChannel.put(new ByteArrayInputStream(testFileContents.getBytes()), uploadedFileName); 

    String downloadedFileName = "downLoadFile"; 
    sftpChannel.get(uploadedFileName, downloadedFileName); 

    File downloadedFile = new File(downloadedFileName); 
    Assert.assertTrue(downloadedFile.exists()); 

    String 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 String getFileContents(File downloadedFile) 
    throws FileNotFoundException, IOException 
    { 
    StringBuffer fileData = new StringBuffer(); 
    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(String.valueOf(buf, 0, numRead)); 
     } 
    } finally {  
     reader.close(); 
    } 

    return fileData.toString(); 
    } 
Powiązane problemy