Files
weave-scope/probe/overlay/weave_test.go
Bryan Boreham ade54ba84e probe: stop calling 'weave ps'
Now that we enter the container namespace to fetch IPs for every
container, there is no need to have 'weave ps' do it.

This does mean we lose Weave MAC addresses, but that is a rather
idiosyncratic feature anyway.
2018-06-02 22:22:08 +00:00

110 lines
3.8 KiB
Go

package overlay_test
import (
"testing"
"time"
"github.com/weaveworks/scope/probe/docker"
"github.com/weaveworks/scope/probe/host"
"github.com/weaveworks/scope/probe/overlay"
"github.com/weaveworks/scope/report"
"github.com/weaveworks/scope/test"
"github.com/weaveworks/scope/test/reflect"
"github.com/weaveworks/scope/test/weave"
)
const (
mockHostID = "host1"
)
func runTest(t *testing.T, f func(*overlay.Weave)) {
w, err := overlay.NewWeave(mockHostID, weave.MockClient{})
if err != nil {
t.Fatal(err)
}
defer w.Stop()
// Wait until the reporter reports some nodes
test.Poll(t, 300*time.Millisecond, 1, func() interface{} {
have, _ := w.Report()
return len(have.Overlay.Nodes)
})
// Give some time for the Backoff collectors to finish
time.Sleep(time.Second)
f(w)
}
func TestContainerTopologyTagging(t *testing.T) {
test := func(w *overlay.Weave) {
// Container nodes should be tagged with their overlay info
nodeID := report.MakeContainerNodeID(weave.MockContainerID)
topology := report.MakeTopology()
topology.AddNode(report.MakeNodeWith(nodeID, map[string]string{
docker.ContainerID: weave.MockContainerID,
}))
have, err := w.Tag(report.Report{Container: topology})
if err != nil {
t.Fatal(err)
}
node, ok := have.Container.Nodes[nodeID]
if !ok {
t.Errorf("Expected container node %q, but not found", nodeID)
}
// Should have Weave DNS Hostname
if have, ok := node.Latest.Lookup(overlay.WeaveDNSHostname); !ok || have != weave.MockHostname {
t.Errorf("Expected weave dns hostname %q, got %q", weave.MockHostname, have)
}
}
runTest(t, test)
}
func TestOverlayTopology(t *testing.T) {
test := func(w *overlay.Weave) {
// Overlay node should include peer name and nickname
have, err := w.Report()
if err != nil {
t.Fatal(err)
}
nodeID := report.MakeOverlayNodeID(report.WeaveOverlayPeerPrefix, weave.MockWeavePeerName)
node, ok := have.Overlay.Nodes[nodeID]
if !ok {
t.Errorf("Expected overlay node %q, but not found", nodeID)
}
if peerName, ok := node.Latest.Lookup(overlay.WeavePeerName); !ok || peerName != weave.MockWeavePeerName {
t.Errorf("Expected weave peer name %q, got %q", weave.MockWeavePeerName, peerName)
}
if peerNick, ok := node.Latest.Lookup(overlay.WeavePeerNickName); !ok || peerNick != weave.MockWeavePeerNickName {
t.Errorf("Expected weave peer nickname %q, got %q", weave.MockWeavePeerNickName, peerNick)
}
if localNetworks, ok := node.Sets.Lookup(host.LocalNetworks); !ok || !reflect.DeepEqual(localNetworks, report.MakeStringSet(weave.MockWeaveDefaultSubnet)) {
t.Errorf("Expected weave node local_networks %q, got %q", report.MakeStringSet(weave.MockWeaveDefaultSubnet), localNetworks)
}
// The weave proxy container is running
if have, ok := node.Latest.Lookup(overlay.WeaveProxyStatus); !ok || have != "running" {
t.Errorf("Expected weave proxy status %q, got %q", "running", have)
}
if have, ok := node.Latest.Lookup(overlay.WeaveProxyAddress); !ok || have != weave.MockProxyAddress {
t.Errorf("Expected weave proxy address %q, got %q", weave.MockProxyAddress, have)
}
// The weave plugin container is running
if have, ok := node.Latest.Lookup(overlay.WeavePluginStatus); !ok || have != "running" {
t.Errorf("Expected weave plugin status %q, got %q", "running", have)
}
if have, ok := node.Latest.Lookup(overlay.WeavePluginDriver); !ok || have != weave.MockDriverName {
t.Errorf("Expected weave proxy address %q, got %q", weave.MockDriverName, have)
}
// The mock data indicates ranges are owned by unreachable peers
if have, ok := node.Latest.Lookup(overlay.WeaveIPAMStatus); !ok || have != "all ranges owned by unreachable peers" {
t.Errorf("Expected weave IPAM status %q, got %q", "all ranges owned by unreachable peers", have)
}
}
runTest(t, test)
}