github.com/netdata/go.d.plugin@v0.58.1/agent/discovery/sd/hostsocket/sim_test.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package hostsocket 4 5 import ( 6 "context" 7 "testing" 8 "time" 9 10 "github.com/netdata/go.d.plugin/agent/discovery/sd/model" 11 12 "github.com/stretchr/testify/assert" 13 "github.com/stretchr/testify/require" 14 ) 15 16 type discoverySim struct { 17 mock *mockLocalListenersExec 18 wantDoneBeforeCancel bool 19 wantTargetGroups []model.TargetGroup 20 } 21 22 func (sim *discoverySim) run(t *testing.T) { 23 d, err := NewNetSocketDiscoverer(NetworkSocketConfig{Tags: "hostsocket net"}) 24 require.NoError(t, err) 25 26 d.ll = sim.mock 27 28 ctx, cancel := context.WithCancel(context.Background()) 29 tggs, done := sim.collectTargetGroups(t, ctx, d) 30 31 if sim.wantDoneBeforeCancel { 32 select { 33 case <-done: 34 default: 35 assert.Fail(t, "discovery hasn't finished before cancel") 36 } 37 } 38 assert.Equal(t, sim.wantTargetGroups, tggs) 39 40 cancel() 41 select { 42 case <-done: 43 case <-time.After(time.Second * 3): 44 assert.Fail(t, "discovery hasn't finished after cancel") 45 } 46 } 47 48 func (sim *discoverySim) collectTargetGroups(t *testing.T, ctx context.Context, d *NetDiscoverer) ([]model.TargetGroup, chan struct{}) { 49 50 in := make(chan []model.TargetGroup) 51 done := make(chan struct{}) 52 53 go func() { defer close(done); d.Discover(ctx, in) }() 54 55 timeout := time.Second * 5 56 var tggs []model.TargetGroup 57 58 func() { 59 for { 60 select { 61 case groups := <-in: 62 if tggs = append(tggs, groups...); len(tggs) == len(sim.wantTargetGroups) { 63 return 64 } 65 case <-done: 66 return 67 case <-time.After(timeout): 68 t.Logf("discovery timed out after %s", timeout) 69 return 70 } 71 } 72 }() 73 74 return tggs, done 75 }