github.com/rsampaio/docker@v0.7.2-0.20150827203920-fdc73cc3fc31/daemon/events/events_test.go (about) 1 package events 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/docker/docker/pkg/jsonmessage" 8 ) 9 10 func TestEventsLog(t *testing.T) { 11 e := New() 12 _, l1 := e.Subscribe() 13 _, l2 := e.Subscribe() 14 defer e.Evict(l1) 15 defer e.Evict(l2) 16 count := e.SubscribersCount() 17 if count != 2 { 18 t.Fatalf("Must be 2 subscribers, got %d", count) 19 } 20 e.Log("test", "cont", "image") 21 select { 22 case msg := <-l1: 23 jmsg, ok := msg.(*jsonmessage.JSONMessage) 24 if !ok { 25 t.Fatalf("Unexpected type %T", msg) 26 } 27 if len(e.events) != 1 { 28 t.Fatalf("Must be only one event, got %d", len(e.events)) 29 } 30 if jmsg.Status != "test" { 31 t.Fatalf("Status should be test, got %s", jmsg.Status) 32 } 33 if jmsg.ID != "cont" { 34 t.Fatalf("ID should be cont, got %s", jmsg.ID) 35 } 36 if jmsg.From != "image" { 37 t.Fatalf("From should be image, got %s", jmsg.From) 38 } 39 case <-time.After(1 * time.Second): 40 t.Fatal("Timeout waiting for broadcasted message") 41 } 42 select { 43 case msg := <-l2: 44 jmsg, ok := msg.(*jsonmessage.JSONMessage) 45 if !ok { 46 t.Fatalf("Unexpected type %T", msg) 47 } 48 if len(e.events) != 1 { 49 t.Fatalf("Must be only one event, got %d", len(e.events)) 50 } 51 if jmsg.Status != "test" { 52 t.Fatalf("Status should be test, got %s", jmsg.Status) 53 } 54 if jmsg.ID != "cont" { 55 t.Fatalf("ID should be cont, got %s", jmsg.ID) 56 } 57 if jmsg.From != "image" { 58 t.Fatalf("From should be image, got %s", jmsg.From) 59 } 60 case <-time.After(1 * time.Second): 61 t.Fatal("Timeout waiting for broadcasted message") 62 } 63 } 64 65 func TestEventsLogTimeout(t *testing.T) { 66 e := New() 67 _, l := e.Subscribe() 68 defer e.Evict(l) 69 70 c := make(chan struct{}) 71 go func() { 72 e.Log("test", "cont", "image") 73 close(c) 74 }() 75 76 select { 77 case <-c: 78 case <-time.After(time.Second): 79 t.Fatal("Timeout publishing message") 80 } 81 } 82 83 func TestEventsCap(t *testing.T) { 84 e := New() 85 for i := 0; i < eventsLimit+1; i++ { 86 e.Log("action", "id", "from") 87 } 88 // let all events go through 89 time.Sleep(1 * time.Second) 90 91 current, l := e.Subscribe() 92 if len(current) != eventsLimit { 93 t.Fatalf("Must be %d events, got %d", eventsLimit, len(current)) 94 } 95 if len(e.events) != eventsLimit { 96 t.Fatalf("Must be %d events, got %d", eventsLimit, len(e.events)) 97 } 98 99 for i := 0; i < 10; i++ { 100 e.Log("action", "id", "from") 101 } 102 // let all events go through 103 time.Sleep(1 * time.Second) 104 105 var msgs []*jsonmessage.JSONMessage 106 for len(msgs) < 10 { 107 select { 108 case m := <-l: 109 jm, ok := (m).(*jsonmessage.JSONMessage) 110 if !ok { 111 t.Fatalf("Unexpected type %T", m) 112 } 113 msgs = append(msgs, jm) 114 default: 115 t.Fatalf("There is no enough events in channel") 116 } 117 } 118 }