Files
cthulhu/internal/tentacle/remote_background_test.go

68 lines
2.5 KiB
Go

// Copyright (c) 2026 Storm Dragon
// SPDX-License-Identifier: GPL-3.0-or-later
package tentacle
import (
"strings"
"testing"
"time"
"git.stormux.org/storm/cthulhu/internal/tentaclewire"
)
func TestRemoteBackgroundLeaseOwnershipAndLifetime(t *testing.T) {
for _, language := range []string{"go", "python"} {
t.Run(language, func(t *testing.T) {
manager := test_manager(t, DefaultLimits(), nil)
policy := NewRemotePolicy()
if err := manager.UseRemotePolicy(policy); err != nil {
t.Fatal(err)
}
session := startSessionSDK(t, manager, language, "speech")
lease := speech_fixture_lease(t, session, "controlled", []string{"output-observe"})
lifetime, err := session.RemoteLeaseContext(lease)
if err != nil || lifetime.Err() != nil {
t.Fatal("live owned lease unavailable", err)
}
for _, invalid := range []tentaclewire.RemoteLease{{}, {Lease: lease.Lease, Epoch: lease.Epoch + 1}, {Lease: strings.Repeat("b", 32), Epoch: lease.Epoch}} {
if _, err := session.RemoteLeaseContext(invalid); err == nil {
t.Fatal("invalid ownership accepted")
}
}
if _, err := session.RemoteContext(lease, ""); err == nil {
t.Fatal("ownership check bypassed desktop grant requirement")
}
other := startSessionSDK(t, manager, language, "speech-other")
if _, err := other.RemoteLeaseContext(lease); err == nil {
t.Fatal("another process session acquired lease ownership")
}
policy.SetAvailable(false)
policy.SetAvailable(true)
if lifetime.Err() == nil {
t.Fatal("lock/handoff round trip retained background lifetime")
}
if _, err := session.RemoteLeaseContext(lease); err == nil {
t.Fatal("background ownership survived policy retirement")
}
// A replacement remains distinct, even while old forms finish.
session.RevokeRemote()
invokeSessionSDK(t, session, "event", nil)
replacement := speech_fixture_lease(t, session, "controlled", []string{"output-observe"})
if _, err := session.RemoteLeaseContext(lease); err == nil {
t.Fatal("old controls followed replacement consent")
}
session.RevokeRemoteEpoch(lease.Epoch)
if _, err := session.RemoteLeaseContext(replacement); err != nil {
t.Fatal("old cleanup retired replacement", err)
}
session.mutex.Lock()
session.remote.deadline = time.Now().Add(-time.Second)
session.mutex.Unlock()
if _, err := session.RemoteLeaseContext(replacement); err == nil {
t.Fatal("expired lease accepted for background ownership")
}
})
}
}