github.com/xuyutom/docker@v1.6.0/pkg/pubsub/publisher_test.go (about)

     1  package pubsub
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  )
     7  
     8  func TestSendToOneSub(t *testing.T) {
     9  	p := NewPublisher(100*time.Millisecond, 10)
    10  	c := p.Subscribe()
    11  
    12  	p.Publish("hi")
    13  
    14  	msg := <-c
    15  	if msg.(string) != "hi" {
    16  		t.Fatalf("expected message hi but received %v", msg)
    17  	}
    18  }
    19  
    20  func TestSendToMultipleSubs(t *testing.T) {
    21  	p := NewPublisher(100*time.Millisecond, 10)
    22  	subs := []chan interface{}{}
    23  	subs = append(subs, p.Subscribe(), p.Subscribe(), p.Subscribe())
    24  
    25  	p.Publish("hi")
    26  
    27  	for _, c := range subs {
    28  		msg := <-c
    29  		if msg.(string) != "hi" {
    30  			t.Fatalf("expected message hi but received %v", msg)
    31  		}
    32  	}
    33  }
    34  
    35  func TestEvictOneSub(t *testing.T) {
    36  	p := NewPublisher(100*time.Millisecond, 10)
    37  	s1 := p.Subscribe()
    38  	s2 := p.Subscribe()
    39  
    40  	p.Evict(s1)
    41  	p.Publish("hi")
    42  	if _, ok := <-s1; ok {
    43  		t.Fatal("expected s1 to not receive the published message")
    44  	}
    45  
    46  	msg := <-s2
    47  	if msg.(string) != "hi" {
    48  		t.Fatalf("expected message hi but received %v", msg)
    49  	}
    50  }
    51  
    52  func TestClosePublisher(t *testing.T) {
    53  	p := NewPublisher(100*time.Millisecond, 10)
    54  	subs := []chan interface{}{}
    55  	subs = append(subs, p.Subscribe(), p.Subscribe(), p.Subscribe())
    56  	p.Close()
    57  
    58  	for _, c := range subs {
    59  		if _, ok := <-c; ok {
    60  			t.Fatal("expected all subscriber channels to be closed")
    61  		}
    62  	}
    63  }