aboutsummaryrefslogtreecommitdiff
path: root/cmd/resolverbench
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2018-08-29 22:09:03 +0700
committerShulhan <ms@kilabit.info>2018-08-29 23:48:58 +0700
commitbc5ea8b85c014d7c95e21c4131304c0a0ea30fea (patch)
tree19db47be180f72dd5185e62c6613bb0fe4e9bf80 /cmd/resolverbench
parentee2d01393f769924214ff0e0eb457aeafdddd4a5 (diff)
downloadrescached-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.go79
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)
+}