Path: blob/main/pkg/traces/servicegraphprocessor/store_test.go
4095 views
package servicegraphprocessor12import (3"fmt"4"testing"5"time"67"github.com/stretchr/testify/assert"8"github.com/stretchr/testify/require"9)1011var noopUpsertCb storeCallback = func(e *edge) {}1213func TestStore_upsertEdge(t *testing.T) {14const keyStr = "key"1516var cbCallCount int17s := newStore(time.Hour, 1, func(e *edge) {18cbCallCount++19})20assert.Equal(t, 0, s.len())2122_, err := s.upsertEdge(keyStr, func(e *edge) {})23require.NoError(t, err)24assert.Equal(t, 1, s.len())25assert.False(t, s.shouldEvictHead()) // ttl is set to 1h26assert.Equal(t, 0, cbCallCount)2728e := getEdge(s, keyStr)29assert.NotNil(t, e)30assert.Equal(t, keyStr, e.key)3132_, err = s.upsertEdge(keyStr+keyStr, func(e *edge) {})33assert.Error(t, err)3435_, err = s.upsertEdge(keyStr, func(e *edge) {36e.clientService = "client"37e.serverService = "server"38e.expiration = 0 // expire immediately39})40require.NoError(t, err)41assert.Equal(t, 0, cbCallCount)4243e = getEdge(s, keyStr)44assert.NotNil(t, e)45assert.Equal(t, "client", e.clientService)46assert.Equal(t, "server", e.serverService)47assert.True(t, s.shouldEvictHead())4849s.evictHead()50assert.Equal(t, 0, s.len())51assert.Equal(t, 1, cbCallCount)52}5354func TestStore_expire(t *testing.T) {55keys := map[string]bool{}56for i := 0; i < 100; i++ {57keys[fmt.Sprintf("key-%d", i)] = true58}5960// all new keys are immediately expired.61s := newStore(-time.Second, 100, func(e *edge) {62assert.True(t, keys[e.key])63})6465for key := range keys {66_, err := s.upsertEdge(key, noopUpsertCb)67require.NoError(t, err)68}6970s.expire()71assert.Equal(t, 0, s.len())72}7374func getEdge(s *store, k string) *edge {75ele, ok := s.m[k]76if !ok {77return nil78}79return ele.Value.(*edge)80}818283