mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-08-15 15:40:38 +02:00
70 lines
2.4 KiB
Go
70 lines
2.4 KiB
Go
package multiagent
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/cloudwego/eino/compose"
|
|
)
|
|
|
|
func TestModelOutputExecutionGuardMiddlewareBlocksLegacyRecoveryMarker(t *testing.T) {
|
|
called := false
|
|
markerJSON := `{"` + modelOutputRecoveryKey + `":{"reason":"invalid_tool_arguments_json","repair_attempt":1}}`
|
|
wrapped := modelOutputExecutionGuardMiddleware().Invokable(func(context.Context, *compose.ToolInput) (*compose.ToolOutput, error) {
|
|
called = true
|
|
return &compose.ToolOutput{Result: "executed"}, nil
|
|
})
|
|
|
|
out, err := wrapped(context.Background(), &compose.ToolInput{Name: "task", Arguments: markerJSON})
|
|
if err != nil {
|
|
t.Fatalf("guard returned error: %v", err)
|
|
}
|
|
if called {
|
|
t.Fatal("legacy recovery marker should not reach the real tool endpoint")
|
|
}
|
|
if out == nil || !strings.HasPrefix(out.Result, modelOutputRejectedResultPrefix) {
|
|
t.Fatalf("output = %#v, want legacy rejected result", out)
|
|
}
|
|
}
|
|
|
|
func TestModelOutputExecutionGuardMiddlewarePassesNormalToolCall(t *testing.T) {
|
|
called := false
|
|
wrapped := modelOutputExecutionGuardMiddleware().Invokable(func(context.Context, *compose.ToolInput) (*compose.ToolOutput, error) {
|
|
called = true
|
|
return &compose.ToolOutput{Result: "executed"}, nil
|
|
})
|
|
|
|
out, err := wrapped(context.Background(), &compose.ToolInput{Name: "exec", Arguments: `{"command":"pwd"}`})
|
|
if err != nil {
|
|
t.Fatalf("guard returned error: %v", err)
|
|
}
|
|
if !called || out == nil || out.Result != "executed" {
|
|
t.Fatalf("called=%v output=%#v, want normal execution", called, out)
|
|
}
|
|
}
|
|
|
|
func TestModelOutputExecutionGuardMiddlewareBlocksLegacyRecoveryMarkerStream(t *testing.T) {
|
|
markerJSON := `{"` + modelOutputRecoveryKey + `":{"reason":"shell_command_too_large","repair_attempt":1}}`
|
|
wrapped := modelOutputExecutionGuardMiddleware().Streamable(func(context.Context, *compose.ToolInput) (*compose.StreamToolOutput, error) {
|
|
t.Fatal("legacy recovery marker should not reach the stream endpoint")
|
|
return nil, nil
|
|
})
|
|
|
|
out, err := wrapped(context.Background(), &compose.ToolInput{Name: "execute", Arguments: markerJSON})
|
|
if err != nil {
|
|
t.Fatalf("guard returned error: %v", err)
|
|
}
|
|
if out == nil || out.Result == nil {
|
|
t.Fatal("expected stream output")
|
|
}
|
|
got, recvErr := out.Result.Recv()
|
|
if recvErr != nil && recvErr != io.EOF {
|
|
t.Fatalf("recv: %v", recvErr)
|
|
}
|
|
if !strings.HasPrefix(got, modelOutputRejectedResultPrefix) {
|
|
t.Fatalf("stream output = %q, want legacy rejected result", got)
|
|
}
|
|
}
|