如何对我们软件的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服务器进行一些基本测试,就像我正在尝试的那样?或者是否有其他测试选项我应该使用(最好不要对现有客户端代码进行大量重写以适应测试)?
答案 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服务器库的答案,我仍然会感兴趣。