Files
weave-scope/report/report_test.go
2016-12-07 11:22:40 +00:00

124 lines
2.9 KiB
Go

package report_test
import (
"reflect"
"testing"
"time"
"github.com/weaveworks/common/mtime"
"github.com/weaveworks/common/test"
"github.com/weaveworks/scope/report"
s_reflect "github.com/weaveworks/scope/test/reflect"
)
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 (
reportType = reflect.TypeOf(report.MakeReport())
topologyType = reflect.TypeOf(report.MakeTopology())
)
var want int
for i := 0; i < reportType.NumField(); i++ {
if reportType.Field(i).Type == topologyType {
want++
}
}
if have := len(report.MakeReport().Topologies()); want != have {
t.Errorf("want %d, have %d", want, have)
}
}
func TestReportTopology(t *testing.T) {
r := report.MakeReport()
if _, ok := r.Topology(report.Container); !ok {
t.Errorf("Expected %s topology to be found", report.Container)
}
if _, ok := r.Topology("foo"); ok {
t.Errorf("Expected %s topology not to be found", "foo")
}
}
func TestNode(t *testing.T) {
{
node := report.MakeNodeWith("foo", map[string]string{
"foo": "bar",
})
if v, _ := node.Latest.Lookup("foo"); v != "bar" {
t.Errorf("want foo, have %s", v)
}
}
{
node := report.MakeNode("foo").WithCounters(
map[string]int{"foo": 1},
)
if value, _ := node.Counters.Lookup("foo"); value != 1 {
t.Errorf("want foo, have %d", value)
}
}
{
node := report.MakeNode("foo").WithAdjacent("foo")
if node.Adjacency[0] != "foo" {
t.Errorf("want foo, have %v", node.Adjacency)
}
}
{
node := report.MakeNode("foo").WithEdge("foo", report.EdgeMetadata{
EgressPacketCount: newu64(13),
})
if node.Adjacency[0] != "foo" {
t.Errorf("want foo, have %v", node.Adjacency)
}
if v, ok := node.Edges.Lookup("foo"); ok && *v.EgressPacketCount != 13 {
t.Errorf("want 13, have %v", node.Edges)
}
}
}
func TestReportBackwardCompatibility(t *testing.T) {
mtime.NowForce(time.Now())
defer mtime.NowReset()
rpt := report.MakeReport()
controls := map[string]report.NodeControlData{
"dead": {
Dead: true,
},
"alive": {
Dead: false,
},
}
node := report.MakeNode("foo").WithLatestControls(controls)
expectedNode := node.WithControls("alive")
rpt.Pod.AddNode(node)
expected := report.MakeReport()
expected.Pod.AddNode(expectedNode)
got := rpt.BackwardCompatible()
if !s_reflect.DeepEqual(expected, got) {
t.Error(test.Diff(expected, got))
}
}
func TestReportUpgrade(t *testing.T) {
mtime.NowForce(time.Now())
defer mtime.NowReset()
node := report.MakeNode("foo").WithControls("alive")
controls := map[string]report.NodeControlData{
"alive": {
Dead: false,
},
}
expectedNode := node.WithLatestControls(controls)
rpt := report.MakeReport()
rpt.Pod.AddNode(node)
expected := report.MakeReport()
expected.Pod.AddNode(expectedNode)
got := rpt.Upgrade()
if !s_reflect.DeepEqual(expected, got) {
t.Error(test.Diff(expected, got))
}
}