diff --git a/pkg/cloudprovider/providers/azure/BUILD b/pkg/cloudprovider/providers/azure/BUILD index 322024f2c61..eea1107d602 100644 --- a/pkg/cloudprovider/providers/azure/BUILD +++ b/pkg/cloudprovider/providers/azure/BUILD @@ -63,6 +63,7 @@ go_test( "azure_loadbalancer_test.go", "azure_test.go", "azure_util_test.go", + "azure_wrap_test.go", ], importpath = "k8s.io/kubernetes/pkg/cloudprovider/providers/azure", library = ":go_default_library", @@ -71,6 +72,7 @@ go_test( "//pkg/kubelet/apis:go_default_library", "//vendor/github.com/Azure/azure-sdk-for-go/arm/compute:go_default_library", "//vendor/github.com/Azure/azure-sdk-for-go/arm/network:go_default_library", + "//vendor/github.com/Azure/go-autorest/autorest:go_default_library", "//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", diff --git a/pkg/cloudprovider/providers/azure/azure_wrap.go b/pkg/cloudprovider/providers/azure/azure_wrap.go index f1aa0def597..ec045fee007 100644 --- a/pkg/cloudprovider/providers/azure/azure_wrap.go +++ b/pkg/cloudprovider/providers/azure/azure_wrap.go @@ -35,7 +35,10 @@ func checkResourceExistsFromError(err error) (bool, error) { return true, nil } v, ok := err.(autorest.DetailedError) - if ok && v.StatusCode == http.StatusNotFound { + if !ok { + return false, err + } + if v.StatusCode == http.StatusNotFound { return false, nil } return false, v diff --git a/pkg/cloudprovider/providers/azure/azure_wrap_test.go b/pkg/cloudprovider/providers/azure/azure_wrap_test.go new file mode 100644 index 00000000000..380194ba9c3 --- /dev/null +++ b/pkg/cloudprovider/providers/azure/azure_wrap_test.go @@ -0,0 +1,53 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package azure + +import ( + "fmt" + "net/http" + "reflect" + "testing" + + "github.com/Azure/go-autorest/autorest" +) + +func TestExtractNotFound(t *testing.T) { + notFound := autorest.DetailedError{StatusCode: http.StatusNotFound} + otherHTTP := autorest.DetailedError{StatusCode: http.StatusForbidden} + otherErr := fmt.Errorf("other error") + + tests := []struct { + err error + expectedErr error + exists bool + }{ + {nil, nil, true}, + {otherErr, otherErr, false}, + {notFound, nil, false}, + {otherHTTP, otherHTTP, false}, + } + + for _, test := range tests { + exists, err := checkResourceExistsFromError(test.err) + if test.exists != exists { + t.Errorf("expected: %v, saw: %v", test.exists, exists) + } + if !reflect.DeepEqual(test.expectedErr, err) { + t.Errorf("expected err: %v, saw: %v", test.expectedErr, err) + } + } +}