diff options
| author | Shulhan <ms@kilabit.info> | 2018-08-29 22:09:03 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2018-08-29 23:48:58 +0700 |
| commit | bc5ea8b85c014d7c95e21c4131304c0a0ea30fea (patch) | |
| tree | 19db47be180f72dd5185e62c6613bb0fe4e9bf80 /cmd/resolverbench | |
| parent | ee2d01393f769924214ff0e0eb457aeafdddd4a5 (diff) | |
| download | rescached-bc5ea8b85c014d7c95e21c4131304c0a0ea30fea.tar.xz | |
Add command line to benchmark DNS request and response with hot caches
Diffstat (limited to 'cmd/resolverbench')
| -rw-r--r-- | cmd/resolverbench/main.go | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/cmd/resolverbench/main.go b/cmd/resolverbench/main.go new file mode 100644 index 0000000..1e5e53b --- /dev/null +++ b/cmd/resolverbench/main.go @@ -0,0 +1,79 @@ +package main + +import ( + "bytes" + "fmt" + "log" + "os" + + libdns "github.com/shuLhan/share/lib/dns" +) + +func usage() { + fmt.Println("Usage: " + os.Args[0] + " <nameserver> <hosts-file>") + os.Exit(1) +} + +func main() { + if len(os.Args) < 3 { + usage() + } + + log.SetFlags(0) + + cl, err := libdns.NewUDPClient(os.Args[1]) + if err != nil { + log.Fatal(err) + } + + msgs, err := libdns.HostsLoad(os.Args[2]) + if err != nil { + log.Fatal(err) + } + + var nfail int + res := libdns.AllocMessage() + + fmt.Printf("= Benchmarking with %d messages\n", len(msgs)) + + for x := 0; x < len(msgs); x++ { + //fmt.Printf("< Request: %6d %s\n", x, msgs[x].Question) + + _, err = cl.Send(msgs[x], cl.Addr) + if err != nil { + nfail++ + log.Println("! Send error: ", err) + continue + } + + res.Reset() + + _, err = cl.Recv(res) + if err != nil { + nfail++ + log.Println("! Recv error: ", err) + continue + } + + err = res.UnmarshalBinary(res.Packet) + if err != nil { + nfail++ + log.Println("! UnmarshalBinary:", err) + continue + } + + exp := msgs[x].Answer[0].RData().([]byte) + got := res.Answer[0].RData().([]byte) + + if !bytes.Equal(exp, got) { + nfail++ + log.Printf(`! Answer not matched: +expecting: %s +got: %s +`, exp, got) + } + } + + fmt.Printf("= Total: %d\n", len(msgs)) + fmt.Printf("= Failed: %d\n", nfail) +} |
