github.com/xgoffin/jenkins-library@v1.154.0/cmd/influxWriteData_test.go (about)

     1  package cmd
     2  
     3  import (
     4  	"errors"
     5  	"testing"
     6  
     7  	"github.com/SAP/jenkins-library/pkg/influx/mocks"
     8  	"github.com/stretchr/testify/assert"
     9  	"github.com/stretchr/testify/mock"
    10  )
    11  
    12  func TestWriteData(t *testing.T) {
    13  	options := &influxWriteDataOptions{
    14  		ServerURL:    "http://localhost:8086",
    15  		AuthToken:    "authToken",
    16  		Bucket:       "piper",
    17  		Organization: "org",
    18  	}
    19  	errString := "some error"
    20  	errWriteData := errors.New(errString)
    21  	tests := []struct {
    22  		name          string
    23  		dataMap       string
    24  		dataMapTags   string
    25  		writeDataErr  error
    26  		errExpected   bool
    27  		errIncludeStr string
    28  	}{
    29  		{
    30  			"Test writing metrics with correct json data - success",
    31  			`{"series_1": {"field_a": 11, "field_b": 12}, "series_2": {"field_c": 21, "field_d": 22}}`,
    32  			`{"series_1": {"tag_a": "a", "tag_b": "b"}, "series_2": {"tag_c": "c", "tag_d": "d"}}`,
    33  			nil,
    34  			false,
    35  			"",
    36  		},
    37  		{
    38  			"Test writing metrics with invalid dataMap",
    39  			`"series_1": {"field_a": 11, "field_b": 12}, "series_2": {"field_c": 21, "field_d": 22}`,
    40  			`{"series_1": {"tag_a": "a", "tag_b": "b"}, "series_2": {"tag_c": "c", "tag_d": "d"}}`,
    41  			nil,
    42  			false,
    43  			"Failed to unmarshal dataMap:",
    44  		},
    45  		{
    46  			"Test writing metrics with invalid dataMapTags",
    47  			`{"series_1": {"field_a": 11, "field_b": 12}, "series_2": {"field_c": 21, "field_d": 22}}`,
    48  			`{"series_1": {"tag_a": 2, "tag_b": "b"}, "series_2": {"tag_c": "c", "tag_d": "d"}}`,
    49  			nil,
    50  			false,
    51  			"Failed to unmarshal dataMapTags:",
    52  		},
    53  		{
    54  			"Test writing metrics with correct json data - failed",
    55  			`{"series_1": {"field_a": 11, "field_b": 12}, "series_2": {"field_c": 21, "field_d": 22}}`,
    56  			`{"series_1": {"tag_a": "a", "tag_b": "b"}, "series_2": {"tag_c": "c", "tag_d": "d"}}`,
    57  			errWriteData,
    58  			true,
    59  			errString,
    60  		},
    61  	}
    62  
    63  	for _, tt := range tests {
    64  		t.Run(tt.name, func(t *testing.T) {
    65  			influxClientMock := &mocks.Client{}
    66  			writeAPIBlockingMock := &mocks.WriteAPIBlocking{}
    67  			writeAPIBlockingMock.On("WritePoint", mock.Anything, mock.Anything).Return(tt.writeDataErr)
    68  			influxClientMock.On("WriteAPIBlocking", mock.Anything, mock.Anything).Return(writeAPIBlockingMock)
    69  			options.DataMap = tt.dataMap
    70  			options.DataMapTags = tt.dataMapTags
    71  			err := writeData(options, influxClientMock)
    72  			if err != nil {
    73  				assert.Contains(t, err.Error(), tt.errIncludeStr)
    74  			}
    75  		})
    76  	}
    77  }