aboutsummaryrefslogtreecommitdiff
path: root/test/grpc_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'test/grpc_test.go')
-rw-r--r--test/grpc_test.go62
1 files changed, 62 insertions, 0 deletions
diff --git a/test/grpc_test.go b/test/grpc_test.go
new file mode 100644
index 000000000..f7c47b57c
--- /dev/null
+++ b/test/grpc_test.go
@@ -0,0 +1,62 @@
+package test
+
+import (
+ "io/ioutil"
+ "log"
+ "testing"
+ "time"
+
+ "github.com/miekg/dns"
+ "golang.org/x/net/context"
+ "google.golang.org/grpc"
+
+ "github.com/coredns/coredns/pb"
+)
+
+func TestGrpc(t *testing.T) {
+ log.SetOutput(ioutil.Discard)
+
+ corefile := `grpc://.:0 {
+ whoami
+}
+`
+ g, err := CoreDNSServer(corefile)
+ if err != nil {
+ t.Fatalf("Could not get CoreDNS serving instance: %s", err)
+ }
+
+ _, tcp := CoreDNSServerPorts(g, 0)
+ defer g.Stop()
+
+ conn, err := grpc.Dial(tcp, grpc.WithInsecure(), grpc.WithBlock(), grpc.WithTimeout(5*time.Second))
+ if err != nil {
+ t.Fatalf("Expected no error but got: %s", err)
+ }
+ defer conn.Close()
+
+ client := pb.NewDnsServiceClient(conn)
+
+ m := new(dns.Msg)
+ m.SetQuestion("whoami.example.org.", dns.TypeA)
+ msg, _ := m.Pack()
+
+ reply, err := client.Query(context.TODO(), &pb.DnsPacket{Msg: msg})
+ if err != nil {
+ t.Errorf("Expected no error but got: %s", err)
+ }
+
+ d := new(dns.Msg)
+ err = d.Unpack(reply.Msg)
+ if err != nil {
+ t.Errorf("Expected no error but got: %s", err)
+ }
+
+ if d.Rcode != dns.RcodeSuccess {
+ t.Errorf("Expected success but got %s", d.Rcode)
+ }
+
+ if len(d.Extra) != 2 {
+ t.Errorf("Expected 2 RRs in additional section, but got %s", len(d.Extra))
+ }
+ t.Logf("Message %v\n", d)
+}