mirror of
https://github.com/weaveworks/scope.git
synced 2026-02-14 18:09:59 +00:00
* Pass Go context down to Renderers This is useful for cancellation or tracing. * Add tracing spans to app Also log things like number of nodes in Map, total number of reports.
67 lines
1.8 KiB
Go
67 lines
1.8 KiB
Go
package render_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/weaveworks/common/test"
|
|
"github.com/weaveworks/scope/render"
|
|
"github.com/weaveworks/scope/report"
|
|
"github.com/weaveworks/scope/test/reflect"
|
|
)
|
|
|
|
type renderFunc func(ctx context.Context, r report.Report) render.Nodes
|
|
|
|
func (f renderFunc) Render(ctx context.Context, r report.Report) render.Nodes { return f(ctx, r) }
|
|
|
|
func TestMemoise(t *testing.T) {
|
|
calls := 0
|
|
r := renderFunc(func(ctx context.Context, rpt report.Report) render.Nodes {
|
|
calls++
|
|
return render.Nodes{Nodes: report.Nodes{rpt.ID: report.MakeNode(rpt.ID)}}
|
|
})
|
|
m := render.Memoise(r)
|
|
|
|
if render.Memoise(m) != m {
|
|
t.Errorf("Memoised renderers should be fixpoints.")
|
|
}
|
|
|
|
rpt1 := report.MakeReport()
|
|
|
|
ctx := context.Background()
|
|
result1 := m.Render(ctx, rpt1)
|
|
// it should have rendered it.
|
|
if _, ok := result1.Nodes[rpt1.ID]; !ok {
|
|
t.Errorf("Expected rendered report to contain a node, but got: %v", result1)
|
|
}
|
|
if calls != 1 {
|
|
t.Errorf("Expected renderer to have been called the first time")
|
|
}
|
|
|
|
result2 := m.Render(ctx, rpt1)
|
|
if !reflect.DeepEqual(result1, result2) {
|
|
t.Errorf("Expected memoised result to be returned: %s", test.Diff(result1, result2))
|
|
}
|
|
if calls != 1 {
|
|
t.Errorf("Expected renderer to not have been called the second time")
|
|
}
|
|
|
|
rpt2 := report.MakeReport()
|
|
result3 := m.Render(ctx, rpt2)
|
|
if reflect.DeepEqual(result1, result3) {
|
|
t.Errorf("Expected different result for different report, but were the same")
|
|
}
|
|
if calls != 2 {
|
|
t.Errorf("Expected renderer to have been called again for a different report")
|
|
}
|
|
|
|
render.ResetCache()
|
|
result4 := m.Render(ctx, rpt1)
|
|
if !reflect.DeepEqual(result1, result4) {
|
|
t.Errorf("Expected original result to be returned: %s", test.Diff(result1, result4))
|
|
}
|
|
if calls != 3 {
|
|
t.Errorf("Expected renderer to have been called again after cache reset")
|
|
}
|
|
}
|