Skip to content

Commit

Permalink
Use table tests for revision scaler (knative#1677)
Browse files Browse the repository at this point in the history
  • Loading branch information
tanzeeb committed Jul 25, 2018
1 parent b385c55 commit aed320d
Showing 1 changed file with 25 additions and 42 deletions.
67 changes: 25 additions & 42 deletions pkg/autoscaler/revision_scaler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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)
}
}

0 comments on commit aed320d

Please sign in to comment.