package prober
import (
"context"
"github.com/goodrain/rainbond/util/prober/types/v1"
"testing"
"time"
)
func TestProbeManager_Start(t *testing.T) {
t.Skip("integration test depends on reachable external TCP endpoint")
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
mgr, ok := NewProber(ctx, cancel).(*probeManager)
if !ok {
t.Fatal("expected *probeManager")
}
mgr.SetServices([]*v1.Service{{
Name: "etcd",
ServiceHealth: &v1.Health{
Name: "etcd",
Model: "unknown",
Address: "127.0.0.1:2379",
TimeInterval: 3,
},
}})
watcher := mgr.WatchServiceHealthy("etcd")
mgr.EnableWatcher(watcher.GetServiceName(), watcher.GetID())
go mgr.handleStatus()
defer watcher.Close()
mgr.statusChan <- &v1.HealthStatus{
Name: "etcd",
Status: v1.StatHealthy,
Info: "ok",
}
select {
case got := <-watcher.Watch():
if got == nil {
t.Fatal("expected status update")
}
if got.Name != "etcd" || got.Status != v1.StatHealthy {
t.Fatalf("unexpected status: %+v", got)
}
case <-time.After(2 * time.Second):
t.Fatal("timed out waiting for watcher update")
}
}