github.com/docker/compose-on-kubernetes@v0.5.0/internal/registry/signaler_test.go (about) 1 package registry 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func TestSignaler(t *testing.T) { 11 s := newSignaler() 12 t1 := false 13 h1 := s.Register(func() { t1 = true }) 14 s.Unregister(h1) 15 t2 := false 16 s.Register(func() { t2 = true }) 17 forwarder := make(chan struct{}, 10) 18 c1 := s.Channel() 19 go func() { 20 <-c1 21 forwarder <- struct{}{} 22 }() 23 c2 := s.Channel() 24 go func() { 25 <-c2 26 forwarder <- struct{}{} 27 }() 28 s.Signal() 29 assert.Equal(t, t1, false) 30 assert.Equal(t, t2, true) 31 for i := 0; i < 2; i++ { 32 select { 33 case <-time.After(1 * time.Second): 34 t.Errorf("Timeout waiting for signaler channel") 35 case <-forwarder: 36 } 37 } 38 // check registrations after signal 39 s.Register(func() { t1 = true }) 40 assert.Equal(t, t1, true) 41 c3 := s.Channel() 42 go func() { 43 <-c3 44 forwarder <- struct{}{} 45 }() 46 select { 47 case <-time.After(1 * time.Second): 48 t.Errorf("Timeout waiting for signaler channel") 49 case <-forwarder: 50 } 51 }