cli-utils/pkg/errors/errors_test.go

101 lines
2.4 KiB
Go

// Copyright 2020 The Kubernetes Authors.
// SPDX-License-Identifier: Apache-2.0
package errors
import (
"fmt"
"strings"
"testing"
"time"
"github.com/stretchr/testify/assert"
"k8s.io/apimachinery/pkg/runtime/schema"
"sigs.k8s.io/cli-utils/pkg/apply/taskrunner"
"sigs.k8s.io/cli-utils/pkg/inventory"
"sigs.k8s.io/cli-utils/pkg/kstatus/status"
"sigs.k8s.io/cli-utils/pkg/object"
)
func TestTextForError(t *testing.T) {
testCases := map[string]struct {
err error
cmdNameBase string
expectFound bool
expectedErrText string
}{
"kapply command base name": {
err: inventory.NoInventoryObjError{},
cmdNameBase: "kapply",
expectFound: true,
expectedErrText: "Please run \"kapply init\" command.",
},
"different command base name": {
err: inventory.NoInventoryObjError{},
cmdNameBase: "mycommand",
expectFound: true,
expectedErrText: "Please run \"mycommand init\" command.",
},
"known error without directives in the template": {
err: inventory.MultipleInventoryObjError{},
cmdNameBase: "kapply",
expectFound: true,
expectedErrText: "Package has multiple inventory object templates.",
},
"unknown error": {
err: fmt.Errorf("this is a test"),
cmdNameBase: "kapply",
expectFound: false,
},
"timeout error": {
err: &taskrunner.TimeoutError{
Timeout: 2 * time.Second,
Identifiers: []object.ObjMetadata{
{
GroupKind: schema.GroupKind{
Kind: "Deployment",
Group: "apps",
},
Name: "foo",
},
},
Condition: taskrunner.AllCurrent,
TimedOutResources: []taskrunner.TimedOutResource{
{
Identifier: object.ObjMetadata{
GroupKind: schema.GroupKind{
Kind: "Deployment",
Group: "apps",
},
Name: "foo",
},
Status: status.InProgressStatus,
},
},
},
cmdNameBase: "kapply",
expectFound: true,
expectedErrText: `
Timeout after 2 seconds waiting for 1 out of 1 resources to reach condition AllCurrent:
Deployment/foo InProgress
`,
},
}
for tn, tc := range testCases {
t.Run(tn, func(t *testing.T) {
errText, found := textForError(tc.err, tc.cmdNameBase)
if !tc.expectFound {
assert.False(t, found)
return
}
assert.True(t, found)
fmt.Printf("%s\n", errText)
assert.Contains(t, errText, strings.TrimSpace(tc.expectedErrText))
})
}
}