...
1 package reaper
2
3 import (
4 "testing"
5 "time"
6
7 "github.com/cybertec-postgresql/pgwatch/v3/internal/metrics"
8 "github.com/stretchr/testify/assert"
9 )
10
11 func TestInstanceMetricCache_PutAndGet(t *testing.T) {
12 cache := NewInstanceMetricCache()
13
14
15 key := "test_key"
16 data := metrics.Measurements{metrics.Measurement{"test_key": 42}}
17
18
19 cache.Put(key, data)
20 data.Touch()
21
22
23 retrievedData := cache.Get(key, time.Second)
24 assert.NotNil(t, retrievedData, "Expected data to be retrieved")
25 assert.LessOrEqual(t, data.GetEpoch()-retrievedData.GetEpoch(), int64(time.Second), "Epoch times should be close")
26
27
28 invalidKey := "invalid_key"
29 retrievedData = cache.Get(invalidKey, time.Second)
30 assert.Nil(t, retrievedData, "Expected nil for invalid key")
31
32
33 retrievedData = cache.Get(key, -time.Second)
34 assert.Nil(t, retrievedData, "Expected nil for expired data")
35
36
37 retrievedData = cache.Get("", time.Second)
38 assert.Nil(t, retrievedData, "Expected nil for empty key")
39 }
40
41 func TestInstanceMetricCache_PutEmptyData(t *testing.T) {
42 cache := NewInstanceMetricCache()
43
44
45 cache.Put("test_key", metrics.Measurements{})
46 retrievedData := cache.Get("test_key", time.Second)
47 assert.Nil(t, retrievedData, "Expected nil for empty data")
48
49 data := metrics.Measurements{metrics.Measurement{}}
50
51 cache.Put("", data)
52 retrievedData = cache.Get("", time.Second)
53 assert.Nil(t, retrievedData, "Expected nil for empty key")
54 }
55
56 func TestInstanceMetricCache_Concurrency(t *testing.T) {
57 cache := NewInstanceMetricCache()
58
59
60 key := "test_key"
61 data := metrics.Measurements{metrics.Measurement{}}
62 data.Touch()
63
64
65 done := make(chan bool)
66 go func() {
67 cache.Put(key, data)
68 done <- true
69 }()
70 go func() {
71 _ = cache.Get(key, time.Second)
72 done <- true
73 }()
74
75
76 <-done
77 <-done
78
79
80 retrievedData := cache.Get(key, time.Second)
81 assert.NotNil(t, retrievedData, "Expected data to be retrieved after concurrent access")
82 }
83