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 }