package report_test import ( "testing" "time" "github.com/stretchr/testify/assert" "github.com/weaveworks/common/mtime" "github.com/weaveworks/common/test" "github.com/weaveworks/scope/report" "github.com/weaveworks/scope/test/reflect" ) const ( PID = "pid" Name = "name" Domain = "domain" ) func TestWithLatest(t *testing.T) { mtime.NowForce(time.Now()) defer mtime.NowReset() latests1 := map[string]string{Name: "x"} latests2 := map[string]string{PID: "123"} latests3 := map[string]string{PID: "456"} node1 := report.MakeNode("node1").WithLatests(latests1) assert.Equal(t, 1, node1.Latest.Len()) node2 := node1.WithLatests(latests1) assert.Equal(t, node1, node2) node3 := node1.WithLatests(latests2) assert.Equal(t, 2, node3.Latest.Len()) node4 := node1.WithLatests(latests2) assert.Equal(t, node3, node4) node5 := node3.WithLatests(latests3) checkPid, ok := node5.Latest.Lookup(PID) assert.Equal(t, true, ok) assert.Equal(t, "456", checkPid) assert.Equal(t, 2, node5.Latest.Len()) } func TestMergeNodes(t *testing.T) { mtime.NowForce(time.Now()) defer mtime.NowReset() for name, c := range map[string]struct { a, b, want report.Nodes }{ "Empty a": { a: report.Nodes{}, b: report.Nodes{ ":192.168.1.1:12345": report.MakeNodeWith(":192.168.1.1:12345", map[string]string{ PID: "23128", Name: "curl", Domain: "node-a.local", }), }, want: report.Nodes{ ":192.168.1.1:12345": report.MakeNodeWith(":192.168.1.1:12345", map[string]string{ PID: "23128", Name: "curl", Domain: "node-a.local", }), }, }, "Empty b": { a: report.Nodes{ ":192.168.1.1:12345": report.MakeNodeWith(":192.168.1.1:12345", map[string]string{ PID: "23128", Name: "curl", Domain: "node-a.local", }), }, b: report.Nodes{}, want: report.Nodes{ ":192.168.1.1:12345": report.MakeNodeWith(":192.168.1.1:12345", map[string]string{ PID: "23128", Name: "curl", Domain: "node-a.local", }), }, }, "Simple merge": { a: report.Nodes{ ":192.168.1.1:12345": report.MakeNodeWith(":192.168.1.1:12345", map[string]string{ PID: "23128", Name: "curl", Domain: "node-a.local", }), }, b: report.Nodes{ ":192.168.1.2:12345": report.MakeNodeWith(":192.168.1.2:12345", map[string]string{ PID: "42", Name: "curl", Domain: "node-a.local", }), }, want: report.Nodes{ ":192.168.1.1:12345": report.MakeNodeWith(":192.168.1.1:12345", map[string]string{ PID: "23128", Name: "curl", Domain: "node-a.local", }), ":192.168.1.2:12345": report.MakeNodeWith(":192.168.1.2:12345", map[string]string{ PID: "42", Name: "curl", Domain: "node-a.local", }), }, }, "Merge conflict": { a: report.Nodes{ ":192.168.1.1:12345": report.MakeNodeWith(":192.168.1.1:12345", map[string]string{ Name: "curl", Domain: "node-a.local", }).WithLatest(PID, "0"), }, b: report.Nodes{ ":192.168.1.1:12345": report.MakeNodeWith(":192.168.1.1:12345", map[string]string{ // <-- same ID PID: "23128", Name: "curl", Domain: "node-a.local", }), }, want: report.Nodes{ ":192.168.1.1:12345": report.MakeNodeWith(":192.168.1.1:12345", map[string]string{ PID: "23128", Name: "curl", Domain: "node-a.local", }), }, }, } { if have := c.a.Merge(c.b); !reflect.DeepEqual(c.want, have) { t.Errorf("%s: %s", name, test.Diff(c.want, have)) } } } func TestCounters(t *testing.T) { a := report.MakeNode("1"). WithCounter("a", 13). WithCounter("b", 57). WithCounter("c", 89) b := a. WithCounter("a", 78). WithCounter("b", 3). WithCounter("d", 47) want := report.MakeNode("1"). WithCounter("a", 91). WithCounter("b", 60). WithCounter("c", 89). WithCounter("d", 47) if have := b; !reflect.DeepEqual(want, have) { t.Errorf("Counters: %s", test.Diff(want, have)) } }