Files
weave-scope/render/short_lived_connections_test.go
Bryan Boreham 871751873b Stop render package depending on probe
This dependency makes it harder to see the structure of the program,
and sometimes complicates compilation.

Mostly just changing the source of strings that are already exported
from the report package.  A few new strings have to be moved there,
plus the function `IsPauseImageName()`.
2019-09-15 17:03:04 +00:00

137 lines
5.1 KiB
Go

package render_test
import (
"context"
"fmt"
"testing"
"github.com/weaveworks/common/mtime"
"github.com/weaveworks/scope/render"
"github.com/weaveworks/scope/report"
"github.com/weaveworks/scope/test/utils"
)
var (
serverHostID = "host1"
serverHostNodeID = report.MakeHostNodeID(serverHostID)
randomIP = "3.4.5.6"
randomPort = "56789"
randomEndpointNodeID = report.MakeEndpointNodeID(serverHostID, "", randomIP, randomPort)
serverIP = "192.168.1.1"
serverPort = "80"
serverEndpointNodeID = report.MakeEndpointNodeID(serverHostID, "", serverIP, serverPort)
container1ID = "11b2c3d4e5"
container1IP = "192.168.0.1"
container1Name = "foo"
container1NodeID = report.MakeContainerNodeID(container1ID)
container1Port = "16782"
container1EndpointNodeID = report.MakeEndpointNodeID(serverHostID, "", container1IP, container1Port)
duplicatedIP = "192.168.0.2"
duplicatedPort = "80"
duplicatedEndpointNodeID = report.MakeEndpointNodeID(serverHostID, "", duplicatedIP, duplicatedPort)
container2ID = "21b2c3d4e5"
container2IP = duplicatedIP
container2Name = "bar"
container2NodeID = report.MakeContainerNodeID(container2ID)
pauseContainerID = "31b2c3d4e5"
pauseContainerIP = duplicatedIP
pauseContainerName = "POD"
pauseContainerNodeID = report.MakeContainerNodeID(pauseContainerID)
rpt = report.Report{
Endpoint: report.Topology{
Nodes: report.Nodes{
randomEndpointNodeID: report.MakeNode(randomEndpointNodeID).
WithTopology(report.Endpoint).WithAdjacent(serverEndpointNodeID),
serverEndpointNodeID: report.MakeNode(serverEndpointNodeID).
WithTopology(report.Endpoint),
container1EndpointNodeID: report.MakeNode(container1EndpointNodeID).
WithTopology(report.Endpoint).WithAdjacent(duplicatedEndpointNodeID),
duplicatedEndpointNodeID: report.MakeNode(duplicatedEndpointNodeID).
WithTopology(report.Endpoint),
},
},
Container: report.Topology{
Nodes: report.Nodes{
container1NodeID: report.MakeNodeWith(container1NodeID, map[string]string{
report.DockerContainerID: container1ID,
report.DockerContainerName: container1Name,
report.HostNodeID: serverHostNodeID,
}).
WithSets(report.MakeSets().
Add(report.DockerContainerIPs, report.MakeStringSet(container1IP)).
Add(report.DockerContainerIPsWithScopes, report.MakeStringSet(report.MakeAddressNodeID("", container1IP))).
Add(report.DockerContainerPorts, report.MakeStringSet(fmt.Sprintf("%s:%s->%s/tcp", serverIP, serverPort, serverPort))),
).WithTopology(report.Container),
container2NodeID: report.MakeNodeWith(container2NodeID, map[string]string{
report.DockerContainerID: container2ID,
report.DockerContainerName: container2Name,
report.HostNodeID: serverHostNodeID,
}).
WithSets(report.MakeSets().
Add(report.DockerContainerIPs, report.MakeStringSet(container2IP)).
Add(report.DockerContainerIPsWithScopes, report.MakeStringSet(report.MakeAddressNodeID("", container2IP))),
).WithTopology(report.Container),
pauseContainerNodeID: report.MakeNodeWith(pauseContainerNodeID, map[string]string{
report.DockerContainerID: pauseContainerID,
report.DockerContainerName: pauseContainerName,
report.HostNodeID: serverHostNodeID,
}).
WithSets(report.MakeSets().
Add(report.DockerContainerIPs, report.MakeStringSet(pauseContainerIP)).
Add(report.DockerContainerIPsWithScopes, report.MakeStringSet(report.MakeAddressNodeID("", pauseContainerIP))),
).WithTopology(report.Container).WithLatest(report.DoesNotMakeConnections, mtime.Now(), ""),
},
},
Host: report.Topology{
Nodes: report.Nodes{
serverHostNodeID: report.MakeNodeWith(serverHostNodeID, map[string]string{
report.HostNodeID: serverHostNodeID,
}).
WithSets(report.MakeSets().
Add(report.HostLocalNetworks, report.MakeStringSet("192.168.0.0/16")),
).WithTopology(report.Host),
},
},
}
)
func TestShortLivedInternetNodeConnections(t *testing.T) {
have := utils.Prune(render.ContainerWithImageNameRenderer.Render(context.Background(), rpt).Nodes)
// Conntracked-only connections from the internet should be assigned to the internet pseudonode
internet, ok := have[render.IncomingInternetID]
if !ok {
t.Fatal("Expected output to have an incoming internet node")
}
if !internet.Adjacency.Contains(container1NodeID) {
t.Errorf("Expected internet node to have adjacency to %s, but only had %v", container1NodeID, internet.Adjacency)
}
}
func TestPauseContainerDiscarded(t *testing.T) {
have := utils.Prune(render.ContainerWithImageNameRenderer.Render(context.Background(), rpt).Nodes)
// There should only be a connection from container1 and the destination should be container2
container1, ok := have[container1NodeID]
if !ok {
t.Fatal("Expected output to have container1")
}
if len(container1.Adjacency) != 1 || !container1.Adjacency.Contains(container2NodeID) {
t.Errorf("Expected container1 to have a unique adjacency to %s, but instead had %v", container2NodeID, container1.Adjacency)
}
}