是否有免费的.NET SFTP服务器(非客户端)库?

时间:2018-06-13 16:21:43

标签: .net sftp

如何对我们软件的SFTP客户端功能进行集成测试(例如,连接到SFTP服务器,验证指纹,正常失败,无效密码或错误端口,上传文件)?

到目前为止,我尝试使用免费的.NET SFTP服务器库在测试中设置临时SFTP服务器,然后将我们的软件定向到该服务器。这是一个示例测试:

[Test]
public void FileUploadedToSFTPServer()
{
    var rsaKey = Nuane.Net.SshKey.Generate(Nuane.Net.SshKeyAlgorithm.RSA, 1024);
    var ip = new IPAddress(new byte[] { 127, 0, 0, 2 });
    var port = 23456;
    var login = "test";
    var password = "someTestPassword";
    var userDir = Path.GetTempPath() + @"SFTPData";

    if (!Directory.Exists(userDir))
    {
        Directory.CreateDirectory(userDir);
    }

    var sftpServer = new Nuane.Net.SftpServer();
    sftpServer.Keys.Add(rsaKey);
    sftpServer.Bindings.Add(ip, port);
    sftpServer.Users.Add(new Nuane.Net.SshUser(login, password, userDir));

    sftpServer.Start();

    RunClientSoftware(rsaKey.Fingerprint, ip, port, login, password);
    FileAssert.Exists(new FileInfo(userDir + "/data.dat"), "The data.dat file was not uploaded to the SFTP server.");

    sftpServer.Stop();
}

我尝试使用的库是Nuane.Net.SftpServer库,但它有一个错误,SftpServer上的Stop方法实际上并没有关闭正在侦听新客户端连接的套接字。当我尝试运行多个测试时,该错误会导致问题,因为新实例尝试打开已经被侦听的相同端口,然后过早地使测试失败。由于该库不提供源代码,我甚至无法尝试修复它。

如果我找到一个没有那个bug的库,我觉得这个策略会起作用。是否有一个免费的.NET库可用于设置SFTP服务器进行一些基本测试,就像我正在尝试的那样?或者是否有其他测试选项我应该使用(最好不要对现有客户端代码进行大量重写以适应测试)?

1 个答案:

答案 0 :(得分:1)

我找到了一种解决方法,可以让我暂时继续使用Nuane.Net.SftpServer库。

//sftpServer.Stop(); //this doesn't work
sftpServer.Bindings.Clear(); //this does cause the listening socket to be closed

对于任何可以将我指向可以用于测试的免费.NET SFTP服务器库的答案,我仍然会感兴趣。