mirror of
https://github.com/Buriburizaem0n/nezha_domains.git
synced 2026-09-19 17:50:12 +00:00
70 lines
2.3 KiB
Go
70 lines
2.3 KiB
Go
//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
|
|
}
|