mesh/delivery merged: source.main moved to novox/mesh-controller@af2b0844a1fc
mesh/check pass 3b4cb69e84dd on af2b0844a1fc | unit 963 run, 171 kept, 2 skipped | integration 1622 run, 232 kept, 7 skipped | over bound: integration…
35 lines
1.1 KiB
Go
35 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"sync"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
// A start heard while a replacement of given values runs on the node is not lost: it is marked, and the replacement
|
|
// running takes it once it is done (issue 1945, the kind of the dropped wake: replaceGiven returned at once when busy).
|
|
func TestAStartHeardDuringAReplacementIsTaken(t *testing.T) {
|
|
was := replaceGivenOnce
|
|
t.Cleanup(func() { replaceGivenOnce = was })
|
|
var mu sync.Mutex
|
|
var asked []map[string]time.Time
|
|
at := time.Date(2026, 10, 25, 13, 0, 0, 0, time.UTC)
|
|
replaceGivenOnce = func(ctx context.Context, open *stores, node string, started map[string]time.Time) {
|
|
mu.Lock()
|
|
asked = append(asked, started)
|
|
first := len(asked) == 1
|
|
mu.Unlock()
|
|
if first {
|
|
// Another module starts on the node while this one is being replaced.
|
|
replaceGiven(ctx, open, node, map[string]time.Time{"redis": at})
|
|
}
|
|
}
|
|
replaceGiven(context.Background(), nil, "ace", map[string]time.Time{"postgres": at})
|
|
mu.Lock()
|
|
defer mu.Unlock()
|
|
if len(asked) != 2 || !asked[1]["redis"].Equal(at) {
|
|
t.Fatalf("asked %v: the start heard during the replacement was lost", asked)
|
|
}
|
|
}
|