linkerd2/controller/destination/dns_test.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}
}