...

Source file src/golang.conradwood.net/tests/authtest/authtest.go

Documentation: golang.conradwood.net/tests/authtest

     1  package main
     2  
     3  import (
     4  	"context"
     5  	"flag"
     6  	"fmt"
     7  	"golang.conradwood.net/apis/common"
     8  	ge "golang.conradwood.net/apis/getestservice"
     9  	"golang.conradwood.net/apis/registry"
    10  	"golang.conradwood.net/go-easyops/auth"
    11  	"golang.conradwood.net/go-easyops/authremote"
    12  	"golang.conradwood.net/go-easyops/client"
    13  	_ "golang.conradwood.net/go-easyops/http"
    14  	"golang.conradwood.net/go-easyops/linux"
    15  	"golang.conradwood.net/go-easyops/tokens"
    16  	"golang.conradwood.net/go-easyops/utils"
    17  	"os"
    18  	"strings"
    19  	"time"
    20  )
    21  
    22  var (
    23  	loop          = flag.Bool("loop", false, "continously ping")
    24  	ctr           = 0
    25  	port          = flag.Int("port", 12322, "grpc port")
    26  	role          = flag.String("role", "", "role of this binary (simple|authproxy|client|service|simpleping|load|register|myip")
    27  	servicetokens []string
    28  )
    29  
    30  func main() {
    31  	flag.Parse()
    32  	b, err := utils.ReadFile("/etc/cnw/servicetokens")
    33  	utils.Bail("failed to read tokens", err)
    34  	for _, s := range strings.Split(string(b), "\n") {
    35  		if len(s) > 5 {
    36  			servicetokens = append(servicetokens, s)
    37  		}
    38  	}
    39  	if *role == "register" {
    40  		Register()
    41  	} else if *role == "myip" {
    42  		MyIP()
    43  	} else if *role == "authproxy" {
    44  		StartAuthProxy()
    45  	} else if *role == "client" {
    46  		StartClient()
    47  	} else if *role == "load" {
    48  		LoadClient()
    49  	} else if *role == "simple" {
    50  		StartSimple()
    51  	} else if *role == "simpleping" {
    52  		SimplePing()
    53  	} else if *role == "service" {
    54  		tokens.DisableUserToken() // make sure we don't pick up users' stuff
    55  		//	p := utils.RandomInt(100)
    56  		//		ge.GetEasyOpsTestClient(&testserver{}, *port+p)
    57  		panic("cannot do server anymore")
    58  	} else {
    59  		fmt.Printf("Invalid -role specified: %s\n", *role)
    60  		os.Exit(10)
    61  	}
    62  	fmt.Printf("Done (%s)\n", *role)
    63  }
    64  
    65  type testserver struct{}
    66  
    67  func (t *testserver) SimplePing(ctx context.Context, req *common.Void) (*common.Void, error) {
    68  	fmt.Printf("%s Simpleping received\n", utils.TimeString(time.Now()))
    69  	return &common.Void{}, nil
    70  }
    71  func (t *testserver) Ping(ctx context.Context, req *ge.Chain) (*ge.Chain, error) {
    72  	var err error
    73  	s := auth.GetService(ctx)
    74  	u := auth.GetUser(ctx)
    75  	sn := "[NONE]"
    76  	if s != nil {
    77  		sn = s.ID
    78  	}
    79  	reqid := ""
    80  	ctr++
    81  	fmt.Printf("%s %04d Pinged by user %s\n", utils.TimeString(time.Now()), ctr, u)
    82  	if u == nil {
    83  		return req, nil
    84  	}
    85  	call := &ge.Call{
    86  		RequestID: reqid,
    87  		Position:  req.Position,
    88  		UserID:    u.ID,
    89  		ServiceID: sn}
    90  	req.Calls = append(req.Calls, call)
    91  	//fmt.Printf("Adding: %#v\n", call)
    92  	if len(req.Calls) < 10 {
    93  		req.Position = req.Position + 1
    94  		svtok := servicetokens[int(req.Position)%len(servicetokens)]
    95  		tokens.SetServiceTokenParameter(svtok)
    96  		req, err = ge.GetEasyOpsTestClient().Ping(ctx, req)
    97  		if err != nil {
    98  			return nil, err
    99  		}
   100  	}
   101  	return req, nil
   102  }
   103  
   104  // use a wellknown service to do a simple call
   105  func StartSimple() {
   106  	ctx := authremote.Context()
   107  	lreq := &registry.V2ListRequest{}
   108  	resp, err := client.GetRegistryClient().ListRegistrations(ctx, lreq)
   109  	utils.Bail("Failed to query registry", err)
   110  	for _, gr := range resp.Registrations {
   111  		fmt.Printf("Result: %s (%s)\n", gr.Target.ServiceName, gr.Target.RoutingInfo)
   112  		fmt.Printf("   %s:%d\n", gr.Target.IP, gr.Target.Port)
   113  	}
   114  	os.Exit(0)
   115  }
   116  
   117  func MyIP() {
   118  	l := linux.New()
   119  	s := l.MyIP()
   120  	fmt.Printf("My IP: \"%s\"\n", s)
   121  }
   122  

View as plain text