Files
chis_osi/pipeline/memory_idempotency_test.go

48 lines
1.5 KiB
Go

package pipeline
import (
"context"
"testing"
)
func TestMemoryIdempotencyStoreLeaseLifecycle(t *testing.T) {
store := NewMemoryIdempotencyStore()
ctx := context.Background()
first, err := store.Acquire(ctx, "key-1")
if err != nil || first.State != IdempotencyAcquired || first.Token == "" {
t.Fatalf("first lease=%#v err=%v", first, err)
}
second, err := store.Acquire(ctx, "key-1")
if err != nil || second.State != IdempotencyInProgress {
t.Fatalf("second lease=%#v err=%v", second, err)
}
if err := store.Release(ctx, "key-1", "stale-token"); err == nil {
t.Fatal("stale release succeeded")
}
if err := store.Release(ctx, "key-1", first.Token); err != nil {
t.Fatalf("release: %v", err)
}
reacquired, err := store.Acquire(ctx, "key-1")
if err != nil || reacquired.State != IdempotencyAcquired || reacquired.Token == first.Token {
t.Fatalf("reacquired lease=%#v err=%v", reacquired, err)
}
if err := store.Complete(ctx, "key-1", reacquired.Token); err != nil {
t.Fatalf("complete: %v", err)
}
afterComplete, err := store.Acquire(ctx, "key-1")
if err != nil || afterComplete.State != IdempotencyAcquired || afterComplete.Token == reacquired.Token {
t.Fatalf("lease after complete=%#v err=%v", afterComplete, err)
}
}
func TestMemoryIdempotencyStoreHonorsCanceledContext(t *testing.T) {
store := NewMemoryIdempotencyStore()
ctx, cancel := context.WithCancel(context.Background())
cancel()
if _, err := store.Acquire(ctx, "key-1"); err == nil {
t.Fatal("Acquire accepted canceled context")
}
}