mirror of
https://github.com/kubernetes-sigs/prometheus-adapter.git
synced 2026-04-06 09:47:54 +00:00
Tons of movement. See notes.
* Renamed `MetricNamer` to `SeriesConverter` and renamed `MetricNameConverter` to `MetricNamer`. * Simplified the `metricConverter` code. * Greatly simplified the `externalSeriesRegistry` and removed the `externalInfoMap` code. * Fixed doc comment format. * Still several `TODO`s to address.
This commit is contained in:
parent
a94494337e
commit
d1827c5611
28 changed files with 1106 additions and 1006 deletions
|
|
@ -3,13 +3,15 @@ package provider
|
|||
import (
|
||||
"testing"
|
||||
|
||||
"k8s.io/apimachinery/pkg/selection"
|
||||
|
||||
"github.com/directxman12/k8s-prometheus-adapter/pkg/client"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestBadQueryPartsDontError(t *testing.T) {
|
||||
func TestBadQueryPartsDontBuildQueries(t *testing.T) {
|
||||
builder, _ := NewQueryBuilder("rate(<<.Series>>{<<.LabelMatchers>>}[2m])")
|
||||
selector, err := builder.BuildSelector("my_series", "", []string{}, []queryPart{
|
||||
_, err := builder.BuildSelector("my_series", "", []string{}, []queryPart{
|
||||
queryPart{
|
||||
labelName: "",
|
||||
values: nil,
|
||||
|
|
@ -20,49 +22,305 @@ func TestBadQueryPartsDontError(t *testing.T) {
|
|||
},
|
||||
})
|
||||
|
||||
expectation := client.Selector("rate(my_series{}[2m])")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, selector, expectation)
|
||||
require.Error(t, err)
|
||||
}
|
||||
|
||||
func runQueryBuilderTest(t *testing.T, queryParts []queryPart, expectation string) {
|
||||
builder, _ := NewQueryBuilder("rate(<<.Series>>{<<.LabelMatchers>>}[2m])")
|
||||
selector, err := builder.BuildSelector("my_series", "", []string{}, queryParts)
|
||||
|
||||
expectError := expectation == ""
|
||||
|
||||
if expectError {
|
||||
require.Error(t, err)
|
||||
} else {
|
||||
selectorExpectation := client.Selector(expectation)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, selector, selectorExpectation)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSimpleQuery(t *testing.T) {
|
||||
builder, _ := NewQueryBuilder("rate(<<.Series>>{<<.LabelMatchers>>}[2m])")
|
||||
|
||||
// builder, _ := NewQueryBuilder("sum(rate(<<.Series>>{<<.LabelMatchers>>,static_label!=\"static_value\"}[2m])) by (<<.GroupBy>>)")
|
||||
selector, _ := builder.BuildSelector("my_series", "", []string{}, []queryPart{})
|
||||
|
||||
expectation := client.Selector("rate(my_series{}[2m])")
|
||||
require.Equal(t, selector, expectation)
|
||||
runQueryBuilderTest(t, []queryPart{}, "")
|
||||
}
|
||||
|
||||
func TestSimpleQueryWithOneLabelValue(t *testing.T) {
|
||||
builder, _ := NewQueryBuilder("rate(<<.Series>>{<<.LabelMatchers>>}[2m])")
|
||||
//Equals
|
||||
func TestEqualsQueryWithNoLabelValues(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{},
|
||||
operator: selection.Equals,
|
||||
},
|
||||
}, "")
|
||||
}
|
||||
|
||||
// builder, _ := NewQueryBuilder("sum(rate(<<.Series>>{<<.LabelMatchers>>,static_label!=\"static_value\"}[2m])) by (<<.GroupBy>>)")
|
||||
selector, _ := builder.BuildSelector("my_series", "", []string{}, []queryPart{
|
||||
func TestEqualsQueryWithOneLabelValue(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{"one"},
|
||||
operator: selection.Equals,
|
||||
},
|
||||
})
|
||||
|
||||
expectation := client.Selector("rate(my_series{target_label=\"one\"}[2m])")
|
||||
require.Equal(t, selector, expectation)
|
||||
}, "rate(my_series{target_label=\"one\"}[2m])")
|
||||
}
|
||||
|
||||
func TestSimpleQueryWithMultipleLabelValues(t *testing.T) {
|
||||
builder, _ := NewQueryBuilder("rate(<<.Series>>{<<.LabelMatchers>>}[2m])")
|
||||
|
||||
// builder, _ := NewQueryBuilder("sum(rate(<<.Series>>{<<.LabelMatchers>>,static_label!=\"static_value\"}[2m])) by (<<.GroupBy>>)")
|
||||
selector, _ := builder.BuildSelector("my_series", "", []string{}, []queryPart{
|
||||
func TestEqualsQueryWithMultipleLabelValues(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{"one", "two"},
|
||||
operator: selection.Equals,
|
||||
},
|
||||
})
|
||||
}, "rate(my_series{target_label=~\"one|two\"}[2m])")
|
||||
}
|
||||
|
||||
expectation := client.Selector("rate(my_series{target_label=~\"one|two\"}[2m])")
|
||||
require.Equal(t, selector, expectation)
|
||||
//Double Equals
|
||||
func TestDoubleEqualsQueryWithNoLabelValues(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{},
|
||||
operator: selection.DoubleEquals,
|
||||
},
|
||||
}, "")
|
||||
}
|
||||
|
||||
func TestDoubleEqualsQueryWithOneLabelValue(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{"one"},
|
||||
operator: selection.DoubleEquals,
|
||||
},
|
||||
}, "rate(my_series{target_label=\"one\"}[2m])")
|
||||
}
|
||||
|
||||
func TestDoubleEqualsQueryWithMultipleLabelValues(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{"one", "two"},
|
||||
operator: selection.DoubleEquals,
|
||||
},
|
||||
}, "rate(my_series{target_label=~\"one|two\"}[2m])")
|
||||
}
|
||||
|
||||
//Not Equals
|
||||
func TestNotEqualsQueryWithNoLabelValues(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{},
|
||||
operator: selection.NotEquals,
|
||||
},
|
||||
}, "")
|
||||
}
|
||||
|
||||
func TestNotEqualsQueryWithOneLabelValue(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{"one"},
|
||||
operator: selection.NotEquals,
|
||||
},
|
||||
}, "rate(my_series{target_label!=\"one\"}[2m])")
|
||||
}
|
||||
|
||||
func TestNotEqualsQueryWithMultipleLabelValues(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{"one", "two"},
|
||||
operator: selection.NotEquals,
|
||||
},
|
||||
}, "rate(my_series{target_label!~\"one|two\"}[2m])")
|
||||
}
|
||||
|
||||
//In
|
||||
func TestInQueryWithNoLabelValues(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{},
|
||||
operator: selection.In,
|
||||
},
|
||||
}, "")
|
||||
}
|
||||
|
||||
func TestInQueryWithOneLabelValue(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{"one"},
|
||||
operator: selection.In,
|
||||
},
|
||||
}, "rate(my_series{target_label=~\"one\"}[2m])")
|
||||
}
|
||||
|
||||
func TestInQueryWithMultipleLabelValues(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{"one", "two"},
|
||||
operator: selection.In,
|
||||
},
|
||||
}, "rate(my_series{target_label=~\"one|two\"}[2m])")
|
||||
}
|
||||
|
||||
//NotIn
|
||||
func TestNotInQueryWithNoLabelValues(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{},
|
||||
operator: selection.NotIn,
|
||||
},
|
||||
}, "")
|
||||
}
|
||||
|
||||
func TestNotInQueryWithOneLabelValue(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{"one"},
|
||||
operator: selection.NotIn,
|
||||
},
|
||||
}, "rate(my_series{target_label!~\"one\"}[2m])")
|
||||
}
|
||||
|
||||
func TestNotInQueryWithMultipleLabelValues(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{"one", "two"},
|
||||
operator: selection.NotIn,
|
||||
},
|
||||
}, "rate(my_series{target_label!~\"one|two\"}[2m])")
|
||||
}
|
||||
|
||||
//Exists
|
||||
func TestExistsQueryWithNoLabelValues(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{},
|
||||
operator: selection.Exists,
|
||||
},
|
||||
}, "rate(my_series{target_label=~\".+\"}[2m])")
|
||||
}
|
||||
|
||||
func TestExistsQueryWithOneLabelValue(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{"one"},
|
||||
operator: selection.Exists,
|
||||
},
|
||||
}, "")
|
||||
}
|
||||
|
||||
func TestExistsQueryWithMultipleLabelValues(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{"one", "two"},
|
||||
operator: selection.Exists,
|
||||
},
|
||||
}, "")
|
||||
}
|
||||
|
||||
//DoesNotExist
|
||||
func TestDoesNotExistsQueryWithNoLabelValues(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{},
|
||||
operator: selection.DoesNotExist,
|
||||
},
|
||||
}, "rate(my_series{target_label!~\".+\"}[2m])")
|
||||
}
|
||||
|
||||
func TestDoesNotExistsQueryWithOneLabelValue(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{"one"},
|
||||
operator: selection.DoesNotExist,
|
||||
},
|
||||
}, "")
|
||||
}
|
||||
|
||||
func TestDoesNotExistsQueryWithMultipleLabelValues(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{"one", "two"},
|
||||
operator: selection.DoesNotExist,
|
||||
},
|
||||
}, "")
|
||||
}
|
||||
|
||||
//GreaterThan
|
||||
func TestGreaterThanQueryWithNoLabelValues(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{},
|
||||
operator: selection.GreaterThan,
|
||||
},
|
||||
}, "")
|
||||
}
|
||||
|
||||
func TestGreaterThanQueryWithOneLabelValue(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{"one"},
|
||||
operator: selection.GreaterThan,
|
||||
},
|
||||
}, "")
|
||||
}
|
||||
|
||||
func TestGreaterThanQueryWithMultipleLabelValues(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{"one", "two"},
|
||||
operator: selection.GreaterThan,
|
||||
},
|
||||
}, "")
|
||||
}
|
||||
|
||||
//LessThan
|
||||
func TestLessThanQueryWithNoLabelValues(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{},
|
||||
operator: selection.LessThan,
|
||||
},
|
||||
}, "")
|
||||
}
|
||||
|
||||
func TestLessThanQueryWithOneLabelValue(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{"one"},
|
||||
operator: selection.LessThan,
|
||||
},
|
||||
}, "")
|
||||
}
|
||||
|
||||
func TestLessThanQueryWithMultipleLabelValues(t *testing.T) {
|
||||
runQueryBuilderTest(t, []queryPart{
|
||||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{"one", "two"},
|
||||
operator: selection.LessThan,
|
||||
},
|
||||
}, "")
|
||||
}
|
||||
|
||||
func TestQueryWithGroupBy(t *testing.T) {
|
||||
|
|
@ -72,6 +330,7 @@ func TestQueryWithGroupBy(t *testing.T) {
|
|||
queryPart{
|
||||
labelName: "target_label",
|
||||
values: []string{"one", "two"},
|
||||
operator: selection.In,
|
||||
},
|
||||
})
|
||||
|
||||
|
|
@ -79,4 +338,4 @@ func TestQueryWithGroupBy(t *testing.T) {
|
|||
require.Equal(t, selector, expectation)
|
||||
}
|
||||
|
||||
//TODO: AC - Ensure that the LabelValuesByName and GroupBySlice placeholders function correctly.
|
||||
// TODO: Ensure that the LabelValuesByName and GroupBySlice placeholders function correctly.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue