@@ -572,6 +572,69 @@ func TestStepActionValidateError(t *testing.T) {
572572 Message : `non-existent variable in "$(params.gitrepo.foo)"` ,
573573 Paths : []string {"spec.volumeMounts[0]" },
574574 },
575+ }, {
576+ name : "circular dependency in param default values" ,
577+ fields : fields {
578+ Image : "myimage" ,
579+ Params : []v1.ParamSpec {{
580+ Name : "param1" ,
581+ Type : v1 .ParamTypeString ,
582+ Default : v1 .NewStructuredValues ("$(params.param2)" ),
583+ }, {
584+ Name : "param2" ,
585+ Type : v1 .ParamTypeString ,
586+ Default : v1 .NewStructuredValues ("$(params.param1)" ),
587+ }},
588+ },
589+ expectedError : * ((& apis.FieldError {
590+ Message : `param "param1" default value has a circular dependency` ,
591+ Paths : []string {"spec.params" },
592+ }).Also (& apis.FieldError {
593+ Message : `param "param2" default value has a circular dependency` ,
594+ Paths : []string {"spec.params" },
595+ })),
596+ }, {
597+ name : "complex circular dependency in param default values" ,
598+ fields : fields {
599+ Image : "myimage" ,
600+ Params : []v1.ParamSpec {{
601+ Name : "param1" ,
602+ Type : v1 .ParamTypeString ,
603+ Default : v1 .NewStructuredValues ("$(params.param2)" ),
604+ }, {
605+ Name : "param2" ,
606+ Type : v1 .ParamTypeString ,
607+ Default : v1 .NewStructuredValues ("$(params.param3)" ),
608+ }, {
609+ Name : "param3" ,
610+ Type : v1 .ParamTypeString ,
611+ Default : v1 .NewStructuredValues ("$(params.param1)" ),
612+ }},
613+ },
614+ expectedError : * ((& apis.FieldError {
615+ Message : `param "param1" default value has a circular dependency` ,
616+ Paths : []string {"spec.params" },
617+ }).Also (& apis.FieldError {
618+ Message : `param "param2" default value has a circular dependency` ,
619+ Paths : []string {"spec.params" },
620+ }).Also (& apis.FieldError {
621+ Message : `param "param3" default value has a circular dependency` ,
622+ Paths : []string {"spec.params" },
623+ })),
624+ }, {
625+ name : "self-referential param default value" ,
626+ fields : fields {
627+ Image : "myimage" ,
628+ Params : []v1.ParamSpec {{
629+ Name : "param1" ,
630+ Type : v1 .ParamTypeString ,
631+ Default : v1 .NewStructuredValues ("$(params.param1)" ),
632+ }},
633+ },
634+ expectedError : apis.FieldError {
635+ Message : `param "param1" default value has a circular dependency` ,
636+ Paths : []string {"spec.params" },
637+ },
575638 }}
576639 for _ , tt := range tests {
577640 t .Run (tt .name , func (t * testing.T ) {
@@ -594,6 +657,7 @@ func TestStepActionValidateError(t *testing.T) {
594657 if err == nil {
595658 t .Fatalf ("Expected an error, got nothing for %v" , sa )
596659 }
660+ t .Logf ("Actual error: %v" , err )
597661 if d := cmp .Diff (tt .expectedError .Error (), err .Error (), cmpopts .IgnoreUnexported (apis.FieldError {})); d != "" {
598662 t .Errorf ("StepActionSpec.Validate() errors diff %s" , diff .PrintWantGot (d ))
599663 }
@@ -1013,6 +1077,7 @@ func TestStepActionSpecValidateError(t *testing.T) {
10131077 if err == nil {
10141078 t .Fatalf ("Expected an error, got nothing for %v" , sa )
10151079 }
1080+ t .Logf ("Actual error: %v" , err )
10161081 if d := cmp .Diff (tt .expectedError .Error (), err .Error (), cmpopts .IgnoreUnexported (apis.FieldError {})); d != "" {
10171082 t .Errorf ("StepActionSpec.Validate() errors diff %s" , diff .PrintWantGot (d ))
10181083 }
0 commit comments