mirror of
https://github.com/netbirdio/netbird.git
synced 2026-08-25 09:01:29 +02:00
56 lines
1.4 KiB
Go
56 lines
1.4 KiB
Go
package cache_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/netbirdio/netbird/management/server/cache"
|
|
)
|
|
|
|
func assertGetDelConsumedOnce(ctx context.Context, t *testing.T, stores []cache.Store, key, value string) {
|
|
t.Helper()
|
|
|
|
const getDelAttempts = 64
|
|
|
|
type getDelResult struct {
|
|
value string
|
|
found bool
|
|
err error
|
|
}
|
|
|
|
start := make(chan struct{})
|
|
results := make(chan getDelResult, getDelAttempts)
|
|
for i := range getDelAttempts {
|
|
cacheStore := stores[i%len(stores)]
|
|
go func() {
|
|
<-start
|
|
value, found, err := cacheStore.GetDel(ctx, key)
|
|
results <- getDelResult{value: value, found: found, err: err}
|
|
}()
|
|
}
|
|
close(start)
|
|
|
|
consumers := 0
|
|
for range getDelAttempts {
|
|
result := <-results
|
|
require.NoError(t, result.err, "concurrent GetDel failed")
|
|
if !result.found {
|
|
continue
|
|
}
|
|
consumers++
|
|
require.Equal(t, value, result.value, "consumed value doesn't match testing data")
|
|
}
|
|
require.Equal(t, 1, consumers, "expected exactly one consumer")
|
|
}
|
|
|
|
func assertGetDelMisses(ctx context.Context, t *testing.T, cacheStore cache.Store, key string) {
|
|
t.Helper()
|
|
|
|
value, found, err := cacheStore.GetDel(ctx, key)
|
|
require.NoError(t, err, "GetDel on a missing key should not error")
|
|
require.False(t, found, "GetDel should not find key %q, got value %q", key, value)
|
|
require.Empty(t, value, "GetDel should return an empty value when not found")
|
|
}
|