From 4c56b8cfc5cf7d5604b3477c06a932c3c4ae2a34 Mon Sep 17 00:00:00 2001 From: Michail Kargakis Date: Wed, 24 Aug 2016 22:33:32 +0200 Subject: [PATCH] kubectl: cast notFound error to struct --- pkg/kubectl/stop.go | 2 +- pkg/kubectl/stop_test.go | 47 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/pkg/kubectl/stop.go b/pkg/kubectl/stop.go index 010edbf1e5b..34eb031c81a 100644 --- a/pkg/kubectl/stop.go +++ b/pkg/kubectl/stop.go @@ -454,7 +454,7 @@ func (reaper *DeploymentReaper) Stop(namespace, name string, timeout time.Durati errList := []error{} for _, rc := range rsList.Items { if err := rsReaper.Stop(rc.Namespace, rc.Name, timeout, gracePeriod); err != nil { - scaleGetErr, ok := err.(*ScaleError) + scaleGetErr, ok := err.(ScaleError) if errors.IsNotFound(err) || (ok && errors.IsNotFound(scaleGetErr.ActualError)) { continue } diff --git a/pkg/kubectl/stop_test.go b/pkg/kubectl/stop_test.go index aa116f3c1f2..1af5dfb87d8 100644 --- a/pkg/kubectl/stop_test.go +++ b/pkg/kubectl/stop_test.go @@ -24,6 +24,7 @@ import ( "time" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apis/batch" "k8s.io/kubernetes/pkg/apis/extensions" @@ -727,3 +728,49 @@ func TestSimpleStop(t *testing.T) { } } } + +func TestDeploymentNotFoundError(t *testing.T) { + name := "foo" + ns := "default" + deployment := &extensions.Deployment{ + ObjectMeta: api.ObjectMeta{ + Name: name, + Namespace: ns, + }, + Spec: extensions.DeploymentSpec{ + Replicas: 0, + Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"k1": "v1"}}, + }, + Status: extensions.DeploymentStatus{ + Replicas: 0, + }, + } + template := deploymentutil.GetNewReplicaSetTemplate(deployment) + + fake := &testclient.Fake{} + fake.AddReactor("get", "deployments", func(action testclient.Action) (handled bool, ret runtime.Object, err error) { + return true, deployment, nil + }) + fake.AddReactor("list", "replicasets", func(action testclient.Action) (handled bool, ret runtime.Object, err error) { + list := &extensions.ReplicaSetList{Items: []extensions.ReplicaSet{ + { + ObjectMeta: api.ObjectMeta{ + Name: name, + Namespace: ns, + }, + Spec: extensions.ReplicaSetSpec{ + Template: template, + }, + }, + }} + return true, list, nil + }) + fake.AddReactor("get", "replicasets", func(action testclient.Action) (handled bool, ret runtime.Object, err error) { + return true, nil, ScaleError{ActualError: errors.NewNotFound(api.Resource("replicaset"), "doesnt-matter")} + }) + + reaper := DeploymentReaper{fake, time.Millisecond, time.Millisecond} + if err := reaper.Stop(ns, name, 0, nil); err != nil { + t.Fatalf("unexpected error: %#v", err) + } +}