Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
37 lines
886 B
Go
37 lines
886 B
Go
package implementationhost
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestConnectorLifecycleLanesSerializePerConnectorAndAllowCrossConnectorConcurrency(t *testing.T) {
|
|
host := &Host{}
|
|
releaseA := host.enterConnectorLane("alpha")
|
|
|
|
bAcquired := make(chan func(), 1)
|
|
go func() { bAcquired <- host.enterConnectorLane("beta") }()
|
|
select {
|
|
case releaseB := <-bAcquired:
|
|
releaseB()
|
|
case <-time.After(time.Second):
|
|
t.Fatal("unrelated connector lane was globally serialized")
|
|
}
|
|
|
|
secondA := make(chan func(), 1)
|
|
go func() { secondA <- host.enterConnectorLane("alpha") }()
|
|
select {
|
|
case release := <-secondA:
|
|
release()
|
|
t.Fatal("same connector lane was entered concurrently")
|
|
case <-time.After(25 * time.Millisecond):
|
|
}
|
|
releaseA()
|
|
select {
|
|
case release := <-secondA:
|
|
release()
|
|
case <-time.After(time.Second):
|
|
t.Fatal("same connector lane did not resume after release")
|
|
}
|
|
}
|