63 lines
1.7 KiB
Go
63 lines
1.7 KiB
Go
package harness
|
|
|
|
// The moved path started before its runtime answers asks again until it does (issue 943).
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"testing"
|
|
"time"
|
|
|
|
"git.novox.be/novox/mesh-sdk/go/provider"
|
|
)
|
|
|
|
// earlyBus refuses its first watches as the runtime does before Serve runs, then answers as the bucket bus does.
|
|
type earlyBus struct {
|
|
*bucketBus
|
|
refuse int
|
|
}
|
|
|
|
func (b *earlyBus) Watch(ctx context.Context, bucket string, handle func(string, []byte)) error {
|
|
if b.refuse > 0 {
|
|
b.refuse--
|
|
return errors.New("before Serve: a bundle reaches the bus through the runtime that launched it")
|
|
}
|
|
return b.bucketBus.Watch(ctx, bucket, handle)
|
|
}
|
|
|
|
func TestAMovedPathStartedTooEarlyAsksAgainUntilTheRuntimeAnswers(t *testing.T) {
|
|
w := newMovedWorld(t, map[[2]string]string{})
|
|
w.run.FirstRetry = time.Millisecond
|
|
w.run.loaded = false
|
|
bus := &earlyBus{bucketBus: w.bus, refuse: 3}
|
|
p := provider.New(provider.Options{Node: "novox", Module: "postgres", Bus: w.bus,
|
|
Vault: provider.ConsumersFile{Paths: []string{w.file}}, Make: w.run.Make, Gone: w.run.Gone,
|
|
Every: time.Hour, Logf: func(string, ...any) {}})
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
done := make(chan error, 1)
|
|
go func() { done <- w.run.Run(ctx, p, bus) }()
|
|
deadline := time.After(time.Second)
|
|
for {
|
|
w.run.mu.Lock()
|
|
loaded := w.run.loaded
|
|
w.run.mu.Unlock()
|
|
if loaded {
|
|
break
|
|
}
|
|
select {
|
|
case err := <-done:
|
|
cancel()
|
|
t.Fatalf("Run stopped before the runtime answered: %v", err)
|
|
case <-deadline:
|
|
cancel()
|
|
t.Fatal("the plans were never watched")
|
|
case <-time.After(time.Millisecond):
|
|
}
|
|
}
|
|
cancel()
|
|
<-done
|
|
if bus.refuse != 0 {
|
|
t.Fatalf("%d refusals left", bus.refuse)
|
|
}
|
|
}
|