From 1b784acc070d312b11961f6974f9c5c1344b89ad Mon Sep 17 00:00:00 2001 From: Dave Protasowski Date: Mon, 30 Jul 2018 17:08:43 -0400 Subject: [PATCH 1/2] wip --- pkg/controller/configuration/configuration.go | 4 +- .../configuration/configuration_test.go | 131 +++++++----------- .../configuration/resources/revision.go | 4 +- .../configuration/resources/revision_test.go | 3 +- .../testing/builder/configuration.go | 62 +++++++++ pkg/controller/testing/table.go | 10 ++ 6 files changed, 124 insertions(+), 90 deletions(-) create mode 100644 pkg/controller/testing/builder/configuration.go diff --git a/pkg/controller/configuration/configuration.go b/pkg/controller/configuration/configuration.go index cc07cf63ba58..bf82830197b4 100644 --- a/pkg/controller/configuration/configuration.go +++ b/pkg/controller/configuration/configuration.go @@ -202,7 +202,6 @@ func (c *Controller) reconcile(ctx context.Context, config *v1alpha1.Configurati func (c *Controller) createRevision(config *v1alpha1.Configuration, revName string) (*v1alpha1.Revision, error) { logger := loggerWithConfigInfo(c.Logger, config.Namespace, config.Name) - buildName := "" if config.Spec.Build != nil { // TODO(mattmoor): Determine whether we reuse the previous build. build := resources.MakeBuild(config) @@ -212,10 +211,9 @@ func (c *Controller) createRevision(config *v1alpha1.Configuration, revName stri } logger.Infof("Created Build:\n%+v", created.Name) c.Recorder.Eventf(config, corev1.EventTypeNormal, "Created", "Created Build %q", created.Name) - buildName = created.Name } - rev := resources.MakeRevision(config, buildName) + rev := resources.MakeRevision(config) created, err := c.ServingClientSet.ServingV1alpha1().Revisions(config.Namespace).Create(rev) if err != nil { return nil, err diff --git a/pkg/controller/configuration/configuration_test.go b/pkg/controller/configuration/configuration_test.go index 2476c111538f..93a2cae1c141 100644 --- a/pkg/controller/configuration/configuration_test.go +++ b/pkg/controller/configuration/configuration_test.go @@ -23,6 +23,7 @@ import ( "github.com/knative/serving/pkg/apis/serving/v1alpha1" "github.com/knative/serving/pkg/controller" "github.com/knative/serving/pkg/controller/configuration/resources" + "github.com/knative/serving/pkg/controller/testing/builder" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -32,12 +33,7 @@ import ( ) var ( - boolTrue = true - revisionSpec = v1alpha1.RevisionSpec{ - Container: corev1.Container{ - Image: "busybox", - }, - } + boolTrue = true buildSpec = buildv1alpha1.BuildSpec{ Steps: []corev1.Container{{ Image: "build-step1", @@ -47,8 +43,6 @@ var ( } ) -const noBuildName = "" - // This is heavily based on the way the OpenShift Ingress controller tests its reconciliation method. func TestReconcile(t *testing.T) { table := TableTest{{ @@ -63,10 +57,10 @@ func TestReconcile(t *testing.T) { cfg("no-revisions-yet", "foo", 1234), }, WantCreates: []metav1.Object{ - resources.MakeRevision(cfg("no-revisions-yet", "foo", 1234), noBuildName), + resources.MakeRevision(cfg("no-revisions-yet", "foo", 1234)), }, WantUpdates: []clientgotesting.UpdateActionImpl{{ - Object: cfgWithStatus("no-revisions-yet", "foo", 1234, + Object: builder.Config("no-revisions-yet", "foo", 1234).WithStatus( v1alpha1.ConfigurationStatus{ LatestCreatedRevisionName: "no-revisions-yet-01234", ObservedGeneration: 1234, @@ -82,13 +76,13 @@ func TestReconcile(t *testing.T) { // If we attempt to create a Revision with a bad ConcurrencyModel set, we fail. WantErr: true, Objects: []runtime.Object{ - setConcurrencyModel(cfg("validation-failure", "foo", 1234), "Bogus"), + builder.Config("validation-failure", "foo", 1234).WithConcurrencyModel("Bogus"), }, WantCreates: []metav1.Object{ - setRevConcurrencyModel(resources.MakeRevision(cfg("validation-failure", "foo", 1234), noBuildName), "Bogus"), + setRevConcurrencyModel(resources.MakeRevision(cfg("validation-failure", "foo", 1234)), "Bogus"), }, WantUpdates: []clientgotesting.UpdateActionImpl{{ - Object: setConcurrencyModel(cfgWithStatus("validation-failure", "foo", 1234, + Object: builder.Config("validation-failure", "foo", 1234).WithStatus( v1alpha1.ConfigurationStatus{ Conditions: []v1alpha1.ConfigurationCondition{{ Type: v1alpha1.ConfigurationConditionReady, @@ -96,21 +90,20 @@ func TestReconcile(t *testing.T) { Reason: "RevisionFailed", Message: `Revision creation failed with message: "invalid value \"Bogus\": spec.concurrencyModel".`, }}, - }), "Bogus"), + }).WithConcurrencyModel("Bogus"), }}, Key: "foo/validation-failure", }, { Name: "create revision matching generation with build", Objects: []runtime.Object{ - cfgWithBuild("need-rev-and-build", "foo", 99998, &buildSpec), + builder.Config("need-rev-and-build", "foo", 99998).WithBuild(buildSpec), }, WantCreates: []metav1.Object{ - resources.MakeBuild(cfgWithBuild("need-rev-and-build", "foo", 99998, &buildSpec)), - resources.MakeRevision(cfgWithBuild("need-rev-and-build", "foo", 99998, &buildSpec), - resources.MakeBuild(cfgWithBuild("need-rev-and-build", "foo", 99998, &buildSpec)).Name), + resources.MakeBuild(builder.Config("need-rev-and-build", "foo", 99998).WithBuild(buildSpec).Build()), + resources.MakeRevision(builder.Config("need-rev-and-build", "foo", 99998).WithBuild(buildSpec).Build()), }, WantUpdates: []clientgotesting.UpdateActionImpl{{ - Object: cfgWithBuildAndStatus("need-rev-and-build", "foo", 99998, &buildSpec, + Object: builder.Config("need-rev-and-build", "foo", 99998).WithStatus( v1alpha1.ConfigurationStatus{ LatestCreatedRevisionName: "need-rev-and-build-99998", ObservedGeneration: 99998, @@ -119,17 +112,17 @@ func TestReconcile(t *testing.T) { Status: corev1.ConditionUnknown, }}, }, - ), + ).WithBuild(buildSpec), }}, Key: "foo/need-rev-and-build", }, { Name: "reconcile revision matching generation (ready: unknown)", Objects: []runtime.Object{ cfg("matching-revision-not-done", "foo", 5432), - resources.MakeRevision(cfg("matching-revision-not-done", "foo", 5432), noBuildName), + resources.MakeRevision(cfg("matching-revision-not-done", "foo", 5432)), }, WantUpdates: []clientgotesting.UpdateActionImpl{{ - Object: cfgWithStatus("matching-revision-not-done", "foo", 5432, + Object: builder.Config("matching-revision-not-done", "foo", 5432).WithStatus( v1alpha1.ConfigurationStatus{ LatestCreatedRevisionName: "matching-revision-not-done-05432", ObservedGeneration: 5432, @@ -145,10 +138,10 @@ func TestReconcile(t *testing.T) { Name: "reconcile revision matching generation (ready: true)", Objects: []runtime.Object{ cfg("matching-revision-done", "foo", 5555), - makeRevReady(t, resources.MakeRevision(cfg("matching-revision-done", "foo", 5555), noBuildName)), + makeRevReady(t, resources.MakeRevision(cfg("matching-revision-done", "foo", 5555))), }, WantUpdates: []clientgotesting.UpdateActionImpl{{ - Object: cfgWithStatus("matching-revision-done", "foo", 5555, + Object: builder.Config("matching-revision-done", "foo", 5555).WithStatus( v1alpha1.ConfigurationStatus{ LatestCreatedRevisionName: "matching-revision-done-05555", LatestReadyRevisionName: "matching-revision-done-05555", @@ -164,7 +157,7 @@ func TestReconcile(t *testing.T) { }, { Name: "reconcile revision matching generation (ready: true, idempotent)", Objects: []runtime.Object{ - cfgWithStatus("matching-revision-done-idempotent", "foo", 5566, + builder.Config("matching-revision-done-idempotent", "foo", 5566).WithStatus( v1alpha1.ConfigurationStatus{ LatestCreatedRevisionName: "matching-revision-done-idempotent-05566", LatestReadyRevisionName: "matching-revision-done-idempotent-05566", @@ -175,17 +168,17 @@ func TestReconcile(t *testing.T) { }}, }, ), - makeRevReady(t, resources.MakeRevision(cfg("matching-revision-done-idempotent", "foo", 5566), noBuildName)), + makeRevReady(t, resources.MakeRevision(cfg("matching-revision-done-idempotent", "foo", 5566))), }, Key: "foo/matching-revision-done-idempotent", }, { Name: "reconcile revision matching generation (ready: false)", Objects: []runtime.Object{ cfg("matching-revision-failed", "foo", 5555), - makeRevFailed(resources.MakeRevision(cfg("matching-revision-failed", "foo", 5555), noBuildName)), + makeRevFailed(resources.MakeRevision(cfg("matching-revision-failed", "foo", 5555))), }, WantUpdates: []clientgotesting.UpdateActionImpl{{ - Object: cfgWithStatus("matching-revision-failed", "foo", 5555, + Object: builder.Config("matching-revision-failed", "foo", 5555).WithStatus( v1alpha1.ConfigurationStatus{ LatestCreatedRevisionName: "matching-revision-failed-05555", ObservedGeneration: 5555, @@ -203,7 +196,7 @@ func TestReconcile(t *testing.T) { Name: "reconcile revision matching generation (ready: bad)", Objects: []runtime.Object{ cfg("bad-condition", "foo", 5555), - makeRevStatus(resources.MakeRevision(cfg("bad-condition", "foo", 5555), noBuildName), + makeRevStatus(resources.MakeRevision(cfg("bad-condition", "foo", 5555)), v1alpha1.RevisionStatus{ Conditions: []v1alpha1.RevisionCondition{{ Type: v1alpha1.RevisionConditionReady, @@ -214,7 +207,7 @@ func TestReconcile(t *testing.T) { }, WantErr: true, WantUpdates: []clientgotesting.UpdateActionImpl{{ - Object: cfgWithStatus("bad-condition", "foo", 5555, + Object: builder.Config("bad-condition", "foo", 5555).WithStatus( v1alpha1.ConfigurationStatus{ LatestCreatedRevisionName: "bad-condition-05555", ObservedGeneration: 5555, @@ -234,23 +227,25 @@ func TestReconcile(t *testing.T) { InduceFailure("create", "builds"), }, Objects: []runtime.Object{ - cfgWithBuild("create-build-failure", "foo", 99998, &buildSpec), + builder.Config("create-build-failure", "foo", 99998).WithBuild(buildSpec), }, WantCreates: []metav1.Object{ - resources.MakeBuild(cfgWithBuild("create-build-failure", "foo", 99998, &buildSpec)), + resources.MakeBuild(builder.Config("create-build-failure", "foo", 99998).WithBuild(buildSpec).Build()), // No Revision gets created. }, WantUpdates: []clientgotesting.UpdateActionImpl{{ - Object: cfgWithBuildAndStatus("create-build-failure", "foo", 99998, &buildSpec, - v1alpha1.ConfigurationStatus{ - Conditions: []v1alpha1.ConfigurationCondition{{ - Type: v1alpha1.ConfigurationConditionReady, - Status: corev1.ConditionFalse, - Reason: "RevisionFailed", - Message: `Revision creation failed with message: "inducing failure for create builds".`, - }}, - }, - ), + Object: builder.Config("create-build-failure", "foo", 99998). + WithBuild(buildSpec). + WithStatus( + v1alpha1.ConfigurationStatus{ + Conditions: []v1alpha1.ConfigurationCondition{{ + Type: v1alpha1.ConfigurationConditionReady, + Status: corev1.ConditionFalse, + Reason: "RevisionFailed", + Message: `Revision creation failed with message: "inducing failure for create builds".`, + }}, + }, + ), }}, Key: "foo/create-build-failure", }, { @@ -264,10 +259,10 @@ func TestReconcile(t *testing.T) { cfg("create-revision-failure", "foo", 99998), }, WantCreates: []metav1.Object{ - resources.MakeRevision(cfg("create-revision-failure", "foo", 99998), noBuildName), + resources.MakeRevision(cfg("create-revision-failure", "foo", 99998)), }, WantUpdates: []clientgotesting.UpdateActionImpl{{ - Object: cfgWithStatus("create-revision-failure", "foo", 99998, + Object: builder.Config("create-revision-failure", "foo", 99998).WithStatus( v1alpha1.ConfigurationStatus{ Conditions: []v1alpha1.ConfigurationCondition{{ Type: v1alpha1.ConfigurationConditionReady, @@ -290,10 +285,10 @@ func TestReconcile(t *testing.T) { cfg("update-config-failure", "foo", 1234), }, WantCreates: []metav1.Object{ - resources.MakeRevision(cfg("update-config-failure", "foo", 1234), noBuildName), + resources.MakeRevision(cfg("update-config-failure", "foo", 1234)), }, WantUpdates: []clientgotesting.UpdateActionImpl{{ - Object: cfgWithStatus("update-config-failure", "foo", 1234, + Object: builder.Config("update-config-failure", "foo", 1234).WithStatus( v1alpha1.ConfigurationStatus{ LatestCreatedRevisionName: "update-config-failure-01234", ObservedGeneration: 1234, @@ -308,7 +303,7 @@ func TestReconcile(t *testing.T) { }, { Name: "failed revision recovers", Objects: []runtime.Object{ - cfgWithStatus("revision-recovers", "foo", 1337, + builder.Config("revision-recovers", "foo", 1337).WithStatus( v1alpha1.ConfigurationStatus{ LatestCreatedRevisionName: "revision-recovers-01337", LatestReadyRevisionName: "revision-recovers-01337", @@ -320,10 +315,10 @@ func TestReconcile(t *testing.T) { }}, }, ), - makeRevReady(t, resources.MakeRevision(cfg("revision-recovers", "foo", 1337), noBuildName)), + makeRevReady(t, resources.MakeRevision(cfg("revision-recovers", "foo", 1337))), }, WantUpdates: []clientgotesting.UpdateActionImpl{{ - Object: cfgWithStatus("revision-recovers", "foo", 1337, + Object: builder.Config("revision-recovers", "foo", 1337).WithStatus( v1alpha1.ConfigurationStatus{ LatestCreatedRevisionName: "revision-recovers-01337", LatestReadyRevisionName: "revision-recovers-01337", @@ -347,40 +342,6 @@ func TestReconcile(t *testing.T) { }) } -func cfgWithBuildAndStatus(name, namespace string, generation int64, build *buildv1alpha1.BuildSpec, status v1alpha1.ConfigurationStatus) *v1alpha1.Configuration { - return &v1alpha1.Configuration{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - Namespace: namespace, - }, - Spec: v1alpha1.ConfigurationSpec{ - Generation: generation, - Build: build, - RevisionTemplate: v1alpha1.RevisionTemplateSpec{ - Spec: revisionSpec, - }, - }, - Status: status, - } -} - -func cfgWithStatus(name, namespace string, generation int64, status v1alpha1.ConfigurationStatus) *v1alpha1.Configuration { - return cfgWithBuildAndStatus(name, namespace, generation, nil, status) -} - -func cfgWithBuild(name, namespace string, generation int64, build *buildv1alpha1.BuildSpec) *v1alpha1.Configuration { - return cfgWithBuildAndStatus(name, namespace, generation, build, v1alpha1.ConfigurationStatus{}) -} - -func cfg(name, namespace string, generation int64) *v1alpha1.Configuration { - return cfgWithStatus(name, namespace, generation, v1alpha1.ConfigurationStatus{}) -} - -func setConcurrencyModel(cfg *v1alpha1.Configuration, ss v1alpha1.RevisionRequestConcurrencyModelType) *v1alpha1.Configuration { - cfg.Spec.RevisionTemplate.Spec.ConcurrencyModel = ss - return cfg -} - func setRevConcurrencyModel(rev *v1alpha1.Revision, ss v1alpha1.RevisionRequestConcurrencyModelType) *v1alpha1.Revision { rev.Spec.ConcurrencyModel = ss return rev @@ -406,3 +367,7 @@ func makeRevStatus(rev *v1alpha1.Revision, status v1alpha1.RevisionStatus) *v1al rev.Status = status return rev } + +func cfg(name, namespace string, generation int64) *v1alpha1.Configuration { + return builder.Config(name, namespace, generation).Build() +} diff --git a/pkg/controller/configuration/resources/revision.go b/pkg/controller/configuration/resources/revision.go index 61d84b0e0d22..fd0ad7fc8dd7 100644 --- a/pkg/controller/configuration/resources/revision.go +++ b/pkg/controller/configuration/resources/revision.go @@ -25,7 +25,7 @@ import ( "github.com/knative/serving/pkg/controller/configuration/resources/names" ) -func MakeRevision(config *v1alpha1.Configuration, buildName string) *v1alpha1.Revision { +func MakeRevision(config *v1alpha1.Configuration) *v1alpha1.Revision { // Start from the ObjectMeta/Spec inlined in the Configuration resources. rev := &v1alpha1.Revision{ ObjectMeta: config.Spec.RevisionTemplate.ObjectMeta, @@ -51,7 +51,7 @@ func MakeRevision(config *v1alpha1.Configuration, buildName string) *v1alpha1.Re rev.OwnerReferences = append(rev.OwnerReferences, *controller.NewControllerRef(config)) // Fill in the build name, if specified. - rev.Spec.BuildName = buildName + rev.Spec.BuildName = names.Build(config) return rev } diff --git a/pkg/controller/configuration/resources/revision_test.go b/pkg/controller/configuration/resources/revision_test.go index 1716c8bf74f0..c60b251e8820 100644 --- a/pkg/controller/configuration/resources/revision_test.go +++ b/pkg/controller/configuration/resources/revision_test.go @@ -25,7 +25,6 @@ import ( buildv1alpha1 "github.com/knative/build/pkg/apis/build/v1alpha1" "github.com/knative/serving/pkg/apis/serving" "github.com/knative/serving/pkg/apis/serving/v1alpha1" - "github.com/knative/serving/pkg/controller/configuration/resources/names" ) func TestRevisions(t *testing.T) { @@ -227,7 +226,7 @@ func TestRevisions(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { - got := MakeRevision(test.configuration, names.Build(test.configuration)) + got := MakeRevision(test.configuration) if diff := cmp.Diff(test.want, got); diff != "" { t.Errorf("MakeRevision (-want, +got) = %v", diff) } diff --git a/pkg/controller/testing/builder/configuration.go b/pkg/controller/testing/builder/configuration.go new file mode 100644 index 000000000000..fb6d4e75e4b4 --- /dev/null +++ b/pkg/controller/testing/builder/configuration.go @@ -0,0 +1,62 @@ +package builder + +import ( + buildv1alpha1 "github.com/knative/build/pkg/apis/build/v1alpha1" + "github.com/knative/serving/pkg/apis/serving/v1alpha1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +type ConfigBuilder struct { + Config *v1alpha1.Configuration +} + +func Config(name, namespace string, generation int64) ConfigBuilder { + return ConfigBuilder{ + Config: &v1alpha1.Configuration{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + Namespace: namespace, + }, + Spec: v1alpha1.ConfigurationSpec{ + Generation: generation, + RevisionTemplate: v1alpha1.RevisionTemplateSpec{ + Spec: v1alpha1.RevisionSpec{ + Container: corev1.Container{ + Image: "busybox", + }, + }, + }, + }, + }, + } +} + +func (bldr ConfigBuilder) WithStatus(s v1alpha1.ConfigurationStatus) ConfigBuilder { + bldr.Config.Status = s + return bldr +} + +func (bldr ConfigBuilder) WithBuild(b buildv1alpha1.BuildSpec) ConfigBuilder { + bldr.Config.Spec.Build = &b + return bldr +} + +func (bldr ConfigBuilder) WithConcurrencyModel(cm v1alpha1.RevisionRequestConcurrencyModelType) ConfigBuilder { + bldr.Config.Spec.RevisionTemplate.Spec.ConcurrencyModel = cm + return bldr +} + +func (bldr ConfigBuilder) Build() *v1alpha1.Configuration { + return bldr.Config +} + +func (bldr ConfigBuilder) GetObjectKind() schema.ObjectKind { + return bldr.Config.GetObjectKind() +} + +func (bldr ConfigBuilder) DeepCopyObject() runtime.Object { + return bldr.Config.DeepCopyObject() +} diff --git a/pkg/controller/testing/table.go b/pkg/controller/testing/table.go index 3cc432f97feb..662d9fa8bbd2 100644 --- a/pkg/controller/testing/table.go +++ b/pkg/controller/testing/table.go @@ -25,6 +25,7 @@ import ( "github.com/google/go-cmp/cmp/cmpopts" fakebuildclientset "github.com/knative/build/pkg/client/clientset/versioned/fake" fakeclientset "github.com/knative/serving/pkg/client/clientset/versioned/fake" + "github.com/knative/serving/pkg/controller/testing/builder" "github.com/knative/serving/pkg/system" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" @@ -200,6 +201,8 @@ func NewListers(objs []runtime.Object) Listers { ls.Route.Items = append(ls.Route.Items, o) case *v1alpha1.Configuration: ls.Configuration.Items = append(ls.Configuration.Items, o) + case builder.ConfigBuilder: + ls.Configuration.Items = append(ls.Configuration.Items, o.Build()) case *v1alpha1.Revision: ls.Revision.Items = append(ls.Revision.Items, o) @@ -265,6 +268,13 @@ type Ctor func(*Listers, controller.Options) controller.Interface func (r *TableRow) Test(t *testing.T, ctor Ctor) { ls := NewListers(r.Objects) + for i, action := range r.WantUpdates { + if builder, ok := action.Object.(builder.ConfigBuilder); ok { + action.Object = builder.Build() + } + r.WantUpdates[i] = action + } + kubeClient := fakekubeclientset.NewSimpleClientset(ls.GetKubeObjects()...) client := fakeclientset.NewSimpleClientset(ls.GetServingObjects()...) buildClient := fakebuildclientset.NewSimpleClientset(ls.GetBuildObjects()...) From 3f95d254a31a7a740502de781748c5320c3c26e4 Mon Sep 17 00:00:00 2001 From: Dave Protasowski Date: Mon, 30 Jul 2018 22:05:51 -0400 Subject: [PATCH 2/2] Further abstraction The table test having WantCreate be a type of metav1.Object actually results in more boilerplate - hence some of the calls to `Build` --- .../configuration/configuration_test.go | 393 ++++++++---------- .../testing/builder/configuration.go | 56 ++- pkg/controller/testing/builder/revision.go | 43 ++ pkg/controller/testing/table.go | 15 +- 4 files changed, 266 insertions(+), 241 deletions(-) create mode 100644 pkg/controller/testing/builder/revision.go diff --git a/pkg/controller/configuration/configuration_test.go b/pkg/controller/configuration/configuration_test.go index 93a2cae1c141..966d784b443d 100644 --- a/pkg/controller/configuration/configuration_test.go +++ b/pkg/controller/configuration/configuration_test.go @@ -22,7 +22,6 @@ import ( buildv1alpha1 "github.com/knative/build/pkg/apis/build/v1alpha1" "github.com/knative/serving/pkg/apis/serving/v1alpha1" "github.com/knative/serving/pkg/controller" - "github.com/knative/serving/pkg/controller/configuration/resources" "github.com/knative/serving/pkg/controller/testing/builder" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -54,22 +53,22 @@ func TestReconcile(t *testing.T) { }, { Name: "create revision matching generation", Objects: []runtime.Object{ - cfg("no-revisions-yet", "foo", 1234), + builder.Config("no-revisions-yet", "foo", 1234), }, WantCreates: []metav1.Object{ - resources.MakeRevision(cfg("no-revisions-yet", "foo", 1234)), - }, - WantUpdates: []clientgotesting.UpdateActionImpl{{ - Object: builder.Config("no-revisions-yet", "foo", 1234).WithStatus( - v1alpha1.ConfigurationStatus{ - LatestCreatedRevisionName: "no-revisions-yet-01234", - ObservedGeneration: 1234, - Conditions: []v1alpha1.ConfigurationCondition{{ - Type: v1alpha1.ConfigurationConditionReady, - Status: corev1.ConditionUnknown, - }}, - }), - }}, + builder.Config("no-revisions-yet", "foo", 1234). + ToRevision(). + Build(), + }, + WantUpdates: []clientgotesting.UpdateActionImpl{ + builder.Config("no-revisions-yet", "foo", 1234). + WithLatestCreatedRevisionName("no-revisions-yet-01234"). + WithObservedGeneration(1234). + WithCondition(v1alpha1.ConfigurationCondition{ + Type: v1alpha1.ConfigurationConditionReady, + Status: corev1.ConditionUnknown, + }).AsUpdateAction(), + }, Key: "foo/no-revisions-yet", }, { Name: "webhook validation failure", @@ -79,19 +78,21 @@ func TestReconcile(t *testing.T) { builder.Config("validation-failure", "foo", 1234).WithConcurrencyModel("Bogus"), }, WantCreates: []metav1.Object{ - setRevConcurrencyModel(resources.MakeRevision(cfg("validation-failure", "foo", 1234)), "Bogus"), + builder.Config("validation-failure", "foo", 1234). + ToRevision(). + WithConcurrencyModel("Bogus"). + Build(), + }, + WantUpdates: []clientgotesting.UpdateActionImpl{ + builder.Config("validation-failure", "foo", 1234). + WithConcurrencyModel("Bogus"). + WithCondition(v1alpha1.ConfigurationCondition{ + Type: v1alpha1.ConfigurationConditionReady, + Status: corev1.ConditionFalse, + Reason: "RevisionFailed", + Message: `Revision creation failed with message: "invalid value \"Bogus\": spec.concurrencyModel".`, + }).AsUpdateAction(), }, - WantUpdates: []clientgotesting.UpdateActionImpl{{ - Object: builder.Config("validation-failure", "foo", 1234).WithStatus( - v1alpha1.ConfigurationStatus{ - Conditions: []v1alpha1.ConfigurationCondition{{ - Type: v1alpha1.ConfigurationConditionReady, - Status: corev1.ConditionFalse, - Reason: "RevisionFailed", - Message: `Revision creation failed with message: "invalid value \"Bogus\": spec.concurrencyModel".`, - }}, - }).WithConcurrencyModel("Bogus"), - }}, Key: "foo/validation-failure", }, { Name: "create revision matching generation with build", @@ -99,125 +100,116 @@ func TestReconcile(t *testing.T) { builder.Config("need-rev-and-build", "foo", 99998).WithBuild(buildSpec), }, WantCreates: []metav1.Object{ - resources.MakeBuild(builder.Config("need-rev-and-build", "foo", 99998).WithBuild(buildSpec).Build()), - resources.MakeRevision(builder.Config("need-rev-and-build", "foo", 99998).WithBuild(buildSpec).Build()), - }, - WantUpdates: []clientgotesting.UpdateActionImpl{{ - Object: builder.Config("need-rev-and-build", "foo", 99998).WithStatus( - v1alpha1.ConfigurationStatus{ - LatestCreatedRevisionName: "need-rev-and-build-99998", - ObservedGeneration: 99998, - Conditions: []v1alpha1.ConfigurationCondition{{ - Type: v1alpha1.ConfigurationConditionReady, - Status: corev1.ConditionUnknown, - }}, - }, - ).WithBuild(buildSpec), - }}, + builder.Config("need-rev-and-build", "foo", 99998).WithBuild(buildSpec). + ToBuild(), + builder.Config("need-rev-and-build", "foo", 99998).WithBuild(buildSpec). + ToRevision(). + Build(), + }, + WantUpdates: []clientgotesting.UpdateActionImpl{ + builder.Config("need-rev-and-build", "foo", 99998). + WithBuild(buildSpec). + WithLatestCreatedRevisionName("need-rev-and-build-99998"). + WithObservedGeneration(99998). + WithCondition(v1alpha1.ConfigurationCondition{ + Type: v1alpha1.ConfigurationConditionReady, + Status: corev1.ConditionUnknown, + }).AsUpdateAction(), + }, Key: "foo/need-rev-and-build", }, { Name: "reconcile revision matching generation (ready: unknown)", Objects: []runtime.Object{ - cfg("matching-revision-not-done", "foo", 5432), - resources.MakeRevision(cfg("matching-revision-not-done", "foo", 5432)), - }, - WantUpdates: []clientgotesting.UpdateActionImpl{{ - Object: builder.Config("matching-revision-not-done", "foo", 5432).WithStatus( - v1alpha1.ConfigurationStatus{ - LatestCreatedRevisionName: "matching-revision-not-done-05432", - ObservedGeneration: 5432, - Conditions: []v1alpha1.ConfigurationCondition{{ - Type: v1alpha1.ConfigurationConditionReady, - Status: corev1.ConditionUnknown, - }}, - }, - ), - }}, + builder.Config("matching-revision-not-done", "foo", 5432), + builder.Config("matching-revision-not-done", "foo", 5432). + ToRevision(), + }, + WantUpdates: []clientgotesting.UpdateActionImpl{ + builder.Config("matching-revision-not-done", "foo", 5432). + WithLatestCreatedRevisionName("matching-revision-not-done-05432"). + WithObservedGeneration(5432). + WithCondition(v1alpha1.ConfigurationCondition{ + Type: v1alpha1.ConfigurationConditionReady, + Status: corev1.ConditionUnknown, + }).AsUpdateAction(), + }, Key: "foo/matching-revision-not-done", }, { Name: "reconcile revision matching generation (ready: true)", Objects: []runtime.Object{ - cfg("matching-revision-done", "foo", 5555), - makeRevReady(t, resources.MakeRevision(cfg("matching-revision-done", "foo", 5555))), - }, - WantUpdates: []clientgotesting.UpdateActionImpl{{ - Object: builder.Config("matching-revision-done", "foo", 5555).WithStatus( - v1alpha1.ConfigurationStatus{ - LatestCreatedRevisionName: "matching-revision-done-05555", - LatestReadyRevisionName: "matching-revision-done-05555", - ObservedGeneration: 5555, - Conditions: []v1alpha1.ConfigurationCondition{{ - Type: v1alpha1.ConfigurationConditionReady, - Status: corev1.ConditionTrue, - }}, - }, - ), - }}, + builder.Config("matching-revision-done", "foo", 5555), + builder.Config("matching-revision-done", "foo", 5555). + ToRevision(). + WithReadyStatus(t), + }, + WantUpdates: []clientgotesting.UpdateActionImpl{ + builder.Config("matching-revision-done", "foo", 5555). + WithLatestCreatedRevisionName("matching-revision-done-05555"). + WithLatestReadyRevisionName("matching-revision-done-05555"). + WithObservedGeneration(5555). + WithCondition(v1alpha1.ConfigurationCondition{ + Type: v1alpha1.ConfigurationConditionReady, + Status: corev1.ConditionTrue, + }).AsUpdateAction(), + }, Key: "foo/matching-revision-done", }, { Name: "reconcile revision matching generation (ready: true, idempotent)", Objects: []runtime.Object{ - builder.Config("matching-revision-done-idempotent", "foo", 5566).WithStatus( - v1alpha1.ConfigurationStatus{ - LatestCreatedRevisionName: "matching-revision-done-idempotent-05566", - LatestReadyRevisionName: "matching-revision-done-idempotent-05566", - ObservedGeneration: 5566, - Conditions: []v1alpha1.ConfigurationCondition{{ - Type: v1alpha1.ConfigurationConditionReady, - Status: corev1.ConditionTrue, - }}, - }, - ), - makeRevReady(t, resources.MakeRevision(cfg("matching-revision-done-idempotent", "foo", 5566))), + builder.Config("matching-revision-done-idempotent", "foo", 5566). + WithLatestCreatedRevisionName("matching-revision-done-idempotent-05566"). + WithLatestReadyRevisionName("matching-revision-done-idempotent-05566"). + WithObservedGeneration(5566). + WithCondition(v1alpha1.ConfigurationCondition{ + Type: v1alpha1.ConfigurationConditionReady, + Status: corev1.ConditionTrue, + }), + builder.Config("matching-revision-done-idempotent", "foo", 5566). + ToRevision(). + WithReadyStatus(t), }, Key: "foo/matching-revision-done-idempotent", }, { Name: "reconcile revision matching generation (ready: false)", Objects: []runtime.Object{ - cfg("matching-revision-failed", "foo", 5555), - makeRevFailed(resources.MakeRevision(cfg("matching-revision-failed", "foo", 5555))), - }, - WantUpdates: []clientgotesting.UpdateActionImpl{{ - Object: builder.Config("matching-revision-failed", "foo", 5555).WithStatus( - v1alpha1.ConfigurationStatus{ - LatestCreatedRevisionName: "matching-revision-failed-05555", - ObservedGeneration: 5555, - Conditions: []v1alpha1.ConfigurationCondition{{ - Type: v1alpha1.ConfigurationConditionReady, - Status: corev1.ConditionFalse, - Reason: "RevisionFailed", - Message: `Revision "matching-revision-failed-05555" failed with message: "It's the end of the world as we know it".`, - }}, - }, - ), - }}, + builder.Config("matching-revision-failed", "foo", 5555), + builder.Config("matching-revision-failed", "foo", 5555). + ToRevision(). + WithFailedStatus(), + }, + WantUpdates: []clientgotesting.UpdateActionImpl{ + builder.Config("matching-revision-failed", "foo", 5555). + WithLatestCreatedRevisionName("matching-revision-failed-05555"). + WithObservedGeneration(5555). + WithCondition(v1alpha1.ConfigurationCondition{ + Type: v1alpha1.ConfigurationConditionReady, + Status: corev1.ConditionFalse, + Reason: "RevisionFailed", + Message: `Revision "matching-revision-failed-05555" failed with message: "It's the end of the world as we know it".`, + }).AsUpdateAction(), + }, Key: "foo/matching-revision-failed", }, { Name: "reconcile revision matching generation (ready: bad)", Objects: []runtime.Object{ - cfg("bad-condition", "foo", 5555), - makeRevStatus(resources.MakeRevision(cfg("bad-condition", "foo", 5555)), - v1alpha1.RevisionStatus{ - Conditions: []v1alpha1.RevisionCondition{{ - Type: v1alpha1.RevisionConditionReady, - Status: "Bad", - }}, - }, - ), + builder.Config("bad-condition", "foo", 5555), + builder.Config("bad-condition", "foo", 5555). + ToRevision(). + WithCondition(v1alpha1.RevisionCondition{ + Type: v1alpha1.RevisionConditionReady, + Status: "Bad", + }), }, WantErr: true, - WantUpdates: []clientgotesting.UpdateActionImpl{{ - Object: builder.Config("bad-condition", "foo", 5555).WithStatus( - v1alpha1.ConfigurationStatus{ - LatestCreatedRevisionName: "bad-condition-05555", - ObservedGeneration: 5555, - Conditions: []v1alpha1.ConfigurationCondition{{ - Type: v1alpha1.ConfigurationConditionReady, - Status: corev1.ConditionUnknown, - }}, - }, - ), - }}, + WantUpdates: []clientgotesting.UpdateActionImpl{ + builder.Config("bad-condition", "foo", 5555). + WithLatestCreatedRevisionName("bad-condition-05555"). + WithObservedGeneration(5555). + WithCondition(v1alpha1.ConfigurationCondition{ + Type: v1alpha1.ConfigurationConditionReady, + Status: corev1.ConditionUnknown, + }).AsUpdateAction(), + }, Key: "foo/bad-condition", }, { Name: "failure creating build", @@ -230,23 +222,21 @@ func TestReconcile(t *testing.T) { builder.Config("create-build-failure", "foo", 99998).WithBuild(buildSpec), }, WantCreates: []metav1.Object{ - resources.MakeBuild(builder.Config("create-build-failure", "foo", 99998).WithBuild(buildSpec).Build()), + builder.Config("create-build-failure", "foo", 99998). + WithBuild(buildSpec). + ToBuild(), // No Revision gets created. }, - WantUpdates: []clientgotesting.UpdateActionImpl{{ - Object: builder.Config("create-build-failure", "foo", 99998). + WantUpdates: []clientgotesting.UpdateActionImpl{ + builder.Config("create-build-failure", "foo", 99998). WithBuild(buildSpec). - WithStatus( - v1alpha1.ConfigurationStatus{ - Conditions: []v1alpha1.ConfigurationCondition{{ - Type: v1alpha1.ConfigurationConditionReady, - Status: corev1.ConditionFalse, - Reason: "RevisionFailed", - Message: `Revision creation failed with message: "inducing failure for create builds".`, - }}, - }, - ), - }}, + WithCondition(v1alpha1.ConfigurationCondition{ + Type: v1alpha1.ConfigurationConditionReady, + Status: corev1.ConditionFalse, + Reason: "RevisionFailed", + Message: `Revision creation failed with message: "inducing failure for create builds".`, + }).AsUpdateAction(), + }, Key: "foo/create-build-failure", }, { Name: "failure creating revision", @@ -256,23 +246,22 @@ func TestReconcile(t *testing.T) { InduceFailure("create", "revisions"), }, Objects: []runtime.Object{ - cfg("create-revision-failure", "foo", 99998), + builder.Config("create-revision-failure", "foo", 99998), }, WantCreates: []metav1.Object{ - resources.MakeRevision(cfg("create-revision-failure", "foo", 99998)), + builder.Config("create-revision-failure", "foo", 99998). + ToRevision(). + Build(), + }, + WantUpdates: []clientgotesting.UpdateActionImpl{ + builder.Config("create-revision-failure", "foo", 99998). + WithCondition(v1alpha1.ConfigurationCondition{ + Type: v1alpha1.ConfigurationConditionReady, + Status: corev1.ConditionFalse, + Reason: "RevisionFailed", + Message: `Revision creation failed with message: "inducing failure for create revisions".`, + }).AsUpdateAction(), }, - WantUpdates: []clientgotesting.UpdateActionImpl{{ - Object: builder.Config("create-revision-failure", "foo", 99998).WithStatus( - v1alpha1.ConfigurationStatus{ - Conditions: []v1alpha1.ConfigurationCondition{{ - Type: v1alpha1.ConfigurationConditionReady, - Status: corev1.ConditionFalse, - Reason: "RevisionFailed", - Message: `Revision creation failed with message: "inducing failure for create revisions".`, - }}, - }, - ), - }}, Key: "foo/create-revision-failure", }, { Name: "failure updating configuration status", @@ -282,54 +271,50 @@ func TestReconcile(t *testing.T) { InduceFailure("update", "configurations"), }, Objects: []runtime.Object{ - cfg("update-config-failure", "foo", 1234), + builder.Config("update-config-failure", "foo", 1234), }, WantCreates: []metav1.Object{ - resources.MakeRevision(cfg("update-config-failure", "foo", 1234)), - }, - WantUpdates: []clientgotesting.UpdateActionImpl{{ - Object: builder.Config("update-config-failure", "foo", 1234).WithStatus( - v1alpha1.ConfigurationStatus{ - LatestCreatedRevisionName: "update-config-failure-01234", - ObservedGeneration: 1234, - Conditions: []v1alpha1.ConfigurationCondition{{ - Type: v1alpha1.ConfigurationConditionReady, - Status: corev1.ConditionUnknown, - }}, - }, - ), - }}, + builder.Config("update-config-failure", "foo", 1234). + ToRevision(). + Build(), + }, + WantUpdates: []clientgotesting.UpdateActionImpl{ + builder.Config("update-config-failure", "foo", 1234). + WithLatestCreatedRevisionName("update-config-failure-01234"). + WithObservedGeneration(1234). + WithCondition(v1alpha1.ConfigurationCondition{ + Type: v1alpha1.ConfigurationConditionReady, + Status: corev1.ConditionUnknown, + }).AsUpdateAction(), + }, Key: "foo/update-config-failure", }, { Name: "failed revision recovers", Objects: []runtime.Object{ - builder.Config("revision-recovers", "foo", 1337).WithStatus( - v1alpha1.ConfigurationStatus{ - LatestCreatedRevisionName: "revision-recovers-01337", - LatestReadyRevisionName: "revision-recovers-01337", - Conditions: []v1alpha1.ConfigurationCondition{{ + builder.Config("revision-recovers", "foo", 1337). + WithLatestCreatedRevisionName("revision-recovers-01337"). + WithLatestReadyRevisionName("revision-recovers-01337"). + WithCondition( + v1alpha1.ConfigurationCondition{ Type: v1alpha1.ConfigurationConditionReady, Status: corev1.ConditionFalse, Reason: "RevisionFailed", Message: `Revision "revision-recovers-01337" failed with message: "Weebles wobble, but they don't fall down".`, - }}, - }, - ), - makeRevReady(t, resources.MakeRevision(cfg("revision-recovers", "foo", 1337))), - }, - WantUpdates: []clientgotesting.UpdateActionImpl{{ - Object: builder.Config("revision-recovers", "foo", 1337).WithStatus( - v1alpha1.ConfigurationStatus{ - LatestCreatedRevisionName: "revision-recovers-01337", - LatestReadyRevisionName: "revision-recovers-01337", - ObservedGeneration: 1337, - Conditions: []v1alpha1.ConfigurationCondition{{ - Type: v1alpha1.ConfigurationConditionReady, - Status: corev1.ConditionTrue, - }}, - }, - ), - }}, + }), + builder.Config("revision-recovers", "foo", 1337). + ToRevision(). + WithReadyStatus(t), + }, + WantUpdates: []clientgotesting.UpdateActionImpl{ + builder.Config("revision-recovers", "foo", 1337). + WithLatestCreatedRevisionName("revision-recovers-01337"). + WithLatestReadyRevisionName("revision-recovers-01337"). + WithObservedGeneration(1337). + WithCondition(v1alpha1.ConfigurationCondition{ + Type: v1alpha1.ConfigurationConditionReady, + Status: corev1.ConditionTrue, + }).AsUpdateAction(), + }, Key: "foo/revision-recovers", }} @@ -341,33 +326,3 @@ func TestReconcile(t *testing.T) { } }) } - -func setRevConcurrencyModel(rev *v1alpha1.Revision, ss v1alpha1.RevisionRequestConcurrencyModelType) *v1alpha1.Revision { - rev.Spec.ConcurrencyModel = ss - return rev -} - -func makeRevReady(t *testing.T, rev *v1alpha1.Revision) *v1alpha1.Revision { - rev.Status.InitializeConditions() - rev.Status.MarkContainerHealthy() - rev.Status.MarkResourcesAvailable() - if !rev.Status.IsReady() { - t.Fatalf("Wanted ready revision: %v", rev) - } - return rev -} - -func makeRevFailed(rev *v1alpha1.Revision) *v1alpha1.Revision { - rev.Status.InitializeConditions() - rev.Status.MarkContainerMissing("It's the end of the world as we know it") - return rev -} - -func makeRevStatus(rev *v1alpha1.Revision, status v1alpha1.RevisionStatus) *v1alpha1.Revision { - rev.Status = status - return rev -} - -func cfg(name, namespace string, generation int64) *v1alpha1.Configuration { - return builder.Config(name, namespace, generation).Build() -} diff --git a/pkg/controller/testing/builder/configuration.go b/pkg/controller/testing/builder/configuration.go index fb6d4e75e4b4..b0509b2bc765 100644 --- a/pkg/controller/testing/builder/configuration.go +++ b/pkg/controller/testing/builder/configuration.go @@ -3,19 +3,19 @@ package builder import ( buildv1alpha1 "github.com/knative/build/pkg/apis/build/v1alpha1" "github.com/knative/serving/pkg/apis/serving/v1alpha1" + "github.com/knative/serving/pkg/controller/configuration/resources" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" + clientgotesting "k8s.io/client-go/testing" ) type ConfigBuilder struct { - Config *v1alpha1.Configuration + *v1alpha1.Configuration } func Config(name, namespace string, generation int64) ConfigBuilder { return ConfigBuilder{ - Config: &v1alpha1.Configuration{ + Configuration: &v1alpha1.Configuration{ ObjectMeta: metav1.ObjectMeta{ Name: name, Namespace: namespace, @@ -30,33 +30,65 @@ func Config(name, namespace string, generation int64) ConfigBuilder { }, }, }, + Status: v1alpha1.ConfigurationStatus{ + Conditions: []v1alpha1.ConfigurationCondition{}, + }, }, } } func (bldr ConfigBuilder) WithStatus(s v1alpha1.ConfigurationStatus) ConfigBuilder { - bldr.Config.Status = s + bldr.Configuration.Status = s return bldr } func (bldr ConfigBuilder) WithBuild(b buildv1alpha1.BuildSpec) ConfigBuilder { - bldr.Config.Spec.Build = &b + bldr.Configuration.Spec.Build = &b + return bldr +} + +func (bldr ConfigBuilder) WithObservedGeneration(gen int64) ConfigBuilder { + bldr.Configuration.Status.ObservedGeneration = gen + return bldr +} + +func (bldr ConfigBuilder) WithLatestCreatedRevisionName(name string) ConfigBuilder { + bldr.Configuration.Status.LatestCreatedRevisionName = name + return bldr +} + +func (bldr ConfigBuilder) WithLatestReadyRevisionName(name string) ConfigBuilder { + bldr.Configuration.Status.LatestReadyRevisionName = name + return bldr +} + +func (bldr ConfigBuilder) WithCondition(c v1alpha1.ConfigurationCondition) ConfigBuilder { + bldr.Configuration.Status.Conditions = append(bldr.Configuration.Status.Conditions, c) return bldr } func (bldr ConfigBuilder) WithConcurrencyModel(cm v1alpha1.RevisionRequestConcurrencyModelType) ConfigBuilder { - bldr.Config.Spec.RevisionTemplate.Spec.ConcurrencyModel = cm + bldr.Configuration.Spec.RevisionTemplate.Spec.ConcurrencyModel = cm return bldr } func (bldr ConfigBuilder) Build() *v1alpha1.Configuration { - return bldr.Config + return bldr.Configuration +} + +func (bldr ConfigBuilder) AsUpdateAction() clientgotesting.UpdateActionImpl { + action := clientgotesting.UpdateActionImpl{} + action.Verb = "update" + action.Object = bldr.Configuration + return action } -func (bldr ConfigBuilder) GetObjectKind() schema.ObjectKind { - return bldr.Config.GetObjectKind() +func (bldr ConfigBuilder) ToRevision() RevisionBuilder { + return RevisionBuilder{ + Revision: resources.MakeRevision(bldr.Configuration), + } } -func (bldr ConfigBuilder) DeepCopyObject() runtime.Object { - return bldr.Config.DeepCopyObject() +func (bldr ConfigBuilder) ToBuild() *buildv1alpha1.Build { + return resources.MakeBuild(bldr.Configuration) } diff --git a/pkg/controller/testing/builder/revision.go b/pkg/controller/testing/builder/revision.go new file mode 100644 index 000000000000..94d810287067 --- /dev/null +++ b/pkg/controller/testing/builder/revision.go @@ -0,0 +1,43 @@ +package builder + +import ( + "testing" + + "github.com/knative/serving/pkg/apis/serving/v1alpha1" +) + +type RevisionBuilder struct { + *v1alpha1.Revision +} + +func (bldr RevisionBuilder) WithConcurrencyModel(cm v1alpha1.RevisionRequestConcurrencyModelType) RevisionBuilder { + bldr.Revision.Spec.ConcurrencyModel = cm + return bldr +} + +func (bldr RevisionBuilder) WithReadyStatus(t *testing.T) RevisionBuilder { + bldr.Revision.Status.InitializeConditions() + bldr.Revision.Status.MarkContainerHealthy() + bldr.Revision.Status.MarkResourcesAvailable() + + if !bldr.Revision.Status.IsReady() { + t.Fatalf("Wanted ready revision: %v", bldr.Revision) + } + + return bldr +} + +func (bldr RevisionBuilder) WithFailedStatus() RevisionBuilder { + bldr.Revision.Status.InitializeConditions() + bldr.Revision.Status.MarkContainerMissing("It's the end of the world as we know it") + return bldr +} + +func (bldr RevisionBuilder) WithCondition(c v1alpha1.RevisionCondition) RevisionBuilder { + bldr.Revision.Status.Conditions = append(bldr.Revision.Status.Conditions, c) + return bldr +} + +func (bldr RevisionBuilder) Build() *v1alpha1.Revision { + return bldr.Revision +} diff --git a/pkg/controller/testing/table.go b/pkg/controller/testing/table.go index 662d9fa8bbd2..a063edc367e4 100644 --- a/pkg/controller/testing/table.go +++ b/pkg/controller/testing/table.go @@ -202,7 +202,9 @@ func NewListers(objs []runtime.Object) Listers { case *v1alpha1.Configuration: ls.Configuration.Items = append(ls.Configuration.Items, o) case builder.ConfigBuilder: - ls.Configuration.Items = append(ls.Configuration.Items, o.Build()) + ls.Configuration.Items = append(ls.Configuration.Items, o.Configuration) + case builder.RevisionBuilder: + ls.Revision.Items = append(ls.Revision.Items, o.Revision) case *v1alpha1.Revision: ls.Revision.Items = append(ls.Revision.Items, o) @@ -268,13 +270,6 @@ type Ctor func(*Listers, controller.Options) controller.Interface func (r *TableRow) Test(t *testing.T, ctor Ctor) { ls := NewListers(r.Objects) - for i, action := range r.WantUpdates { - if builder, ok := action.Object.(builder.ConfigBuilder); ok { - action.Object = builder.Build() - } - r.WantUpdates[i] = action - } - kubeClient := fakekubeclientset.NewSimpleClientset(ls.GetKubeObjects()...) client := fakeclientset.NewSimpleClientset(ls.GetServingObjects()...) buildClient := fakebuildclientset.NewSimpleClientset(ls.GetBuildObjects()...) @@ -353,7 +348,7 @@ func (r *TableRow) Test(t *testing.T, ctor Ctor) { continue } got := deleteActions[i] - if got.GetName() != want.Name { + if got.GetName() != want.GetName() { t.Errorf("unexpected delete[%d]: %#v", i, got) } if got.GetNamespace() != expectedNamespace && got.GetNamespace() != system.Namespace { @@ -373,7 +368,7 @@ func (r *TableRow) Test(t *testing.T, ctor Ctor) { } got := patchActions[i] - if got.GetName() != want.Name { + if got.GetName() != want.GetName() { t.Errorf("unexpected patch[%d]: %#v", i, got) } if got.GetNamespace() != expectedNamespace && got.GetNamespace() != system.Namespace {