@@ -3201,6 +3201,113 @@ func TestResolvePipelineRunTask_WithMatrix(t *testing.T) {
32013201 }
32023202}
32033203
3204+ func TestResolvePipelineRunTask_WithMatrixedCustomTask (t * testing.T ) {
3205+ pipelineRunName := "pipelinerun"
3206+ pipelineTaskName := "pipelinetask"
3207+
3208+ pr := v1beta1.PipelineRun {
3209+ ObjectMeta : metav1.ObjectMeta {
3210+ Name : pipelineRunName ,
3211+ },
3212+ }
3213+
3214+ var runs []* v1alpha1.Run
3215+ var runNames []string
3216+ runsMap := map [string ]* v1alpha1.Run {}
3217+ for i := 0 ; i < 9 ; i ++ {
3218+ runName := fmt .Sprintf ("%s-%s-%d" , pipelineRunName , pipelineTaskName , i )
3219+ run := & v1alpha1.Run {
3220+ ObjectMeta : metav1.ObjectMeta {
3221+ Name : runName ,
3222+ },
3223+ }
3224+ runs = append (runs , run )
3225+ runNames = append (runNames , runName )
3226+ runsMap [runName ] = run
3227+ }
3228+
3229+ pts := []v1beta1.PipelineTask {{
3230+ Name : "pipelinetask" ,
3231+ TaskRef : & v1beta1.TaskRef {
3232+ APIVersion : "example.dev/v0" ,
3233+ Kind : "Example" ,
3234+ Name : "my-task" ,
3235+ },
3236+ Matrix : []v1beta1.Param {{
3237+ Name : "platform" ,
3238+ Value : v1beta1.ArrayOrString {Type : v1beta1 .ParamTypeArray , ArrayVal : []string {"linux" , "mac" , "windows" }},
3239+ }},
3240+ }, {
3241+ Name : "pipelinetask" ,
3242+ TaskRef : & v1beta1.TaskRef {
3243+ APIVersion : "example.dev/v0" ,
3244+ Kind : "Example" ,
3245+ Name : "my-task" ,
3246+ },
3247+ Matrix : []v1beta1.Param {{
3248+ Name : "platform" ,
3249+ Value : v1beta1.ArrayOrString {Type : v1beta1 .ParamTypeArray , ArrayVal : []string {"linux" , "mac" , "windows" }},
3250+ }, {
3251+ Name : "browsers" ,
3252+ Value : v1beta1.ArrayOrString {Type : v1beta1 .ParamTypeArray , ArrayVal : []string {"chrome" , "safari" , "firefox" }},
3253+ }},
3254+ }}
3255+
3256+ rtr := & resources.ResolvedTaskResources {
3257+ TaskName : "task" ,
3258+ TaskSpec : & v1beta1.TaskSpec {Steps : []v1beta1.Step {{
3259+ Name : "step1" ,
3260+ }}},
3261+ }
3262+
3263+ getTask := func (ctx context.Context , name string ) (v1beta1.TaskObject , error ) { return task , nil }
3264+ getTaskRun := func (name string ) (* v1beta1.TaskRun , error ) { return & trs [0 ], nil }
3265+ getRun := func (name string ) (* v1alpha1.Run , error ) { return runsMap [name ], nil }
3266+
3267+ for _ , tc := range []struct {
3268+ name string
3269+ pt v1beta1.PipelineTask
3270+ want * ResolvedPipelineTask
3271+ }{{
3272+ name : "custom task with matrix - single parameter" ,
3273+ pt : pts [0 ],
3274+ want : & ResolvedPipelineTask {
3275+ RunNames : runNames [:3 ],
3276+ Runs : runs [:3 ],
3277+ PipelineTask : & pts [0 ],
3278+ ResolvedTaskResources : rtr ,
3279+ },
3280+ }, {
3281+ name : "custom task with matrix - multiple parameters" ,
3282+ pt : pts [1 ],
3283+ want : & ResolvedPipelineTask {
3284+ RunNames : runNames ,
3285+ Runs : runs ,
3286+ PipelineTask : & pts [1 ],
3287+ ResolvedTaskResources : rtr ,
3288+ },
3289+ }} {
3290+ t .Run (tc .name , func (t * testing.T ) {
3291+ ctx := context .Background ()
3292+ cfg := config .NewStore (logtesting .TestLogger (t ))
3293+ cfg .OnConfigChanged (& corev1.ConfigMap {
3294+ ObjectMeta : metav1.ObjectMeta {Name : config .GetFeatureFlagsConfigName ()},
3295+ Data : map [string ]string {
3296+ "enable-api-fields" : "alpha" ,
3297+ },
3298+ })
3299+ ctx = cfg .ToContext (ctx )
3300+ rpt , err := ResolvePipelineTask (ctx , pr , getTask , getTaskRun , getRun , tc .pt , nil )
3301+ if err != nil {
3302+ t .Fatalf ("Did not expect error when resolving PipelineRun: %v" , err )
3303+ }
3304+ if d := cmp .Diff (tc .want , rpt ); d != "" {
3305+ t .Errorf ("Did not get expected ResolvePipelineTask with Matrix: %s" , diff .PrintWantGot (d ))
3306+ }
3307+ })
3308+ }
3309+ }
3310+
32043311func TestIsSuccessful (t * testing.T ) {
32053312 for _ , tc := range []struct {
32063313 name string
0 commit comments