mirror of https://github.com/docker/docs.git
discovery: Add the Entries.Diff helper.
Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
This commit is contained in:
parent
2fd48d8ac4
commit
08dc3c7c7b
|
|
@ -52,6 +52,35 @@ func (e Entries) Equals(cmp Entries) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Contains returns true if the Entries contain a given Entry.
|
||||||
|
func (e Entries) Contains(entry *Entry) bool {
|
||||||
|
for _, curr := range e {
|
||||||
|
if curr.Equals(entry) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Diff compares two entries and returns the added and removed entries.
|
||||||
|
func (e Entries) Diff(cmp Entries) (Entries, Entries) {
|
||||||
|
added := Entries{}
|
||||||
|
for _, entry := range cmp {
|
||||||
|
if !e.Contains(entry) {
|
||||||
|
added = append(added, entry)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
removed := Entries{}
|
||||||
|
for _, entry := range e {
|
||||||
|
if !cmp.Contains(entry) {
|
||||||
|
removed = append(removed, entry)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return added, removed
|
||||||
|
}
|
||||||
|
|
||||||
// The Discovery interface is implemented by Discovery backends which
|
// The Discovery interface is implemented by Discovery backends which
|
||||||
// manage swarm host entries.
|
// manage swarm host entries.
|
||||||
type Discovery interface {
|
type Discovery interface {
|
||||||
|
|
|
||||||
|
|
@ -80,3 +80,34 @@ func TestEntriesEquality(t *testing.T) {
|
||||||
&Entry{Host: "127.0.0.42", Port: "2375"},
|
&Entry{Host: "127.0.0.42", Port: "2375"},
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestEntriesDiff(t *testing.T) {
|
||||||
|
entry1 := &Entry{Host: "1.1.1.1", Port: "1111"}
|
||||||
|
entry2 := &Entry{Host: "2.2.2.2", Port: "2222"}
|
||||||
|
entry3 := &Entry{Host: "3.3.3.3", Port: "3333"}
|
||||||
|
entries := Entries{entry1, entry2}
|
||||||
|
|
||||||
|
// No diff
|
||||||
|
added, removed := entries.Diff(Entries{entry2, entry1})
|
||||||
|
assert.Empty(t, added)
|
||||||
|
assert.Empty(t, removed)
|
||||||
|
|
||||||
|
// Add
|
||||||
|
added, removed = entries.Diff(Entries{entry2, entry3, entry1})
|
||||||
|
assert.Len(t, added, 1)
|
||||||
|
assert.True(t, added.Contains(entry3))
|
||||||
|
assert.Empty(t, removed)
|
||||||
|
|
||||||
|
// Remove
|
||||||
|
added, removed = entries.Diff(Entries{entry2})
|
||||||
|
assert.Empty(t, added)
|
||||||
|
assert.Len(t, removed, 1)
|
||||||
|
assert.True(t, removed.Contains(entry1))
|
||||||
|
|
||||||
|
// Add and remove
|
||||||
|
added, removed = entries.Diff(Entries{entry1, entry3})
|
||||||
|
assert.Len(t, added, 1)
|
||||||
|
assert.True(t, added.Contains(entry3))
|
||||||
|
assert.Len(t, removed, 1)
|
||||||
|
assert.True(t, removed.Contains(entry2))
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue