| package memory // import "github.com/docker/docker/pkg/discovery/memory" |
| |
| import ( |
| "testing" |
| |
| "github.com/docker/docker/internal/test/suite" |
| "github.com/docker/docker/pkg/discovery" |
| "gotest.tools/v3/assert" |
| ) |
| |
| // Hook up gocheck into the "go test" runner. |
| func Test(t *testing.T) { |
| suite.Run(t, &discoverySuite{}) |
| } |
| |
| type discoverySuite struct{} |
| |
| func (s *discoverySuite) TestWatch(c *testing.T) { |
| d := &Discovery{} |
| d.Initialize("foo", 1000, 0, nil) |
| stopCh := make(chan struct{}) |
| ch, errCh := d.Watch(stopCh) |
| |
| // We have to drain the error channel otherwise Watch will get stuck. |
| go func() { |
| for range errCh { |
| } |
| }() |
| |
| expected := discovery.Entries{ |
| &discovery.Entry{Host: "1.1.1.1", Port: "1111"}, |
| } |
| |
| assert.Assert(c, d.Register("1.1.1.1:1111") == nil) |
| assert.DeepEqual(c, <-ch, expected) |
| |
| expected = discovery.Entries{ |
| &discovery.Entry{Host: "1.1.1.1", Port: "1111"}, |
| &discovery.Entry{Host: "2.2.2.2", Port: "2222"}, |
| } |
| |
| assert.Assert(c, d.Register("2.2.2.2:2222") == nil) |
| assert.DeepEqual(c, <-ch, expected) |
| |
| // Stop and make sure it closes all channels. |
| close(stopCh) |
| assert.Assert(c, <-ch == nil) |
| assert.Assert(c, <-errCh == nil) |
| } |