summaryrefslogtreecommitdiffstats
path: root/routers/api/actions/ping
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--routers/api/actions/ping/ping.go38
-rw-r--r--routers/api/actions/ping/ping_test.go61
2 files changed, 99 insertions, 0 deletions
diff --git a/routers/api/actions/ping/ping.go b/routers/api/actions/ping/ping.go
new file mode 100644
index 0000000..13985c9
--- /dev/null
+++ b/routers/api/actions/ping/ping.go
@@ -0,0 +1,38 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package ping
+
+import (
+ "context"
+ "fmt"
+ "net/http"
+
+ "code.gitea.io/gitea/modules/log"
+
+ pingv1 "code.gitea.io/actions-proto-go/ping/v1"
+ "code.gitea.io/actions-proto-go/ping/v1/pingv1connect"
+ "connectrpc.com/connect"
+)
+
+func NewPingServiceHandler() (string, http.Handler) {
+ return pingv1connect.NewPingServiceHandler(&Service{})
+}
+
+var _ pingv1connect.PingServiceHandler = (*Service)(nil)
+
+type Service struct {
+ pingv1connect.UnimplementedPingServiceHandler
+}
+
+func (s *Service) Ping(
+ ctx context.Context,
+ req *connect.Request[pingv1.PingRequest],
+) (*connect.Response[pingv1.PingResponse], error) {
+ log.Trace("Content-Type: %s", req.Header().Get("Content-Type"))
+ log.Trace("User-Agent: %s", req.Header().Get("User-Agent"))
+ res := connect.NewResponse(&pingv1.PingResponse{
+ Data: fmt.Sprintf("Hello, %s!", req.Msg.Data),
+ })
+ return res, nil
+}
diff --git a/routers/api/actions/ping/ping_test.go b/routers/api/actions/ping/ping_test.go
new file mode 100644
index 0000000..098b003
--- /dev/null
+++ b/routers/api/actions/ping/ping_test.go
@@ -0,0 +1,61 @@
+// Copyright 2022 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package ping
+
+import (
+ "context"
+ "net/http"
+ "net/http/httptest"
+ "testing"
+
+ pingv1 "code.gitea.io/actions-proto-go/ping/v1"
+ "code.gitea.io/actions-proto-go/ping/v1/pingv1connect"
+ "connectrpc.com/connect"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+)
+
+func TestService(t *testing.T) {
+ mux := http.NewServeMux()
+ mux.Handle(pingv1connect.NewPingServiceHandler(
+ &Service{},
+ ))
+ MainServiceTest(t, mux)
+}
+
+func MainServiceTest(t *testing.T, h http.Handler) {
+ t.Parallel()
+ server := httptest.NewUnstartedServer(h)
+ server.EnableHTTP2 = true
+ server.StartTLS()
+ defer server.Close()
+
+ connectClient := pingv1connect.NewPingServiceClient(
+ server.Client(),
+ server.URL,
+ )
+
+ grpcClient := pingv1connect.NewPingServiceClient(
+ server.Client(),
+ server.URL,
+ connect.WithGRPC(),
+ )
+
+ grpcWebClient := pingv1connect.NewPingServiceClient(
+ server.Client(),
+ server.URL,
+ connect.WithGRPCWeb(),
+ )
+
+ clients := []pingv1connect.PingServiceClient{connectClient, grpcClient, grpcWebClient}
+ t.Run("ping request", func(t *testing.T) {
+ for _, client := range clients {
+ result, err := client.Ping(context.Background(), connect.NewRequest(&pingv1.PingRequest{
+ Data: "foobar",
+ }))
+ require.NoError(t, err)
+ assert.Equal(t, "Hello, foobar!", result.Msg.Data)
+ }
+ })
+}