
1) Fail if we can't read critical env vars 2) Don't rely on KUBE_ROOT env var when `go list` works 3) Don't rely on GOOS env var when `go env` works 4) Don't quietly ignore "can't read" errors Once we stop ignoring errors, some tests fail for real (and should always have failed). The "Imported k8s.io/staging constant" test seems to not be allowed at all anymore. Han said to nix it and he'd look async. Oversall this test is dodgy. You REALLY can't glue strings together and expect valid Go module paths. We should consider a deeper rework.
73 lines
2.8 KiB
Go
73 lines
2.8 KiB
Go
/*
|
|
Copyright 2019 The Kubernetes Authors.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"go/ast"
|
|
"go/token"
|
|
)
|
|
|
|
const (
|
|
errNotDirectCall = "Opts for STABLE metric was not directly passed to new metric function"
|
|
errPositionalArguments = "Positional arguments are not supported"
|
|
errStabilityLevel = "StabilityLevel should be passed STABLE, BETA, ALPHA or removed"
|
|
errInvalidNewMetricCall = "Invalid new metric call, please ensure code compiles"
|
|
errNonStringAttribute = "Non string attribute is not supported"
|
|
errBadVariableAttribute = "Metric attribute was not correctly set. Please use only global consts in same file"
|
|
errBadImportedVariableAttribute = "Metric attribute was not correctly set. Please use only global consts in correctly imported same file"
|
|
errFieldNotSupported = "Field %s is not supported"
|
|
errBuckets = "Buckets should be set to list of floats, result from function call of prometheus.LinearBuckets or prometheus.ExponentialBuckets"
|
|
errObjectives = "Objectives should be set to map of floats to floats"
|
|
errDecodeUint32 = "Should decode to uint32"
|
|
errDecodeInt64 = "Should decode to int64"
|
|
|
|
errLabels = "Labels were not set to list of strings"
|
|
errImport = `Importing using "." is not supported`
|
|
errExprNotIdent = "expr selector does not refer to type ast.Ident, is type %s"
|
|
|
|
errorDecodingString = "can't decode string"
|
|
errorDecodingLabels = "can't decode labels"
|
|
errorDecodingConstLabels = "can't decode const labels"
|
|
errorDecodingStabilityLevel = "can't decode stability level"
|
|
errorFindingVariableForBuckets = "couldn't find variable for bucket"
|
|
errorFindingVariableForLabels = "couldn't find variable for labels"
|
|
)
|
|
|
|
type decodeError struct {
|
|
msg string
|
|
pos token.Pos
|
|
}
|
|
|
|
func newDecodeErrorf(node ast.Node, format string, a ...interface{}) *decodeError {
|
|
return &decodeError{
|
|
msg: fmt.Sprintf(format, a...),
|
|
pos: node.Pos(),
|
|
}
|
|
}
|
|
|
|
var _ error = (*decodeError)(nil)
|
|
|
|
func (e decodeError) Error() string {
|
|
return e.msg
|
|
}
|
|
|
|
func (e decodeError) errorWithFileInformation(fileset *token.FileSet) error {
|
|
position := fileset.Position(e.pos)
|
|
return fmt.Errorf("%s:%d:%d: %s", position.Filename, position.Line, position.Column, e.msg)
|
|
}
|