github.com/galamsiva2020/kubernetes-heapster-monitoring@v0.0.0-20210823134957-3c1baa7c1e70/metrics/sinks/log/log_sink_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 log 16 17 import ( 18 "fmt" 19 "strings" 20 "testing" 21 "time" 22 23 "github.com/stretchr/testify/assert" 24 25 "k8s.io/heapster/metrics/core" 26 ) 27 28 func TestSimpleWrite(t *testing.T) { 29 now := time.Now() 30 batch := core.DataBatch{ 31 Timestamp: now, 32 MetricSets: make(map[string]*core.MetricSet), 33 } 34 batch.MetricSets["pod1"] = &core.MetricSet{ 35 Labels: map[string]string{"bzium": "hocuspocus"}, 36 MetricValues: map[string]core.MetricValue{ 37 "m1": { 38 ValueType: core.ValueInt64, 39 MetricType: core.MetricGauge, 40 IntValue: 31415, 41 }, 42 }, 43 LabeledMetrics: []core.LabeledMetric{ 44 { 45 Name: "lm", 46 MetricValue: core.MetricValue{ 47 MetricType: core.MetricGauge, 48 ValueType: core.ValueInt64, 49 IntValue: 279, 50 }, 51 Labels: map[string]string{ 52 "disk": "hard", 53 }, 54 }, 55 }, 56 } 57 log := batchToString(&batch) 58 59 assert.True(t, strings.Contains(log, "31415")) 60 assert.True(t, strings.Contains(log, "m1")) 61 assert.True(t, strings.Contains(log, "bzium")) 62 assert.True(t, strings.Contains(log, "hocuspocus")) 63 assert.True(t, strings.Contains(log, "pod1")) 64 assert.True(t, strings.Contains(log, "279")) 65 assert.True(t, strings.Contains(log, "disk")) 66 assert.True(t, strings.Contains(log, "hard")) 67 assert.True(t, strings.Contains(log, fmt.Sprintf("%s", now))) 68 } 69 70 func TestSortedOutput(t *testing.T) { 71 const ( 72 label1 = "abcLabel" 73 label2 = "xyzLabel" 74 pod1 = "pod1" 75 pod2 = "pod2" 76 metric1 = "metricA" 77 metric2 = "metricB" 78 ) 79 metricVal := core.MetricValue{ 80 ValueType: core.ValueInt64, 81 MetricType: core.MetricGauge, 82 IntValue: 31415, 83 } 84 metricSet := func(pod string) *core.MetricSet { 85 return &core.MetricSet{ 86 Labels: map[string]string{label2 + pod: pod, label1 + pod: pod}, 87 MetricValues: map[string]core.MetricValue{ 88 metric2 + pod: metricVal, 89 metric1 + pod: metricVal, 90 }, 91 LabeledMetrics: []core.LabeledMetric{}, 92 } 93 } 94 now := time.Now() 95 batch := core.DataBatch{ 96 Timestamp: now, 97 MetricSets: map[string]*core.MetricSet{ 98 pod2: metricSet(pod2), 99 pod1: metricSet(pod1), 100 }, 101 } 102 log := batchToString(&batch) 103 sorted := []string{ 104 pod1, 105 label1 + pod1, 106 label2 + pod1, 107 metric1 + pod1, 108 metric2 + pod1, 109 pod2, 110 label1 + pod2, 111 label2 + pod2, 112 metric1 + pod2, 113 metric2 + pod2, 114 } 115 var ( 116 previous string 117 previousIndex int 118 ) 119 for _, metric := range sorted { 120 metricIndex := strings.Index(log, metric) 121 assert.NotEqual(t, -1, metricIndex, "%q not found", metric) 122 if previous != "" { 123 assert.True(t, previousIndex < metricIndex, "%q should be before %q", previous, metric) 124 } 125 previous = metric 126 previousIndex = metricIndex 127 } 128 }