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 }