github.com/SAP/jenkins-library@v1.362.0/cmd/influxWriteData_test.go (about)

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