Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/pkg/traces/servicegraphprocessor/store_test.go
4095 views
1
package servicegraphprocessor
2
3
import (
4
"fmt"
5
"testing"
6
"time"
7
8
"github.com/stretchr/testify/assert"
9
"github.com/stretchr/testify/require"
10
)
11
12
var noopUpsertCb storeCallback = func(e *edge) {}
13
14
func TestStore_upsertEdge(t *testing.T) {
15
const keyStr = "key"
16
17
var cbCallCount int
18
s := newStore(time.Hour, 1, func(e *edge) {
19
cbCallCount++
20
})
21
assert.Equal(t, 0, s.len())
22
23
_, err := s.upsertEdge(keyStr, func(e *edge) {})
24
require.NoError(t, err)
25
assert.Equal(t, 1, s.len())
26
assert.False(t, s.shouldEvictHead()) // ttl is set to 1h
27
assert.Equal(t, 0, cbCallCount)
28
29
e := getEdge(s, keyStr)
30
assert.NotNil(t, e)
31
assert.Equal(t, keyStr, e.key)
32
33
_, err = s.upsertEdge(keyStr+keyStr, func(e *edge) {})
34
assert.Error(t, err)
35
36
_, err = s.upsertEdge(keyStr, func(e *edge) {
37
e.clientService = "client"
38
e.serverService = "server"
39
e.expiration = 0 // expire immediately
40
})
41
require.NoError(t, err)
42
assert.Equal(t, 0, cbCallCount)
43
44
e = getEdge(s, keyStr)
45
assert.NotNil(t, e)
46
assert.Equal(t, "client", e.clientService)
47
assert.Equal(t, "server", e.serverService)
48
assert.True(t, s.shouldEvictHead())
49
50
s.evictHead()
51
assert.Equal(t, 0, s.len())
52
assert.Equal(t, 1, cbCallCount)
53
}
54
55
func TestStore_expire(t *testing.T) {
56
keys := map[string]bool{}
57
for i := 0; i < 100; i++ {
58
keys[fmt.Sprintf("key-%d", i)] = true
59
}
60
61
// all new keys are immediately expired.
62
s := newStore(-time.Second, 100, func(e *edge) {
63
assert.True(t, keys[e.key])
64
})
65
66
for key := range keys {
67
_, err := s.upsertEdge(key, noopUpsertCb)
68
require.NoError(t, err)
69
}
70
71
s.expire()
72
assert.Equal(t, 0, s.len())
73
}
74
75
func getEdge(s *store, k string) *edge {
76
ele, ok := s.m[k]
77
if !ok {
78
return nil
79
}
80
return ele.Value.(*edge)
81
}
82
83