Something went wrong. Try again.
Monorepo for Tangled tangled.org
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162package spindle
import ( "fmt" "testing" "time"
"tangled.org/core/spindle/db")
func TestAPullEventBacklogDrainsInBatches(t *testing.T) { e := newPullEnv(t) d := e.n.s.db if err := d.AddPullTicket(testRepoDid, "bulk", db.PullTicket{Author: testBob, State: "open", Version: "v0"}); err != nil { t.Fatal(err) } const events = 3 * pullEventBatch for i := 1; i <= events; i++ { ev := db.PullEvent{RepoDid: testRepoDid, Ticket: "bulk", Event: "closed", Author: testBob, Sender: testBob, Pull: []byte("{}")} if err := d.AdvancePullTicket(testRepoDid, "bulk", fmt.Sprintf("v%d", i-1), fmt.Sprintf("v%d", i), "closed", &ev); err != nil { t.Fatal(err) } }
e.n.s.retries.jobs.kick(testRepoDid) eventually(t, 10*time.Second, "the backlog to be worked through, a batch at a time", func() bool { due, err := d.DuePullEvents(testRepoDid, time.Now().Add(time.Hour), events+1) return err == nil && len(due) == 0 })}
func TestPullEventsStayDueWhileThePoolIsFull(t *testing.T) { e := newPullEnv(t) d := e.n.s.db e.n.s.cfg.Server.NotifySlots = 1 repo, err := e.n.s.servedRepo(testRepoDid) if err != nil || repo == nil { t.Fatalf("setup: the repo isn't served: %v", err) } if !e.n.s.notifySlots.acquire("other-knot.test", e.n.s.notifyLimits()) { t.Fatal("setup: the pool was already full") } if err := d.AddPullTicket(testRepoDid, "held", db.PullTicket{Author: testBob, State: "open", Version: "v0"}); err != nil { t.Fatal(err) } ev := db.PullEvent{RepoDid: testRepoDid, Ticket: "held", Event: "closed", Author: testBob, Sender: testBob, Pull: []byte("{}")} if err := d.AdvancePullTicket(testRepoDid, "held", "v0", "v1", "closed", &ev); err != nil { t.Fatal(err) }
e.n.s.runDuePullEvents(e.n.s.rootCtx, testRepoDid) due, err := d.DuePullEvents(testRepoDid, time.Now().Add(time.Hour), 10) if err != nil || len(due) != 1 { t.Fatalf("%d events due, %v, want the one that found no slot", len(due), err) } e.n.s.notifySlots.release("other-knot.test") e.n.s.runDuePullEvents(e.n.s.rootCtx, testRepoDid) if due, _ := d.DuePullEvents(testRepoDid, time.Now().Add(time.Hour), 10); len(due) != 0 { t.Fatalf("%d events left after the slot freed", len(due)) }}