Files
run/runtime/remote_access_test.go
T
2026-08-26 09:56:43 +08:00

56 lines
2.3 KiB
Go

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