加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用Apache Mina作为模拟/内存SFTP服务器进行单元测试

发布时间:2020-12-14 16:27:57 所属栏目:Java 来源:网络整理
导读:我正在解决如何使用Apache Mina的麻烦.他们的文档对我无能为力的大脑来说有一点不足.我已经看到了有用的起始代码 Java SFTP server library? 我无法想像的是如何使用它.我想设置一个检查我的sftp代码的单元测试,使用Mina作为一种模拟服务器,即能够写一个单元
我正在解决如何使用Apache Mina的麻烦.他们的文档对我无能为力的大脑来说有一点不足.我已经看到了有用的起始代码
Java SFTP server library?

我无法想像的是如何使用它.我想设置一个检查我的sftp代码的单元测试,使用Mina作为一种模拟服务器,即能够写一个单元测试,如:

@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() {

}

问题是在testGetFile()中放入什么.

我一直在浏览测试代码,想知道上面是否需要更多配置来指定根目录,用户名和身份验证密钥文件名.那么我需要使用客户端或我自己的SFTP api代码来获取和拉取文件?

我相信这是一个很好的API,只是没有很多的指导,任何人都可以帮忙?

解决方法

这是我做的(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,numRead));
      }
    } finally {    
      reader.close();
    }

    return fileData.toString();
  }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读