mirror of
https://github.com/weaveworks/scope.git
synced 2026-04-19 17:07:30 +00:00
* Pass Go context down to Renderers This is useful for cancellation or tracing. * Add tracing spans to app Also log things like number of nodes in Map, total number of reports.
103 lines
3.3 KiB
Go
103 lines
3.3 KiB
Go
package render_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/weaveworks/common/test"
|
|
"github.com/weaveworks/scope/render"
|
|
"github.com/weaveworks/scope/report"
|
|
"github.com/weaveworks/scope/test/reflect"
|
|
)
|
|
|
|
var filterBar = render.Transformers([]render.Transformer{
|
|
render.FilterFunc(func(node report.Node) bool {
|
|
return node.ID != "bar"
|
|
}),
|
|
render.FilterUnconnectedPseudo,
|
|
})
|
|
|
|
func TestFilterRender(t *testing.T) {
|
|
renderer := mockRenderer{Nodes: report.Nodes{
|
|
"foo": report.MakeNode("foo").WithAdjacent("bar"),
|
|
"bar": report.MakeNode("bar").WithAdjacent("foo"),
|
|
"baz": report.MakeNode("baz"),
|
|
}}
|
|
have := report.MakeIDList()
|
|
for id := range render.Render(context.Background(), report.MakeReport(), render.ColorConnected(renderer), render.FilterFunc(render.IsConnected)).Nodes {
|
|
have = have.Add(id)
|
|
}
|
|
want := report.MakeIDList("foo", "bar")
|
|
if !reflect.DeepEqual(want, have) {
|
|
t.Error(test.Diff(want, have))
|
|
}
|
|
}
|
|
|
|
func TestFilterRender2(t *testing.T) {
|
|
// Test adjacencies are removed for filtered nodes.
|
|
renderer := mockRenderer{Nodes: report.Nodes{
|
|
"foo": report.MakeNode("foo").WithAdjacent("bar"),
|
|
"bar": report.MakeNode("bar").WithAdjacent("foo"),
|
|
"baz": report.MakeNode("baz"),
|
|
}}
|
|
have := render.Render(context.Background(), report.MakeReport(), renderer, filterBar).Nodes
|
|
if have["foo"].Adjacency.Contains("bar") {
|
|
t.Error("adjacencies for removed nodes should have been removed")
|
|
}
|
|
}
|
|
|
|
func TestFilterUnconnectedPseudoNodes(t *testing.T) {
|
|
ctx := context.Background()
|
|
// Test pseudo nodes that are made unconnected by filtering
|
|
// are also removed.
|
|
{
|
|
nodes := report.Nodes{
|
|
"foo": report.MakeNode("foo").WithAdjacent("bar"),
|
|
"bar": report.MakeNode("bar").WithAdjacent("baz"),
|
|
"baz": report.MakeNode("baz").WithTopology(render.Pseudo),
|
|
}
|
|
renderer := mockRenderer{Nodes: nodes}
|
|
want := nodes
|
|
have := render.Render(ctx, report.MakeReport(), renderer, render.Transformers(nil)).Nodes
|
|
if !reflect.DeepEqual(want, have) {
|
|
t.Error(test.Diff(want, have))
|
|
}
|
|
}
|
|
{
|
|
renderer := mockRenderer{Nodes: report.Nodes{
|
|
"foo": report.MakeNode("foo").WithAdjacent("bar"),
|
|
"bar": report.MakeNode("bar").WithAdjacent("baz"),
|
|
"baz": report.MakeNode("baz").WithTopology(render.Pseudo),
|
|
}}
|
|
have := render.Render(ctx, report.MakeReport(), renderer, filterBar).Nodes
|
|
if _, ok := have["baz"]; ok {
|
|
t.Error("expected the unconnected pseudonode baz to have been removed")
|
|
}
|
|
}
|
|
{
|
|
renderer := mockRenderer{Nodes: report.Nodes{
|
|
"foo": report.MakeNode("foo"),
|
|
"bar": report.MakeNode("bar").WithAdjacent("foo"),
|
|
"baz": report.MakeNode("baz").WithTopology(render.Pseudo).WithAdjacent("bar"),
|
|
}}
|
|
have := render.Render(ctx, report.MakeReport(), renderer, filterBar).Nodes
|
|
if _, ok := have["baz"]; ok {
|
|
t.Error("expected the unconnected pseudonode baz to have been removed")
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestFilterUnconnectedSelf(t *testing.T) {
|
|
// Test nodes that are only connected to themselves are filtered.
|
|
{
|
|
nodes := report.Nodes{
|
|
"foo": report.MakeNode("foo").WithAdjacent("foo"),
|
|
}
|
|
renderer := mockRenderer{Nodes: nodes}
|
|
have := render.Render(context.Background(), report.MakeReport(), render.ColorConnected(renderer), render.FilterFunc(render.IsConnected)).Nodes
|
|
if len(have) > 0 {
|
|
t.Error("expected node only connected to self to be removed")
|
|
}
|
|
}
|
|
}
|