diff --git a/internal/app/app.go b/internal/app/app.go index 7c0de9c..91e2b66 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -89,8 +89,11 @@ func (a *App) Run(ctx context.Context) error { if err != nil { log.Fatalf("failed to listen: %v", err) } + defer lis.Close() + grpcServer := grpc.NewServer() grpcDone := make(chan error, 1) + pb.RegisterInternalAPIServer(grpcServer, server.New(a.DispatchAsync, a.eventBus, a.logger)) go func() { a.logger.Info("gRPC server started", "addr", grpcAddr) diff --git a/internal/app/integration_test.go b/internal/app/integration_test.go index 636071e..a4b8f74 100644 --- a/internal/app/integration_test.go +++ b/internal/app/integration_test.go @@ -132,13 +132,14 @@ func testIntegration(t *testing.T, mediaServerConfig config.MediaServerSource) { wg.Add(1) go func() { defer wg.Done() - assert.NoError(t, client.Run(ctx)) + assert.ErrorIs(t, server.Run(ctx), context.Canceled) }() wg.Add(1) go func() { defer wg.Done() - assert.NoError(t, server.Run(ctx)) + // May be a gRPC error, not context.Canceled: + assert.ErrorContains(t, client.Run(ctx), "context canceled") }() require.EventuallyWithT( diff --git a/internal/client/clientapp.go b/internal/client/clientapp.go index 5163cd4..34162bb 100644 --- a/internal/client/clientapp.go +++ b/internal/client/clientapp.go @@ -37,6 +37,7 @@ func NewApp( bus: event.NewBus(logger), clipboardAvailable: clipboardAvailable, buildInfo: buildInfo, + screen: screen, logger: logger, } } diff --git a/internal/server/server.go b/internal/server/server.go index c07ac63..2ccfb54 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -76,7 +76,7 @@ func (s *Server) Communicate(stream pb.InternalAPI_CommunicateServer) error { }) if err := g.Wait(); err != nil && !errors.Is(err, io.EOF) && !errors.Is(err, context.Canceled) { - s.logger.Error("Error in gRPC stream handler, exiting", "err", err) + s.logger.Error("Client stream closed with error", "err", err) return fmt.Errorf("errgroup.Wait: %w", err) }