...

Source file src/golang.conradwood.net/tests/errors/errortest.go

Documentation: golang.conradwood.net/tests/errors

     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  		//		return nil, errors.Errorf("failed")
    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