package rpc import ( "context" "testing" "github.com/appleboy/gorush/gorush" "google.golang.org/grpc" "google.golang.org/grpc/connectivity" ) const gRPCAddr = "localhost:9000" func TestGracefulShutDownGRPCServer(t *testing.T) { // server configs gorush.InitLog() gorush.PushConf.GRPC.Enabled = true gorush.PushConf.GRPC.Port = "9000" gorush.PushConf.Log.Format = "json" // Run gRPC server ctx, gRPCContextCancel := context.WithCancel(context.Background()) go func() { if err := RunGRPCServer(ctx); err != nil { panic(err) } }() // gRPC client conn conn, err := grpc.Dial( gRPCAddr, grpc.WithInsecure(), grpc.WithDefaultCallOptions(grpc.WaitForReady(true)), ) // wait for server ready if err != nil { t.Error(err) } // Stop gRPC server go gRPCContextCancel() // wait for client connection would be closed for conn.GetState() != connectivity.TransientFailure { } conn.Close() }