init
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user