当前位置: 首页 > 面试题库 >

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

楚俊迈
2023-03-14
问题内容

我在解决如何使用Apache Mina时遇到了一些麻烦。他们的文档对于我那才华横溢的大脑来说有点乏味。我在Java
SFTP服务器库中看到了有用的起始代码 吗?

我不知道如何使用它。我想使用Mina作为一种模拟服务器来设置检查我的sftp代码的单元测试,即能够编写如下单元测试

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

我一直在浏览测试代码,想知道是否需要在上面进行更多配置以指定根目录,用户名和身份验证密钥文件名。然后,我需要使用客户端或我自己的SFTPapi代码从中获取文件并提取文件吗?

我确定这是一个出色的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, 0, numRead));
      }
    } finally {    
      reader.close();
    }

    return fileData.toString();
  }


 类似资料:
  • 我在如何使用Apache Mina时遇到了一点麻烦。他们的文件对我没有才华的大脑来说有点少。我在Java SFTP服务器库中看到了有用的起始代码? 我想不通的是怎么用。我想设置一个单元测试来检查我的sftp代码,使用Mina作为一种模拟服务器,即能够编写如下的单元测试:

  • 我的目标是建立一个环境,让CircleCI在不同的浏览器中运行BrowserStack上的e2e测试。 我的测试假设有一个模拟服务器在运行。(例如,测试正在检查是否已对模拟服务器进行了某个调用。)

  • 如果我错了请纠正我,但看起来Moq只能模拟一个公共类,它有一个公共的无参数构造函数,要模拟的方法是。我并不想让这些类公开可见。我是不是错过了一些与Moq的东西,或者只是不适合我想做的事情? 我想我可以创建一个ClassB实现的接口(例如“ICLASSB”),将其注入ClassA,并模拟该接口。ClassB仍然可以是内部的(尽管我意识到接口方法必须是公共的)。虽然这可以工作,但我对创建大量接口感到不

  • 问题内容: 我有以下情况: controller.js controllerSpec.js 错误: 我也尝试过类似的方法,但没有成功: 我该如何解决?有什么建议? 问题答案: 有两种方法(或肯定有更多方法)。 想象一下这种服务(无论它是工厂都没关系): 使用此控制器: 一种方法是使用要使用的方法创建对象并对其进行监视: 然后,将其作为dep传递给控制器​​。无需注入服务。那可行。 另一种方法是模拟

  • 问题内容: 我正在尝试为一些依赖WifiManager和返回的ScanResults的类实现一些单元测试。我想做的是能够控制我收到的ScanResults,以测试各种不同的条件。 不幸的是,对我来说,成功模拟WifiManager非常困难(尽管我想我可以在MockWifiManager中传递其构造函数null引用)。这只是我的第一个问题,因为一旦我有一个MockWifiManager可以玩(如果它

  • 我想对一个组件的功能进行单元测试。因此,我需要一个模拟服务(根据角度测试指南)。 这里是我的测试床: 那么,嘲笑服务价值的正确方法是什么呢? 弗兰克