Fix panic in dryrun report

This commit is contained in:
John Gardiner Myers 2021-06-05 11:01:27 -07:00
parent 32d775b6ed
commit 3d2cd26eff
3 changed files with 50 additions and 6 deletions

View File

@ -76,7 +76,9 @@ go_test(
embed = [":go_default_library"],
deps = [
"//pkg/apis/kops:go_default_library",
"//pkg/assets:go_default_library",
"//pkg/pki:go_default_library",
"//util/pkg/vfs:go_default_library",
"//vendor/github.com/stretchr/testify/assert:go_default_library",
],
)

View File

@ -312,17 +312,12 @@ func buildChangeList(a, e, changes Task) ([]change, error) {
}
case reflect.String:
changed = fieldValC.Interface().(string) != ""
changed = fieldValC.Convert(reflect.TypeOf("")).Interface() != ""
}
if !changed {
continue
}
if fieldValC.Kind() == reflect.String && fieldValC.Interface().(string) == "" {
// No change
continue
}
description := ""
ignored := false
if fieldValE.CanInterface() {

View File

@ -17,8 +17,13 @@ limitations under the License.
package fi
import (
"bytes"
"reflect"
"testing"
"github.com/stretchr/testify/assert"
api "k8s.io/kops/pkg/apis/kops"
"k8s.io/kops/pkg/assets"
)
func Test_tryResourceAsString(t *testing.T) {
@ -48,3 +53,45 @@ func Test_tryResourceAsString(t *testing.T) {
}
}
}
type testTask struct {
Name *string
Lifecycle Lifecycle
Tags map[string]string
}
var _ Task = &testTask{}
func (*testTask) Run(_ *Context) error {
panic("not implemented")
}
func Test_DryrunTarget_PrintReport(t *testing.T) {
builder := assets.NewAssetBuilder(&api.Cluster{
Spec: api.ClusterSpec{
KubernetesVersion: "1.17.3",
},
}, "'")
var stdout bytes.Buffer
target := NewDryRunTarget(builder, &stdout)
tasks := map[string]Task{}
a := &testTask{
Name: String("TestName"),
Lifecycle: LifecycleSync,
Tags: map[string]string{"key": "value"},
}
e := &testTask{
Name: String("TestName"),
Lifecycle: LifecycleSync,
Tags: map[string]string{"key": "value"},
}
changes := reflect.New(reflect.TypeOf(e).Elem()).Interface().(Task)
_ = BuildChanges(a, e, changes)
err := target.Render(a, e, changes)
tasks[*e.Name] = e
assert.NoError(t, err, "target.Render()")
var out bytes.Buffer
err = target.PrintReport(tasks, &out)
assert.NoError(t, err, "target.PrintReport()")
}