package cmd import ( "testing" "time" kapi "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake" "k8s.io/kubernetes/pkg/client/testing/core" ktestclient "k8s.io/kubernetes/pkg/client/unversioned/testclient" "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/runtime" "github.com/openshift/origin/pkg/client/testclient" deployapi "github.com/openshift/origin/pkg/deploy/api" _ "github.com/openshift/origin/pkg/deploy/api/install" deploytest "github.com/openshift/origin/pkg/deploy/api/test" deployutil "github.com/openshift/origin/pkg/deploy/util" ) func TestScale(t *testing.T) { tests := []struct { name string size uint wait bool errExpected bool }{ { name: "simple scale", size: 2, wait: false, errExpected: false, }, { name: "scale with wait", size: 2, wait: true, errExpected: false, }, } for _, test := range tests { t.Logf("evaluating test %q", test.name) oc := &testclient.Fake{} kc := &fake.Clientset{} scaler := NewDeploymentConfigScaler(oc, kc) config := deploytest.OkDeploymentConfig(1) config.Spec.Replicas = 1 deployment, _ := deployutil.MakeDeployment(config, kapi.Codecs.LegacyCodec(deployapi.SchemeGroupVersion)) var wait *kubectl.RetryParams if test.wait { wait = &kubectl.RetryParams{Interval: time.Millisecond, Timeout: time.Second} } oc.AddReactor("get", "deploymentconfigs", func(action ktestclient.Action) (handled bool, ret runtime.Object, err error) { return true, config, nil }) oc.AddReactor("update", "deploymentconfigs/scale", func(action ktestclient.Action) (handled bool, ret runtime.Object, err error) { // Simulate the asynchronous update of the RC replicas based on the // scale replica count. scale := action.(ktestclient.UpdateAction).GetObject().(*extensions.Scale) scale.Status.Replicas = scale.Spec.Replicas config.Spec.Replicas = scale.Spec.Replicas deployment.Spec.Replicas = scale.Spec.Replicas deployment.Status.Replicas = deployment.Spec.Replicas return true, scale, nil }) kc.AddReactor("get", "replicationcontrollers", func(action core.Action) (handled bool, ret runtime.Object, err error) { return true, deployment, nil }) err := scaler.Scale("default", config.Name, test.size, nil, nil, wait) if err != nil { if !test.errExpected { t.Errorf("unexpected error: %s", err) continue } } if e, a := config.Spec.Replicas, deployment.Spec.Replicas; e != a { t.Errorf("expected rc/%s replicas %d, got %d", deployment.Name, e, a) } } }