support get the actual listened address after grpc server is started

pull/385/head
renzheng.wang 5 years ago
parent 2220ca1e53
commit 8e4b6f3bb2
  1. 1
      go.mod
  2. 19
      pkg/net/rpc/warden/server.go
  3. 14
      pkg/net/rpc/warden/server_test.go

@ -26,6 +26,7 @@ require (
github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect
github.com/leodido/go-urn v1.1.0 // indirect
github.com/mattn/go-colorable v0.1.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/montanaflynn/stats v0.5.0
github.com/openzipkin/zipkin-go v0.2.1
github.com/otokaze/mock v0.0.0-20190125081256-8282b7a7c7c3

@ -316,6 +316,25 @@ func (s *Server) Start() (*Server, error) {
return s, nil
}
// StartWithAddr create a new goroutine run server with configured listen addr
// will panic if any error happend
// return server itself and the actually listened address (if configured listen
// port is zero, the os will allocate an unused port)
func (s *Server) StartWithAddr() (*Server, net.Addr, error) {
lis, err := net.Listen(s.conf.Network, s.conf.Addr)
if err != nil {
return nil, nil, err
}
log.Info("warden: start grpc listen addr: %v", lis.Addr())
reflection.Register(s.server)
go func() {
if err := s.Serve(lis); err != nil {
panic(err)
}
}()
return s, lis.Addr(), nil
}
// Serve accepts incoming connections on the listener lis, creating a new
// ServerTransport and service goroutine for each.
// Serve will return a non-nil error unless Stop or GracefulStop is called.

@ -193,7 +193,7 @@ func runClient(ctx context.Context, cc *ClientConfig, t *testing.T, name string,
return
}
func TestMain(t *testing.T) {
func TestMain(m *testing.M) {
log.Init(nil)
}
@ -594,3 +594,15 @@ func TestMetadata(t *testing.T) {
_, err := cli.SayHello(ctx, &pb.HelloRequest{Name: "test"})
assert.Nil(t, err)
}
func TestStartWithAddr(t *testing.T) {
configuredAddr := "127.0.0.1:0"
server = NewServer(&ServerConfig{Addr: configuredAddr, Timeout: xtime.Duration(time.Second)})
if _, realAddr, err := server.StartWithAddr(); err == nil && realAddr != nil {
assert.NotEqual(t, realAddr.String(), configuredAddr)
} else {
assert.NotNil(t, realAddr)
assert.Nil(t, err)
}
}

Loading…
Cancel
Save