...

Source file src/google.golang.org/grpc/interop/fake_grpclb/fake_grpclb.go

Documentation: google.golang.org/grpc/interop/fake_grpclb

     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  }
    84  

View as plain text