mirror of
https://github.com/weaveworks/scope.git
synced 2026-05-04 16:29:24 +00:00
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.
110 lines
3.8 KiB
Go
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)
|
|
}
|