...

Source file src/golang.conradwood.net/tests/tagrouting/test-server.go

Documentation: golang.conradwood.net/tests/tagrouting

     1  package main
     2  
     3  import (
     4  	"context"
     5  	"flag"
     6  	"fmt"
     7  	pb "golang.conradwood.net/apis/getestservice"
     8  	"golang.conradwood.net/go-easyops/auth"
     9  	//	"golang.conradwood.net/go-easyops/authremote"
    10  	"golang.conradwood.net/go-easyops/errors"
    11  	"golang.conradwood.net/go-easyops/server"
    12  	"golang.conradwood.net/go-easyops/utils"
    13  	"google.golang.org/grpc"
    14  	"os"
    15  	"strings"
    16  )
    17  
    18  var (
    19  	port          = flag.Int("port", 4106, "The grpc server port")
    20  	ping          = flag.Bool("ping", false, "ping continously")
    21  	ping_once     = flag.Bool("ping_once", false, "ping once")
    22  	tag           = flag.String("tag", "", "key=value tag optional")
    23  	fallback      = flag.Bool("fallback", true, "if true, fallback allowed (for client)")
    24  	inject_errors = flag.Bool("inject_errors", false, "if true inject some errors in the rpc")
    25  	ttl           = flag.Int("ttl", 0, "if >0 the server will ping itself until ttl is 0")
    26  	ctr           = 0
    27  )
    28  
    29  // create a simple standard server
    30  type echoServer struct {
    31  }
    32  
    33  func main() {
    34  	flag.Parse()
    35  	fmt.Printf("GO-EASYOPS Echo test server/client\n")
    36  	if *ping || *ping_once {
    37  		utils.Bail("failed", do_client())
    38  		os.Exit(0)
    39  	}
    40  
    41  	sd := server.NewServerDef()
    42  
    43  	if *tag != "" {
    44  		kv := strings.SplitN(*tag, "=", 2)
    45  		if len(kv) != 2 {
    46  			fmt.Printf("tags not a key=value line\n")
    47  			os.Exit(10)
    48  		}
    49  		sd.AddTag(kv[0], kv[1])
    50  		fmt.Printf("Added tag \"%s\" with value \"%s\"\n", kv[0], kv[1])
    51  	}
    52  
    53  	p := *port
    54  	p = p + utils.RandomInt(50)
    55  	//	sd.AddTag("foo", "bar")
    56  	sd.SetPort(p)
    57  	sd.SetRegister(server.Register(
    58  		func(g *grpc.Server) error {
    59  			pb.RegisterEchoServiceServer(g, &echoServer{})
    60  			return nil
    61  		},
    62  	))
    63  	err := server.ServerStartup(sd)
    64  	//	err := create.NewEchoServiceServer(&echoServer{}, p)
    65  	utils.Bail("Unable to start server", err)
    66  }
    67  
    68  func (e *echoServer) Ping(ctx context.Context, req *pb.PingRequest) (*pb.PingResponse, error) {
    69  	u := auth.GetUser(ctx)
    70  	fmt.Printf("    tagserver %s: %d Pinged SEQ=%d, by %s (TTL:%d)\n", printTags(), ctr, req.SequenceNumber, auth.Description(u), req.TTL)
    71  	if req.TTL > 0 {
    72  		req.TTL--
    73  		_, err := pb.GetEchoClient().Ping(ctx, req)
    74  		if err != nil {
    75  			return nil, err
    76  		}
    77  
    78  	}
    79  	ctr++
    80  	if *inject_errors {
    81  		i := utils.RandomInt(10)
    82  		if i > 3 {
    83  			return nil, errors.Unavailable(ctx, "Ping()")
    84  		}
    85  	}
    86  	return &pb.PingResponse{ServerTags: parse_tags()}, nil
    87  }
    88  
    89  func parse_tags() map[string]string {
    90  	res := make(map[string]string)
    91  	if *tag == "" {
    92  		return res
    93  	}
    94  	kv := strings.SplitN(*tag, "=", 2)
    95  	if len(kv) != 2 {
    96  		fmt.Printf("tags not a key=value line\n")
    97  		os.Exit(10)
    98  	}
    99  	res[kv[0]] = kv[1]
   100  	//	fmt.Printf("Added tag \"%s\" with value \"%s\"\n", kv[0], kv[1])
   101  	return res
   102  }
   103  

View as plain text