google.golang.org/grpc@v1.72.2/interop/fake_grpclb/fake_grpclb.go (about) 1 /* 2 * 3 * Copyright 2018 gRPC authors. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 */ 18 19 // This file is for testing only. Runs a fake grpclb balancer server. 20 // The name of the service to load balance for and the addresses 21 // of that service are provided by command line flags. 22 package main 23 24 import ( 25 "flag" 26 "strings" 27 28 "google.golang.org/grpc" 29 "google.golang.org/grpc/credentials" 30 "google.golang.org/grpc/credentials/alts" 31 "google.golang.org/grpc/grpclog" 32 "google.golang.org/grpc/internal/testutils/fakegrpclb" 33 "google.golang.org/grpc/testdata" 34 ) 35 36 var ( 37 port = flag.Int("port", 10000, "Port to listen on.") 38 backendAddrs = flag.String("backend_addrs", "", "Comma separated list of backend IP/port addresses.") 39 useALTS = flag.Bool("use_alts", false, "Listen on ALTS credentials.") 40 useTLS = flag.Bool("use_tls", false, "Listen on TLS credentials, using a test certificate.") 41 shortStream = flag.Bool("short_stream", false, "End the balancer stream immediately after sending the first server list.") 42 serviceName = flag.String("service_name", "UNSET", "Name of the service being load balanced for.") 43 44 logger = grpclog.Component("interop") 45 ) 46 47 func main() { 48 flag.Parse() 49 50 var opts []grpc.ServerOption 51 if *useTLS { 52 certFile := testdata.Path("server1.pem") 53 keyFile := testdata.Path("server1.key") 54 creds, err := credentials.NewServerTLSFromFile(certFile, keyFile) 55 if err != nil { 56 logger.Fatalf("Failed to generate credentials: %v", err) 57 } 58 opts = append(opts, grpc.Creds(creds)) 59 } else if *useALTS { 60 altsOpts := alts.DefaultServerOptions() 61 altsTC := alts.NewServerCreds(altsOpts) 62 opts = append(opts, grpc.Creds(altsTC)) 63 } 64 65 rawBackendAddrs := strings.Split(*backendAddrs, ",") 66 server, err := fakegrpclb.NewServer(fakegrpclb.ServerParams{ 67 ListenPort: *port, 68 ServerOptions: opts, 69 LoadBalancedServiceName: *serviceName, 70 LoadBalancedServicePort: 443, // TODO: make this configurable? 71 BackendAddresses: rawBackendAddrs, 72 ShortStream: *shortStream, 73 }) 74 if err != nil { 75 logger.Fatalf("Failed to create balancer server: %v", err) 76 } 77 78 // Serve() starts serving and blocks until Stop() is called. We don't need to 79 // call Stop() here since we want the server to run until we are killed. 80 if err := server.Serve(); err != nil { 81 logger.Fatalf("Failed to start balancer server: %v", err) 82 } 83 }