Browse code

Merge pull request #6952 from bparees/trigger_validation

Merged by openshift-bot

OpenShift Bot authored on 2016/02/11 07:23:49
Showing 8 changed files
... ...
@@ -1003,10 +1003,6 @@ func autoConvert_api_BuildConfig_To_v1_BuildConfig(in *buildapi.BuildConfig, out
1003 1003
 	return nil
1004 1004
 }
1005 1005
 
1006
-func Convert_api_BuildConfig_To_v1_BuildConfig(in *buildapi.BuildConfig, out *v1.BuildConfig, s conversion.Scope) error {
1007
-	return autoConvert_api_BuildConfig_To_v1_BuildConfig(in, out, s)
1008
-}
1009
-
1010 1006
 func autoConvert_api_BuildConfigList_To_v1_BuildConfigList(in *buildapi.BuildConfigList, out *v1.BuildConfigList, s conversion.Scope) error {
1011 1007
 	if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
1012 1008
 		defaulting.(func(*buildapi.BuildConfigList))(in)
... ...
@@ -1017,7 +1013,7 @@ func autoConvert_api_BuildConfigList_To_v1_BuildConfigList(in *buildapi.BuildCon
1017 1017
 	if in.Items != nil {
1018 1018
 		out.Items = make([]v1.BuildConfig, len(in.Items))
1019 1019
 		for i := range in.Items {
1020
-			if err := Convert_api_BuildConfig_To_v1_BuildConfig(&in.Items[i], &out.Items[i], s); err != nil {
1020
+			if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil {
1021 1021
 				return err
1022 1022
 			}
1023 1023
 		}
... ...
@@ -1813,10 +1809,6 @@ func autoConvert_v1_BuildConfig_To_api_BuildConfig(in *v1.BuildConfig, out *buil
1813 1813
 	return nil
1814 1814
 }
1815 1815
 
1816
-func Convert_v1_BuildConfig_To_api_BuildConfig(in *v1.BuildConfig, out *buildapi.BuildConfig, s conversion.Scope) error {
1817
-	return autoConvert_v1_BuildConfig_To_api_BuildConfig(in, out, s)
1818
-}
1819
-
1820 1816
 func autoConvert_v1_BuildConfigList_To_api_BuildConfigList(in *v1.BuildConfigList, out *buildapi.BuildConfigList, s conversion.Scope) error {
1821 1817
 	if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
1822 1818
 		defaulting.(func(*v1.BuildConfigList))(in)
... ...
@@ -1827,7 +1819,7 @@ func autoConvert_v1_BuildConfigList_To_api_BuildConfigList(in *v1.BuildConfigLis
1827 1827
 	if in.Items != nil {
1828 1828
 		out.Items = make([]buildapi.BuildConfig, len(in.Items))
1829 1829
 		for i := range in.Items {
1830
-			if err := Convert_v1_BuildConfig_To_api_BuildConfig(&in.Items[i], &out.Items[i], s); err != nil {
1830
+			if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil {
1831 1831
 				return err
1832 1832
 			}
1833 1833
 		}
... ...
@@ -1011,10 +1011,6 @@ func autoConvert_api_BuildConfig_To_v1beta3_BuildConfig(in *buildapi.BuildConfig
1011 1011
 	return nil
1012 1012
 }
1013 1013
 
1014
-func Convert_api_BuildConfig_To_v1beta3_BuildConfig(in *buildapi.BuildConfig, out *v1beta3.BuildConfig, s conversion.Scope) error {
1015
-	return autoConvert_api_BuildConfig_To_v1beta3_BuildConfig(in, out, s)
1016
-}
1017
-
1018 1014
 func autoConvert_api_BuildConfigList_To_v1beta3_BuildConfigList(in *buildapi.BuildConfigList, out *v1beta3.BuildConfigList, s conversion.Scope) error {
1019 1015
 	if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
1020 1016
 		defaulting.(func(*buildapi.BuildConfigList))(in)
... ...
@@ -1025,7 +1021,7 @@ func autoConvert_api_BuildConfigList_To_v1beta3_BuildConfigList(in *buildapi.Bui
1025 1025
 	if in.Items != nil {
1026 1026
 		out.Items = make([]v1beta3.BuildConfig, len(in.Items))
1027 1027
 		for i := range in.Items {
1028
-			if err := Convert_api_BuildConfig_To_v1beta3_BuildConfig(&in.Items[i], &out.Items[i], s); err != nil {
1028
+			if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil {
1029 1029
 				return err
1030 1030
 			}
1031 1031
 		}
... ...
@@ -1756,10 +1752,6 @@ func autoConvert_v1beta3_BuildConfig_To_api_BuildConfig(in *v1beta3.BuildConfig,
1756 1756
 	return nil
1757 1757
 }
1758 1758
 
1759
-func Convert_v1beta3_BuildConfig_To_api_BuildConfig(in *v1beta3.BuildConfig, out *buildapi.BuildConfig, s conversion.Scope) error {
1760
-	return autoConvert_v1beta3_BuildConfig_To_api_BuildConfig(in, out, s)
1761
-}
1762
-
1763 1759
 func autoConvert_v1beta3_BuildConfigList_To_api_BuildConfigList(in *v1beta3.BuildConfigList, out *buildapi.BuildConfigList, s conversion.Scope) error {
1764 1760
 	if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
1765 1761
 		defaulting.(func(*v1beta3.BuildConfigList))(in)
... ...
@@ -1770,7 +1762,7 @@ func autoConvert_v1beta3_BuildConfigList_To_api_BuildConfigList(in *v1beta3.Buil
1770 1770
 	if in.Items != nil {
1771 1771
 		out.Items = make([]buildapi.BuildConfig, len(in.Items))
1772 1772
 		for i := range in.Items {
1773
-			if err := Convert_v1beta3_BuildConfig_To_api_BuildConfig(&in.Items[i], &out.Items[i], s); err != nil {
1773
+			if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil {
1774 1774
 				return err
1775 1775
 			}
1776 1776
 		}
... ...
@@ -6,9 +6,43 @@ import (
6 6
 
7 7
 	oapi "github.com/openshift/origin/pkg/api"
8 8
 	newer "github.com/openshift/origin/pkg/build/api"
9
+	buildutil "github.com/openshift/origin/pkg/build/util"
9 10
 	imageapi "github.com/openshift/origin/pkg/image/api"
10 11
 )
11 12
 
13
+func convert_v1_BuildConfig_To_api_BuildConfig(in *BuildConfig, out *newer.BuildConfig, s conversion.Scope) error {
14
+	if err := s.DefaultConvert(in, out, conversion.IgnoreMissingFields); err != nil {
15
+		return err
16
+	}
17
+
18
+	newTriggers := []newer.BuildTriggerPolicy{}
19
+	// strip off any default imagechange triggers where the buildconfig's
20
+	// "from" is not an ImageStreamTag, because those triggers
21
+	// will never be invoked.
22
+	imageRef := buildutil.GetImageStreamForStrategy(out.Spec.Strategy)
23
+	hasIST := imageRef != nil && imageRef.Kind == "ImageStreamTag"
24
+	for _, trigger := range out.Spec.Triggers {
25
+		if trigger.Type != newer.ImageChangeBuildTriggerType {
26
+			newTriggers = append(newTriggers, trigger)
27
+			continue
28
+		}
29
+		if (trigger.ImageChange == nil || trigger.ImageChange.From == nil) && !hasIST {
30
+			continue
31
+		}
32
+		newTriggers = append(newTriggers, trigger)
33
+	}
34
+	out.Spec.Triggers = newTriggers
35
+	return nil
36
+}
37
+
38
+// empty conversion needed because the conversion generator can't handle unidirectional custom conversions
39
+func convert_api_BuildConfig_To_v1_BuildConfig(in *newer.BuildConfig, out *BuildConfig, s conversion.Scope) error {
40
+	if err := s.DefaultConvert(in, out, conversion.IgnoreMissingFields); err != nil {
41
+		return err
42
+	}
43
+	return nil
44
+}
45
+
12 46
 func convert_v1_SourceBuildStrategy_To_api_SourceBuildStrategy(in *SourceBuildStrategy, out *newer.SourceBuildStrategy, s conversion.Scope) error {
13 47
 	if err := s.DefaultConvert(in, out, conversion.IgnoreMissingFields); err != nil {
14 48
 		return err
... ...
@@ -212,6 +246,8 @@ func addConversionFuncs(scheme *runtime.Scheme) {
212 212
 	}
213 213
 
214 214
 	scheme.AddConversionFuncs(
215
+		convert_v1_BuildConfig_To_api_BuildConfig,
216
+		convert_api_BuildConfig_To_v1_BuildConfig,
215 217
 		convert_v1_SourceBuildStrategy_To_api_SourceBuildStrategy,
216 218
 		convert_api_SourceBuildStrategy_To_v1_SourceBuildStrategy,
217 219
 		convert_v1_DockerBuildStrategy_To_api_DockerBuildStrategy,
... ...
@@ -223,3 +223,48 @@ func TestBuildConfigConversion(t *testing.T) {
223 223
 		}
224 224
 	}
225 225
 }
226
+
227
+func TestInvalidImageChangeTriggerRemoval(t *testing.T) {
228
+	buildConfig := older.BuildConfig{
229
+		ObjectMeta: kolder.ObjectMeta{Name: "config-id", Namespace: "namespace"},
230
+		Spec: older.BuildConfigSpec{
231
+			BuildSpec: older.BuildSpec{
232
+				Strategy: older.BuildStrategy{
233
+					Type: older.DockerBuildStrategyType,
234
+					DockerStrategy: &older.DockerBuildStrategy{
235
+						From: &kolder.ObjectReference{
236
+							Kind: "DockerImage",
237
+							Name: "fromimage",
238
+						},
239
+					},
240
+				},
241
+			},
242
+			Triggers: []older.BuildTriggerPolicy{
243
+				{
244
+					Type:        older.ImageChangeBuildTriggerType,
245
+					ImageChange: &older.ImageChangeTrigger{},
246
+				},
247
+				{
248
+					Type: older.ImageChangeBuildTriggerType,
249
+					ImageChange: &older.ImageChangeTrigger{
250
+						From: &kolder.ObjectReference{
251
+							Kind: "ImageStreamTag",
252
+							Name: "imagestream",
253
+						},
254
+					},
255
+				},
256
+			},
257
+		},
258
+	}
259
+
260
+	var internalBC newer.BuildConfig
261
+
262
+	Convert(&buildConfig, &internalBC)
263
+	if len(internalBC.Spec.Triggers) != 1 {
264
+		t.Errorf("Expected 1 trigger, got %d", len(internalBC.Spec.Triggers))
265
+	}
266
+	if internalBC.Spec.Triggers[0].ImageChange.From == nil {
267
+		t.Errorf("Expected remaining trigger to have a From value")
268
+	}
269
+
270
+}
... ...
@@ -7,9 +7,43 @@ import (
7 7
 	"k8s.io/kubernetes/pkg/runtime"
8 8
 
9 9
 	newer "github.com/openshift/origin/pkg/build/api"
10
+	buildutil "github.com/openshift/origin/pkg/build/util"
10 11
 	imageapi "github.com/openshift/origin/pkg/image/api"
11 12
 )
12 13
 
14
+func convert_v1beta3_BuildConfig_To_api_BuildConfig(in *BuildConfig, out *newer.BuildConfig, s conversion.Scope) error {
15
+	if err := s.DefaultConvert(in, out, conversion.IgnoreMissingFields); err != nil {
16
+		return err
17
+	}
18
+
19
+	newTriggers := []newer.BuildTriggerPolicy{}
20
+	// strip off any default imagechange triggers where the buildconfig's
21
+	// "from" is not an ImageStreamTag, because those triggers
22
+	// will never be invoked.
23
+	imageRef := buildutil.GetImageStreamForStrategy(out.Spec.Strategy)
24
+	hasIST := imageRef != nil && imageRef.Kind == "ImageStreamTag"
25
+	for _, trigger := range out.Spec.Triggers {
26
+		if trigger.Type != newer.ImageChangeBuildTriggerType {
27
+			newTriggers = append(newTriggers, trigger)
28
+			continue
29
+		}
30
+		if (trigger.ImageChange == nil || trigger.ImageChange.From == nil) && !hasIST {
31
+			continue
32
+		}
33
+		newTriggers = append(newTriggers, trigger)
34
+	}
35
+	out.Spec.Triggers = newTriggers
36
+	return nil
37
+}
38
+
39
+// empty conversion needed because the conversion generator can't handle unidirectional custom conversions
40
+func convert_api_BuildConfig_To_v1beta3_BuildConfig(in *newer.BuildConfig, out *BuildConfig, s conversion.Scope) error {
41
+	if err := s.DefaultConvert(in, out, conversion.IgnoreMissingFields); err != nil {
42
+		return err
43
+	}
44
+	return nil
45
+}
46
+
13 47
 func convert_v1beta3_SourceBuildStrategy_To_api_SourceBuildStrategy(in *SourceBuildStrategy, out *newer.SourceBuildStrategy, s conversion.Scope) error {
14 48
 	if err := s.DefaultConvert(in, out, conversion.IgnoreMissingFields); err != nil {
15 49
 		return err
... ...
@@ -220,6 +254,8 @@ func addConversionFuncs(scheme *runtime.Scheme) {
220 220
 	}
221 221
 
222 222
 	scheme.AddConversionFuncs(
223
+		convert_v1beta3_BuildConfig_To_api_BuildConfig,
224
+		convert_api_BuildConfig_To_v1beta3_BuildConfig,
223 225
 		convert_v1beta3_SourceBuildStrategy_To_api_SourceBuildStrategy,
224 226
 		convert_api_SourceBuildStrategy_To_v1beta3_SourceBuildStrategy,
225 227
 		convert_v1beta3_DockerBuildStrategy_To_api_DockerBuildStrategy,
... ...
@@ -44,7 +44,8 @@ func TestBuildConfigConversion(t *testing.T) {
44 44
 				},
45 45
 				Triggers: []older.BuildTriggerPolicy{
46 46
 					{
47
-						Type: older.ImageChangeBuildTriggerType,
47
+						Type:        older.ImageChangeBuildTriggerType,
48
+						ImageChange: &older.ImageChangeTrigger{},
48 49
 					},
49 50
 					{
50 51
 						Type: older.GitHubWebHookBuildTriggerType,
... ...
@@ -84,7 +85,8 @@ func TestBuildConfigConversion(t *testing.T) {
84 84
 				},
85 85
 				Triggers: []older.BuildTriggerPolicy{
86 86
 					{
87
-						Type: older.ImageChangeBuildTriggerType,
87
+						Type:        older.ImageChangeBuildTriggerType,
88
+						ImageChange: &older.ImageChangeTrigger{},
88 89
 					},
89 90
 					{
90 91
 						Type: older.GitHubWebHookBuildTriggerType,
... ...
@@ -124,7 +126,8 @@ func TestBuildConfigConversion(t *testing.T) {
124 124
 				},
125 125
 				Triggers: []older.BuildTriggerPolicy{
126 126
 					{
127
-						Type: older.ImageChangeBuildTriggerType,
127
+						Type:        older.ImageChangeBuildTriggerType,
128
+						ImageChange: &older.ImageChangeTrigger{},
128 129
 					},
129 130
 					{
130 131
 						Type: older.GitHubWebHookBuildTriggerType,
... ...
@@ -261,3 +264,48 @@ func TestBuildTriggerPolicyNewToOldConversion(t *testing.T) {
261 261
 		}
262 262
 	}
263 263
 }
264
+
265
+func TestInvalidImageChangeTriggerRemoval(t *testing.T) {
266
+	buildConfig := older.BuildConfig{
267
+		ObjectMeta: kolder.ObjectMeta{Name: "config-id", Namespace: "namespace"},
268
+		Spec: older.BuildConfigSpec{
269
+			BuildSpec: older.BuildSpec{
270
+				Strategy: older.BuildStrategy{
271
+					Type: older.DockerBuildStrategyType,
272
+					DockerStrategy: &older.DockerBuildStrategy{
273
+						From: &kolder.ObjectReference{
274
+							Kind: "DockerImage",
275
+							Name: "fromimage",
276
+						},
277
+					},
278
+				},
279
+			},
280
+			Triggers: []older.BuildTriggerPolicy{
281
+				{
282
+					Type:        older.ImageChangeBuildTriggerType,
283
+					ImageChange: &older.ImageChangeTrigger{},
284
+				},
285
+				{
286
+					Type: older.ImageChangeBuildTriggerType,
287
+					ImageChange: &older.ImageChangeTrigger{
288
+						From: &kolder.ObjectReference{
289
+							Kind: "ImageStreamTag",
290
+							Name: "imagestream",
291
+						},
292
+					},
293
+				},
294
+			},
295
+		},
296
+	}
297
+
298
+	var internalBC newer.BuildConfig
299
+
300
+	Convert(&buildConfig, &internalBC)
301
+	if len(internalBC.Spec.Triggers) != 1 {
302
+		t.Errorf("Expected 1 trigger, got %d", len(internalBC.Spec.Triggers))
303
+	}
304
+	if internalBC.Spec.Triggers[0].ImageChange.From == nil {
305
+		t.Errorf("Expected remaining trigger to have a From value")
306
+	}
307
+
308
+}
... ...
@@ -64,14 +64,15 @@ func ValidateBuildConfig(config *buildapi.BuildConfig) field.ErrorList {
64 64
 	fromRefs := map[string]struct{}{}
65 65
 	specPath := field.NewPath("spec")
66 66
 	triggersPath := specPath.Child("triggers")
67
+	buildFrom := buildutil.GetImageStreamForStrategy(config.Spec.Strategy)
67 68
 	for i, trg := range config.Spec.Triggers {
68
-		allErrs = append(allErrs, validateTrigger(&trg, triggersPath.Index(i))...)
69
+		allErrs = append(allErrs, validateTrigger(&trg, buildFrom, triggersPath.Index(i))...)
69 70
 		if trg.Type != buildapi.ImageChangeBuildTriggerType || trg.ImageChange == nil {
70 71
 			continue
71 72
 		}
72 73
 		from := trg.ImageChange.From
73 74
 		if from == nil {
74
-			from = buildutil.GetImageStreamForStrategy(config.Spec.Strategy)
75
+			from = buildFrom
75 76
 		}
76 77
 		fromKey := refKey(config.Namespace, from)
77 78
 		_, exists := fromRefs[fromKey]
... ...
@@ -83,16 +84,6 @@ func ValidateBuildConfig(config *buildapi.BuildConfig) field.ErrorList {
83 83
 
84 84
 	allErrs = append(allErrs, validateBuildSpec(&config.Spec.BuildSpec, specPath)...)
85 85
 
86
-	// validate ImageChangeTriggers of DockerStrategy builds
87
-	strategy := config.Spec.BuildSpec.Strategy
88
-	if strategy.DockerStrategy != nil && strategy.DockerStrategy.From == nil {
89
-		for i, trigger := range config.Spec.Triggers {
90
-			if trigger.Type == buildapi.ImageChangeBuildTriggerType && (trigger.ImageChange == nil || trigger.ImageChange.From == nil) {
91
-				allErrs = append(allErrs, field.Required(triggersPath.Index(i).Child("imageChange", "from"), ""))
92
-			}
93
-		}
94
-	}
95
-
96 86
 	return allErrs
97 87
 }
98 88
 
... ...
@@ -453,7 +444,7 @@ func validateCustomStrategy(strategy *buildapi.CustomBuildStrategy, fldPath *fie
453 453
 	return allErrs
454 454
 }
455 455
 
456
-func validateTrigger(trigger *buildapi.BuildTriggerPolicy, fldPath *field.Path) field.ErrorList {
456
+func validateTrigger(trigger *buildapi.BuildTriggerPolicy, buildFrom *kapi.ObjectReference, fldPath *field.Path) field.ErrorList {
457 457
 	allErrs := field.ErrorList{}
458 458
 	if len(trigger.Type) == 0 {
459 459
 		allErrs = append(allErrs, field.Required(fldPath.Child("type"), ""))
... ...
@@ -480,6 +471,15 @@ func validateTrigger(trigger *buildapi.BuildTriggerPolicy, fldPath *field.Path)
480 480
 			break
481 481
 		}
482 482
 		if trigger.ImageChange.From == nil {
483
+			if buildFrom == nil || buildFrom.Kind != "ImageStreamTag" {
484
+				invalidKindErr := field.Invalid(
485
+					fldPath.Child("imageChange"),
486
+					fmt.Sprintf("build from: %v", buildFrom),
487
+					"a default ImageChange trigger can only be used when the build strategy includes an ImageStreamTag reference.")
488
+				allErrs = append(allErrs, invalidKindErr)
489
+				break
490
+			}
491
+
483 492
 			break
484 493
 		}
485 494
 		if kind := trigger.ImageChange.From.Kind; kind != "ImageStreamTag" {
... ...
@@ -282,8 +282,8 @@ func TestBuildConfigDockerStrategyImageChangeTrigger(t *testing.T) {
282 282
 		t.Errorf("Expected validation error, got nothing")
283 283
 	case 1:
284 284
 		err := errors[0]
285
-		if err.Type != field.ErrorTypeRequired {
286
-			t.Errorf("Expected error to be '%v', got '%v'", field.ErrorTypeRequired, err.Type)
285
+		if err.Type != field.ErrorTypeInvalid {
286
+			t.Errorf("Expected error to be '%v', got '%v'", field.ErrorTypeInvalid, err.Type)
287 287
 		}
288 288
 	default:
289 289
 		t.Errorf("Expected a single validation error, got %v", errors)
... ...
@@ -330,20 +330,46 @@ func TestBuildConfigImageChangeTriggers(t *testing.T) {
330 330
 	tests := []struct {
331 331
 		name        string
332 332
 		triggers    []buildapi.BuildTriggerPolicy
333
+		fromKind    string
333 334
 		expectError bool
334 335
 		errorType   field.ErrorType
335 336
 	}{
336 337
 		{
337
-			name: "valid default trigger",
338
+			name: "valid default trigger with imagestreamtag",
338 339
 			triggers: []buildapi.BuildTriggerPolicy{
339 340
 				{
340 341
 					Type:        buildapi.ImageChangeBuildTriggerType,
341 342
 					ImageChange: &buildapi.ImageChangeTrigger{},
342 343
 				},
343 344
 			},
345
+			fromKind:    "ImageStreamTag",
344 346
 			expectError: false,
345 347
 		},
346 348
 		{
349
+			name: "invalid default trigger (imagestreamimage)",
350
+			triggers: []buildapi.BuildTriggerPolicy{
351
+				{
352
+					Type:        buildapi.ImageChangeBuildTriggerType,
353
+					ImageChange: &buildapi.ImageChangeTrigger{},
354
+				},
355
+			},
356
+			fromKind:    "ImageStreamImage",
357
+			expectError: true,
358
+			errorType:   field.ErrorTypeInvalid,
359
+		},
360
+		{
361
+			name: "invalid default trigger (dockerimage)",
362
+			triggers: []buildapi.BuildTriggerPolicy{
363
+				{
364
+					Type:        buildapi.ImageChangeBuildTriggerType,
365
+					ImageChange: &buildapi.ImageChangeTrigger{},
366
+				},
367
+			},
368
+			fromKind:    "DockerImage",
369
+			expectError: true,
370
+			errorType:   field.ErrorTypeInvalid,
371
+		},
372
+		{
347 373
 			name: "more than one default trigger",
348 374
 			triggers: []buildapi.BuildTriggerPolicy{
349 375
 				{
... ...
@@ -355,6 +381,7 @@ func TestBuildConfigImageChangeTriggers(t *testing.T) {
355 355
 					ImageChange: &buildapi.ImageChangeTrigger{},
356 356
 				},
357 357
 			},
358
+			fromKind:    "ImageStreamTag",
358 359
 			expectError: true,
359 360
 			errorType:   field.ErrorTypeInvalid,
360 361
 		},
... ...
@@ -365,6 +392,7 @@ func TestBuildConfigImageChangeTriggers(t *testing.T) {
365 365
 					Type: buildapi.ImageChangeBuildTriggerType,
366 366
 				},
367 367
 			},
368
+			fromKind:    "ImageStreamTag",
368 369
 			expectError: true,
369 370
 			errorType:   field.ErrorTypeRequired,
370 371
 		},
... ...
@@ -385,6 +413,7 @@ func TestBuildConfigImageChangeTriggers(t *testing.T) {
385 385
 					},
386 386
 				},
387 387
 			},
388
+			fromKind:    "ImageStreamTag",
388 389
 			expectError: false,
389 390
 		},
390 391
 		{
... ...
@@ -404,6 +433,7 @@ func TestBuildConfigImageChangeTriggers(t *testing.T) {
404 404
 					},
405 405
 				},
406 406
 			},
407
+			fromKind:    "ImageStreamTag",
407 408
 			expectError: true,
408 409
 			errorType:   field.ErrorTypeInvalid,
409 410
 		},
... ...
@@ -423,6 +453,7 @@ func TestBuildConfigImageChangeTriggers(t *testing.T) {
423 423
 					},
424 424
 				},
425 425
 			},
426
+			fromKind:    "ImageStreamTag",
426 427
 			expectError: true,
427 428
 			errorType:   field.ErrorTypeInvalid,
428 429
 		},
... ...
@@ -448,6 +479,7 @@ func TestBuildConfigImageChangeTriggers(t *testing.T) {
448 448
 					},
449 449
 				},
450 450
 			},
451
+			fromKind:    "ImageStreamTag",
451 452
 			expectError: true,
452 453
 			errorType:   field.ErrorTypeInvalid,
453 454
 		},
... ...
@@ -468,6 +500,7 @@ func TestBuildConfigImageChangeTriggers(t *testing.T) {
468 468
 					},
469 469
 				},
470 470
 			},
471
+			fromKind:    "ImageStreamTag",
471 472
 			expectError: true,
472 473
 			errorType:   field.ErrorTypeInvalid,
473 474
 		},
... ...
@@ -495,6 +528,7 @@ func TestBuildConfigImageChangeTriggers(t *testing.T) {
495 495
 					},
496 496
 				},
497 497
 			},
498
+			fromKind:    "ImageStreamTag",
498 499
 			expectError: false,
499 500
 		},
500 501
 		{
... ...
@@ -521,6 +555,7 @@ func TestBuildConfigImageChangeTriggers(t *testing.T) {
521 521
 					},
522 522
 				},
523 523
 			},
524
+			fromKind:    "ImageStreamTag",
524 525
 			expectError: true,
525 526
 			errorType:   field.ErrorTypeInvalid,
526 527
 		},
... ...
@@ -540,7 +575,7 @@ func TestBuildConfigImageChangeTriggers(t *testing.T) {
540 540
 					Strategy: buildapi.BuildStrategy{
541 541
 						SourceStrategy: &buildapi.SourceBuildStrategy{
542 542
 							From: kapi.ObjectReference{
543
-								Kind: "ImageStreamTag",
543
+								Kind: tc.fromKind,
544 544
 								Name: "builderimage:latest",
545 545
 							},
546 546
 						},
... ...
@@ -1685,7 +1720,7 @@ func TestValidateTrigger(t *testing.T) {
1685 1685
 		},
1686 1686
 	}
1687 1687
 	for desc, test := range tests {
1688
-		errors := validateTrigger(&test.trigger, nil)
1688
+		errors := validateTrigger(&test.trigger, &kapi.ObjectReference{Kind: "ImageStreamTag"}, nil)
1689 1689
 		if len(test.expected) == 0 {
1690 1690
 			if len(errors) != 0 {
1691 1691
 				t.Errorf("%s: Got unexpected validation errors: %#v", desc, errors)