aboutsummaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2021-11-26 14:14:12 +0100
committerJon Marius Venstad <venstad@gmail.com>2021-11-26 14:14:12 +0100
commit18ff7302d149f0c47f547b09c280e34a1b9ebff7 (patch)
tree34f5dd747a980bae37ce38b8b76444e92f100d0b /client
parente149174235b44e33d45bb11173a258c3784703ed (diff)
Improve error messages
Diffstat (limited to 'client')
-rw-r--r--client/go/cmd/prod_test.go1
-rw-r--r--client/go/cmd/test.go24
-rw-r--r--client/go/cmd/test_test.go2
3 files changed, 16 insertions, 11 deletions
diff --git a/client/go/cmd/prod_test.go b/client/go/cmd/prod_test.go
index a4f3ebd6b56..771a79f0fde 100644
--- a/client/go/cmd/prod_test.go
+++ b/client/go/cmd/prod_test.go
@@ -168,6 +168,7 @@ func TestProdSubmit(t *testing.T) {
}
out, err := execute(command{homeDir: homeDir, args: []string{"prod", "submit"}}, t, httpClient)
assert.Equal(t, "", err)
+ assert.Contains(t, out, "Validating test.json: . OK")
assert.Contains(t, out, "Success: Submitted")
assert.Contains(t, out, "See https://console.vespa.oath.cloud/tenant/t1/application/a1/prod/deployment for deployment progress")
}
diff --git a/client/go/cmd/test.go b/client/go/cmd/test.go
index 8ed9898b598..e8fac8de699 100644
--- a/client/go/cmd/test.go
+++ b/client/go/cmd/test.go
@@ -69,11 +69,11 @@ func runTests(rootPath string, target vespa.Target, dryRun bool) (int, []string)
count := 0
failed := make([]string, 0)
if stat, err := os.Stat(rootPath); err != nil {
- fatalErr(err, "Failed reading specified test path")
+ fatalErrHint(err, "See https://cloud.vespa.ai/en/reference/testing")
} else if stat.IsDir() {
tests, err := ioutil.ReadDir(rootPath) // TODO: Use os.ReadDir when >= 1.16 is required.
if err != nil {
- fatalErr(err, "Failed reading specified test directory")
+ fatalErrHint(err, "See https://cloud.vespa.ai/en/reference/testing")
}
previousFailed := false
for _, test := range tests {
@@ -106,25 +106,29 @@ func runTest(testPath string, target vespa.Target, dryRun bool) string {
var test test
testBytes, err := ioutil.ReadFile(testPath)
if err != nil {
- fatalErr(err, fmt.Sprintf("Failed to read test file at %s", testPath))
+ fatalErrHint(err, "See https://cloud.vespa.ai/en/reference/testing")
}
if err = json.Unmarshal(testBytes, &test); err != nil {
- fatalErr(err, fmt.Sprintf("Failed to parse test file at %s", testPath))
+ fatalErrHint(err, "See https://cloud.vespa.ai/en/reference/testing")
}
testName := test.Name
if test.Name == "" {
testName = filepath.Base(testPath)
}
- fmt.Fprintf(stdout, "Running %s:", testName)
+ verb := "Running"
+ if dryRun {
+ verb = "Validating"
+ }
+ fmt.Fprintf(stdout, "%s %s:", verb, testName)
defaultParameters, err := getParameters(test.Defaults.ParametersRaw, path.Dir(testPath))
if err != nil {
- fatalErr(err, fmt.Sprintf("Invalid default parameters for %s", testName))
+ fatalErrHint(err, fmt.Sprintf("Invalid default parameters for %s", testName), "See https://cloud.vespa.ai/en/reference/testing")
}
if len(test.Steps) == 0 {
- fatalErr(fmt.Errorf("a test must have at least one step, but none were found in %s", testPath))
+ fatalErrHint(fmt.Errorf("a test must have at least one step, but none were found in %s", testPath), "See https://cloud.vespa.ai/en/reference/testing")
}
for i, step := range test.Steps {
stepName := step.Name
@@ -133,7 +137,7 @@ func runTest(testPath string, target vespa.Target, dryRun bool) string {
}
failure, longFailure, err := verify(step, path.Dir(testPath), test.Defaults.Cluster, defaultParameters, target, dryRun)
if err != nil {
- fatalErr(err, fmt.Sprintf("Error in %s", stepName))
+ fatalErr(err, fmt.Sprintf("Error in %s", stepName), "See https://cloud.vespa.ai/en/reference/testing")
}
if failure != "" {
fmt.Fprintf(stdout, " Failed %s:\n%s\n", stepName, longFailure)
@@ -362,7 +366,7 @@ func getParameters(parametersRaw []byte, testsPath string) (map[string]string, e
resolvedParametersPath := path.Join(testsPath, parametersPath)
parametersRaw, err = ioutil.ReadFile(resolvedParametersPath)
if err != nil {
- fatalErr(err, fmt.Sprintf("Failed to read request parameters file at '%s'", resolvedParametersPath))
+ fatalErrHint(err, fmt.Sprintf("Failed to read request parameters file at '%s'", resolvedParametersPath), "See https://cloud.vespa.ai/en/reference/testing")
}
}
var parameters map[string]string
@@ -380,7 +384,7 @@ func getBody(bodyRaw []byte, testsPath string) ([]byte, error) {
resolvedBodyPath := path.Join(testsPath, bodyPath)
bodyRaw, err = ioutil.ReadFile(resolvedBodyPath)
if err != nil {
- fatalErr(err, fmt.Sprintf("Failed to read body file at '%s'", resolvedBodyPath))
+ fatalErrHint(err, fmt.Sprintf("Failed to read body file at '%s'", resolvedBodyPath), "See https://cloud.vespa.ai/en/reference/testing")
}
}
return bodyRaw, nil
diff --git a/client/go/cmd/test_test.go b/client/go/cmd/test_test.go
index fe04e3a704a..a75f5384a30 100644
--- a/client/go/cmd/test_test.go
+++ b/client/go/cmd/test_test.go
@@ -53,7 +53,7 @@ func TestProductionTest(t *testing.T) {
func TestTestWithoutAssertions(t *testing.T) {
client := &mockHttpClient{}
_, errBytes := execute(command{args: []string{"test", "testdata/tests/system-test/foo/query.json"}}, t, client)
- assert.Equal(t, "a test must have at least one step, but none were found in testdata/tests/system-test/foo/query.json\n", errBytes)
+ assert.Equal(t, "Error: a test must have at least one step, but none were found in testdata/tests/system-test/foo/query.json\nHint: See https://cloud.vespa.ai/en/reference/testing\n", errBytes)
}
func TestSuiteWithoutTests(t *testing.T) {