我有这个ruby库,它建立到远程设备的telnet或ssh连接。一切似乎都有效。测试框架(适用于telnet)定义绑定到端口的设备模拟器,测试连接绑定到同一端口。然后整个有效载荷交换通过该信道,即认证步骤。
使用SSH,我在调整时遇到了问题,因为显然,模仿协议的身份验证步骤并不容易。由于我们使用net-ssh,客户端需要所有的身份验证步骤(ssh版本,alghoritm协商,密钥交换......),我不知道详细消息的格式(我找不到很多任何地方的例子。)
我期待的是一种实际信号通知客户端通道可以未加密(用于测试,而不是问题)的方式,我希望收到提示(基于密码,我不需要authorized_keys进程测试环境)。
这种考验是否有简单的实施/现有实施?
答案 0 :(得分:0)
是的,
用于单元测试mock Net::SSH
,对于集成测试,请测试完整堆栈(Net::SSH
+您的应用+您的基础架构)
单元测试
对于单元测试,将Net::SSH
替换为实现您正在使用的方法的Struct
,OpenStruct
或同名的普通老Ruby对象。这个模拟类不需要连接到实际的SSH服务器,它只需要像连接到它一样嘎嘎叫,它可以将其输入和输出存储到实例变量中,这样你就可以对它们进行断言。
通过这种方式,您可以测试应用程序是否发送正确的用户名/ pass / ip / execution并正确解析命令/ etc,而不是测试Net::SSH
是否能够进行SSH连接(这将由Net::SSH
负责宝石)。
测试将更多更快,然后连接到真实的东西。
这是VCR宝石背后的基本理念 - 不要让服务器嘎嘎叫,让客户端嘎嘎叫。
一旦你这样做了,如果你为它做了一个很好的API,你可以把它提交给https://github.com/net-ssh/net-ssh/上的好人,这是一个有用的东西,目前似乎缺失了
整合测试
保持集成测试非常基础。
您可能需要通过一个额外的硬编码集成测试来检查Net::SSH
+您的应用+您的服务器基础架构是否兼容,该测试连接到基础架构中的实际服务器并建立连接并执行命令
升级SSH守护程序或强化基础架构可能会破坏应用程序的功能 - 例如,如果您引入selinux,禁用弱密码,切换到类似Solaris的有趣操作系统或Net::SSH
人们忘记为bug引入解决方法对于您可能正在使用的某个体系结构(solaris SSH密码问题,ubuntu 10 known_hosts问题,......)。