diff --git a/pkg/autoscaler/revision_scaler_test.go b/pkg/autoscaler/revision_scaler_test.go index cb93c8dd536a..6871adf91677 100644 --- a/pkg/autoscaler/revision_scaler_test.go +++ b/pkg/autoscaler/revision_scaler_test.go @@ -37,50 +37,33 @@ const ( testRevisionKey = "test-namespace/test-revision" ) -// FIXME: Matt Moor asked 'Can we combine some of these tests into a "table test"?' - -func TestRevisionScalerScalesToZero(t *testing.T) { - revision := newRevision(v1alpha1.RevisionServingStateActive) - deployment := newDeployment(revision, 1) - - revisionScaler, servingClient, _ := createRevisionScaler(t, revision, deployment) - - revisionScaler.Scale(revision, 0) - - checkServingState(t, servingClient, v1alpha1.RevisionServingStateReserve) -} - -func TestRevisionScalerScalesUp(t *testing.T) { - revision := newRevision(v1alpha1.RevisionServingStateActive) - deployment := newDeployment(revision, 1) - revisionScaler, servingClient, kubeClient := createRevisionScaler(t, revision, deployment) - - revisionScaler.Scale(revision, 10) - - checkServingState(t, servingClient, v1alpha1.RevisionServingStateActive) - checkReplicas(t, kubeClient, deployment, 10) -} - -func TestRevisionScalerDoesScaleUpInactiveRevision(t *testing.T) { - revision := newRevision(v1alpha1.RevisionServingStateReserve) - deployment := newDeployment(revision, 1) - revisionScaler, servingClient, kubeClient := createRevisionScaler(t, revision, deployment) - - revisionScaler.Scale(revision, 10) - - checkServingState(t, servingClient, v1alpha1.RevisionServingStateReserve) - checkReplicas(t, kubeClient, deployment, 1) -} +func TestRevisionScaler(t *testing.T) { + examples := []struct { + label string + startState v1alpha1.RevisionServingStateType + startReplicas int + scaleTo int32 + wantState v1alpha1.RevisionServingStateType + wantReplicas int + }{ + {"scales to zero", v1alpha1.RevisionServingStateActive, 1, 0, v1alpha1.RevisionServingStateReserve, 1}, + {"scales up", v1alpha1.RevisionServingStateActive, 1, 10, v1alpha1.RevisionServingStateActive, 10}, + {"scales up inactive revision", v1alpha1.RevisionServingStateReserve, 1, 10, v1alpha1.RevisionServingStateReserve, 1}, + {"does not scale up from zero", v1alpha1.RevisionServingStateActive, 0, 10, v1alpha1.RevisionServingStateActive, 0}, + } -func TestRevisionScalerDoesNotScaleUpFromZero(t *testing.T) { - revision := newRevision(v1alpha1.RevisionServingStateActive) // normally implies a non-zero scale - deployment := newDeployment(revision, 0) - revisionScaler, servingClient, kubeClient := createRevisionScaler(t, revision, deployment) + for _, e := range examples { + t.Run(e.label, func(t *testing.T) { + revision := newRevision(e.startState) + deployment := newDeployment(revision, e.startReplicas) + revisionScaler, servingClient, kubeClient := createRevisionScaler(t, revision, deployment) - revisionScaler.Scale(revision, 10) + revisionScaler.Scale(revision, e.scaleTo) - checkServingState(t, servingClient, v1alpha1.RevisionServingStateActive) - checkReplicas(t, kubeClient, deployment, 0) + checkServingState(t, servingClient, e.wantState) + checkReplicas(t, kubeClient, deployment, e.wantReplicas) + }) + } } func createRevisionScaler(t *testing.T, revision *v1alpha1.Revision, deployment *v1.Deployment) (autoscaler.RevisionScaler, clientset.Interface, kubernetes.Interface) { @@ -146,6 +129,6 @@ func checkReplicas(t *testing.T, kubeClient kubernetes.Interface, deployment *v1 } if *updatedDeployment.Spec.Replicas != int32(expectedScale) { - t.Fatal("Unexpected deployment replicas.", updatedDeployment.Spec.Replicas) + t.Fatal("Unexpected deployment replicas.", *updatedDeployment.Spec.Replicas) } }