// Code generated by mdatagen. DO NOT EDIT.

package metadata

import (
	"path/filepath"
	"testing"

	"github.com/google/go-cmp/cmp"
	"github.com/google/go-cmp/cmp/cmpopts"
	"github.com/stretchr/testify/require"
	"go.opentelemetry.io/collector/confmap/confmaptest"
)

func TestMetricsBuilderConfig(t *testing.T) {
	tests := []struct {
		name string
		want MetricsBuilderConfig
	}{
		{
			name: "default",
			want: DefaultMetricsBuilderConfig(),
		},
		{
			name: "all_set",
			want: MetricsBuilderConfig{
				Metrics: MetricsConfig{
					TidbCloudCdcChangefeedLatency:                        MetricConfig{Enabled: true},
					TidbCloudCdcChangefeedReplicaRows:                    MetricConfig{Enabled: true},
					TidbCloudCdcChangefeedResolvedTsLag:                  MetricConfig{Enabled: true},
					TidbCloudCdcChangefeedStatus:                         MetricConfig{Enabled: true},
					TidbCloudCdcCheckpointTs:                             MetricConfig{Enabled: true},
					TidbCloudDbActiveConnections:                         MetricConfig{Enabled: true},
					TidbCloudDbAverageQueryDuration:                      MetricConfig{Enabled: true},
					TidbCloudDbColumnarStorageUsedBytes:                  MetricConfig{Enabled: true},
					TidbCloudDbCommandPerSecond:                          MetricConfig{Enabled: true},
					TidbCloudDbComponentUptime:                           MetricConfig{Enabled: true},
					TidbCloudDbConnections:                               MetricConfig{Enabled: true},
					TidbCloudDbDatabaseTime:                              MetricConfig{Enabled: true},
					TidbCloudDbDisconnections:                            MetricConfig{Enabled: true},
					TidbCloudDbFailedQueries:                             MetricConfig{Enabled: true},
					TidbCloudDbFailedQueriesTotal:                        MetricConfig{Enabled: true},
					TidbCloudDbKvRequestDuration:                         MetricConfig{Enabled: true},
					TidbCloudDbQueriesTotal:                              MetricConfig{Enabled: true},
					TidbCloudDbQueriesUsingPlanCacheOps:                  MetricConfig{Enabled: true},
					TidbCloudDbQueryDurationSecondsCount:                 MetricConfig{Enabled: true},
					TidbCloudDbQueryDurationSecondsSum:                   MetricConfig{Enabled: true},
					TidbCloudDbQueryPerSecond:                            MetricConfig{Enabled: true},
					TidbCloudDbRowStorageUsedBytes:                       MetricConfig{Enabled: true},
					TidbCloudDbTotalConnection:                           MetricConfig{Enabled: true},
					TidbCloudDbTransactionPerSecond:                      MetricConfig{Enabled: true},
					TidbCloudDmRelayReadErrorCount:                       MetricConfig{Enabled: true},
					TidbCloudDmSyncerReplicationLagBucket:                MetricConfig{Enabled: true},
					TidbCloudDmSyncerReplicationLagGauge:                 MetricConfig{Enabled: true},
					TidbCloudDmTaskState:                                 MetricConfig{Enabled: true},
					TidbCloudNodeCPUCapacityCores:                        MetricConfig{Enabled: true},
					TidbCloudNodeCPUSecondsTotal:                         MetricConfig{Enabled: true},
					TidbCloudNodeCPUSecondsTotalRate:                     MetricConfig{Enabled: true},
					TidbCloudNodeDiskReadLatency:                         MetricConfig{Enabled: true},
					TidbCloudNodeDiskWriteLatency:                        MetricConfig{Enabled: true},
					TidbCloudNodeMemoryAvailableBytes:                    MetricConfig{Enabled: true},
					TidbCloudNodeMemoryCapacityBytes:                     MetricConfig{Enabled: true},
					TidbCloudNodeMemoryUsedBytes:                         MetricConfig{Enabled: true},
					TidbCloudNodeStorageAvailableBytes:                   MetricConfig{Enabled: true},
					TidbCloudNodeStorageCapacityBytes:                    MetricConfig{Enabled: true},
					TidbCloudNodeStorageUsedBytes:                        MetricConfig{Enabled: true},
					TidbCloudResourceManagerResourceRequestUnitTotal:     MetricConfig{Enabled: true},
					TidbCloudResourceManagerResourceUnitReadRequestUnit:  MetricConfig{Enabled: true},
					TidbCloudResourceManagerResourceUnitWriteRequestUnit: MetricConfig{Enabled: true},
				},
				ResourceAttributes: ResourceAttributesConfig{
					ClusterID:   ResourceAttributeConfig{Enabled: true},
					ClusterName: ResourceAttributeConfig{Enabled: true},
					ProjectID:   ResourceAttributeConfig{Enabled: true},
					ProjectName: ResourceAttributeConfig{Enabled: true},
					ServicePlan: ResourceAttributeConfig{Enabled: true},
				},
			},
		},
		{
			name: "none_set",
			want: MetricsBuilderConfig{
				Metrics: MetricsConfig{
					TidbCloudCdcChangefeedLatency:                        MetricConfig{Enabled: false},
					TidbCloudCdcChangefeedReplicaRows:                    MetricConfig{Enabled: false},
					TidbCloudCdcChangefeedResolvedTsLag:                  MetricConfig{Enabled: false},
					TidbCloudCdcChangefeedStatus:                         MetricConfig{Enabled: false},
					TidbCloudCdcCheckpointTs:                             MetricConfig{Enabled: false},
					TidbCloudDbActiveConnections:                         MetricConfig{Enabled: false},
					TidbCloudDbAverageQueryDuration:                      MetricConfig{Enabled: false},
					TidbCloudDbColumnarStorageUsedBytes:                  MetricConfig{Enabled: false},
					TidbCloudDbCommandPerSecond:                          MetricConfig{Enabled: false},
					TidbCloudDbComponentUptime:                           MetricConfig{Enabled: false},
					TidbCloudDbConnections:                               MetricConfig{Enabled: false},
					TidbCloudDbDatabaseTime:                              MetricConfig{Enabled: false},
					TidbCloudDbDisconnections:                            MetricConfig{Enabled: false},
					TidbCloudDbFailedQueries:                             MetricConfig{Enabled: false},
					TidbCloudDbFailedQueriesTotal:                        MetricConfig{Enabled: false},
					TidbCloudDbKvRequestDuration:                         MetricConfig{Enabled: false},
					TidbCloudDbQueriesTotal:                              MetricConfig{Enabled: false},
					TidbCloudDbQueriesUsingPlanCacheOps:                  MetricConfig{Enabled: false},
					TidbCloudDbQueryDurationSecondsCount:                 MetricConfig{Enabled: false},
					TidbCloudDbQueryDurationSecondsSum:                   MetricConfig{Enabled: false},
					TidbCloudDbQueryPerSecond:                            MetricConfig{Enabled: false},
					TidbCloudDbRowStorageUsedBytes:                       MetricConfig{Enabled: false},
					TidbCloudDbTotalConnection:                           MetricConfig{Enabled: false},
					TidbCloudDbTransactionPerSecond:                      MetricConfig{Enabled: false},
					TidbCloudDmRelayReadErrorCount:                       MetricConfig{Enabled: false},
					TidbCloudDmSyncerReplicationLagBucket:                MetricConfig{Enabled: false},
					TidbCloudDmSyncerReplicationLagGauge:                 MetricConfig{Enabled: false},
					TidbCloudDmTaskState:                                 MetricConfig{Enabled: false},
					TidbCloudNodeCPUCapacityCores:                        MetricConfig{Enabled: false},
					TidbCloudNodeCPUSecondsTotal:                         MetricConfig{Enabled: false},
					TidbCloudNodeCPUSecondsTotalRate:                     MetricConfig{Enabled: false},
					TidbCloudNodeDiskReadLatency:                         MetricConfig{Enabled: false},
					TidbCloudNodeDiskWriteLatency:                        MetricConfig{Enabled: false},
					TidbCloudNodeMemoryAvailableBytes:                    MetricConfig{Enabled: false},
					TidbCloudNodeMemoryCapacityBytes:                     MetricConfig{Enabled: false},
					TidbCloudNodeMemoryUsedBytes:                         MetricConfig{Enabled: false},
					TidbCloudNodeStorageAvailableBytes:                   MetricConfig{Enabled: false},
					TidbCloudNodeStorageCapacityBytes:                    MetricConfig{Enabled: false},
					TidbCloudNodeStorageUsedBytes:                        MetricConfig{Enabled: false},
					TidbCloudResourceManagerResourceRequestUnitTotal:     MetricConfig{Enabled: false},
					TidbCloudResourceManagerResourceUnitReadRequestUnit:  MetricConfig{Enabled: false},
					TidbCloudResourceManagerResourceUnitWriteRequestUnit: MetricConfig{Enabled: false},
				},
				ResourceAttributes: ResourceAttributesConfig{
					ClusterID:   ResourceAttributeConfig{Enabled: false},
					ClusterName: ResourceAttributeConfig{Enabled: false},
					ProjectID:   ResourceAttributeConfig{Enabled: false},
					ProjectName: ResourceAttributeConfig{Enabled: false},
					ServicePlan: ResourceAttributeConfig{Enabled: false},
				},
			},
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			cfg := loadMetricsBuilderConfig(t, tt.name)
			diff := cmp.Diff(tt.want, cfg, cmpopts.IgnoreUnexported(MetricConfig{}, ResourceAttributeConfig{}))
			require.Emptyf(t, diff, "Config mismatch (-expected +actual):\n%s", diff)
		})
	}
}

