1
0
Fork 0
telegraf/plugins/processors/snmp_lookup/store_test.go
Daniel Baumann 4978089aab
Adding upstream version 1.34.4.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-05-24 07:26:29 +02:00

99 lines
2.4 KiB
Go

package snmp_lookup
import (
"sync/atomic"
"testing"
"time"
"github.com/stretchr/testify/require"
"github.com/influxdata/telegraf/config"
)
func TestAddBacklog(t *testing.T) {
var notifyCount atomic.Uint64
s := newStore(0, 0, 0, 0)
s.update = func(string) *tagMap { return nil }
s.notify = func(string, *tagMap) { notifyCount.Add(1) }
defer s.destroy()
s.Lock()
require.Empty(t, s.deferredUpdates)
s.Unlock()
s.addBacklog("127.0.0.1", time.Now().Add(1*time.Second))
s.Lock()
require.Contains(t, s.deferredUpdates, "127.0.0.1")
s.Unlock()
require.Eventually(t, func() bool {
return notifyCount.Load() == 1
}, 3*time.Second, 100*time.Millisecond)
s.Lock()
require.Empty(t, s.deferredUpdates)
s.Unlock()
}
func TestLookup(t *testing.T) {
tmr := tagMapRows{
"0": {"ifName": "eth0"},
"1": {"ifName": "eth1"},
}
minUpdateInterval := 50 * time.Millisecond
cacheTTL := config.Duration(2 * minUpdateInterval)
var notifyCount atomic.Uint64
s := newStore(defaultCacheSize, cacheTTL, defaultParallelLookups, config.Duration(minUpdateInterval))
s.update = func(string) *tagMap {
return &tagMap{
created: time.Now(),
rows: tmr,
}
}
s.notify = func(string, *tagMap) { notifyCount.Add(1) }
defer s.destroy()
require.Equal(t, 0, s.cache.Len())
// Initial lookup should cache entries
s.lookup("127.0.0.1", "999")
require.Eventually(t, func() bool {
return s.cache.Contains("127.0.0.1")
}, time.Second, time.Millisecond)
require.EqualValues(t, 1, notifyCount.Load())
entries, _ := s.cache.Get("127.0.0.1")
require.Equal(t, tmr, entries.rows)
// Second lookup should be deferred minUpdateInterval
s.Lock()
require.Empty(t, s.deferredUpdates)
s.Unlock()
s.lookup("127.0.0.1", "999")
require.EqualValues(t, 2, notifyCount.Load())
s.Lock()
require.Contains(t, s.deferredUpdates, "127.0.0.1")
require.WithinDuration(t, time.Now(), s.deferredUpdates["127.0.0.1"], minUpdateInterval)
s.Unlock()
// Wait until resolved
require.Eventually(t, func() bool {
return notifyCount.Load() == 3
}, time.Second, time.Millisecond)
s.Lock()
require.Empty(t, s.deferredUpdates)
s.Unlock()
time.Sleep(minUpdateInterval)
// Third lookup should directly update
s.lookup("127.0.0.1", "999")
_, inflight := s.inflight.Load("127.0.0.1")
require.True(t, inflight)
require.Eventually(t, func() bool {
return notifyCount.Load() == 4
}, time.Second, time.Millisecond)
}