func (s *DiscoverySuite) TestWatch(c *check.C) { d := &Discovery{} d.Initialize("1.1.1.1:1111,2.2.2.2:2222", 0, 0, nil) expected := discovery.Entries{ &discovery.Entry{Host: "1.1.1.1", Port: "1111"}, &discovery.Entry{Host: "2.2.2.2", Port: "2222"}, } ch, _ := d.Watch(nil) c.Assert(expected.Equals(<-ch), check.Equals, true) }
func TestWatch(t *testing.T) { d := &Discovery{} d.Initialize("1.1.1.1:1111,2.2.2.2:2222", 0, 0) expected := discovery.Entries{ &discovery.Entry{Host: "1.1.1.1", Port: "1111"}, &discovery.Entry{Host: "2.2.2.2", Port: "2222"}, } ch, _ := d.Watch(nil) assert.True(t, expected.Equals(<-ch)) }
// Entries are Docker Engines func (c *Cluster) monitorDiscovery(ch <-chan discovery.Entries, errCh <-chan error) { // Watch changes on the discovery channel. currentEntries := discovery.Entries{} for { select { case entries := <-ch: added, removed := currentEntries.Diff(entries) currentEntries = entries // Remove engines first. `addEngine` will refuse to add an engine // if there's already an engine with the same ID. If an engine // changes address, we have to first remove it then add it back. for _, entry := range removed { c.removeEngine(entry.String()) } for _, entry := range added { c.addEngine(entry.String()) } case err := <-errCh: log.Errorf("Discovery error: %v", err) } } }