Tentacle support enhancements.
This commit is contained in:
1 parent
4cf3335017
commit
24261edb3d
12 files changed
+560
-30
No files matched your search
@@ -123,6 +123,54 @@ func remoteCall(t *testing.T, session *Session, method string, params any) (json
|
||||
return result.Value, result.Code
|
||||
}
|
||||
|
||||
func TestRemoteWorkflowEpochCleanup(t *testing.T) {
|
||||
manager, err := NewManager(DefaultLimits(), nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Cleanup(func() {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||
defer cancel()
|
||||
if err := manager.Shutdown(ctx); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
})
|
||||
session := startSessionSDK(t, manager, "go", "workflow")
|
||||
first, err := session.AuthorizeRemote("controller", []string{"remote-present"})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
second, err := session.AuthorizeRemote("controller", []string{"remote-present"})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
session.RevokeRemoteEpoch(first.Epoch)
|
||||
raw, code := remoteCall(t, session, "remote.open", tentaclewire.RemoteOpen{Action: second.Action, Epoch: second.Epoch, Role: second.Role, Grants: second.Grants})
|
||||
var lease tentaclewire.RemoteLease
|
||||
if code != 0 || json.Unmarshal(raw, &lease) != nil {
|
||||
t.Fatal("old workflow revoked its replacement")
|
||||
}
|
||||
delivery, err := session.RemoteContext(lease, "remote-present")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
session.RevokeRemoteEpoch(second.Epoch)
|
||||
if delivery.Err() == nil {
|
||||
t.Fatal("workflow close retained its live lease")
|
||||
}
|
||||
// Pending actions also release exclusive ownership on close, before their
|
||||
// timeout and without requiring a remote.open/remote.close pair.
|
||||
pending, err := session.AuthorizeRemote("controller", []string{"remote-present"})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
session.RevokeRemoteEpoch(pending.Epoch)
|
||||
other := startSessionSDK(t, manager, "go", "other-workflow")
|
||||
if _, err := other.AuthorizeRemote("controlled", []string{"output-observe"}); err != nil {
|
||||
t.Fatal("closed setup retained exclusive ownership", err)
|
||||
}
|
||||
}
|
||||
|
||||
func openRemote(t *testing.T, session *Session) tentaclewire.RemoteLease {
|
||||
t.Helper()
|
||||
action, err := session.AuthorizeRemote("controlled", []string{"output-observe"})
|
||||
|
||||
Reference in new issue
Block a user