48 lines
925 B
Go
48 lines
925 B
Go
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()
|
|
}
|