-
Notifications
You must be signed in to change notification settings - Fork 712
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Squash of: - including children in topologies_test.go - report.Node.Prune should prune children also - rewrote ShortLivedInternetConnections test to express its intent - adding tests for detail Summary rendering
- Loading branch information
1 parent
2c6b6e6
commit fe6203f
Showing
18 changed files
with
553 additions
and
235 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,186 @@ | ||
package detailed_test | ||
|
||
import ( | ||
"sort" | ||
"testing" | ||
"time" | ||
|
||
"github.com/weaveworks/scope/common/mtime" | ||
"github.com/weaveworks/scope/probe/docker" | ||
"github.com/weaveworks/scope/probe/host" | ||
"github.com/weaveworks/scope/probe/process" | ||
"github.com/weaveworks/scope/render" | ||
"github.com/weaveworks/scope/render/detailed" | ||
"github.com/weaveworks/scope/render/expected" | ||
"github.com/weaveworks/scope/report" | ||
"github.com/weaveworks/scope/test" | ||
"github.com/weaveworks/scope/test/fixture" | ||
"github.com/weaveworks/scope/test/reflect" | ||
) | ||
|
||
func TestSummaries(t *testing.T) { | ||
{ | ||
// Just a convenient source of some rendered nodes | ||
have := detailed.Summaries(render.ProcessRenderer.Render(fixture.Report)) | ||
// The ids of the processes rendered above | ||
expectedIDs := []string{ | ||
fixture.ClientProcess1NodeID, | ||
fixture.ClientProcess2NodeID, | ||
fixture.ServerProcessNodeID, | ||
fixture.NonContainerProcessNodeID, | ||
expected.UnknownPseudoNode1ID, | ||
expected.UnknownPseudoNode2ID, | ||
render.IncomingInternetID, | ||
render.OutgoingInternetID, | ||
} | ||
sort.Strings(expectedIDs) | ||
|
||
// It should summarize each node | ||
ids := []string{} | ||
for id := range have { | ||
ids = append(ids, id) | ||
} | ||
sort.Strings(ids) | ||
if !reflect.DeepEqual(expectedIDs, ids) { | ||
t.Fatalf("Expected Summaries to have summarized every node in the process renderer: %v, but got %v", expectedIDs, ids) | ||
} | ||
} | ||
|
||
// It should summarize nodes' metrics | ||
{ | ||
t1, t2 := mtime.Now().Add(-1*time.Minute), mtime.Now() | ||
metric := report.MakeMetric().Add(t1, 1).Add(t2, 2) | ||
input := fixture.Report.Copy() | ||
|
||
input.Process.Nodes[fixture.ClientProcess1NodeID] = input.Process.Nodes[fixture.ClientProcess1NodeID].WithMetrics(report.Metrics{process.CPUUsage: metric}) | ||
have := detailed.Summaries(render.ProcessRenderer.Render(input)) | ||
|
||
node, ok := have[fixture.ClientProcess1NodeID] | ||
if !ok { | ||
t.Fatalf("Expected output to have the node we added the metric to") | ||
} | ||
|
||
var row detailed.MetricRow | ||
ok = false | ||
for _, metric := range node.Metrics { | ||
if metric.ID == process.CPUUsage { | ||
row = metric | ||
ok = true | ||
break | ||
} | ||
} | ||
if !ok { | ||
t.Fatalf("Expected node to have the metric we added") | ||
} | ||
|
||
// Our summarized MetricRow | ||
want := detailed.MetricRow{ | ||
ID: process.CPUUsage, | ||
Format: "percent", | ||
Value: 2, | ||
Metric: &report.Metric{ | ||
Samples: nil, | ||
Min: metric.Min, | ||
Max: metric.Max, | ||
First: metric.First, | ||
Last: metric.Last, | ||
}, | ||
} | ||
if !reflect.DeepEqual(want, row) { | ||
t.Fatalf("Expected to have summarized the node's metrics: %s", test.Diff(want, row)) | ||
} | ||
} | ||
} | ||
|
||
func TestMakeNodeSummary(t *testing.T) { | ||
testcases := []struct { | ||
name string | ||
input report.Node | ||
ok bool | ||
want detailed.NodeSummary | ||
}{ | ||
{ | ||
name: "single process rendering", | ||
input: expected.RenderedProcesses[fixture.ClientProcess1NodeID], | ||
ok: true, | ||
want: detailed.NodeSummary{ | ||
ID: fixture.ClientProcess1NodeID, | ||
Label: fixture.Client1Name, | ||
LabelMinor: "client.hostname.com (10001)", | ||
Rank: fixture.Client1Name, | ||
Shape: "square", | ||
Metadata: []detailed.MetadataRow{ | ||
{ID: process.PID, Value: fixture.Client1PID, Prime: true, Datatype: "number"}, | ||
}, | ||
Metrics: []detailed.MetricRow{}, | ||
Adjacency: report.MakeIDList(fixture.ServerProcessNodeID), | ||
}, | ||
}, | ||
{ | ||
name: "single container rendering", | ||
input: expected.RenderedContainers[fixture.ClientContainerNodeID], | ||
ok: true, | ||
want: detailed.NodeSummary{ | ||
ID: fixture.ClientContainerNodeID, | ||
Label: fixture.ClientContainerName, | ||
LabelMinor: fixture.ClientHostName, | ||
Rank: fixture.ClientContainerImageName, | ||
Shape: "hexagon", | ||
Linkable: true, | ||
Metadata: []detailed.MetadataRow{ | ||
{ID: docker.ContainerID, Value: fixture.ClientContainerID, Prime: true}, | ||
}, | ||
Metrics: []detailed.MetricRow{}, | ||
Adjacency: report.MakeIDList(fixture.ServerContainerNodeID), | ||
}, | ||
}, | ||
{ | ||
name: "single container image rendering", | ||
input: expected.RenderedContainerImages[fixture.ClientContainerImageNodeID], | ||
ok: true, | ||
want: detailed.NodeSummary{ | ||
ID: fixture.ClientContainerImageNodeID, | ||
Label: fixture.ClientContainerImageName, | ||
LabelMinor: "1 container", | ||
Rank: fixture.ClientContainerImageName, | ||
Shape: "hexagon", | ||
Linkable: true, | ||
Stack: true, | ||
Metadata: []detailed.MetadataRow{ | ||
{ID: docker.ImageID, Value: fixture.ClientContainerImageID, Prime: true}, | ||
{ID: report.Container, Value: "1", Prime: true, Datatype: "number"}, | ||
}, | ||
Adjacency: report.MakeIDList(fixture.ServerContainerImageNodeID), | ||
}, | ||
}, | ||
{ | ||
name: "single host rendering", | ||
input: expected.RenderedHosts[fixture.ClientHostNodeID], | ||
ok: true, | ||
want: detailed.NodeSummary{ | ||
ID: fixture.ClientHostNodeID, | ||
Label: "client", | ||
LabelMinor: "hostname.com", | ||
Rank: "hostname.com", | ||
Shape: "circle", | ||
Linkable: true, | ||
Metadata: []detailed.MetadataRow{ | ||
{ID: host.HostName, Value: fixture.ClientHostName, Prime: false}, | ||
}, | ||
Metrics: []detailed.MetricRow{}, | ||
Adjacency: report.MakeIDList(fixture.ServerHostNodeID), | ||
}, | ||
}, | ||
} | ||
for _, testcase := range testcases { | ||
have, ok := detailed.MakeNodeSummary(testcase.input) | ||
if ok != testcase.ok { | ||
t.Errorf("%s: MakeNodeSummary failed: expected ok value to be: %v", testcase.name, testcase.ok) | ||
continue | ||
} | ||
|
||
if !reflect.DeepEqual(testcase.want, have) { | ||
t.Errorf("%s: Node Summary did not match: %s", testcase.name, test.Diff(testcase.want, have)) | ||
} | ||
} | ||
} |
Oops, something went wrong.