Files
weave-scope/render/render_test.go
Paul Bellamy 2c6b6e6707 Refactoring rendering to remove RenderableNode
Squash of:
- use detailed.Summaries to render topology nodes
- ban merging nodes of different topologies (they should be mapped)
- need to prune parents when mapping node types
- render container images by id if they have no name
- remove separate render ids and prune parents in NewDerived*
- don't render metrics/metadata for groups of nodes
- fixing up tests
- removing pending unit tests (for mapping.go, for now)
- updating experimental dir for RenderableNode removal
2016-03-29 14:13:03 +01:00

97 lines
2.6 KiB
Go

package render_test
import (
"reflect"
"testing"
"github.com/weaveworks/scope/render"
"github.com/weaveworks/scope/report"
"github.com/weaveworks/scope/test"
)
type mockRenderer struct {
report.Nodes
}
func (m mockRenderer) Render(rpt report.Report) report.Nodes { return m.Nodes }
func (m mockRenderer) Stats(rpt report.Report) render.Stats { return render.Stats{} }
func TestReduceRender(t *testing.T) {
renderer := render.Reduce([]render.Renderer{
mockRenderer{Nodes: report.Nodes{"foo": report.MakeNode().WithID("foo")}},
mockRenderer{Nodes: report.Nodes{"bar": report.MakeNode().WithID("bar")}},
})
want := report.Nodes{
"foo": report.MakeNode().WithID("foo"),
"bar": report.MakeNode().WithID("bar"),
}
have := renderer.Render(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 report.Node, _ report.Networks) report.Nodes {
return report.Nodes{}
},
Renderer: mockRenderer{Nodes: report.Nodes{
"foo": report.MakeNode().WithID("foo"),
}},
}
want := report.Nodes{}
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 report.Node, _ report.Networks) report.Nodes {
return report.Nodes{
"bar": report.MakeNode().WithID("bar"),
}
},
Renderer: mockRenderer{Nodes: report.Nodes{
"foo": report.MakeNode().WithID("foo"),
"baz": report.MakeNode().WithID("baz"),
}},
}
want := report.Nodes{
"bar": report.MakeNode().WithID("bar"),
}
have := mapper.Render(report.MakeReport())
if !reflect.DeepEqual(want, have) {
t.Error(test.Diff(want, have))
}
}
func TestMapRender3(t *testing.T) {
// 3. Check we can remap adjacencies
mapper := render.Map{
MapFunc: func(nodes report.Node, _ report.Networks) report.Nodes {
id := "_" + nodes.ID
return report.Nodes{id: report.MakeNode().WithID(id)}
},
Renderer: mockRenderer{Nodes: report.Nodes{
"foo": report.MakeNode().WithID("foo").WithAdjacent("baz"),
"baz": report.MakeNode().WithID("baz").WithAdjacent("foo"),
}},
}
want := report.Nodes{
"_foo": report.MakeNode().WithID("_foo").WithAdjacent("_baz"),
"_baz": report.MakeNode().WithID("_baz").WithAdjacent("_foo"),
}
have := mapper.Render(report.MakeReport())
if !reflect.DeepEqual(want, have) {
t.Error(test.Diff(want, have))
}
}
func newu64(value uint64) *uint64 { return &value }