Skip to content

Commit 2fdc1c8

Browse files
committed
[public-api] Bind unimplemented WorkspacesServiceHandler using Connect
1 parent de986f1 commit 2fdc1c8

File tree

4 files changed

+70
-12
lines changed

4 files changed

+70
-12
lines changed

components/public-api-server/go.mod

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ go 1.19
44

55
require (
66
github.com/AdaLogics/go-fuzz-headers v0.0.0-20220708163326-82d177caec6e
7+
github.com/bufbuild/connect-go v1.0.0
78
github.com/gitpod-io/gitpod/common-go v0.0.0-00010101000000-000000000000
89
github.com/gitpod-io/gitpod/gitpod-protocol v0.0.0-00010101000000-000000000000
910
github.com/gitpod-io/gitpod/public-api v0.0.0-00010101000000-000000000000
1011
github.com/gitpod-io/gitpod/usage-api v0.0.0-00010101000000-000000000000
1112
github.com/golang/mock v1.6.0
12-
github.com/google/go-cmp v0.5.8
13+
github.com/google/go-cmp v0.5.9
1314
github.com/gorilla/handlers v1.5.1
1415
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0
1516
github.com/prometheus/client_golang v1.13.0

components/public-api-server/go.sum

Lines changed: 4 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

components/public-api-server/pkg/server/integration_test.go

Lines changed: 57 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@ package server
66

77
import (
88
"context"
9+
"net/http"
910
"net/url"
1011
"testing"
1112

13+
"github.com/bufbuild/connect-go"
1214
"github.com/gitpod-io/gitpod/common-go/baseserver"
1315
v1 "github.com/gitpod-io/gitpod/public-api/v1"
14-
"github.com/prometheus/client_golang/prometheus"
16+
"github.com/gitpod-io/gitpod/public-api/v1/v1connect"
1517
"github.com/stretchr/testify/require"
1618
"google.golang.org/grpc"
1719
"google.golang.org/grpc/codes"
@@ -25,12 +27,11 @@ func TestPublicAPIServer_v1_WorkspaceService(t *testing.T) {
2527
srv := baseserver.NewForTests(t,
2628
baseserver.WithGRPC(baseserver.MustUseRandomLocalAddress(t)),
2729
)
28-
registry := prometheus.NewRegistry()
2930

3031
gitpodAPI, err := url.Parse("wss://main.preview.gitpod-dev.com/api/v1")
3132
require.NoError(t, err)
3233

33-
require.NoError(t, register(srv, gitpodAPI, registry))
34+
require.NoError(t, register(srv, gitpodAPI))
3435
baseserver.StartServerForTests(t, srv)
3536

3637
conn, err := grpc.Dial(srv.GRPCAddress(), grpc.WithTransportCredentials(insecure.NewCredentials()))
@@ -69,12 +70,11 @@ func TestPublicAPIServer_v1_WorkspaceService(t *testing.T) {
6970
func TestPublicAPIServer_v1_PrebuildService(t *testing.T) {
7071
ctx := context.Background()
7172
srv := baseserver.NewForTests(t, baseserver.WithGRPC(baseserver.MustUseRandomLocalAddress(t)))
72-
registry := prometheus.NewRegistry()
7373

7474
gitpodAPI, err := url.Parse("wss://main.preview.gitpod-dev.com/api/v1")
7575
require.NoError(t, err)
7676

77-
require.NoError(t, register(srv, gitpodAPI, registry))
77+
require.NoError(t, register(srv, gitpodAPI))
7878

7979
baseserver.StartServerForTests(t, srv)
8080

@@ -100,6 +100,58 @@ func TestPublicAPIServer_v1_PrebuildService(t *testing.T) {
100100
requireErrorStatusCode(t, codes.Unimplemented, err)
101101
}
102102

103+
func TestPublicAPIServer_WorkspaceServiceHandler(t *testing.T) {
104+
ctx := context.Background()
105+
srv := baseserver.NewForTests(t,
106+
baseserver.WithGRPC(baseserver.MustUseRandomLocalAddress(t)),
107+
baseserver.WithHTTP(baseserver.MustUseRandomLocalAddress(t)),
108+
)
109+
110+
gitpodAPI, err := url.Parse("wss://main.preview.gitpod-dev.com/api/v1")
111+
require.NoError(t, err)
112+
113+
require.NoError(t, register(srv, gitpodAPI))
114+
baseserver.StartServerForTests(t, srv)
115+
116+
client := v1connect.NewWorkspacesServiceClient(http.DefaultClient, srv.HTTPAddress())
117+
118+
_, err = client.ListWorkspaces(ctx, connect.NewRequest(&v1.ListWorkspacesRequest{}))
119+
require.Equal(t, connect.CodeUnimplemented.String(), connect.CodeOf(err).String())
120+
121+
_, err = client.GetWorkspace(ctx, connect.NewRequest(&v1.GetWorkspaceRequest{}))
122+
require.Equal(t, connect.CodeUnimplemented.String(), connect.CodeOf(err).String())
123+
124+
_, err = client.GetOwnerToken(ctx, connect.NewRequest(&v1.GetOwnerTokenRequest{}))
125+
require.Equal(t, connect.CodeUnimplemented.String(), connect.CodeOf(err).String())
126+
127+
_, err = client.CreateAndStartWorkspace(ctx, connect.NewRequest(&v1.CreateAndStartWorkspaceRequest{}))
128+
require.Equal(t, connect.CodeUnimplemented.String(), connect.CodeOf(err).String())
129+
130+
_, err = client.StartWorkspace(ctx, connect.NewRequest(&v1.StartWorkspaceRequest{}))
131+
require.Equal(t, connect.CodeUnimplemented.String(), connect.CodeOf(err).String())
132+
133+
_, err = client.GetActiveWorkspaceInstance(ctx, connect.NewRequest(&v1.GetActiveWorkspaceInstanceRequest{}))
134+
require.Equal(t, connect.CodeUnimplemented.String(), connect.CodeOf(err).String())
135+
136+
_, err = client.GetWorkspaceInstanceOwnerToken(ctx, connect.NewRequest(&v1.GetWorkspaceInstanceOwnerTokenRequest{}))
137+
require.Equal(t, connect.CodeUnimplemented.String(), connect.CodeOf(err).String())
138+
139+
stream, err := client.ListenToWorkspaceInstance(ctx, connect.NewRequest(&v1.ListenToWorkspaceInstanceRequest{}))
140+
require.NoError(t, err)
141+
stream.Receive()
142+
require.Equal(t, connect.CodeUnimplemented.String(), connect.CodeOf(stream.Err()).String())
143+
144+
logsStream, err := client.ListenToImageBuildLogs(ctx, connect.NewRequest(&v1.ListenToImageBuildLogsRequest{}))
145+
require.NoError(t, err)
146+
logsStream.Receive()
147+
require.Equal(t, connect.CodeUnimplemented.String(), connect.CodeOf(logsStream.Err()).String())
148+
149+
stopStream, err := client.StopWorkspace(ctx, connect.NewRequest(&v1.StopWorkspaceRequest{}))
150+
require.NoError(t, err)
151+
stopStream.Receive()
152+
require.Equal(t, connect.CodeUnimplemented.String(), connect.CodeOf(stopStream.Err()).String())
153+
}
154+
103155
func requireErrorStatusCode(t *testing.T, expected codes.Code, err error) {
104156
require.Error(t, err)
105157
st, ok := status.FromError(err)

components/public-api-server/pkg/server/server.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/gitpod-io/gitpod/common-go/log"
1515

1616
"github.com/gitpod-io/gitpod/public-api/config"
17+
"github.com/gitpod-io/gitpod/public-api/v1/v1connect"
1718
"github.com/gorilla/handlers"
1819

1920
"github.com/gitpod-io/gitpod/common-go/baseserver"
@@ -22,7 +23,6 @@ import (
2223
"github.com/gitpod-io/gitpod/public-api-server/pkg/proxy"
2324
"github.com/gitpod-io/gitpod/public-api-server/pkg/webhooks"
2425
v1 "github.com/gitpod-io/gitpod/public-api/v1"
25-
"github.com/prometheus/client_golang/prometheus"
2626
"github.com/sirupsen/logrus"
2727
)
2828

@@ -64,7 +64,7 @@ func Start(logger *logrus.Entry, version string, cfg *config.Configuration) erro
6464

6565
srv.HTTPMux().Handle("/stripe/invoices/webhook", handlers.ContentTypeHandler(stripeWebhookHandler, "application/json"))
6666

67-
if registerErr := register(srv, gitpodAPI, srv.MetricsRegistry()); registerErr != nil {
67+
if registerErr := register(srv, gitpodAPI); registerErr != nil {
6868
return fmt.Errorf("failed to register services: %w", registerErr)
6969
}
7070

@@ -75,14 +75,17 @@ func Start(logger *logrus.Entry, version string, cfg *config.Configuration) erro
7575
return nil
7676
}
7777

78-
func register(srv *baseserver.Server, serverAPIURL *url.URL, registry *prometheus.Registry) error {
79-
proxy.RegisterMetrics(registry)
78+
func register(srv *baseserver.Server, serverAPIURL *url.URL) error {
79+
proxy.RegisterMetrics(srv.MetricsRegistry())
8080

8181
connPool := &proxy.NoConnectionPool{ServerAPI: serverAPIURL}
8282

8383
v1.RegisterWorkspacesServiceServer(srv.GRPC(), apiv1.NewWorkspaceService(connPool))
8484
v1.RegisterPrebuildsServiceServer(srv.GRPC(), v1.UnimplementedPrebuildsServiceServer{})
8585

86+
workspacesRoute, workspacesServiceHandler := v1connect.NewWorkspacesServiceHandler(&v1connect.UnimplementedWorkspacesServiceHandler{})
87+
srv.HTTPMux().Handle(workspacesRoute, workspacesServiceHandler)
88+
8689
return nil
8790
}
8891

0 commit comments

Comments
 (0)