github.com/graphql-editor/azure-functions-golang-worker@v0.1.0/worker/server_test.go (about)

     1  package worker_test
     2  
     3  import (
     4  	"net"
     5  	"time"
     6  
     7  	"github.com/graphql-editor/azure-functions-golang-worker/rpc"
     8  	"github.com/graphql-editor/azure-functions-golang-worker/worker"
     9  	"github.com/stretchr/testify/mock"
    10  	"google.golang.org/grpc"
    11  )
    12  
    13  type mockFunctionRPCServer struct {
    14  	*grpc.Server
    15  	mock.Mock
    16  	ev chan rpc.FunctionRpc_EventStreamServer
    17  }
    18  
    19  func (m *mockFunctionRPCServer) EventStream(ev rpc.FunctionRpc_EventStreamServer) error {
    20  	m.ev <- ev
    21  	var err error
    22  	for err == nil {
    23  		_, err = ev.Recv()
    24  	}
    25  	return err
    26  }
    27  
    28  func probeServer() error {
    29  	conn, err := net.DialTimeout("tcp", ":1234", time.Second*5)
    30  	if conn != nil {
    31  		conn.Close()
    32  	}
    33  	return err
    34  }
    35  
    36  func setupMockGRPCServer(w *worker.Worker) (*mockFunctionRPCServer, rpc.FunctionRpc_EventStreamServer) {
    37  	lis, err := net.Listen("tcp", w.Host+":"+w.Port)
    38  	if err != nil {
    39  		panic(err)
    40  	}
    41  	srv := mockFunctionRPCServer{ev: make(chan rpc.FunctionRpc_EventStreamServer)}
    42  	srv.Server = grpc.NewServer()
    43  	rpc.RegisterFunctionRpcServer(srv.Server, &srv)
    44  	go srv.Serve(lis)
    45  	retry := 0
    46  	err = probeServer()
    47  	for err != nil {
    48  		if retry > 3 {
    49  			panic("server did not start")
    50  		}
    51  		err = probeServer()
    52  		retry++
    53  	}
    54  	go func() {
    55  		if err := w.Listen(); err != nil {
    56  			panic(err)
    57  		}
    58  	}()
    59  	return &srv, <-srv.ev
    60  }