github.com/newrelic/newrelic-client-go@v1.1.0/pkg/events/events_integration_test.go (about) 1 //go:build integration 2 // +build integration 3 4 package events 5 6 import ( 7 "context" 8 "testing" 9 "time" 10 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 14 mock "github.com/newrelic/newrelic-client-go/pkg/testhelpers" 15 ) 16 17 const ( 18 testBatchTimeout = 10 19 testBatchSize = 1 20 ) 21 22 // Used to create a variety of events for testing 23 type testEventData struct { 24 Event interface{} 25 marshal []byte 26 err error 27 } 28 29 var testEvents = []testEventData{ 30 { 31 Event: struct { 32 EventType string `json:"eventType"` 33 Amount float64 `json:"amount"` 34 }{ 35 EventType: "Purchase", 36 Amount: 123.45, 37 }, 38 marshal: []byte(`{"eventType":"Purchase","amount":123.45}`), 39 err: nil, 40 }, 41 { 42 Event: struct { 43 EventType string `json:"eventType"` 44 Data string `json:"data"` 45 }{ 46 EventType: "Dessert", 47 Data: "Biscuit cotton candy candy canes dessert muffin ice cream carrot cake. Marzipan lemon drops lemon drops. Candy cake toffee. Powder pie wafer bonbon dessert powder. Jujubes sweet chocolate bar gummies jelly-o. Wafer biscuit candy. Oat cake cookie jelly liquorice cupcake cupcake dragée cupcake wafer. Wafer chocolate bar marzipan powder jujubes cake oat cake sweet roll. Chocolate bar caramels jelly sugar plum donut. Candy donut tiramisu candy canes icing macaroon. Gummies macaroon jujubes candy gummies cotton candy sesame snaps dragée. Sweet roll icing cake pie sweet. Candy topping toffee. Sesame snaps cookie lemon drops wafer jujubes powder fruitcake.", 48 }, 49 marshal: []byte(`{"eventType":"Dessert","data":"Biscuit cotton candy candy canes dessert muffin ice cream carrot cake. Marzipan lemon drops lemon drops. Candy cake toffee. Powder pie wafer bonbon dessert powder. Jujubes sweet chocolate bar gummies jelly-o. Wafer biscuit candy. Oat cake cookie jelly liquorice cupcake cupcake dragée cupcake wafer. Wafer chocolate bar marzipan powder jujubes cake oat cake sweet roll. Chocolate bar caramels jelly sugar plum donut. Candy donut tiramisu candy canes icing macaroon. Gummies macaroon jujubes candy gummies cotton candy sesame snaps dragée. Sweet roll icing cake pie sweet. Candy topping toffee. Sesame snaps cookie lemon drops wafer jujubes powder fruitcake."}`), 50 err: nil, 51 }, 52 } 53 54 // Test: CreateEvent 55 func TestIntegrationEvents(t *testing.T) { 56 t.Parallel() 57 58 testAccountID, err := mock.GetTestAccountID() 59 if err != nil { 60 t.Skipf("%s", err) 61 } 62 63 client := newIntegrationTestClient(t) 64 65 for _, event := range testEvents { 66 err := client.CreateEvent(testAccountID, event.Event) 67 if event.err == nil { 68 assert.NoError(t, err) 69 } else { 70 assert.Equal(t, event.err, err) 71 } 72 } 73 } 74 75 func TestIntegrationEventsLicenseKey(t *testing.T) { 76 t.Parallel() 77 78 testAccountID, err := mock.GetTestAccountID() 79 if err != nil { 80 t.Skipf("%s", err) 81 } 82 83 tc := mock.NewIntegrationTestConfig(t) 84 tc.InsightsInsertKey = "" 85 client := New(tc) 86 87 for _, event := range testEvents { 88 err := client.CreateEvent(testAccountID, event.Event) 89 if event.err == nil { 90 assert.NoError(t, err) 91 } else { 92 assert.Equal(t, event.err, err) 93 } 94 } 95 } 96 97 func TestIntegrationEvents_BatchMode_Timeout(t *testing.T) { 98 t.Parallel() 99 100 testAccountID, err := mock.GetTestAccountID() 101 if err != nil { 102 t.Skipf("%s", err) 103 } 104 105 client := newIntegrationTestClient(t) 106 107 err = client.BatchMode(context.Background(), testAccountID, BatchConfigTimeout(testBatchTimeout)) 108 require.NoError(t, err) 109 110 for _, event := range testEvents { 111 err := client.EnqueueEvent(context.Background(), event.Event) 112 assert.NoError(t, err) 113 } 114 115 // Should of flushed 116 time.Sleep(time.Duration(2*testBatchTimeout) * time.Second) 117 assert.Equal(t, 0, len(client.eventQueue)) 118 } 119 120 func TestIntegrationEvents_BatchMode_Size(t *testing.T) { 121 t.Parallel() 122 123 testAccountID, err := mock.GetTestAccountID() 124 if err != nil { 125 t.Skipf("%s", err) 126 } 127 128 client := newIntegrationTestClient(t) 129 130 err = client.BatchMode(context.Background(), testAccountID, BatchConfigQueueSize(testBatchSize)) 131 require.NoError(t, err) 132 133 for _, event := range testEvents { 134 err := client.EnqueueEvent(context.Background(), event.Event) 135 assert.NoError(t, err) 136 } 137 138 // Should of flushed 139 time.Sleep(time.Duration(2*testBatchTimeout) * time.Second) 140 assert.Equal(t, 0, len(client.eventQueue)) 141 } 142 143 func TestIntegrationEvents_marshalEvent(t *testing.T) { 144 t.Parallel() 145 146 client := newIntegrationTestClient(t) 147 148 for _, event := range testEvents { 149 data, err := client.marshalEvent(event.Event) 150 if event.err == nil { 151 assert.NoError(t, err) 152 } else { 153 assert.Equal(t, event.err, err) 154 } 155 156 assert.Equal(t, event.marshal, *data) 157 } 158 } 159 160 func newIntegrationTestClient(t *testing.T) Events { 161 tc := mock.NewIntegrationTestConfig(t) 162 163 return New(tc) 164 }