mirror of
https://github.com/weaveworks/scope.git
synced 2026-03-03 02:00:43 +00:00
169 lines
4.9 KiB
Go
169 lines
4.9 KiB
Go
package render_test
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/weaveworks/scope/render"
|
|
"github.com/weaveworks/scope/report"
|
|
)
|
|
|
|
type mockRenderer struct {
|
|
render.RenderableNodes
|
|
aggregateMetadata render.AggregateMetadata
|
|
}
|
|
|
|
func (m mockRenderer) Render(rpt report.Report) render.RenderableNodes {
|
|
return m.RenderableNodes
|
|
}
|
|
func (m mockRenderer) AggregateMetadata(rpt report.Report, localID, remoteID string) render.AggregateMetadata {
|
|
return m.aggregateMetadata
|
|
}
|
|
|
|
func TestReduceRender(t *testing.T) {
|
|
renderer := render.Reduce([]render.Renderer{
|
|
mockRenderer{RenderableNodes: render.RenderableNodes{"foo": {ID: "foo"}}},
|
|
mockRenderer{RenderableNodes: render.RenderableNodes{"bar": {ID: "bar"}}},
|
|
})
|
|
|
|
want := render.RenderableNodes{"foo": {ID: "foo"}, "bar": {ID: "bar"}}
|
|
have := renderer.Render(report.MakeReport())
|
|
|
|
if !reflect.DeepEqual(want, have) {
|
|
t.Errorf("want %+v, have %+v", want, have)
|
|
}
|
|
}
|
|
|
|
func TestReduceEdge(t *testing.T) {
|
|
renderer := render.Reduce([]render.Renderer{
|
|
mockRenderer{aggregateMetadata: render.AggregateMetadata{"foo": 1}},
|
|
mockRenderer{aggregateMetadata: render.AggregateMetadata{"bar": 2}},
|
|
})
|
|
|
|
want := render.AggregateMetadata{"foo": 1, "bar": 2}
|
|
have := renderer.AggregateMetadata(report.MakeReport(), "", "")
|
|
|
|
if !reflect.DeepEqual(want, have) {
|
|
t.Errorf("want %+v, have %+v", want, have)
|
|
}
|
|
}
|
|
|
|
func TestMapRender1(t *testing.T) {
|
|
// 1. Check when we return false, the node gets filtered out
|
|
mapper := render.Map{
|
|
MapFunc: func(nodes render.RenderableNode) (render.RenderableNode, bool) {
|
|
return render.RenderableNode{}, false
|
|
},
|
|
Renderer: mockRenderer{RenderableNodes: render.RenderableNodes{
|
|
"foo": {ID: "foo"},
|
|
}},
|
|
}
|
|
want := render.RenderableNodes{}
|
|
have := mapper.Render(report.MakeReport())
|
|
if !reflect.DeepEqual(want, have) {
|
|
t.Errorf("want %+v, have %+v", want, have)
|
|
}
|
|
}
|
|
|
|
func TestMapRender2(t *testing.T) {
|
|
// 2. Check we can remap two nodes into one
|
|
mapper := render.Map{
|
|
MapFunc: func(nodes render.RenderableNode) (render.RenderableNode, bool) {
|
|
return render.RenderableNode{ID: "bar"}, true
|
|
},
|
|
Renderer: mockRenderer{RenderableNodes: render.RenderableNodes{
|
|
"foo": {ID: "foo"},
|
|
"baz": {ID: "baz"},
|
|
}},
|
|
}
|
|
want := render.RenderableNodes{
|
|
"bar": render.RenderableNode{ID: "bar"},
|
|
}
|
|
have := mapper.Render(report.MakeReport())
|
|
if !reflect.DeepEqual(want, have) {
|
|
t.Errorf("want %+v, have %+v", want, have)
|
|
}
|
|
}
|
|
|
|
func TestMapRender3(t *testing.T) {
|
|
// 3. Check we can remap adjacencies
|
|
mapper := render.Map{
|
|
MapFunc: func(nodes render.RenderableNode) (render.RenderableNode, bool) {
|
|
return render.RenderableNode{ID: "_" + nodes.ID}, true
|
|
},
|
|
Renderer: mockRenderer{RenderableNodes: render.RenderableNodes{
|
|
"foo": {ID: "foo", Adjacency: report.MakeIDList("baz")},
|
|
"baz": {ID: "baz", Adjacency: report.MakeIDList("foo")},
|
|
}},
|
|
}
|
|
want := render.RenderableNodes{
|
|
"_foo": {ID: "_foo", Adjacency: report.MakeIDList("_baz")},
|
|
"_baz": {ID: "_baz", Adjacency: report.MakeIDList("_foo")},
|
|
}
|
|
have := mapper.Render(report.MakeReport())
|
|
if !reflect.DeepEqual(want, have) {
|
|
t.Errorf("want %+v, have %+v", want, have)
|
|
}
|
|
}
|
|
|
|
func TestMapEdge(t *testing.T) {
|
|
selector := func(_ report.Report) report.Topology {
|
|
return report.Topology{
|
|
NodeMetadatas: report.NodeMetadatas{
|
|
"foo": report.NodeMetadata{"id": "foo"},
|
|
"bar": report.NodeMetadata{"id": "bar"},
|
|
},
|
|
Adjacency: report.Adjacency{
|
|
">foo": report.MakeIDList("bar"),
|
|
">bar": report.MakeIDList("foo"),
|
|
},
|
|
EdgeMetadatas: report.EdgeMetadatas{
|
|
"foo|bar": report.EdgeMetadata{WithBytes: true, BytesIngress: 1, BytesEgress: 2},
|
|
"bar|foo": report.EdgeMetadata{WithBytes: true, BytesIngress: 3, BytesEgress: 4},
|
|
},
|
|
}
|
|
}
|
|
|
|
identity := func(nmd report.NodeMetadata) (render.RenderableNode, bool) {
|
|
return render.NewRenderableNode(nmd["id"], "", "", "", nmd), true
|
|
}
|
|
|
|
mapper := render.Map{
|
|
MapFunc: func(nodes render.RenderableNode) (render.RenderableNode, bool) {
|
|
return render.RenderableNode{ID: "_" + nodes.ID}, true
|
|
},
|
|
Renderer: render.LeafMap{
|
|
Selector: selector,
|
|
Mapper: identity,
|
|
Pseudo: nil,
|
|
},
|
|
}
|
|
|
|
want := render.AggregateMetadata{
|
|
render.KeyBytesIngress: 1,
|
|
render.KeyBytesEgress: 2,
|
|
}
|
|
have := mapper.AggregateMetadata(report.MakeReport(), "_foo", "_bar")
|
|
if !reflect.DeepEqual(want, have) {
|
|
t.Errorf("want %+v, have %+v", want, have)
|
|
}
|
|
}
|
|
|
|
func TestFilterRender(t *testing.T) {
|
|
renderer := render.FilterUnconnected{
|
|
Renderer: mockRenderer{RenderableNodes: render.RenderableNodes{
|
|
"foo": {ID: "foo", Adjacency: report.MakeIDList("bar")},
|
|
"bar": {ID: "bar", Adjacency: report.MakeIDList("foo")},
|
|
"baz": {ID: "baz", Adjacency: report.MakeIDList()},
|
|
}},
|
|
}
|
|
want := render.RenderableNodes{
|
|
"foo": {ID: "foo", Adjacency: report.MakeIDList("bar")},
|
|
"bar": {ID: "bar", Adjacency: report.MakeIDList("foo")},
|
|
}
|
|
have := renderer.Render(report.MakeReport())
|
|
if !reflect.DeepEqual(want, have) {
|
|
t.Errorf("want %+v, have %+v", want, have)
|
|
}
|
|
}
|