aboutsummaryrefslogtreecommitdiff
path: root/plugin/grpc/proxy_test.go
diff options
context:
space:
mode:
authorGravatar junhwong <junhwong@users.noreply.github.com> 2023-05-26 20:35:34 +0800
committerGravatar GitHub <noreply@github.com> 2023-05-26 14:35:34 +0200
commit917489e71c637c7b1f1caeaaeee1431c5cb0d570 (patch)
tree7f905247028393782fc8663466c1f6061a81c0cc /plugin/grpc/proxy_test.go
parent31ff926ea10a907bb3092d4f1df6d28d99302574 (diff)
downloadcoredns-917489e71c637c7b1f1caeaaeee1431c5cb0d570.tar.gz
coredns-917489e71c637c7b1f1caeaaeee1431c5cb0d570.tar.zst
coredns-917489e71c637c7b1f1caeaaeee1431c5cb0d570.zip
add support unix socket for GRPC (#5943)
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
+}