diff --git a/pkg/apis/pipeline/v1alpha1/stepaction_validation_test.go b/pkg/apis/pipeline/v1alpha1/stepaction_validation_test.go index 2aa9a51a4ee..98583cc4917 100644 --- a/pkg/apis/pipeline/v1alpha1/stepaction_validation_test.go +++ b/pkg/apis/pipeline/v1alpha1/stepaction_validation_test.go @@ -572,6 +572,69 @@ func TestStepActionValidateError(t *testing.T) { Message: `non-existent variable in "$(params.gitrepo.foo)"`, Paths: []string{"spec.volumeMounts[0]"}, }, + }, { + name: "circular dependency in param default values", + fields: fields{ + Image: "myimage", + Params: []v1.ParamSpec{{ + Name: "param1", + Type: v1.ParamTypeString, + Default: v1.NewStructuredValues("$(params.param2)"), + }, { + Name: "param2", + Type: v1.ParamTypeString, + Default: v1.NewStructuredValues("$(params.param1)"), + }}, + }, + expectedError: *((&apis.FieldError{ + Message: `param "param1" default value has a circular dependency`, + Paths: []string{"spec.params"}, + }).Also(&apis.FieldError{ + Message: `param "param2" default value has a circular dependency`, + Paths: []string{"spec.params"}, + })), + }, { + name: "complex circular dependency in param default values", + fields: fields{ + Image: "myimage", + Params: []v1.ParamSpec{{ + Name: "param1", + Type: v1.ParamTypeString, + Default: v1.NewStructuredValues("$(params.param2)"), + }, { + Name: "param2", + Type: v1.ParamTypeString, + Default: v1.NewStructuredValues("$(params.param3)"), + }, { + Name: "param3", + Type: v1.ParamTypeString, + Default: v1.NewStructuredValues("$(params.param1)"), + }}, + }, + expectedError: *((&apis.FieldError{ + Message: `param "param1" default value has a circular dependency`, + Paths: []string{"spec.params"}, + }).Also(&apis.FieldError{ + Message: `param "param2" default value has a circular dependency`, + Paths: []string{"spec.params"}, + }).Also(&apis.FieldError{ + Message: `param "param3" default value has a circular dependency`, + Paths: []string{"spec.params"}, + })), + }, { + name: "self-referential param default value", + fields: fields{ + Image: "myimage", + Params: []v1.ParamSpec{{ + Name: "param1", + Type: v1.ParamTypeString, + Default: v1.NewStructuredValues("$(params.param1)"), + }}, + }, + expectedError: apis.FieldError{ + Message: `param "param1" default value has a circular dependency`, + Paths: []string{"spec.params"}, + }, }} for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { @@ -594,6 +657,7 @@ func TestStepActionValidateError(t *testing.T) { if err == nil { t.Fatalf("Expected an error, got nothing for %v", sa) } + t.Logf("Actual error: %v", err) if d := cmp.Diff(tt.expectedError.Error(), err.Error(), cmpopts.IgnoreUnexported(apis.FieldError{})); d != "" { t.Errorf("StepActionSpec.Validate() errors diff %s", diff.PrintWantGot(d)) } @@ -1013,6 +1077,7 @@ func TestStepActionSpecValidateError(t *testing.T) { if err == nil { t.Fatalf("Expected an error, got nothing for %v", sa) } + t.Logf("Actual error: %v", err) if d := cmp.Diff(tt.expectedError.Error(), err.Error(), cmpopts.IgnoreUnexported(apis.FieldError{})); d != "" { t.Errorf("StepActionSpec.Validate() errors diff %s", diff.PrintWantGot(d)) }