package runtime import ( "context" "strings" "testing" "time" "browser.local/run/protocol" ) func TestRemoteAdapterRegistryHonorsTimeoutAndCancellation(t *testing.T) { registry := NewRemoteAdapterRegistry() if err := registry.Register("database", RemoteAdapterFunc(func(ctx context.Context, request RemoteAdapterRequest) (RemoteAdapterOutcome, error) { <-ctx.Done() return RemoteAdapterOutcome{}, ctx.Err() })); err != nil { t.Fatalf("register blocking adapter: %v", err) } assignment := lifecycleAssignment(protocol.RunCapabilityRemoteRunDBSQLiteQuery) assignment.TargetKey = "db/sqlite/query" assignment.InputRef = "input://server-1/db/sqlite/query/1" assignment.ExecutionInput.RemoteAdapterKind = "database" assignment.ExecutionInput.RemoteAdapterKey = "db-sqlite" assignment.ExecutionInput.TimeoutSeconds = 1 started := time.Now() result := ExecuteRemoteAccessJobWithRegistry(context.Background(), assignment, registry) if result.ErrorCode != "remote_adapter_timeout" || !result.Retryable || time.Since(started) > 3*time.Second { t.Fatalf("expected bounded remote timeout, got %+v", result) } cancelCtx, cancel := context.WithCancel(context.Background()) cancel() result = ExecuteRemoteAccessJobWithRegistry(cancelCtx, assignment, NewRemoteAdapterRegistry()) if result.ErrorCode != "remote_adapter_cancelled" || result.State != "cancelled" { t.Fatalf("expected remote cancellation, got %+v", result) } } func TestRemoteAdapterRejectsKindMismatchAndUnsafeProjection(t *testing.T) { assignment := lifecycleAssignment(protocol.RunCapabilityRemoteRunDBSQLiteQuery) assignment.TargetKey = "db/sqlite/query" assignment.InputRef = "input://server-1/db/sqlite/query/1" assignment.ExecutionInput.RemoteAdapterKind = "rcon" result := ExecuteRemoteAccessJob(context.Background(), assignment) if result.ErrorCode != "remote_adapter_capability_mismatch" { t.Fatalf("expected kind mismatch rejection, got %+v", result) } assignment.ExecutionInput.RemoteAdapterKind = "database" assignment.ExecutionInput.RemoteAdapterKey = "tcp://unapproved" result = ExecuteRemoteAccessJob(context.Background(), assignment) if result.ErrorCode != "unsafe_remote_adapter_target" || strings.Contains(result.Message, "tcp://") { t.Fatalf("expected unsafe adapter target rejection, got %+v", result) } }