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  }