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  }