otelcollector/shared/configmap/ccp/prometheus-ccp-config-merger-test.go (87 lines of code) (raw):
package ccpconfigmapsettings
import (
"fmt"
"strings"
"testing"
"github.com/stretchr/testify/require"
)
// test prometheusCcpConfigMerger method
func TestMergeYAML_WithMultipleJobsEnabled_ThenMergedConfigIsComplete(t *testing.T) {
// Arrange
mergedDefaultConfigs := make(map[interface{}]interface{})
config1 := map[interface{}]interface{}{
"scrape_configs": map[interface{}]interface{}{
"job_name": "controlplane-cluster-autoscaler",
"scrape_interval": "30s",
"follow_redirects": "false",
"tls_config": map[interface{}]interface{}{
"ca_file": "/etc/kubernetes/secrets/ca.pem",
"cert_file": "/etc/kubernetes/secrets/client.pem",
"key_file": "/etc/kubernetes/secrets/client-key.pem",
"insecure_skip_verify": "true",
},
"relabel_configs": [2]map[interface{}]interface{}{
{
"source_labels": [2]string{"__meta_kubernetes_pod_label_app", "__meta_kubernetes_pod_container_name"},
"action": "keep",
"regex": "cluster-autoscaler;cluster-autoscaler",
},
{
"source_labels": [1]string{"__meta_kubernetes_pod_annotation_aks_prometheus_io_path"},
"action": "replace",
"target_label": "__metrics_path__",
"regex": "(.+)",
},
},
"metric_relabel_configs": [1]map[interface{}]interface{}{
{
"source_labels": [1]string{"__name__"},
"action": "drop",
"regex": "(go_.*|process_(cpu|max|resident|virtual|open)_.*)",
},
},
},
}
config2 := map[interface{}]interface{}{
"scrape_configs": map[interface{}]interface{}{
"job_name": "controlplane-apiserver",
"scrape_interval": "30s",
"follow_redirects": "false",
"tls_config": map[interface{}]interface{}{
"ca_file": "/etc/kubernetes/secrets/etcd-client-ca.crt",
"cert_file": "/etc/kubernetes/secrets/etcd-client.crt",
"key_file": "/etc/kubernetes/secrets/etcd-client.key",
"insecure_skip_verify": "true",
},
"relabel_configs": [3]map[interface{}]interface{}{
{
"source_labels": [2]string{"__meta_kubernetes_pod_label_app", "__meta_kubernetes_pod_container_port_number"},
"action": "keep",
"regex": "etcd;2379",
},
{
"source_labels": [1]string{"__meta_kubernetes_pod_name"},
"action": "replace",
"target_label": "instance",
"regex": "(.+)",
},
{
"source_labels": [1]string{"__meta_kubernetes_pod_name"},
"action": "drop",
"regex": "(etcd2-.*)",
},
},
"metric_relabel_configs": [1]map[interface{}]interface{}{
{
"source_labels": [1]string{"__name__"},
"action": "drop",
"regex": "(go_.*|process_(cpu|max|resident|virtual|open)_.*)",
},
},
},
}
// Act
mergedDefaultConfigs = deepMerge(mergedDefaultConfigs, config1)
mergedDefaultConfigs = deepMerge(mergedDefaultConfigs, config2)
// Assert
require.Equal(t, 1, len(mergedDefaultConfigs), "Exactly one root element")
require.NotNil(t, mergedDefaultConfigs["scrape_configs"], "scrape_configs should not be nil")
mergedConfigStr := fmt.Sprintf("%v", mergedDefaultConfigs["scrape_configs"])
require.Equal(t, 2, strings.Count(mergedConfigStr, "job_name"), "Exactly two job_name")
// TODO: add more assertions to check that the merged config is complete
}