diff options
Diffstat (limited to 'plugin/grpc/proxy_test.go')
-rw-r--r-- | plugin/grpc/proxy_test.go | 59 |
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 +} |