yao/grpc/auth/endpoint_test.go
Max 6e68efaba3 Implement gRPC support in the Yao SDK
- Add gRPC server configuration to the application, allowing for gRPC communication.
- Introduce new Makefile targets for gRPC unit testing and proto code generation.
- Update CI workflows to include gRPC tests with SQLite as the transport layer.
- Refactor the sandbox design to support multi-node capabilities and improve isolation.
- Enhance the service layer to facilitate internal request forwarding for gRPC APIs.

This commit lays the groundwork for integrating gRPC into the Yao SDK, improving performance and scalability.
2026-03-04 13:17:48 +08:00

136 lines
4.7 KiB
Go

package auth_test
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/yaoapp/yao/grpc/auth"
"github.com/yaoapp/yao/grpc/pb"
)
func TestVirtualEndpoint_Run(t *testing.T) {
method, path := auth.VirtualEndpoint("/yao.Yao/Run", &pb.RunRequest{Process: "models.user.Find"})
assert.Equal(t, "POST", method)
assert.Equal(t, "/grpc/run/models.user.Find", path)
}
func TestVirtualEndpoint_Stream(t *testing.T) {
method, path := auth.VirtualEndpoint("/yao.Yao/Stream", &pb.RunRequest{Process: "flows.report"})
assert.Equal(t, "POST", method)
assert.Equal(t, "/grpc/stream/flows.report", path)
}
func TestVirtualEndpoint_Shell(t *testing.T) {
method, path := auth.VirtualEndpoint("/yao.Yao/Shell", &pb.ShellRequest{Command: "ls"})
assert.Equal(t, "POST", method)
assert.Equal(t, "/grpc/shell", path)
}
func TestVirtualEndpoint_ShellStream(t *testing.T) {
method, path := auth.VirtualEndpoint("/yao.Yao/ShellStream", &pb.ShellRequest{Command: "ls"})
assert.Equal(t, "POST", method)
assert.Equal(t, "/grpc/shell", path)
}
func TestVirtualEndpoint_API(t *testing.T) {
method, path := auth.VirtualEndpoint("/yao.Yao/API", &pb.APIRequest{Method: "GET", Path: "/kb/collections"})
assert.Equal(t, "GET", method)
assert.Equal(t, "/kb/collections", path)
}
func TestVirtualEndpoint_MCPListTools(t *testing.T) {
method, path := auth.VirtualEndpoint("/yao.Yao/MCPListTools", &pb.MCPListRequest{SessionId: "abc"})
assert.Equal(t, "GET", method)
assert.Equal(t, "/grpc/mcp/tools", path)
}
func TestVirtualEndpoint_MCPCallTool(t *testing.T) {
method, path := auth.VirtualEndpoint("/yao.Yao/MCPCallTool", &pb.MCPCallRequest{Tool: "search"})
assert.Equal(t, "POST", method)
assert.Equal(t, "/grpc/mcp/call/search", path)
}
func TestVirtualEndpoint_MCPListResources(t *testing.T) {
method, path := auth.VirtualEndpoint("/yao.Yao/MCPListResources", &pb.MCPListRequest{})
assert.Equal(t, "GET", method)
assert.Equal(t, "/grpc/mcp/resources", path)
}
func TestVirtualEndpoint_MCPReadResource(t *testing.T) {
method, path := auth.VirtualEndpoint("/yao.Yao/MCPReadResource", &pb.MCPResourceRequest{Uri: "file://test"})
assert.Equal(t, "GET", method)
assert.Equal(t, "/grpc/mcp/resources/read", path)
}
func TestVirtualEndpoint_ChatCompletions(t *testing.T) {
method, path := auth.VirtualEndpoint("/yao.Yao/ChatCompletions", &pb.ChatRequest{Connector: "openai"})
assert.Equal(t, "POST", method)
assert.Equal(t, "/grpc/llm/completions", path)
}
func TestVirtualEndpoint_ChatCompletionsStream(t *testing.T) {
method, path := auth.VirtualEndpoint("/yao.Yao/ChatCompletionsStream", &pb.ChatRequest{})
assert.Equal(t, "POST", method)
assert.Equal(t, "/grpc/llm/completions", path)
}
func TestVirtualEndpoint_AgentStream(t *testing.T) {
method, path := auth.VirtualEndpoint("/yao.Yao/AgentStream", &pb.AgentRequest{AssistantId: "my-robot"})
assert.Equal(t, "POST", method)
assert.Equal(t, "/grpc/agent/my-robot", path)
}
func TestVirtualEndpoint_Unknown(t *testing.T) {
method, path := auth.VirtualEndpoint("/yao.Yao/NonExistent", nil)
assert.Equal(t, "POST", method)
assert.Equal(t, "/grpc/unknown", path)
}
func TestVirtualEndpoint_RunNilReq(t *testing.T) {
method, path := auth.VirtualEndpoint("/yao.Yao/Run", nil)
assert.Equal(t, "POST", method)
assert.Equal(t, "/grpc/run/", path)
}
func TestVirtualEndpoint_RunEmptyProcess(t *testing.T) {
method, path := auth.VirtualEndpoint("/yao.Yao/Run", &pb.RunRequest{Process: ""})
assert.Equal(t, "POST", method)
assert.Equal(t, "/grpc/run/", path)
}
func TestVirtualEndpoint_StreamNilReq(t *testing.T) {
method, path := auth.VirtualEndpoint("/yao.Yao/Stream", nil)
assert.Equal(t, "POST", method)
assert.Equal(t, "/grpc/stream/", path)
}
func TestVirtualEndpoint_APINilReq(t *testing.T) {
method, path := auth.VirtualEndpoint("/yao.Yao/API", nil)
assert.Equal(t, "POST", method)
assert.Equal(t, "/", path)
}
func TestVirtualEndpoint_APIEmptyMethod(t *testing.T) {
method, path := auth.VirtualEndpoint("/yao.Yao/API", &pb.APIRequest{Method: "", Path: "/test"})
assert.Equal(t, "POST", method)
assert.Equal(t, "/test", path)
}
func TestVirtualEndpoint_MCPCallToolNilReq(t *testing.T) {
method, path := auth.VirtualEndpoint("/yao.Yao/MCPCallTool", nil)
assert.Equal(t, "POST", method)
assert.Equal(t, "/grpc/mcp/call/", path)
}
func TestVirtualEndpoint_AgentStreamNilReq(t *testing.T) {
method, path := auth.VirtualEndpoint("/yao.Yao/AgentStream", nil)
assert.Equal(t, "POST", method)
assert.Equal(t, "/grpc/agent/", path)
}
func TestVirtualEndpoint_AgentStreamEmptyID(t *testing.T) {
method, path := auth.VirtualEndpoint("/yao.Yao/AgentStream", &pb.AgentRequest{AssistantId: ""})
assert.Equal(t, "POST", method)
assert.Equal(t, "/grpc/agent/", path)
}