From f071067289d9c761eac7160a9201af6138686918 Mon Sep 17 00:00:00 2001 From: Tom Wilkie Date: Sun, 24 Jan 2016 09:50:08 -0800 Subject: [PATCH] Extend testing for EdgeMetadatas. --- report/edge_metadatas.go | 2 +- report/edge_metadatas_internal_test.go | 224 +++++++++++++++++++++++++ report/merge_test.go | 116 ------------- report/report_test.go | 2 + 4 files changed, 227 insertions(+), 117 deletions(-) create mode 100644 report/edge_metadatas_internal_test.go diff --git a/report/edge_metadatas.go b/report/edge_metadatas.go index dd3950766..52c34b06b 100644 --- a/report/edge_metadatas.go +++ b/report/edge_metadatas.go @@ -33,7 +33,7 @@ func (c EdgeMetadatas) Copy() EdgeMetadatas { // Add value to the counter 'key' func (c EdgeMetadatas) Add(key string, value EdgeMetadata) EdgeMetadatas { if existingValue, ok := c.psMap.Lookup(key); ok { - value.Merge(existingValue.(EdgeMetadata)) + value = value.Merge(existingValue.(EdgeMetadata)) } return EdgeMetadatas{ c.psMap.Set(key, value), diff --git a/report/edge_metadatas_internal_test.go b/report/edge_metadatas_internal_test.go new file mode 100644 index 000000000..1b3bd728e --- /dev/null +++ b/report/edge_metadatas_internal_test.go @@ -0,0 +1,224 @@ +package report + +import ( + "testing" + + "github.com/weaveworks/scope/test" + "github.com/weaveworks/scope/test/reflect" +) + +func TestEdgeMetadatasAdd(t *testing.T) { + want := EmptyEdgeMetadatas. + Add("foo", + EdgeMetadata{ + EgressPacketCount: newu64(3), + }) + have := EmptyEdgeMetadatas. + Add("foo", + EdgeMetadata{ + EgressPacketCount: newu64(1), + }). + Add("foo", + EdgeMetadata{ + EgressPacketCount: newu64(2), + }) + if !reflect.DeepEqual(want, have) { + t.Errorf(test.Diff(want, have)) + } + if emd, ok := have.Lookup("foo"); !ok || *emd.EgressPacketCount != 3 { + t.Errorf("foo.EgressPacketCount != 3") + } + if emd, ok := have.Lookup("bar"); ok || emd.EgressPacketCount != nil { + t.Errorf("bar.EgressPacketCount != nil") + } + have.ForEach(func(k string, emd EdgeMetadata) { + if k != "foo" || *emd.EgressPacketCount != 3 { + t.Errorf("foo.EgressPacketCount != 3") + } + }) +} + +func TestEdgeMetadatasMerge(t *testing.T) { + for name, c := range map[string]struct { + a, b, want EdgeMetadatas + }{ + "Empty a": { + a: EmptyEdgeMetadatas, + b: EmptyEdgeMetadatas. + Add("hostA|:192.168.1.1:12345|:192.168.1.2:80", + EdgeMetadata{ + EgressPacketCount: newu64(1), + MaxConnCountTCP: newu64(2), + }), + want: EmptyEdgeMetadatas. + Add("hostA|:192.168.1.1:12345|:192.168.1.2:80", + EdgeMetadata{ + EgressPacketCount: newu64(1), + MaxConnCountTCP: newu64(2), + }), + }, + "Empty b": { + a: EmptyEdgeMetadatas. + Add("hostA|:192.168.1.1:12345|:192.168.1.2:80", + EdgeMetadata{ + EgressPacketCount: newu64(12), + EgressByteCount: newu64(999), + }), + b: EmptyEdgeMetadatas, + want: EmptyEdgeMetadatas. + Add("hostA|:192.168.1.1:12345|:192.168.1.2:80", + EdgeMetadata{ + EgressPacketCount: newu64(12), + EgressByteCount: newu64(999), + }), + }, + "Host merge": { + a: EmptyEdgeMetadatas. + Add("hostA|:192.168.1.1:12345|:192.168.1.2:80", + EdgeMetadata{ + EgressPacketCount: newu64(12), + EgressByteCount: newu64(500), + MaxConnCountTCP: newu64(4), + }), + b: EmptyEdgeMetadatas. + Add("hostQ|:192.168.1.1:12345|:192.168.1.2:80", + EdgeMetadata{ + EgressPacketCount: newu64(1), + EgressByteCount: newu64(2), + MaxConnCountTCP: newu64(6), + }), + want: EmptyEdgeMetadatas. + Add("hostA|:192.168.1.1:12345|:192.168.1.2:80", + EdgeMetadata{ + EgressPacketCount: newu64(12), + EgressByteCount: newu64(500), + MaxConnCountTCP: newu64(4), + }). + Add("hostQ|:192.168.1.1:12345|:192.168.1.2:80", + EdgeMetadata{ + EgressPacketCount: newu64(1), + EgressByteCount: newu64(2), + MaxConnCountTCP: newu64(6), + }), + }, + "Edge merge": { + a: EmptyEdgeMetadatas. + Add("hostA|:192.168.1.1:12345|:192.168.1.2:80", + EdgeMetadata{ + EgressPacketCount: newu64(12), + EgressByteCount: newu64(1000), + MaxConnCountTCP: newu64(7), + }), + b: EmptyEdgeMetadatas. + Add("hostA|:192.168.1.1:12345|:192.168.1.2:80", + EdgeMetadata{ + EgressPacketCount: newu64(1), + IngressByteCount: newu64(123), + EgressByteCount: newu64(2), + MaxConnCountTCP: newu64(9), + }), + want: EmptyEdgeMetadatas. + Add("hostA|:192.168.1.1:12345|:192.168.1.2:80", + EdgeMetadata{ + EgressPacketCount: newu64(13), + IngressByteCount: newu64(123), + EgressByteCount: newu64(1002), + MaxConnCountTCP: newu64(9), + }), + }, + } { + if have := c.a.Merge(c.b); !reflect.DeepEqual(c.want, have) { + t.Errorf("%s:\n%s", name, test.Diff(c.want, have)) + } + } +} + +func TestEdgeMetadataFlatten(t *testing.T) { + { + have := (EdgeMetadata{ + EgressPacketCount: newu64(1), + MaxConnCountTCP: newu64(2), + }).Flatten(EdgeMetadata{ + EgressPacketCount: newu64(4), + EgressByteCount: newu64(8), + MaxConnCountTCP: newu64(16), + }) + want := EdgeMetadata{ + EgressPacketCount: newu64(1 + 4), + EgressByteCount: newu64(8), + MaxConnCountTCP: newu64(2 + 16), // flatten should sum MaxConnCountTCP + } + if !reflect.DeepEqual(want, have) { + t.Error(test.Diff(want, have)) + } + } + + { + have := EmptyEdgeMetadatas. + Add("foo", EdgeMetadata{ + EgressPacketCount: newu64(1), + MaxConnCountTCP: newu64(2), + }). + Add("bar", EdgeMetadata{ + EgressPacketCount: newu64(3), + MaxConnCountTCP: newu64(5), + }).Flatten() + want := EdgeMetadata{ + EgressPacketCount: newu64(1 + 3), + MaxConnCountTCP: newu64(2 + 5), + } + if !reflect.DeepEqual(want, have) { + t.Error(test.Diff(want, have)) + } + } +} + +func TestEdgeMetadataReversed(t *testing.T) { + have := EdgeMetadata{ + EgressPacketCount: newu64(1), + }.Reversed() + want := EdgeMetadata{ + IngressPacketCount: newu64(1), + } + if !reflect.DeepEqual(want, have) { + t.Error(test.Diff(want, have)) + } +} + +func TestEdgeMetadataEncoding(t *testing.T) { + want := EmptyEdgeMetadatas. + Add("foo", EdgeMetadata{ + EgressPacketCount: newu64(1), + MaxConnCountTCP: newu64(2), + }). + Add("bar", EdgeMetadata{ + EgressPacketCount: newu64(3), + MaxConnCountTCP: newu64(5), + }) + + { + gobs, err := want.GobEncode() + if err != nil { + t.Fatal(err) + } + have := EmptyEdgeMetadatas + have.GobDecode(gobs) + if !reflect.DeepEqual(want, have) { + t.Error(test.Diff(want, have)) + } + } + + { + json, err := want.MarshalJSON() + if err != nil { + t.Fatal(err) + } + have := EmptyEdgeMetadatas + have.UnmarshalJSON(json) + if !reflect.DeepEqual(want, have) { + t.Error(test.Diff(want, have)) + } + } +} + +func newu64(value uint64) *uint64 { return &value } diff --git a/report/merge_test.go b/report/merge_test.go index 6d82cc800..fd186f392 100644 --- a/report/merge_test.go +++ b/report/merge_test.go @@ -16,120 +16,6 @@ const ( Domain = "domain" ) -func TestMergeEdgeMetadatas(t *testing.T) { - for name, c := range map[string]struct { - a, b, want report.EdgeMetadatas - }{ - "Empty a": { - a: report.EmptyEdgeMetadatas, - b: report.EmptyEdgeMetadatas. - Add("hostA|:192.168.1.1:12345|:192.168.1.2:80", - report.EdgeMetadata{ - EgressPacketCount: newu64(1), - MaxConnCountTCP: newu64(2), - }), - want: report.EmptyEdgeMetadatas. - Add("hostA|:192.168.1.1:12345|:192.168.1.2:80", - report.EdgeMetadata{ - EgressPacketCount: newu64(1), - MaxConnCountTCP: newu64(2), - }), - }, - "Empty b": { - a: report.EmptyEdgeMetadatas. - Add("hostA|:192.168.1.1:12345|:192.168.1.2:80", - report.EdgeMetadata{ - EgressPacketCount: newu64(12), - EgressByteCount: newu64(999), - }), - b: report.EmptyEdgeMetadatas, - want: report.EmptyEdgeMetadatas. - Add("hostA|:192.168.1.1:12345|:192.168.1.2:80", - report.EdgeMetadata{ - EgressPacketCount: newu64(12), - EgressByteCount: newu64(999), - }), - }, - "Host merge": { - a: report.EmptyEdgeMetadatas. - Add("hostA|:192.168.1.1:12345|:192.168.1.2:80", - report.EdgeMetadata{ - EgressPacketCount: newu64(12), - EgressByteCount: newu64(500), - MaxConnCountTCP: newu64(4), - }), - b: report.EmptyEdgeMetadatas. - Add("hostQ|:192.168.1.1:12345|:192.168.1.2:80", - report.EdgeMetadata{ - EgressPacketCount: newu64(1), - EgressByteCount: newu64(2), - MaxConnCountTCP: newu64(6), - }), - want: report.EmptyEdgeMetadatas. - Add("hostA|:192.168.1.1:12345|:192.168.1.2:80", - report.EdgeMetadata{ - EgressPacketCount: newu64(12), - EgressByteCount: newu64(500), - MaxConnCountTCP: newu64(4), - }). - Add("hostQ|:192.168.1.1:12345|:192.168.1.2:80", - report.EdgeMetadata{ - EgressPacketCount: newu64(1), - EgressByteCount: newu64(2), - MaxConnCountTCP: newu64(6), - }), - }, - "Edge merge": { - a: report.EmptyEdgeMetadatas. - Add("hostA|:192.168.1.1:12345|:192.168.1.2:80", - report.EdgeMetadata{ - EgressPacketCount: newu64(12), - EgressByteCount: newu64(1000), - MaxConnCountTCP: newu64(7), - }), - b: report.EmptyEdgeMetadatas. - Add("hostA|:192.168.1.1:12345|:192.168.1.2:80", - report.EdgeMetadata{ - EgressPacketCount: newu64(1), - IngressByteCount: newu64(123), - EgressByteCount: newu64(2), - MaxConnCountTCP: newu64(9), - }), - want: report.EmptyEdgeMetadatas. - Add("hostA|:192.168.1.1:12345|:192.168.1.2:80", - report.EdgeMetadata{ - EgressPacketCount: newu64(13), - IngressByteCount: newu64(123), - EgressByteCount: newu64(1002), - MaxConnCountTCP: newu64(9), - }), - }, - } { - if have := c.a.Merge(c.b); !reflect.DeepEqual(c.want, have) { - t.Errorf("%s:\n%s", name, test.Diff(c.want, have)) - } - } -} - -func TestFlattenEdgeMetadata(t *testing.T) { - have := (report.EdgeMetadata{ - EgressPacketCount: newu64(1), - MaxConnCountTCP: newu64(2), - }).Flatten(report.EdgeMetadata{ - EgressPacketCount: newu64(4), - EgressByteCount: newu64(8), - MaxConnCountTCP: newu64(16), - }) - want := report.EdgeMetadata{ - EgressPacketCount: newu64(1 + 4), - EgressByteCount: newu64(8), - MaxConnCountTCP: newu64(2 + 16), // flatten should sum MaxConnCountTCP - } - if !reflect.DeepEqual(want, have) { - t.Error(test.Diff(want, have)) - } -} - func TestMergeNodes(t *testing.T) { mtime.NowForce(time.Now()) defer mtime.NowReset() @@ -275,5 +161,3 @@ func TestMergeNodes(t *testing.T) { } } } - -func newu64(value uint64) *uint64 { return &value } diff --git a/report/report_test.go b/report/report_test.go index 84c9746b1..a36ed0225 100644 --- a/report/report_test.go +++ b/report/report_test.go @@ -7,6 +7,8 @@ import ( "github.com/weaveworks/scope/report" ) +func newu64(value uint64) *uint64 { return &value } + // Make sure we don't add a topology and miss it in the Topologies method. func TestReportTopologies(t *testing.T) { var (