unit-testing - 使用 httptest 或 http 包模拟服务器故障
问题描述
如何在隔离单元测试中使用 httptest 或 http 包模拟服务器故障?
详细信息:
我一直在使用 gorilla websockets,所以当服务器宕机时, mt, msg, err := t.conn.ReadMessage()
mt值必须为-1 。我尝试了以下作为主要选项:
var srv *httptest.Server
srv = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_, err := wsUpgrader.Upgrade(w, r, nil)
if err != nil {
t.Fatal(err)
}
srv.Close()
}))
但是客户端根本没有收到任何消息。我也尝试过恐慌的标准http服务器,但是在recover()客户端之后也没有收到任何消息。srv.CloseClientConnections()
没有帮助,客户像以前一样等待消息。
解决方案
在 WS 服务器端调用conn.Close()
客户端连接以终止连接而不发送关闭帧就足够了。这将触发异常连接关闭的行为,并且消息类型的值为-1
.
连接升级到 websocket 后,它被劫持了,一般的 http 服务器无法再处理这个连接,这就是为什么服务器关闭对被劫持的连接不起作用的原因。
推荐阅读
- postgresql - 有没有办法阻止此错误“从“client_api_key”中选择 *,其中“api_key”= $1 限制 $2 - 连接意外终止”
- elasticsearch - 是否可以在零停机时间的情况下更新 Elasticsearch 中的索引?
- java - 将 Fortify Audit Workbench 自定义设置转换为命令行脚本
- c - 可见性声明会影响使用(而不是编译)函数吗?
- docker - 就像在 docker 中一样在 Helm 中公开卷
- javascript - 如果为真则反跳 500 毫秒,否则执行
- substrate - Substrate Build a dApp Tutorial - TypeError: Cannot read property 'query' of undefined
- arm64 - 开始在 arm64 上运行时出现 headless_shell 分段错误
- javascript - 破坏反应道具中的嵌套对象出错
- javascript - 无法在 html 上显示 JAVASCRIPT 结果