mirror of https://github.com/linkerd/linkerd2.git
94 lines
2.3 KiB
Go
94 lines
2.3 KiB
Go
package destination
|
|
|
|
import (
|
|
"sort"
|
|
"testing"
|
|
|
|
common "github.com/runconduit/conduit/controller/gen/common"
|
|
"github.com/runconduit/conduit/controller/util"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
type testListener struct {
|
|
t *testing.T
|
|
added []common.TcpAddress
|
|
removed []common.TcpAddress
|
|
}
|
|
|
|
// sorting results makes it easier to compare against expected output
|
|
type ByTCPAddr []common.TcpAddress
|
|
|
|
func (b ByTCPAddr) Len() int { return len(b) }
|
|
func (b ByTCPAddr) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
|
|
func (b ByTCPAddr) Less(i, j int) bool { return b[i].String() <= b[j].String() }
|
|
|
|
func (me testListener) Update(add []common.TcpAddress, remove []common.TcpAddress) {
|
|
assert.Equal(me.t, len(me.added), len(add))
|
|
assert.Equal(me.t, len(me.removed), len(remove))
|
|
|
|
// Sort lists of TCP addresses before comparison. Ordering is not guaranteed,
|
|
// as the underlying util.DiffAddresses uses a map to determine changes.
|
|
sort.Sort(ByTCPAddr(me.added))
|
|
sort.Sort(ByTCPAddr(add))
|
|
|
|
sort.Sort(ByTCPAddr(me.removed))
|
|
sort.Sort(ByTCPAddr(remove))
|
|
|
|
for i, addr := range add {
|
|
assert.Equal(me.t, me.added[i], addr)
|
|
}
|
|
|
|
for i, addr := range remove {
|
|
assert.Equal(me.t, me.removed[i], addr)
|
|
}
|
|
}
|
|
|
|
func TestInformerUpdate(t *testing.T) {
|
|
informer := newInformer("example.com")
|
|
listener := &testListener{
|
|
t: t,
|
|
added: nil,
|
|
removed: nil,
|
|
}
|
|
|
|
informer.add(listener)
|
|
|
|
updates := []struct {
|
|
update []common.TcpAddress
|
|
added []common.TcpAddress
|
|
removed []common.TcpAddress
|
|
}{
|
|
{
|
|
update: []common.TcpAddress{strToTcp("10.0.0.1"), strToTcp("10.0.0.2")},
|
|
added: []common.TcpAddress{strToTcp("10.0.0.1"), strToTcp("10.0.0.2")},
|
|
removed: nil,
|
|
},
|
|
{
|
|
update: []common.TcpAddress{strToTcp("10.0.0.1"), strToTcp("10.0.0.2")},
|
|
added: nil,
|
|
removed: nil,
|
|
},
|
|
{
|
|
update: []common.TcpAddress{strToTcp("10.0.0.2"), strToTcp("10.0.0.3")},
|
|
added: []common.TcpAddress{strToTcp("10.0.0.3")},
|
|
removed: []common.TcpAddress{strToTcp("10.0.0.1")},
|
|
},
|
|
{
|
|
update: nil,
|
|
added: nil,
|
|
removed: []common.TcpAddress{strToTcp("10.0.0.2"), strToTcp("10.0.0.3")},
|
|
},
|
|
}
|
|
|
|
for _, tc := range updates {
|
|
listener.added = tc.added
|
|
listener.removed = tc.removed
|
|
informer.update(tc.update)
|
|
}
|
|
}
|
|
|
|
func strToTcp(addr string) common.TcpAddress {
|
|
ip, _ := util.ParseIPV4(addr)
|
|
return common.TcpAddress{Ip: ip, Port: 80}
|
|
}
|