mirror of
https://github.com/Buriburizaem0n/nezha_domains.git
synced 2026-09-20 18:20:12 +00:00
feat(agentcompat): expose dashboard capability routes
Co-authored-by: naiba/CloudCode <hi+cloudcode@nai.ba>
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
//go:build !agentcompat
|
||||
|
||||
package controller
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"testing"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/nezhahq/nezha/model"
|
||||
"github.com/nezhahq/nezha/pkg/agentcompatcontract"
|
||||
"github.com/nezhahq/nezha/service/rpc"
|
||||
"github.com/nezhahq/nezha/service/singleton"
|
||||
)
|
||||
|
||||
func TestDefaultCreateTerminalPreservesCapabilityHeaderAndLegacyDispatch(t *testing.T) {
|
||||
// Given
|
||||
handler, _, request := newDefaultCreateFixture(t, "POST", "/terminal", model.TerminalForm{ServerID: 7})
|
||||
request.Request.Header.Set(agentcompatcontract.IOStreamCapabilityHeader, "malformed")
|
||||
server, ok := singleton.ServerShared.Get(7)
|
||||
require.True(t, ok)
|
||||
stream := &failingRequestTaskStream{err: errors.New("stop after dispatch")}
|
||||
server.SetTaskStream(stream)
|
||||
|
||||
// When
|
||||
_, err := createTerminal(request)
|
||||
|
||||
// Then
|
||||
require.ErrorIs(t, err, stream.err)
|
||||
require.Equal(t, "malformed", request.Request.Header.Get(agentcompatcontract.IOStreamCapabilityHeader))
|
||||
require.Equal(t, 1, stream.calls())
|
||||
require.Equal(t, 0, handler.StreamCount())
|
||||
}
|
||||
|
||||
func TestDefaultCreateFMPreservesCapabilityHeaderAndLegacyDispatch(t *testing.T) {
|
||||
// Given
|
||||
handler, _, request := newDefaultCreateFixture(t, "POST", "/file?id=7", nil)
|
||||
request.Request.Header.Set(agentcompatcontract.IOStreamCapabilityHeader, "malformed")
|
||||
server, ok := singleton.ServerShared.Get(7)
|
||||
require.True(t, ok)
|
||||
stream := &failingRequestTaskStream{err: errors.New("stop after dispatch")}
|
||||
server.SetTaskStream(stream)
|
||||
|
||||
// When
|
||||
_, err := createFM(request)
|
||||
|
||||
// Then
|
||||
require.ErrorIs(t, err, stream.err)
|
||||
require.Equal(t, "malformed", request.Request.Header.Get(agentcompatcontract.IOStreamCapabilityHeader))
|
||||
require.Equal(t, 1, stream.calls())
|
||||
require.Equal(t, 0, handler.StreamCount())
|
||||
}
|
||||
|
||||
func newDefaultCreateFixture(t *testing.T, method, target string, body any) (*rpc.NezhaHandler, *model.APIToken, *gin.Context) {
|
||||
t.Helper()
|
||||
cleanup, userID := setupMCPTest(t)
|
||||
t.Cleanup(cleanup)
|
||||
handler := rpc.NewNezhaHandler()
|
||||
originalHandler := rpc.NezhaHandlerSingleton
|
||||
rpc.NezhaHandlerSingleton = handler
|
||||
t.Cleanup(func() { rpc.NezhaHandlerSingleton = originalHandler })
|
||||
token, _ := mkToken(t, userID, []string{model.ScopeServerRead}, nil)
|
||||
request := newAuthorizedControllerContext(t, method, target, body)
|
||||
request.Set(apiTokenCtxKey, token)
|
||||
request.Set(model.CtxKeyAPIToken, token)
|
||||
return handler, token, request
|
||||
}
|
||||
Reference in New Issue
Block a user