package prom

import "testing"

func TestInjectLabel(t *testing.T) {
	type args struct {
		query string
	}
	tests := []struct {
		name string
		args args
		want string
	}{
		{
			name: "vector selector",
			args: args{
				query: "process_start_time_seconds",
			},
			want: "process_start_time_seconds{cluster_id=\"9527\"}",
		},
		{
			name: "vector selector with bracket",
			args: args{
				query: "process_start_time_seconds{}",
			},
			want: "process_start_time_seconds{cluster_id=\"9527\"}",
		},
		{
			name: "vector selector with label",
			args: args{
				query: "process_start_time_seconds{component=\"tidb\"}",
			},
			want: "process_start_time_seconds{cluster_id=\"9527\",component=\"tidb\"}",
		},
		{
			name: "vector selector with label",
			args: args{
				query: `sum(process_start_time_seconds{component="tidb"})`,
			},
			want: `sum(process_start_time_seconds{cluster_id="9527",component="tidb"})`,
		},
		{
			name: "query case 1",
			args: args{
				query: `pd_scheduler_store_status{type="store_write_query_rate",address=~".*-tikv-.*"}`,
			},
			want: `pd_scheduler_store_status{address=~".*-tikv-.*",cluster_id="9527",type="store_write_query_rate"}`,
		},
		{
			name: "query case 2",
			args: args{
				query: `histogram_quantile(0.99, sum(irate(tidb_server_handle_query_duration_seconds_bucket[1m])) by (le)) > 0.8 * histogram_quantile(0.99, sum(rate(tidb_server_handle_query_duration_seconds_bucket[1m] offset 1m)) by (le))`,
			},
			want: `histogram_quantile(0.99, sum by(le) (irate(tidb_server_handle_query_duration_seconds_bucket{cluster_id="9527"}[1m]))) > 0.8 * histogram_quantile(0.99, sum by(le) (rate(tidb_server_handle_query_duration_seconds_bucket{cluster_id="9527"}[1m] offset 1m)))`,
		},
		{
			name: "cluster pd uptime",
			args: args{
				query: `(time() - process_start_time_seconds{component=~".*pd.*"})`,
			},
			want: `(time() - process_start_time_seconds{cluster_id="9527",component=~".*pd.*"})`,
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			if got := InjectLabel(tt.args.query, "cluster_id", "9527"); got != tt.want {
				t.Errorf("InjectLabel() = %v, want %v", got, tt.want)
			}
		})
	}
}
