render: fixes for new merge semantics

This commit is contained in:
Peter Bourgon
2015-08-26 12:02:11 +01:00
parent 8f55c74b27
commit 775f0ede90
9 changed files with 143 additions and 95 deletions
+44 -17
View File
@@ -6,6 +6,7 @@ import (
"github.com/weaveworks/scope/render"
"github.com/weaveworks/scope/report"
"github.com/weaveworks/scope/test"
)
func TestMergeRenderableNodes(t *testing.T) {
@@ -17,19 +18,45 @@ func TestMergeRenderableNodes(t *testing.T) {
"bar": render.RenderableNode{ID: "bar"},
"baz": render.RenderableNode{ID: "baz"},
}
want := render.RenderableNodes{
want := sterilize(render.RenderableNodes{
"foo": render.RenderableNode{ID: "foo"},
"bar": render.RenderableNode{ID: "bar"},
"baz": render.RenderableNode{ID: "baz"},
}
}, false)
nodes1.Merge(nodes2)
if !reflect.DeepEqual(want, nodes1) {
t.Errorf("want %+v, have %+v", want, nodes1)
if have := sterilize(nodes1, false); !reflect.DeepEqual(want, have) {
t.Error(test.Diff(want, have))
}
}
func sterilize(r render.RenderableNodes, destructive bool) render.RenderableNodes {
// Since introducing new map fields to the report.NodeMetadata type, its
// zero value is •not valid• -- every time you need one, you need to use
// the report.MakeNodeMetadata constructor. (Similarly, but not exactly
// the same, is that a zero-value Adjacency is not the same as a created
// but empty Adjacency.)
//
// But we're not doing this in tests. So this function sterilizes invalid
// RenderableNodes by fixing all nil Metadata fields. The proper fix
// involves lots of annoying changes to instantiation.
//
// The extra destructive parameter is to support a historical test use
// case where we explicitly don't compare node metadata.
for id, n := range r {
if n.Adjacency == nil {
n.Adjacency = report.IDList{}
}
if destructive || n.NodeMetadata.Metadata == nil {
n.NodeMetadata.Metadata = map[string]string{}
}
if destructive || n.NodeMetadata.Counters == nil {
n.NodeMetadata.Counters = map[string]int{}
}
r[id] = n
}
return r
}
func TestMergeRenderableNode(t *testing.T) {
node1 := render.RenderableNode{
ID: "foo",
@@ -49,19 +76,19 @@ func TestMergeRenderableNode(t *testing.T) {
Adjacency: report.MakeIDList("a2"),
Origins: report.MakeIDList("o2"),
}
want := render.RenderableNode{
ID: "foo",
LabelMajor: "major",
LabelMinor: "minor",
Rank: "rank",
Pseudo: false,
Adjacency: report.MakeIDList("a1", "a2"),
Origins: report.MakeIDList("o1", "o2"),
ID: "foo",
LabelMajor: "major",
LabelMinor: "minor",
Rank: "rank",
Pseudo: false,
Adjacency: report.MakeIDList("a1", "a2"),
Origins: report.MakeIDList("o1", "o2"),
NodeMetadata: report.MakeNodeMetadata(),
EdgeMetadata: report.EdgeMetadata{},
}
node1.Merge(node2)
if !reflect.DeepEqual(want, node1) {
t.Errorf("want %+v, have %+v", want, node1)
if have := node1; !reflect.DeepEqual(want, have) {
t.Error(test.Diff(want, have))
}
}