mirror of
https://github.com/weaveworks/scope.git
synced 2026-02-14 18:09:59 +00:00
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()`.
137 lines
5.1 KiB
Go
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)
|
|
}
|
|
|
|
}
|