cmd/promtool: resolve relative paths in alert test files (#5336)

Like `promtool check config <path/to/foo.yaml>`, which resolves relative
paths inside foo.yaml to be relative to `path/to`, this now makes
`promtool test rules <path/to/test.yaml>` do the same thing.

Signed-off-by: David Symonds <dsymonds@gmail.com>
This commit is contained in:
David Symonds 2019-03-27 20:27:26 +11:00 committed by Julius Volz
parent 8fdfa8abea
commit 7a60e22c2d

View file

@ -18,6 +18,7 @@ import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
"reflect"
"sort"
"strconv"
@ -68,6 +69,7 @@ func ruleUnitTest(filename string) []error {
if err := yaml.UnmarshalStrict(b, &unitTestInp); err != nil {
return []error{err}
}
resolveFilepaths(filepath.Dir(filename), &unitTestInp)
if unitTestInp.EvaluationInterval == 0 {
unitTestInp.EvaluationInterval = 1 * time.Minute
@ -125,6 +127,16 @@ func (utf *unitTestFile) maxEvalTime() time.Duration {
return maxd
}
// resolveFilepaths joins all relative paths in a configuration
// with a given base directory.
func resolveFilepaths(baseDir string, utf *unitTestFile) {
for i, rf := range utf.RuleFiles {
if rf != "" && !filepath.IsAbs(rf) {
utf.RuleFiles[i] = filepath.Join(baseDir, rf)
}
}
}
// testGroup is a group of input series and tests associated with it.
type testGroup struct {
Interval time.Duration `yaml:"interval"`