package rootparticipation import ( "testing" "time" ) func TestPlan14MigrationWaitsForAcquire(t *testing.T) { l := censusFixture(t) c, err := l.Census() if err != nil { t.Fatal(err) } entered, release := make(chan struct{}), make(chan struct{}) acquired := make(chan error, 1) go func() { acquired <- l.Acquire(t.Context(), func() error { close(entered); <-release; return nil }) }() <-entered migration := make(chan error, 1) go func() { migration <- l.MigrationCensus(t.Context(), c, false) }() select { case err := <-migration: close(release) <-acquired t.Fatal("migration bypassed acquisition exclusion", err) case <-time.After(50 * time.Millisecond): } close(release) if err := <-acquired; err != nil { t.Fatal(err) } if err := <-migration; err != nil { t.Fatal(err) } after, err := l.Census() if err != nil || after.Revision != c.Revision+1 || after.LaunchRevision != c.LaunchRevision { t.Fatal("migration reset acquisition revisions", after, err) } }