github.com/galamsiva2020/kubernetes-heapster-monitoring@v0.0.0-20210823134957-3c1baa7c1e70/events/sinks/elasticsearch/driver_test.go (about)

     1  // Copyright 2015 Google Inc. All Rights Reserved.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package elasticsearch
    16  
    17  import (
    18  	"encoding/json"
    19  	"fmt"
    20  	"testing"
    21  	"time"
    22  
    23  	"github.com/stretchr/testify/assert"
    24  	kube_api "k8s.io/api/core/v1"
    25  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    26  	esCommon "k8s.io/heapster/common/elasticsearch"
    27  	"k8s.io/heapster/events/core"
    28  )
    29  
    30  type dataSavedToES struct {
    31  	data string
    32  }
    33  
    34  type fakeESSink struct {
    35  	core.EventSink
    36  	savedData []dataSavedToES
    37  }
    38  
    39  var FakeESSink fakeESSink
    40  
    41  func SaveDataIntoES_Stub(date time.Time, sinkData []interface{}) error {
    42  	for _, data := range sinkData {
    43  		jsonItems, err := json.Marshal(data)
    44  		if err != nil {
    45  			return fmt.Errorf("failed to transform the items to json : %s", err)
    46  		}
    47  		FakeESSink.savedData = append(FakeESSink.savedData, dataSavedToES{string(jsonItems)})
    48  	}
    49  	return nil
    50  }
    51  
    52  // Returns a fake ES sink.
    53  func NewFakeSink() fakeESSink {
    54  	savedData := make([]dataSavedToES, 0)
    55  	return fakeESSink{
    56  		&elasticSearchSink{
    57  			saveData:  SaveDataIntoES_Stub,
    58  			flushData: func() error { return nil },
    59  			esSvc: esCommon.ElasticSearchService{
    60  				EsClient:    esCommon.NewMockClient(),
    61  				ClusterName: esCommon.ESClusterName,
    62  			},
    63  		},
    64  		savedData,
    65  	}
    66  }
    67  
    68  func TestStoreDataEmptyInput(t *testing.T) {
    69  	fakeSink := NewFakeSink()
    70  	dataBatch := core.EventBatch{}
    71  	fakeSink.ExportEvents(&dataBatch)
    72  	assert.Equal(t, 0, len(fakeSink.savedData))
    73  }
    74  
    75  func TestStoreMultipleDataInput(t *testing.T) {
    76  	fakeSink := NewFakeSink()
    77  	timestamp := time.Now()
    78  	now := time.Now()
    79  	event1 := kube_api.Event{
    80  		Message:        "event1",
    81  		Count:          100,
    82  		LastTimestamp:  metav1.NewTime(now),
    83  		FirstTimestamp: metav1.NewTime(now),
    84  	}
    85  	event2 := kube_api.Event{
    86  		Message:        "event2",
    87  		Count:          101,
    88  		LastTimestamp:  metav1.NewTime(now),
    89  		FirstTimestamp: metav1.NewTime(now),
    90  	}
    91  	data := core.EventBatch{
    92  		Timestamp: timestamp,
    93  		Events: []*kube_api.Event{
    94  			&event1,
    95  			&event2,
    96  		},
    97  	}
    98  	fakeSink.ExportEvents(&data)
    99  	// expect msg string
   100  	assert.Equal(t, 2, len(FakeESSink.savedData))
   101  
   102  	var expectMsgTemplate = [2]string{
   103  		`{"Count":100,"Metadata":{"creationTimestamp":null},"InvolvedObject":{},"Source":{},"FirstOccurrenceTimestamp":%s,"LastOccurrenceTimestamp":%s,"Message":"event1","Reason":"","Type":"","EventTags":{"cluster_name":"default","eventID":"","hostname":""}}`,
   104  		`{"Count":101,"Metadata":{"creationTimestamp":null},"InvolvedObject":{},"Source":{},"FirstOccurrenceTimestamp":%s,"LastOccurrenceTimestamp":%s,"Message":"event2","Reason":"","Type":"","EventTags":{"cluster_name":"default","eventID":"","hostname":""}}`,
   105  	}
   106  
   107  	msgsString := fmt.Sprintf("%s", FakeESSink.savedData)
   108  	ts, _ := json.Marshal(metav1.NewTime(now).Time.UTC())
   109  
   110  	for _, mgsTemplate := range expectMsgTemplate {
   111  		expectMsg := fmt.Sprintf(mgsTemplate, ts, ts)
   112  		assert.Contains(t, msgsString, expectMsg)
   113  	}
   114  
   115  	FakeESSink = fakeESSink{}
   116  }