mirror of
https://github.com/netbirdio/netbird.git
synced 2026-07-17 03:59:56 +00:00
81 lines
2.3 KiB
Go
81 lines
2.3 KiB
Go
package proto
|
|
|
|
import (
|
|
"context"
|
|
"net"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
|
|
gatewayruntime "github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
|
|
"google.golang.org/grpc"
|
|
"google.golang.org/grpc/credentials/insecure"
|
|
"google.golang.org/grpc/test/bufconn"
|
|
)
|
|
|
|
func TestGatewayServerRoutesCoverDaemonRPCs(t *testing.T) {
|
|
mux := gatewayruntime.NewServeMux()
|
|
if err := RegisterDaemonServiceHandlerServer(context.Background(), mux, UnimplementedDaemonServiceServer{}); err != nil {
|
|
t.Fatalf("register daemon gateway server handlers: %v", err)
|
|
}
|
|
|
|
assertAllDaemonGatewayRoutesRegistered(t, mux)
|
|
}
|
|
|
|
func TestGatewayClientRoutesCoverDaemonRPCs(t *testing.T) {
|
|
listener := bufconn.Listen(1024 * 1024)
|
|
server := grpc.NewServer()
|
|
RegisterDaemonServiceServer(server, UnimplementedDaemonServiceServer{})
|
|
go func() {
|
|
if err := server.Serve(listener); err != nil && err != grpc.ErrServerStopped {
|
|
t.Errorf("serve bufconn gRPC server: %v", err)
|
|
}
|
|
}()
|
|
t.Cleanup(func() {
|
|
server.Stop()
|
|
_ = listener.Close()
|
|
})
|
|
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
|
|
mux := gatewayruntime.NewServeMux()
|
|
opts := []grpc.DialOption{
|
|
grpc.WithContextDialer(func(context.Context, string) (net.Conn, error) {
|
|
return listener.Dial()
|
|
}),
|
|
grpc.WithTransportCredentials(insecure.NewCredentials()),
|
|
}
|
|
if err := RegisterDaemonServiceHandlerFromEndpoint(ctx, mux, "passthrough:///bufnet", opts); err != nil {
|
|
t.Fatalf("register daemon gateway client handlers: %v", err)
|
|
}
|
|
|
|
assertAllDaemonGatewayRoutesRegistered(t, mux)
|
|
}
|
|
|
|
func assertAllDaemonGatewayRoutesRegistered(t *testing.T, mux http.Handler) {
|
|
t.Helper()
|
|
for _, method := range DaemonService_ServiceDesc.Methods {
|
|
assertGatewayRouteRegistered(t, mux, method.MethodName)
|
|
}
|
|
for _, stream := range DaemonService_ServiceDesc.Streams {
|
|
assertGatewayRouteRegistered(t, mux, stream.StreamName)
|
|
}
|
|
}
|
|
|
|
func assertGatewayRouteRegistered(t *testing.T, mux http.Handler, methodName string) {
|
|
t.Helper()
|
|
|
|
path := "/daemon.DaemonService/" + methodName
|
|
req := httptest.NewRequest(http.MethodPost, path, strings.NewReader("{}"))
|
|
req.Header.Set("Content-Type", "application/json")
|
|
res := httptest.NewRecorder()
|
|
|
|
mux.ServeHTTP(res, req)
|
|
|
|
if res.Code == http.StatusNotFound {
|
|
t.Fatalf("gateway route for %s is not registered", methodName)
|
|
}
|
|
}
|