mirror of
https://github.com/prometheus/prometheus.git
synced 2025-03-05 20:59:13 -08:00
Parallelize tests in cmd/promtool/
Signed-off-by: Aniket Kaulavkar <aniket.kaulavkar@gmail.com>
This commit is contained in:
parent
4a69ce1861
commit
650abaccce
|
@ -109,6 +109,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetBucketCountsAtTime(t *testing.T) {
|
func TestGetBucketCountsAtTime(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
matrix model.Matrix
|
matrix model.Matrix
|
||||||
length int
|
length int
|
||||||
|
@ -137,6 +138,7 @@ func TestGetBucketCountsAtTime(t *testing.T) {
|
||||||
|
|
||||||
for _, c := range cases {
|
for _, c := range cases {
|
||||||
t.Run(fmt.Sprintf("exampleMatrix@%d", c.timeIdx), func(t *testing.T) {
|
t.Run(fmt.Sprintf("exampleMatrix@%d", c.timeIdx), func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
res, err := getBucketCountsAtTime(c.matrix, c.length, c.timeIdx)
|
res, err := getBucketCountsAtTime(c.matrix, c.length, c.timeIdx)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, c.expected, res)
|
require.Equal(t, c.expected, res)
|
||||||
|
@ -145,6 +147,7 @@ func TestGetBucketCountsAtTime(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCalcClassicBucketStatistics(t *testing.T) {
|
func TestCalcClassicBucketStatistics(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
matrix model.Matrix
|
matrix model.Matrix
|
||||||
expected *statistics
|
expected *statistics
|
||||||
|
@ -162,6 +165,7 @@ func TestCalcClassicBucketStatistics(t *testing.T) {
|
||||||
|
|
||||||
for i, c := range cases {
|
for i, c := range cases {
|
||||||
t.Run(fmt.Sprintf("case %d", i), func(t *testing.T) {
|
t.Run(fmt.Sprintf("case %d", i), func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
res, err := calcClassicBucketStatistics(c.matrix)
|
res, err := calcClassicBucketStatistics(c.matrix)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, c.expected, res)
|
require.Equal(t, c.expected, res)
|
||||||
|
|
|
@ -86,6 +86,7 @@ func testBlocks(t *testing.T, db *tsdb.DB, expectedMinTime, expectedMaxTime, exp
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestBackfill(t *testing.T) {
|
func TestBackfill(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
ToParse string
|
ToParse string
|
||||||
IsOk bool
|
IsOk bool
|
||||||
|
@ -729,6 +730,7 @@ after_eof 1 2
|
||||||
}
|
}
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.Description, func(t *testing.T) {
|
t.Run(test.Description, func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
t.Logf("Test:%s", test.Description)
|
t.Logf("Test:%s", test.Description)
|
||||||
|
|
||||||
outputDir := t.TempDir()
|
outputDir := t.TempDir()
|
||||||
|
|
|
@ -60,6 +60,7 @@ func TestMain(m *testing.M) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestQueryRange(t *testing.T) {
|
func TestQueryRange(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
s, getRequest := mockServer(200, `{"status": "success", "data": {"resultType": "matrix", "result": []}}`)
|
s, getRequest := mockServer(200, `{"status": "success", "data": {"resultType": "matrix", "result": []}}`)
|
||||||
defer s.Close()
|
defer s.Close()
|
||||||
|
|
||||||
|
@ -83,6 +84,7 @@ func TestQueryRange(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestQueryInstant(t *testing.T) {
|
func TestQueryInstant(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
s, getRequest := mockServer(200, `{"status": "success", "data": {"resultType": "vector", "result": []}}`)
|
s, getRequest := mockServer(200, `{"status": "success", "data": {"resultType": "vector", "result": []}}`)
|
||||||
defer s.Close()
|
defer s.Close()
|
||||||
|
|
||||||
|
@ -114,6 +116,7 @@ func mockServer(code int, body string) (*httptest.Server, func() *http.Request)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCheckSDFile(t *testing.T) {
|
func TestCheckSDFile(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
name string
|
name string
|
||||||
file string
|
file string
|
||||||
|
@ -144,6 +147,7 @@ func TestCheckSDFile(t *testing.T) {
|
||||||
}
|
}
|
||||||
for _, test := range cases {
|
for _, test := range cases {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
_, err := checkSDFile(test.file)
|
_, err := checkSDFile(test.file)
|
||||||
if test.err != "" {
|
if test.err != "" {
|
||||||
require.EqualErrorf(t, err, test.err, "Expected error %q, got %q", test.err, err.Error())
|
require.EqualErrorf(t, err, test.err, "Expected error %q, got %q", test.err, err.Error())
|
||||||
|
@ -155,6 +159,7 @@ func TestCheckSDFile(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCheckDuplicates(t *testing.T) {
|
func TestCheckDuplicates(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
name string
|
name string
|
||||||
ruleFile string
|
ruleFile string
|
||||||
|
@ -179,6 +184,7 @@ func TestCheckDuplicates(t *testing.T) {
|
||||||
for _, test := range cases {
|
for _, test := range cases {
|
||||||
c := test
|
c := test
|
||||||
t.Run(c.name, func(t *testing.T) {
|
t.Run(c.name, func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
rgs, err := rulefmt.ParseFile(c.ruleFile)
|
rgs, err := rulefmt.ParseFile(c.ruleFile)
|
||||||
require.Empty(t, err)
|
require.Empty(t, err)
|
||||||
dups := checkDuplicates(rgs.Groups)
|
dups := checkDuplicates(rgs.Groups)
|
||||||
|
@ -198,6 +204,7 @@ func BenchmarkCheckDuplicates(b *testing.B) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCheckTargetConfig(t *testing.T) {
|
func TestCheckTargetConfig(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
name string
|
name string
|
||||||
file string
|
file string
|
||||||
|
@ -226,6 +233,7 @@ func TestCheckTargetConfig(t *testing.T) {
|
||||||
}
|
}
|
||||||
for _, test := range cases {
|
for _, test := range cases {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
_, err := checkConfig(false, "testdata/"+test.file, false)
|
_, err := checkConfig(false, "testdata/"+test.file, false)
|
||||||
if test.err != "" {
|
if test.err != "" {
|
||||||
require.EqualErrorf(t, err, test.err, "Expected error %q, got %q", test.err, err.Error())
|
require.EqualErrorf(t, err, test.err, "Expected error %q, got %q", test.err, err.Error())
|
||||||
|
@ -237,6 +245,7 @@ func TestCheckTargetConfig(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCheckConfigSyntax(t *testing.T) {
|
func TestCheckConfigSyntax(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
name string
|
name string
|
||||||
file string
|
file string
|
||||||
|
@ -309,6 +318,7 @@ func TestCheckConfigSyntax(t *testing.T) {
|
||||||
}
|
}
|
||||||
for _, test := range cases {
|
for _, test := range cases {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
_, err := checkConfig(false, "testdata/"+test.file, test.syntaxOnly)
|
_, err := checkConfig(false, "testdata/"+test.file, test.syntaxOnly)
|
||||||
expectedErrMsg := test.err
|
expectedErrMsg := test.err
|
||||||
if strings.Contains(runtime.GOOS, "windows") {
|
if strings.Contains(runtime.GOOS, "windows") {
|
||||||
|
@ -324,6 +334,7 @@ func TestCheckConfigSyntax(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAuthorizationConfig(t *testing.T) {
|
func TestAuthorizationConfig(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
name string
|
name string
|
||||||
file string
|
file string
|
||||||
|
@ -343,6 +354,7 @@ func TestAuthorizationConfig(t *testing.T) {
|
||||||
|
|
||||||
for _, test := range cases {
|
for _, test := range cases {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
_, err := checkConfig(false, "testdata/"+test.file, false)
|
_, err := checkConfig(false, "testdata/"+test.file, false)
|
||||||
if test.err != "" {
|
if test.err != "" {
|
||||||
require.ErrorContains(t, err, test.err, "Expected error to contain %q, got %q", test.err, err.Error())
|
require.ErrorContains(t, err, test.err, "Expected error to contain %q, got %q", test.err, err.Error())
|
||||||
|
@ -357,6 +369,7 @@ func TestCheckMetricsExtended(t *testing.T) {
|
||||||
if runtime.GOOS == "windows" {
|
if runtime.GOOS == "windows" {
|
||||||
t.Skip("Skipping on windows")
|
t.Skip("Skipping on windows")
|
||||||
}
|
}
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
f, err := os.Open("testdata/metrics-test.prom")
|
f, err := os.Open("testdata/metrics-test.prom")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@ -393,6 +406,7 @@ func TestExitCodes(t *testing.T) {
|
||||||
if testing.Short() {
|
if testing.Short() {
|
||||||
t.Skip("skipping test in short mode.")
|
t.Skip("skipping test in short mode.")
|
||||||
}
|
}
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
for _, c := range []struct {
|
for _, c := range []struct {
|
||||||
file string
|
file string
|
||||||
|
@ -417,8 +431,10 @@ func TestExitCodes(t *testing.T) {
|
||||||
},
|
},
|
||||||
} {
|
} {
|
||||||
t.Run(c.file, func(t *testing.T) {
|
t.Run(c.file, func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
for _, lintFatal := range []bool{true, false} {
|
for _, lintFatal := range []bool{true, false} {
|
||||||
t.Run(strconv.FormatBool(lintFatal), func(t *testing.T) {
|
t.Run(strconv.FormatBool(lintFatal), func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
args := []string{"-test.main", "check", "config", "testdata/" + c.file}
|
args := []string{"-test.main", "check", "config", "testdata/" + c.file}
|
||||||
if lintFatal {
|
if lintFatal {
|
||||||
args = append(args, "--lint-fatal")
|
args = append(args, "--lint-fatal")
|
||||||
|
@ -449,6 +465,7 @@ func TestDocumentation(t *testing.T) {
|
||||||
if runtime.GOOS == "windows" {
|
if runtime.GOOS == "windows" {
|
||||||
t.SkipNow()
|
t.SkipNow()
|
||||||
}
|
}
|
||||||
|
t.Parallel()
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
|
@ -542,16 +559,19 @@ func TestCheckRules(t *testing.T) {
|
||||||
|
|
||||||
func TestCheckRulesWithRuleFiles(t *testing.T) {
|
func TestCheckRulesWithRuleFiles(t *testing.T) {
|
||||||
t.Run("rules-good", func(t *testing.T) {
|
t.Run("rules-good", func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
exitCode := CheckRules(newLintConfig(lintOptionDuplicateRules, false), "./testdata/rules.yml")
|
exitCode := CheckRules(newLintConfig(lintOptionDuplicateRules, false), "./testdata/rules.yml")
|
||||||
require.Equal(t, successExitCode, exitCode, "")
|
require.Equal(t, successExitCode, exitCode, "")
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("rules-bad", func(t *testing.T) {
|
t.Run("rules-bad", func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
exitCode := CheckRules(newLintConfig(lintOptionDuplicateRules, false), "./testdata/rules-bad.yml")
|
exitCode := CheckRules(newLintConfig(lintOptionDuplicateRules, false), "./testdata/rules-bad.yml")
|
||||||
require.Equal(t, failureExitCode, exitCode, "")
|
require.Equal(t, failureExitCode, exitCode, "")
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("rules-lint-fatal", func(t *testing.T) {
|
t.Run("rules-lint-fatal", func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
exitCode := CheckRules(newLintConfig(lintOptionDuplicateRules, true), "./testdata/prometheus-rules.lint.yml")
|
exitCode := CheckRules(newLintConfig(lintOptionDuplicateRules, true), "./testdata/prometheus-rules.lint.yml")
|
||||||
require.Equal(t, lintErrExitCode, exitCode, "")
|
require.Equal(t, lintErrExitCode, exitCode, "")
|
||||||
})
|
})
|
||||||
|
@ -561,6 +581,7 @@ func TestTSDBDumpCommand(t *testing.T) {
|
||||||
if testing.Short() {
|
if testing.Short() {
|
||||||
t.Skip("skipping test in short mode.")
|
t.Skip("skipping test in short mode.")
|
||||||
}
|
}
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
storage := promqltest.LoadedStorage(t, `
|
storage := promqltest.LoadedStorage(t, `
|
||||||
load 1m
|
load 1m
|
||||||
|
@ -593,6 +614,7 @@ func TestTSDBDumpCommand(t *testing.T) {
|
||||||
},
|
},
|
||||||
} {
|
} {
|
||||||
t.Run(c.name, func(t *testing.T) {
|
t.Run(c.name, func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
args := []string{"-test.main", "tsdb", c.subCmd, storage.Dir()}
|
args := []string{"-test.main", "tsdb", c.subCmd, storage.Dir()}
|
||||||
cmd := exec.Command(promtoolPath, args...)
|
cmd := exec.Command(promtoolPath, args...)
|
||||||
require.NoError(t, cmd.Run())
|
require.NoError(t, cmd.Run())
|
||||||
|
|
|
@ -43,6 +43,7 @@ const defaultBlockDuration = time.Duration(tsdb.DefaultBlockDuration) * time.Mil
|
||||||
|
|
||||||
// TestBackfillRuleIntegration is an integration test that runs all the rule importer code to confirm the parts work together.
|
// TestBackfillRuleIntegration is an integration test that runs all the rule importer code to confirm the parts work together.
|
||||||
func TestBackfillRuleIntegration(t *testing.T) {
|
func TestBackfillRuleIntegration(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
const (
|
const (
|
||||||
testMaxSampleCount = 50
|
testMaxSampleCount = 50
|
||||||
testValue = 123
|
testValue = 123
|
||||||
|
@ -72,6 +73,7 @@ func TestBackfillRuleIntegration(t *testing.T) {
|
||||||
}
|
}
|
||||||
for _, tt := range testCases {
|
for _, tt := range testCases {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
tmpDir := t.TempDir()
|
tmpDir := t.TempDir()
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|
||||||
|
@ -210,6 +212,7 @@ func createMultiRuleTestFiles(path string) error {
|
||||||
// TestBackfillLabels confirms that the labels in the rule file override the labels from the metrics
|
// TestBackfillLabels confirms that the labels in the rule file override the labels from the metrics
|
||||||
// received from Prometheus Query API, including the __name__ label.
|
// received from Prometheus Query API, including the __name__ label.
|
||||||
func TestBackfillLabels(t *testing.T) {
|
func TestBackfillLabels(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
tmpDir := t.TempDir()
|
tmpDir := t.TempDir()
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
|
||||||
|
@ -251,6 +254,7 @@ func TestBackfillLabels(t *testing.T) {
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
t.Run("correct-labels", func(t *testing.T) {
|
t.Run("correct-labels", func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
selectedSeries := q.Select(ctx, false, nil, labels.MustNewMatcher(labels.MatchRegexp, "", ".*"))
|
selectedSeries := q.Select(ctx, false, nil, labels.MustNewMatcher(labels.MatchRegexp, "", ".*"))
|
||||||
for selectedSeries.Next() {
|
for selectedSeries.Next() {
|
||||||
series := selectedSeries.At()
|
series := selectedSeries.At()
|
||||||
|
|
|
@ -29,6 +29,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestSDCheckResult(t *testing.T) {
|
func TestSDCheckResult(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
targetGroups := []*targetgroup.Group{{
|
targetGroups := []*targetgroup.Group{{
|
||||||
Targets: []model.LabelSet{
|
Targets: []model.LabelSet{
|
||||||
map[model.LabelName]model.LabelValue{"__address__": "localhost:8080", "foo": "bar"},
|
map[model.LabelName]model.LabelValue{"__address__": "localhost:8080", "foo": "bar"},
|
||||||
|
|
|
@ -32,6 +32,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestGenerateBucket(t *testing.T) {
|
func TestGenerateBucket(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
tcs := []struct {
|
tcs := []struct {
|
||||||
min, max int
|
min, max int
|
||||||
start, end, step int
|
start, end, step int
|
||||||
|
|
|
@ -26,6 +26,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestRulesUnitTest(t *testing.T) {
|
func TestRulesUnitTest(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
type args struct {
|
type args struct {
|
||||||
files []string
|
files []string
|
||||||
}
|
}
|
||||||
|
@ -141,12 +142,14 @@ func TestRulesUnitTest(t *testing.T) {
|
||||||
reuseCount[tt.want] += len(tt.args.files)
|
reuseCount[tt.want] += len(tt.args.files)
|
||||||
}
|
}
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
if got := RulesUnitTest(tt.queryOpts, nil, false, false, tt.args.files...); got != tt.want {
|
if got := RulesUnitTest(tt.queryOpts, nil, false, false, tt.args.files...); got != tt.want {
|
||||||
t.Errorf("RulesUnitTest() = %v, want %v", got, tt.want)
|
t.Errorf("RulesUnitTest() = %v, want %v", got, tt.want)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
t.Run("Junit xml output ", func(t *testing.T) {
|
t.Run("Junit xml output ", func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
if got := RulesUnitTestResult(&buf, promqltest.LazyLoaderOpts{}, nil, false, false, reuseFiles...); got != 1 {
|
if got := RulesUnitTestResult(&buf, promqltest.LazyLoaderOpts{}, nil, false, false, reuseFiles...); got != 1 {
|
||||||
t.Errorf("RulesUnitTestResults() = %v, want 1", got)
|
t.Errorf("RulesUnitTestResults() = %v, want 1", got)
|
||||||
|
@ -185,6 +188,7 @@ func TestRulesUnitTest(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRulesUnitTestRun(t *testing.T) {
|
func TestRulesUnitTestRun(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
type args struct {
|
type args struct {
|
||||||
run []string
|
run []string
|
||||||
files []string
|
files []string
|
||||||
|
@ -230,6 +234,7 @@ func TestRulesUnitTestRun(t *testing.T) {
|
||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
got := RulesUnitTest(tt.queryOpts, tt.args.run, false, false, tt.args.files...)
|
got := RulesUnitTest(tt.queryOpts, tt.args.run, false, false, tt.args.files...)
|
||||||
require.Equal(t, tt.want, got)
|
require.Equal(t, tt.want, got)
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in a new issue