carlos / platform Public

Clone
git clone https://amadan.net/carlos/platform

Plain git — no account needed to clone.

Download

Download this file

1package rootparticipation
2
3import (
4 "testing"
5 "time"
6)
7
8func TestPlan14MigrationWaitsForAcquire(t *testing.T) {
9 l := censusFixture(t)
10 c, err := l.Census()
11 if err != nil {
12 t.Fatal(err)
13 }
14 entered, release := make(chan struct{}), make(chan struct{})
15 acquired := make(chan error, 1)
16 go func() { acquired <- l.Acquire(t.Context(), func() error { close(entered); <-release; return nil }) }()
17 <-entered
18 migration := make(chan error, 1)
19 go func() { migration <- l.MigrationCensus(t.Context(), c, false) }()
20 select {
21 case err := <-migration:
22 close(release)
23 <-acquired
24 t.Fatal("migration bypassed acquisition exclusion", err)
25 case <-time.After(50 * time.Millisecond):
26 }
27 close(release)
28 if err := <-acquired; err != nil {
29 t.Fatal(err)
30 }
31 if err := <-migration; err != nil {
32 t.Fatal(err)
33 }
34 after, err := l.Census()
35 if err != nil || after.Revision != c.Revision+1 || after.LaunchRevision != c.LaunchRevision {
36 t.Fatal("migration reset acquisition revisions", after, err)
37 }
38}
39