...
1 package main
2
3 import (
4 "context"
5 "flag"
6 "fmt"
7 "time"
8
9 pb "golang.conradwood.net/apis/getestservice"
10 "golang.conradwood.net/go-easyops/authremote"
11 "golang.conradwood.net/go-easyops/errors"
12 "golang.conradwood.net/go-easyops/server"
13 "golang.conradwood.net/go-easyops/utils"
14 "google.golang.org/grpc"
15 )
16
17 var (
18 port = flag.Int("port", 0, "grpc port")
19 )
20
21 func main() {
22 flag.Parse()
23 fmt.Printf("\n\n\n\n\n\n")
24 fmt.Printf("Error testing\n")
25 fmt.Printf("\n\n\n\n\n\n")
26 ctx := authremote.Context()
27 errs := []error{
28 errors.AccessDenied(ctx, "foo"),
29 errors.Errorf("errorf"),
30 fmt.Errorf("fmterror"),
31 errors.Wrap(fmt.Errorf("wraperror")),
32 errors.Wrap(errors.Wrap(fmt.Errorf("wrap-wrap-error"))),
33 }
34 for _, err := range errs {
35 fmt.Printf("Error: %s\n", err)
36 fmt.Printf("withstacktrace: %s\n", errors.ErrorStringWithStackTrace(err))
37 fmt.Printf("short message: %s\n", errors.ShortMessage(err))
38 fmt.Printf("\n\n")
39 }
40 var err error
41 sd := server.NewServerDef()
42 p := *port
43 if p == 0 {
44 p = 4100 + utils.RandomInt(50)
45 }
46 sd.SetPort(p)
47 sd.SetRegister(server.Register(
48 func(g *grpc.Server) error {
49 pb.RegisterEchoServiceServer(g, &echoServer{})
50 return nil
51 },
52 ))
53 sd.SetOnStartupCallback(startup)
54 err = server.ServerStartup(sd)
55 utils.Bail("failed to start server", err)
56 fmt.Printf("Done\n")
57 }
58
59 func errstr(err error) string {
60 return errors.ErrorStringWithStackTrace(err)
61 }
62
63 func startup() {
64 ctx := authremote.Context()
65 _, err := pb.GetEchoServiceClient().Ping(ctx, &pb.PingRequest{PleaseFail: true})
66 utils.Bail("failed to ping", err)
67 time.Sleep(time.Duration(20) * time.Second)
68 }
69
70 type echoServer struct {
71 }
72
73 func (e *echoServer) Ping(ctx context.Context, req *pb.PingRequest) (*pb.PingResponse, error) {
74 e.Printf("pinged\n")
75 if req.PleaseFail {
76 return nil, errors.AccessDenied(ctx, "failed")
77
78 }
79 res := &pb.PingResponse{}
80 return res, nil
81 }
82
83 func (e *echoServer) Printf(format string, args ...interface{}) {
84 prefix := "[server] "
85 x := fmt.Sprintf(format, args...)
86 fmt.Print(prefix + x)
87 }
88
View as plain text