Files
isphere-ai-bridge/internal/tools/send_message_broute_adapter_test.go
2026-07-12 11:15:07 +08:00

85 lines
3.0 KiB
Go

package tools
import (
"context"
"strings"
"testing"
)
func TestBRouteSendMessageConnectorDisabledMode(t *testing.T) {
connector := NewBRouteSendMessageConnector(BRouteSendAdapterConfig{Mode: "disabled"})
result, err := connector.ExecuteSendMessage(context.Background(), SendMessageConnectorRequest{
TargetType: "direct",
TargetID: "u1",
TargetRef: "contact:u1",
ContentSHA256: "abc",
ContentLength: 3,
IdempotencyKeySHA256: "idem",
ExecutionMode: "production",
})
if err == nil {
t.Fatalf("expected disabled error")
}
if result.ErrorCode != "broute_mode_blocked" {
t.Fatalf("unexpected error code: %s", result.ErrorCode)
}
if result.ConnectorMode != "broute-disabled" {
t.Fatalf("connector mode = %q, want broute-disabled", result.ConnectorMode)
}
}
func TestBRouteSendMessageConnectorDryRunContract(t *testing.T) {
connector := NewBRouteSendMessageConnector(BRouteSendAdapterConfig{
SidecarPath: `Z:\path\that\must\not\be\started\SendSidecar.exe`,
TimeoutSeconds: 5,
Mode: "dry_run_contract",
})
result, err := connector.ExecuteSendMessage(context.Background(), SendMessageConnectorRequest{
TargetType: "direct",
TargetID: "u1",
TargetRef: "contact:u1",
ContentSHA256: strings.Repeat("a", 64),
ContentLength: 3,
IdempotencyKeySHA256: strings.Repeat("b", 64),
ExecutionMode: "production",
})
if err != nil {
t.Fatalf("dry-run contract should not try to start a sidecar or return process error: %v", err)
}
if result.Accepted {
t.Fatalf("dry-run contract must not accept a real send: %+v", result)
}
if result.ConnectorMode != "broute-dry-run-contract" || result.ErrorCode != "broute_dry_run_only" {
t.Fatalf("unexpected dry-run result: %+v", result)
}
}
func TestBRouteSendMessageConnectorInProcessContract(t *testing.T) {
connector := NewBRouteSendMessageConnector(BRouteSendAdapterConfig{Mode: "in_process_contract"})
result, err := connector.ExecuteSendMessage(context.Background(), SendMessageConnectorRequest{
TargetType: "direct",
TargetID: "u1",
TargetRef: "contact:u1",
ContentText: "hello",
ContentSHA256: strings.Repeat("a", 64),
ContentLength: 5,
IdempotencyKeySHA256: strings.Repeat("b", 64),
ExecutionMode: "production",
})
if err != nil {
t.Fatalf("in_process_contract should be a structured blocked result, not process error: %v", err)
}
if result.Accepted || result.ProductionEnabled {
t.Fatalf("contract mode must not accept production send: %+v", result)
}
if result.Status != "blocked" || result.ErrorCode != "broute_in_process_contract_only" {
t.Fatalf("unexpected contract result: %+v", result)
}
if result.ConnectorMode != "broute-in-process-contract" {
t.Fatalf("connector mode = %q", result.ConnectorMode)
}
if result.SideEffects["sent_message"] != false || result.SideEffects["attached_hook"] != false {
t.Fatalf("contract mode must report no side effects: %#v", result.SideEffects)
}
}