vitess.io/vitess@v0.16.2/go/vt/vttablet/grpctabletconn/conn_test.go (about) 1 /* 2 Copyright 2019 The Vitess Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package grpctabletconn 18 19 import ( 20 "io" 21 "net" 22 "os" 23 "testing" 24 25 "google.golang.org/grpc" 26 27 "vitess.io/vitess/go/vt/servenv" 28 "vitess.io/vitess/go/vt/vttablet/grpcqueryservice" 29 "vitess.io/vitess/go/vt/vttablet/tabletconntest" 30 31 topodatapb "vitess.io/vitess/go/vt/proto/topodata" 32 ) 33 34 // This test makes sure the go rpc service works 35 func TestGRPCTabletConn(t *testing.T) { 36 // fake service 37 service := tabletconntest.CreateFakeServer(t) 38 39 // listen on a random port 40 listener, err := net.Listen("tcp", "127.0.0.1:0") 41 if err != nil { 42 t.Fatalf("Cannot listen: %v", err) 43 } 44 host := listener.Addr().(*net.TCPAddr).IP.String() 45 port := listener.Addr().(*net.TCPAddr).Port 46 47 // Create a gRPC server and listen on the port 48 server := grpc.NewServer() 49 grpcqueryservice.Register(server, service) 50 go server.Serve(listener) 51 52 // run the test suite 53 tabletconntest.TestSuite(t, protocolName, &topodatapb.Tablet{ 54 Keyspace: tabletconntest.TestTarget.Keyspace, 55 Shard: tabletconntest.TestTarget.Shard, 56 Type: tabletconntest.TestTarget.TabletType, 57 Alias: tabletconntest.TestAlias, 58 Hostname: host, 59 PortMap: map[string]int32{ 60 "grpc": int32(port), 61 }, 62 }, service, nil) 63 } 64 65 // This test makes sure the go rpc client auth works 66 func TestGRPCTabletAuthConn(t *testing.T) { 67 // fake service 68 service := tabletconntest.CreateFakeServer(t) 69 70 // listen on a random port 71 listener, err := net.Listen("tcp", "127.0.0.1:0") 72 if err != nil { 73 t.Fatalf("Cannot listen: %v", err) 74 } 75 host := listener.Addr().(*net.TCPAddr).IP.String() 76 port := listener.Addr().(*net.TCPAddr).Port 77 78 // Create a gRPC server and listen on the port 79 var opts []grpc.ServerOption 80 opts = append(opts, grpc.StreamInterceptor(servenv.FakeAuthStreamInterceptor)) 81 opts = append(opts, grpc.UnaryInterceptor(servenv.FakeAuthUnaryInterceptor)) 82 server := grpc.NewServer(opts...) 83 84 grpcqueryservice.Register(server, service) 85 go server.Serve(listener) 86 87 authJSON := `{ 88 "Username": "valid", 89 "Password": "valid" 90 }` 91 92 f, err := os.CreateTemp("", "static_auth_creds.json") 93 if err != nil { 94 t.Fatal(err) 95 } 96 defer os.Remove(f.Name()) 97 if _, err := io.WriteString(f, authJSON); err != nil { 98 t.Fatal(err) 99 } 100 if err := f.Close(); err != nil { 101 t.Fatal(err) 102 } 103 104 // run the test suite 105 tabletconntest.TestSuite(t, protocolName, &topodatapb.Tablet{ 106 Keyspace: tabletconntest.TestTarget.Keyspace, 107 Shard: tabletconntest.TestTarget.Shard, 108 Type: tabletconntest.TestTarget.TabletType, 109 Alias: tabletconntest.TestAlias, 110 Hostname: host, 111 PortMap: map[string]int32{ 112 "grpc": int32(port), 113 }, 114 }, service, f) 115 }