...

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

Documentation: golang.conradwood.net/tests/server

     1  package main
     2  
     3  import (
     4  	"context"
     5  	"flag"
     6  	"fmt"
     7  	"os"
     8  	"strings"
     9  	"time"
    10  
    11  	pb "golang.conradwood.net/apis/getestservice"
    12  	"golang.conradwood.net/go-easyops/auth"
    13  	"golang.conradwood.net/go-easyops/authremote"
    14  	"golang.conradwood.net/go-easyops/errors"
    15  	"golang.conradwood.net/go-easyops/server"
    16  	"golang.conradwood.net/go-easyops/utils"
    17  	"google.golang.org/grpc"
    18  )
    19  
    20  var (
    21  	rand_port     = flag.Bool("random_port", true, "if true, add random number to port")
    22  	port          = flag.Int("port", 4106, "The grpc server port")
    23  	ping          = flag.Bool("ping", false, "ping continously")
    24  	ping_once     = flag.Bool("ping_once", false, "ping once")
    25  	ping_self     = flag.Bool("ping_self", false, "start server and ping self")
    26  	inject_errors = flag.Bool("inject_errors", false, "inject errors")
    27  	tag           = flag.String("tag", "", "key=value tag optional")
    28  	ctr           = 0
    29  )
    30  
    31  // create a simple standard server
    32  type echoServer struct {
    33  }
    34  
    35  func main() {
    36  	flag.Parse()
    37  	fmt.Printf("GO-EASYOPS Echo test server/client\n")
    38  	/*
    39  		flag.VisitAll(func(f *flag.Flag) {
    40  			s := "SET"
    41  			if fmt.Sprintf("%v", f.Value) == fmt.Sprintf("%v", f.DefValue) {
    42  				s = "DEFAULT"
    43  			}
    44  			fmt.Printf("%s %s %s %s\n", "STRING", s, f.Name, f.Value)
    45  		})
    46  		os.Exit(0)
    47  	*/
    48  	if *ping || *ping_once {
    49  		c := pb.GetEchoClient()
    50  		for {
    51  			now := time.Now()
    52  			ctx := authremote.Context()
    53  			ctx = authremote.Context()
    54  			ctx = authremote.Context()
    55  			u := auth.GetUser(ctx)
    56  			fmt.Printf("   pinging as %s\n", auth.Description(u))
    57  			_, err := c.Ping(ctx, &pb.PingRequest{})
    58  			s := "Pinged"
    59  			if err != nil {
    60  				fmt.Printf("Error :%s\n", utils.ErrorString(err))
    61  				s = "failed"
    62  			}
    63  			dur := time.Since(now).Milliseconds()
    64  			fmt.Printf("%d %s (%d milliseconds)\n", ctr, s, dur)
    65  			ctr++
    66  			if !*ping {
    67  				return
    68  			}
    69  			time.Sleep(time.Duration(300) * time.Millisecond)
    70  		}
    71  	}
    72  
    73  	//	server.SetHealth(server.STARTING)
    74  	sd := server.NewServerDef()
    75  	//	sd.SetPublic()
    76  	//	sd.DontRegister()
    77  	if *tag != "" {
    78  		kv := strings.SplitN(*tag, "=", 2)
    79  		if len(kv) != 2 {
    80  			fmt.Printf("tags not a key=value line\n")
    81  			os.Exit(10)
    82  		}
    83  		sd.AddTag(kv[0], kv[1])
    84  		fmt.Printf("Added tag \"%s\" with value \"%s\"\n", kv[0], kv[1])
    85  	}
    86  
    87  	p := *port
    88  	if *rand_port {
    89  		p = p + utils.RandomInt(50)
    90  	}
    91  	if *ping_self {
    92  		go PingSelf()
    93  	}
    94  	//	sd.AddTag("foo", "bar")
    95  	sd.SetPort(p)
    96  	sd.SetRegister(server.Register(
    97  		func(g *grpc.Server) error {
    98  			pb.RegisterEchoServiceServer(g, &echoServer{})
    99  			return nil
   100  		},
   101  	))
   102  	err := server.ServerStartup(sd)
   103  	//	err := create.NewEchoServiceServer(&echoServer{}, p)
   104  	utils.Bail("Unable to start server", err)
   105  }
   106  func PingSelf() {
   107  	for {
   108  		time.Sleep(time.Duration(1) * time.Second)
   109  		ctx := authremote.Context()
   110  		u := auth.GetUser(ctx)
   111  		fmt.Printf("pinging as %s\n", auth.Description(u))
   112  		c := pb.GetEchoClient()
   113  		_, err := c.Ping(ctx, &pb.PingRequest{})
   114  		if err != nil {
   115  			fmt.Printf("Error :%s\n", utils.ErrorString(err))
   116  		} else {
   117  			fmt.Printf("Pinged\n")
   118  		}
   119  
   120  	}
   121  }
   122  func (e *echoServer) Ping(ctx context.Context, req *pb.PingRequest) (*pb.PingResponse, error) {
   123  	u := auth.GetUser(ctx)
   124  	s := auth.GetService(ctx)
   125  	fmt.Printf("   %03d Pinged by user %s, service %s\n", ctr, auth.Description(u), auth.Description(s))
   126  	ctr++
   127  	if *inject_errors {
   128  		i := utils.RandomInt(10)
   129  		if i > 3 {
   130  			return nil, errors.Unavailable(ctx, "Ping()")
   131  		}
   132  	}
   133  	return &pb.PingResponse{}, nil
   134  }
   135  

View as plain text