aboutsummaryrefslogtreecommitdiff
path: root/plugin/grpc/proxy_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'plugin/grpc/proxy_test.go')
-rw-r--r--plugin/grpc/proxy_test.go59
1 files changed, 59 insertions, 0 deletions
diff --git a/plugin/grpc/proxy_test.go b/plugin/grpc/proxy_test.go
index cc4ebec82..534fde3d7 100644
--- a/plugin/grpc/proxy_test.go
+++ b/plugin/grpc/proxy_test.go
@@ -3,9 +3,15 @@ package grpc
import (
"context"
"errors"
+ "net"
+ "os"
+ "path"
"testing"
+ "github.com/coredns/caddy"
"github.com/coredns/coredns/pb"
+ "github.com/coredns/coredns/plugin/pkg/dnstest"
+ "github.com/coredns/coredns/plugin/test"
"github.com/miekg/dns"
"google.golang.org/grpc"
@@ -64,3 +70,56 @@ type testServiceClient struct {
func (m testServiceClient) Query(ctx context.Context, in *pb.DnsPacket, opts ...grpc.CallOption) (*pb.DnsPacket, error) {
return m.dnsPacket, m.err
}
+
+func TestProxyUnix(t *testing.T) {
+ tdir, err := os.MkdirTemp("", "tmp*")
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer os.RemoveAll(tdir)
+
+ fd := path.Join(tdir, "test.grpc")
+ listener, err := net.Listen("unix", fd)
+ if err != nil {
+ t.Fatal("Failed to listen: ", err)
+ }
+ defer listener.Close()
+
+ server := grpc.NewServer()
+ pb.RegisterDnsServiceServer(server, &grpcDnsServiceServer{})
+
+ go server.Serve(listener)
+ defer server.Stop()
+
+ c := caddy.NewTestController("dns", "grpc . unix://"+fd)
+ g, err := parseGRPC(c)
+
+ if err != nil {
+ t.Errorf("Failed to create forwarder: %s", err)
+ }
+
+ m := new(dns.Msg)
+ m.SetQuestion("example.org.", dns.TypeA)
+ rec := dnstest.NewRecorder(&test.ResponseWriter{})
+
+ if _, err := g.ServeDNS(context.TODO(), rec, m); err != nil {
+ t.Fatal("Expected to receive reply, but didn't")
+ }
+ if x := rec.Msg.Answer[0].Header().Name; x != "example.org." {
+ t.Errorf("Expected %s, got %s", "example.org.", x)
+ }
+}
+
+type grpcDnsServiceServer struct {
+ pb.UnimplementedDnsServiceServer
+}
+
+func (*grpcDnsServiceServer) Query(ctx context.Context, in *pb.DnsPacket) (*pb.DnsPacket, error) {
+ msg := &dns.Msg{}
+ msg.Unpack(in.GetMsg())
+ answer := new(dns.Msg)
+ answer.Answer = append(answer.Answer, test.A("example.org. IN A 127.0.0.1"))
+ answer.SetRcode(msg, dns.RcodeSuccess)
+ buf, _ := answer.Pack()
+ return &pb.DnsPacket{Msg: buf}, nil
+}