func loadMetricsBuilderConfig(t *testing.T, name string) MetricsBuilderConfig {
	cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml"))
	require.NoError(t, err)
	sub, err := cm.Sub(name)
	require.NoError(t, err)
	cfg := DefaultMetricsBuilderConfig()
	require.NoError(t, sub.Unmarshal(&cfg))
	return cfg
}

func TestResourceAttributesConfig(t *testing.T) {
	tests := []struct {
		name string
		want ResourceAttributesConfig
	}{
		{
			name: "default",
			want: DefaultResourceAttributesConfig(),
		},
		{
			name: "all_set",
			want: ResourceAttributesConfig{
				ClusterID:   ResourceAttributeConfig{Enabled: true},
				ClusterName: ResourceAttributeConfig{Enabled: true},
				ProjectID:   ResourceAttributeConfig{Enabled: true},
				ProjectName: ResourceAttributeConfig{Enabled: true},
				ServicePlan: ResourceAttributeConfig{Enabled: true},
			},
		},
		{
			name: "none_set",
			want: ResourceAttributesConfig{
				ClusterID:   ResourceAttributeConfig{Enabled: false},
				ClusterName: ResourceAttributeConfig{Enabled: false},
				ProjectID:   ResourceAttributeConfig{Enabled: false},
				ProjectName: ResourceAttributeConfig{Enabled: false},
				ServicePlan: ResourceAttributeConfig{Enabled: false},
			},
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			cfg := loadResourceAttributesConfig(t, tt.name)
			diff := cmp.Diff(tt.want, cfg, cmpopts.IgnoreUnexported(ResourceAttributeConfig{}))
			require.Emptyf(t, diff, "Config mismatch (-expected +actual):\n%s", diff)
		})
	}
}

func loadResourceAttributesConfig(t *testing.T, name string) ResourceAttributesConfig {
	cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml"))
	require.NoError(t, err)
	sub, err := cm.Sub(name)
	require.NoError(t, err)
	sub, err = sub.Sub("resource_attributes")
	require.NoError(t, err)
	cfg := DefaultResourceAttributesConfig()
	require.NoError(t, sub.Unmarshal(&cfg))
	return cfg
}
