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  }