github.com/galamsiva2020/kubernetes-heapster-monitoring@v0.0.0-20210823134957-3c1baa7c1e70/metrics/sinks/statsd/etsystatsd_formatter_test.go (about)

     1  // Copyright 2016 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 statsd
    16  
    17  import (
    18  	"fmt"
    19  	"github.com/stretchr/testify/assert"
    20  	"k8s.io/heapster/metrics/core"
    21  	"testing"
    22  )
    23  
    24  var (
    25  	etsyPrefix               = "testprefix"
    26  	etsyMetricName           = "testmetric"
    27  	etsyHostName             = "testhost"
    28  	etsyNamespace            = "testnamespace"
    29  	etsyPodName              = "testpodname"
    30  	etsyContainerName        = "testcontainername"
    31  	etsyResourceName         = "testresource"
    32  	etsyUserLabels           = "test_tag_1:val1,test_tag_2:val2,test_tag_3:val3"
    33  	expectedLowerCamelLabels = "testTag1.val1.testTag2.val2.testTag3.val3"
    34  	expectedUpperCamelLabels = "TestTag1.val1.TestTag2.val2.TestTag3.val3"
    35  )
    36  
    37  var etsyLabels = map[string]string{
    38  	core.LabelHostname.Key:      etsyHostName,
    39  	core.LabelNamespaceName.Key: etsyNamespace,
    40  	core.LabelPodName.Key:       etsyPodName,
    41  	core.LabelContainerName.Key: etsyContainerName,
    42  	core.LabelLabels.Key:        etsyUserLabels,
    43  }
    44  
    45  var etsyMetricValue = core.MetricValue{
    46  	MetricType: core.MetricGauge,
    47  	ValueType:  core.ValueInt64,
    48  	IntValue:   1000,
    49  }
    50  
    51  var renameLabels = map[string]string{"old1": "new1", "old2": "new_label_2", "old3": "new_label_3"}
    52  var defaultCustomizer = LabelCustomizer{renameLabels, DefaultLabelStyle}
    53  var lowerCamelCustomizer = LabelCustomizer{renameLabels, SnakeToLowerCamel}
    54  var upperCamelCustomizer = LabelCustomizer{renameLabels, SnakeToUpperCamel}
    55  
    56  var defaultCustomize = defaultCustomizer.Customize
    57  var lowerCamelCustomize = lowerCamelCustomizer.Customize
    58  var upperCamelCustomize = upperCamelCustomizer.Customize
    59  
    60  func TestEtsyFormatUnknownType(t *testing.T) {
    61  	etsyLabels[core.LabelMetricSetType.Key] = "UnknownMetricSetType"
    62  	expectedMsg := ""
    63  
    64  	formatter := NewEtsystatsdFormatter()
    65  	assert.NotNil(t, formatter)
    66  
    67  	msg, err := formatter.Format(etsyPrefix, etsyMetricName, etsyLabels, defaultCustomize, etsyMetricValue)
    68  	assert.Error(t, err)
    69  	assert.Equal(t, expectedMsg, msg)
    70  }
    71  
    72  func TestEtsyFormatPodContainerType(t *testing.T) {
    73  	etsyLabels[core.LabelMetricSetType.Key] = core.MetricSetTypePodContainer
    74  	expectedMsg := fmt.Sprintf("%s.node.%s.namespace.%s.pod.%s.container.%s.%s.%s:%v|g",
    75  		etsyPrefix, etsyHostName, etsyNamespace, etsyPodName, etsyContainerName, expectedLowerCamelLabels, etsyMetricName, etsyMetricValue.IntValue)
    76  
    77  	formatter := NewEtsystatsdFormatter()
    78  	assert.NotNil(t, formatter)
    79  
    80  	msg, err := formatter.Format(etsyPrefix, etsyMetricName, etsyLabels, lowerCamelCustomize, etsyMetricValue)
    81  	assert.NoError(t, err)
    82  	assert.Equal(t, expectedMsg, msg)
    83  }
    84  
    85  func TestEtsyFormatSystemContainerType(t *testing.T) {
    86  	etsyLabels[core.LabelMetricSetType.Key] = core.MetricSetTypeSystemContainer
    87  	expectedMsg := fmt.Sprintf("%s.node.%s.sys-container.%s.%s.%s:%v|g",
    88  		etsyPrefix, etsyHostName, etsyContainerName, expectedUpperCamelLabels, etsyMetricName, etsyMetricValue.IntValue)
    89  
    90  	formatter := NewEtsystatsdFormatter()
    91  	assert.NotNil(t, formatter)
    92  
    93  	msg, err := formatter.Format(etsyPrefix, etsyMetricName, etsyLabels, upperCamelCustomize, etsyMetricValue)
    94  	assert.NoError(t, err)
    95  	assert.Equal(t, expectedMsg, msg)
    96  }
    97  
    98  func TestEtsyFormatPodType(t *testing.T) {
    99  	etsyLabels[core.LabelMetricSetType.Key] = core.MetricSetTypePod
   100  	expectedMsg := fmt.Sprintf("%s.node.%s.namespace.%s.pod.%s.%s.%s:%v|g",
   101  		etsyPrefix, etsyHostName, etsyNamespace, etsyPodName, expectedLowerCamelLabels, etsyMetricName, etsyMetricValue.IntValue)
   102  
   103  	formatter := NewEtsystatsdFormatter()
   104  	assert.NotNil(t, formatter)
   105  
   106  	msg, err := formatter.Format(etsyPrefix, etsyMetricName, etsyLabels, lowerCamelCustomize, etsyMetricValue)
   107  	assert.NoError(t, err)
   108  	assert.Equal(t, expectedMsg, msg)
   109  }
   110  
   111  func TestEtsyFormatNamespaceType(t *testing.T) {
   112  	etsyLabels[core.LabelMetricSetType.Key] = core.MetricSetTypeNamespace
   113  	expectedMsg := fmt.Sprintf("%s.namespace.%s.%s.%s:%v|g",
   114  		etsyPrefix, etsyNamespace, expectedUpperCamelLabels, etsyMetricName, etsyMetricValue.IntValue)
   115  
   116  	formatter := NewEtsystatsdFormatter()
   117  	assert.NotNil(t, formatter)
   118  
   119  	msg, err := formatter.Format(etsyPrefix, etsyMetricName, etsyLabels, upperCamelCustomize, etsyMetricValue)
   120  	assert.NoError(t, err)
   121  	assert.Equal(t, expectedMsg, msg)
   122  }
   123  
   124  func TestEtsyFormatNodeType(t *testing.T) {
   125  	etsyLabels[core.LabelMetricSetType.Key] = core.MetricSetTypeNode
   126  	expectedMsg := fmt.Sprintf("%s.node.%s.%s.%s:%v|g",
   127  		etsyPrefix, etsyHostName, expectedLowerCamelLabels, etsyMetricName, etsyMetricValue.IntValue)
   128  
   129  	formatter := NewEtsystatsdFormatter()
   130  	assert.NotNil(t, formatter)
   131  
   132  	msg, err := formatter.Format(etsyPrefix, etsyMetricName, etsyLabels, lowerCamelCustomize, etsyMetricValue)
   133  	assert.NoError(t, err)
   134  	assert.Equal(t, expectedMsg, msg)
   135  }
   136  
   137  func TestEtsyFormatClusterType(t *testing.T) {
   138  	etsyLabels[core.LabelMetricSetType.Key] = core.MetricSetTypeCluster
   139  	expectedMsg := fmt.Sprintf("%s.cluster.%s.%s:%v|g",
   140  		etsyPrefix, expectedUpperCamelLabels, etsyMetricName, etsyMetricValue.IntValue)
   141  
   142  	formatter := NewEtsystatsdFormatter()
   143  	assert.NotNil(t, formatter)
   144  
   145  	msg, err := formatter.Format(etsyPrefix, etsyMetricName, etsyLabels, upperCamelCustomize, etsyMetricValue)
   146  	assert.NoError(t, err)
   147  	assert.Equal(t, expectedMsg, msg)
   148  }
   149  
   150  func TestEtsyFormatWithoutPrefix(t *testing.T) {
   151  	etsyLabels[core.LabelMetricSetType.Key] = core.MetricSetTypeCluster
   152  	expectedMsg := fmt.Sprintf("cluster.%s.%s:%v|g",
   153  		expectedLowerCamelLabels, etsyMetricName, etsyMetricValue.IntValue)
   154  
   155  	formatter := NewEtsystatsdFormatter()
   156  	assert.NotNil(t, formatter)
   157  
   158  	msg, err := formatter.Format("", etsyMetricName, etsyLabels, lowerCamelCustomize, etsyMetricValue)
   159  	assert.NoError(t, err)
   160  	assert.Equal(t, expectedMsg, msg)
   161  }
   162  
   163  func TestEtsyFormatWithResource(t *testing.T) {
   164  	etsyLabels[core.LabelMetricSetType.Key] = core.MetricSetTypeCluster
   165  	etsyLabels[core.LabelResourceID.Key] = etsyResourceName
   166  	expectedMsg := fmt.Sprintf("%s.cluster.%s.%s.%s:%v|g",
   167  		etsyPrefix, expectedUpperCamelLabels, etsyMetricName, etsyResourceName, etsyMetricValue.IntValue)
   168  
   169  	formatter := NewEtsystatsdFormatter()
   170  	assert.NotNil(t, formatter)
   171  
   172  	msg, err := formatter.Format(etsyPrefix, etsyMetricName, etsyLabels, upperCamelCustomize, etsyMetricValue)
   173  	assert.NoError(t, err)
   174  	assert.Equal(t, expectedMsg, msg)
   175  }