github.com/ddev/ddev@v1.23.2-0.20240519125000-d824ffe36ff3/pkg/amplitude/storages/delayed_transmission_event_storage_test.go (about) 1 package storages_test 2 3 import ( 4 "path/filepath" 5 "testing" 6 "time" 7 8 "github.com/amplitude/analytics-go/amplitude/types" 9 "github.com/ddev/ddev/pkg/amplitude/loggers" 10 "github.com/ddev/ddev/pkg/amplitude/storages" 11 "github.com/stretchr/testify/suite" 12 ) 13 14 func TestDelayedTransmissionEventStorage(t *testing.T) { 15 suite.Run(t, new(DelayedTransmissionEventStorageSuite)) 16 } 17 18 type DelayedTransmissionEventStorageSuite struct { 19 suite.Suite 20 } 21 22 func (t *DelayedTransmissionEventStorageSuite) TestSimple() { 23 event1 := &types.StorageEvent{Event: &types.Event{EventType: "event-A"}} 24 event2 := &types.StorageEvent{Event: &types.Event{EventType: "event-B"}} 25 event3 := &types.StorageEvent{Event: &types.Event{EventType: "event-C"}} 26 event4 := &types.StorageEvent{Event: &types.Event{EventType: "event-D"}} 27 28 require := t.Require() 29 30 s := storages.NewDelayedTransmissionEventStorage(loggers.NewDdevLogger(true, true), 0, 0, filepath.Join(t.T().TempDir(), `TestSimple.cache`)) 31 s.PushNew(event1) 32 require.Equal(1, s.Count(time.Time{})) 33 s.PushNew(event2) 34 require.Equal(2, s.Count(time.Time{})) 35 s.PushNew(event3) 36 require.Equal(3, s.Count(time.Time{})) 37 s.PushNew(event4) 38 require.Equal(4, s.Count(time.Time{})) 39 40 chunk := s.Pull(3, time.Time{}) 41 require.Equal(1, s.Count(time.Time{})) 42 require.Equal([]*types.StorageEvent{event1, event2, event3}, chunk) 43 44 s.PushNew(event2) 45 require.Equal(2, s.Count(time.Time{})) 46 s.PushNew(event3) 47 require.Equal(3, s.Count(time.Time{})) 48 s.PushNew(event1) 49 require.Equal(4, s.Count(time.Time{})) 50 51 chunk = s.Pull(3, time.Time{}) 52 require.Equal(1, s.Count(time.Time{})) 53 require.Equal([]*types.StorageEvent{event4, event2, event3}, chunk) 54 55 chunk = s.Pull(3, time.Time{}) 56 require.Equal(0, s.Count(time.Time{})) 57 require.Equal([]*types.StorageEvent{event1}, chunk) 58 59 chunk = s.Pull(3, time.Time{}) 60 require.Equal(0, s.Count(time.Time{})) 61 require.Empty(chunk) 62 } 63 64 func (t *DelayedTransmissionEventStorageSuite) TestReturnBack() { 65 event1 := &types.StorageEvent{Event: &types.Event{EventType: "event-A"}} 66 event2 := &types.StorageEvent{Event: &types.Event{EventType: "event-B"}} 67 event3 := &types.StorageEvent{Event: &types.Event{EventType: "event-C"}} 68 event4 := &types.StorageEvent{Event: &types.Event{EventType: "event-D"}} 69 event5 := &types.StorageEvent{Event: &types.Event{EventType: "event-E"}} 70 71 require := t.Require() 72 73 s := storages.NewDelayedTransmissionEventStorage(loggers.NewDdevLogger(true, true), 0, 0, filepath.Join(t.T().TempDir(), `TestReturnBack.cache`)) 74 s.PushNew(event1) 75 s.PushNew(event2) 76 s.PushNew(event3) 77 s.PushNew(event4) 78 s.PushNew(event5) 79 80 require.Equal(5, s.Count(time.Time{})) 81 chunk := s.Pull(4, time.Time{}) 82 require.Equal([]*types.StorageEvent{event1, event2, event3, event4}, chunk) 83 84 now := time.Now() 85 s.ReturnBack(event2, event3, event4, event1) 86 87 require.Equal(5, s.Count(now)) 88 chunk = s.Pull(4, now) 89 require.Equal([]*types.StorageEvent{event2, event3, event4, event1}, chunk) 90 91 require.Equal(1, s.Count(now)) 92 chunk = s.Pull(4, now) 93 require.Equal([]*types.StorageEvent{event5}, chunk) 94 95 require.Equal(0, s.Count(now)) 96 chunk = s.Pull(4, now) 97 require.Empty(chunk) 98 } 99 100 func (t *DelayedTransmissionEventStorageSuite) TestCache() { 101 event1 := &types.StorageEvent{Event: &types.Event{EventType: "event-A"}} 102 event2 := &types.StorageEvent{Event: &types.Event{EventType: "event-B"}} 103 event3 := &types.StorageEvent{Event: &types.Event{EventType: "event-C"}} 104 event4 := &types.StorageEvent{Event: &types.Event{EventType: "event-D"}} 105 event5 := &types.StorageEvent{Event: &types.Event{EventType: "event-E"}} 106 107 cacheFile := filepath.Join(t.T().TempDir(), `TestCache.cache`) 108 109 require := t.Require() 110 111 s1 := storages.NewDelayedTransmissionEventStorage(loggers.NewDdevLogger(true, true), 0, 0, cacheFile) 112 s1.PushNew(event1) 113 s1.PushNew(event2) 114 s1.PushNew(event3) 115 s1.PushNew(event4) 116 s1.PushNew(event5) 117 118 require.Equal(5, s1.Count(time.Time{})) 119 chunk := s1.Pull(2, time.Time{}) 120 require.Equal([]*types.StorageEvent{event1, event2}, chunk) 121 122 s2 := storages.NewDelayedTransmissionEventStorage(loggers.NewDdevLogger(true, true), 0, 0, cacheFile) 123 require.Equal(3, s2.Count(time.Time{})) 124 chunk = s2.Pull(2, time.Time{}) 125 require.Equal([]*types.StorageEvent{event3, event4}, chunk) 126 }