foxcpp/go-mockdns
GitHub: foxcpp/go-mockdns
一个 Go 语言的 DNS 查询模拟库,通过可注入 resolver 或直接 patch 标准库的方式帮助开发者在单元测试中控制 net.Lookup* 的返回结果。
Stars: 50 | Forks: 11
# go-mockdns
[](https://godoc.org/github.com/foxcpp/go-mockdns)
用于测试涉及 DNS 查询代码的样板代码,包括 ~~非神圣的~~
用于重定向 `net.Lookup*` 调用的 hack。
## 示例
简单的 mock resolver,适用于被测代码支持自定义 resolver 的情况:
```
r := mockdns.Resolver{
Zones: map[string]mockdns.Zone{
"example.org.": {
A: []string{"1.2.3.4"},
},
},
}
addrs, err := r.LookupHost(context.Background(), "example.org")
fmt.Println(addrs, err)
// Output:
// [1.2.3.4]
```
适用于不支持自定义 resolver 情况的 ~~非神圣~~ hack:
```
srv, _ := mockdns.NewServer(map[string]mockdns.Zone{
"example.org.": {
A: []string{"1.2.3.4"},
},
}, false)
defer srv.Close()
srv.PatchNet(net.DefaultResolver)
defer mockdns.UnpatchNet(net.DefaultResolver)
addrs, err := net.LookupHost("example.org")
fmt.Println(addrs, err)
// Output:
// [1.2.3.4]
```
请注意,如果你需要替换 net.Dial 调用,且被测代码支持自定义
net.Dial,请修改其内部的 resolver 对象,而不是 net.DefaultResolver。
如果被测代码支持类似 Dialer 的对象 —— 请直接使用 Resolver 本身,它
实现了 Dial 和 DialContext 方法。
标签:EVTX分析, 日志审计