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) } }