-
Notifications
You must be signed in to change notification settings - Fork 4
/
event_manager_test.go
95 lines (81 loc) · 2.55 KB
/
event_manager_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package devcycle
import (
"fmt"
"log"
"testing"
"time"
"github.com/stretchr/testify/require"
"github.com/jarcoal/httpmock"
)
func TestEventManager_QueueEvent(t *testing.T) {
sdkKey, _ := httpConfigMock(200)
c, err := NewClient(sdkKey, &Options{})
require.NoError(t, err)
defer c.Close()
_, err = c.Track(User{UserId: "j_test", DeviceModel: "testing"},
Event{Target: "customevent", Type_: "event"})
if err != nil {
t.Fatal(err)
}
}
func TestEventManager_QueueEvent_100_DropEvent(t *testing.T) {
sdkKey, _ := httpConfigMock(200)
c, err := NewClient(sdkKey, &Options{MaxEventQueueSize: 100, FlushEventQueueSize: 10})
require.NoError(t, err)
defer c.Close()
errored := false
for i := 0; i < 1000; i++ {
log.Println(i)
_, err = c.Track(User{UserId: "j_test", DeviceModel: "testing"},
Event{Target: "customevent"})
if err != nil {
errored = true
log.Println(err)
break
}
}
if !errored {
t.Fatal("Did not get dropped event warning.")
}
}
func TestEventManager_QueueEvent_100_Flush(t *testing.T) {
sdkKey, _ := httpConfigMock(200)
c, err := NewClient(sdkKey, &Options{
MaxEventQueueSize: 100,
FlushEventQueueSize: 10,
ConfigPollingIntervalMS: time.Second,
EventFlushIntervalMS: time.Second,
})
require.NoError(t, err)
defer c.Close()
require.Eventually(t, func() bool {
return c.isInitialized && c.hasConfig()
}, 1*time.Second, 100*time.Millisecond)
// Track up to FlushEventQueueSize events
for i := 0; i < c.DevCycleOptions.FlushEventQueueSize; i++ {
_, err = c.Track(User{UserId: "j_test", DeviceModel: "testing"},
Event{Target: "customevent", Type_: "event"})
if err != nil {
t.Fatalf("Error tracking event: %v", err)
}
}
// Wait for raw event queue to drain
require.Eventually(t, func() bool {
queueLength, _ := c.eventQueue.internalQueue.UserQueueLength()
return queueLength >= 10
}, 1*time.Second, 100*time.Millisecond)
// Track one more event to trigger an automatic flush
_, err = c.Track(User{UserId: "j_test", DeviceModel: "testing"}, Event{Target: "customevent", Type_: "event"})
if err != nil {
t.Fatalf("Error tracking event: %v", err)
}
// Wait for raw event queue to drain
require.Eventually(t, func() bool {
flushed, reported, dropped := c.eventQueue.Metrics()
return flushed == 1 && reported == 1 && dropped == 0
}, 1*time.Second, 100*time.Millisecond)
require.Eventually(t, func() bool {
fmt.Println(httpmock.GetCallCountInfo())
return httpmock.GetCallCountInfo()["POST https://events.devcycle.com/v1/events/batch"] >= 1
}, 1*time.Second, 100*time.Millisecond)
}