mirror of
https://github.com/weaveworks/scope.git
synced 2026-02-14 18:09:59 +00:00
134 lines
2.9 KiB
Go
134 lines
2.9 KiB
Go
package app_test
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"context"
|
|
|
|
"github.com/weaveworks/common/mtime"
|
|
"github.com/weaveworks/common/test"
|
|
"github.com/weaveworks/scope/app"
|
|
"github.com/weaveworks/scope/report"
|
|
"github.com/weaveworks/scope/test/reflect"
|
|
)
|
|
|
|
func TestCollector(t *testing.T) {
|
|
ctx := context.Background()
|
|
window := 10 * time.Second
|
|
c := app.NewCollector(window)
|
|
|
|
now := time.Now()
|
|
mtime.NowForce(now)
|
|
defer mtime.NowReset()
|
|
|
|
r1 := report.MakeReport()
|
|
r1.Endpoint.AddNode(report.MakeNode("foo").WithTopology("bar"))
|
|
|
|
r2 := report.MakeReport()
|
|
r2.Endpoint.AddNode(report.MakeNode("foo").WithTopology("bar"))
|
|
|
|
have, err := c.Report(ctx, mtime.Now())
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if want := report.MakeReport(); !reflect.DeepEqual(want, have) {
|
|
t.Error(test.Diff(want, have))
|
|
}
|
|
|
|
c.Add(ctx, r1, nil)
|
|
have, err = c.Report(ctx, mtime.Now())
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if want := r1; !reflect.DeepEqual(want, have) {
|
|
t.Error(test.Diff(want, have))
|
|
}
|
|
|
|
timeBefore := mtime.Now()
|
|
mtime.NowForce(now.Add(time.Second))
|
|
|
|
c.Add(ctx, r2, nil)
|
|
merged := report.MakeReport()
|
|
merged.UnsafeMerge(r1)
|
|
merged.UnsafeMerge(r2)
|
|
merged.UnsafeRemovePartMergedNodes(context.Background())
|
|
have, err = c.Report(ctx, mtime.Now())
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if want := merged; !reflect.DeepEqual(want, have) {
|
|
t.Error(test.Diff(want, have))
|
|
}
|
|
|
|
// Since the timestamp given is before r2 was added,
|
|
// it shouldn't be included in the final report.
|
|
have, err = c.Report(ctx, timeBefore)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if want := r1; !reflect.DeepEqual(want, have) {
|
|
t.Error(test.Diff(want, have))
|
|
}
|
|
}
|
|
|
|
func TestCollectorExpire(t *testing.T) {
|
|
now := time.Now()
|
|
mtime.NowForce(now)
|
|
defer mtime.NowReset()
|
|
|
|
ctx := context.Background()
|
|
window := 10 * time.Second
|
|
c := app.NewCollector(window)
|
|
|
|
// 1st check the collector is empty
|
|
have, err := c.Report(ctx, mtime.Now())
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if want := report.MakeReport(); !reflect.DeepEqual(want, have) {
|
|
t.Error(test.Diff(want, have))
|
|
}
|
|
|
|
// Now check an added report is returned
|
|
r1 := report.MakeReport()
|
|
r1.Endpoint.AddNode(report.MakeNode("foo"))
|
|
c.Add(ctx, r1, nil)
|
|
have, err = c.Report(ctx, mtime.Now())
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if want := r1; !reflect.DeepEqual(want, have) {
|
|
t.Error(test.Diff(want, have))
|
|
}
|
|
|
|
// Finally move time forward to expire the report
|
|
mtime.NowForce(now.Add(window))
|
|
have, err = c.Report(ctx, mtime.Now())
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if want := report.MakeReport(); !reflect.DeepEqual(want, have) {
|
|
t.Error(test.Diff(want, have))
|
|
}
|
|
}
|
|
|
|
func TestCollectorWait(t *testing.T) {
|
|
ctx := context.Background()
|
|
window := time.Millisecond
|
|
c := app.NewCollector(window)
|
|
|
|
waiter := make(chan struct{}, 1)
|
|
c.WaitOn(ctx, waiter)
|
|
defer c.UnWait(ctx, waiter)
|
|
c.(interface {
|
|
Broadcast()
|
|
}).Broadcast()
|
|
|
|
select {
|
|
case <-waiter:
|
|
default:
|
|
t.Fatal("Didn't unblock")
|
|
}
|
|
}
|