diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 07d19f646..3598fddc7 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -248,331 +248,331 @@ }, { "ImportPath": "k8s.io/api/admissionregistration/v1alpha1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/admissionregistration/v1beta1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/apps/v1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/apps/v1beta1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/apps/v1beta2", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/authentication/v1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/authentication/v1beta1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/authorization/v1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/authorization/v1beta1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/autoscaling/v1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/autoscaling/v2beta1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/batch/v1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/batch/v1beta1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/batch/v2alpha1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/certificates/v1beta1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/core/v1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/events/v1beta1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/extensions/v1beta1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/imagepolicy/v1alpha1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/networking/v1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/policy/v1beta1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/rbac/v1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/rbac/v1alpha1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/rbac/v1beta1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/scheduling/v1alpha1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/settings/v1alpha1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/storage/v1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/storage/v1alpha1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/api/storage/v1beta1", - "Rev": "2b6dbd39c3ac92fc2805ea6f9d38cc92d9357009" + "Rev": "73d903622b7391f3312dcbac6483fed484e185f8" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/equality", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/errors", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/meta", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/resource", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/testing", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/testing/fuzzer", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/api/testing/roundtrip", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/apimachinery", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/apimachinery/announced", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/apimachinery/registered", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/fuzzer", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/internalversion", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/apis/meta/v1beta1", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/conversion", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/conversion/queryparams", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/fields", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/labels", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/schema", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/json", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/protobuf", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/recognizer", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/streaming", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/runtime/serializer/versioning", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/selection", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/types", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/cache", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/clock", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/diff", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/errors", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/framer", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/httpstream", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/httpstream/spdy", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/intstr", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/json", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/mergepatch", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/net", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/remotecommand", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/runtime", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/sets", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/strategicpatch", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/validation", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/validation/field", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/wait", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/util/yaml", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/version", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/pkg/watch", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/json", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/netutil", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/apimachinery/third_party/forked/golang/reflect", - "Rev": "30e1d93fbac3539695e7010ae06c93029a001e67" + "Rev": "302974c03f7e50f16561ba237db776ab93594ef6" }, { "ImportPath": "k8s.io/kube-openapi/pkg/util/proto", diff --git a/discovery/discovery_client.go b/discovery/discovery_client.go index 3c685a955..083508616 100644 --- a/discovery/discovery_client.go +++ b/discovery/discovery_client.go @@ -335,7 +335,7 @@ func (d *DiscoveryClient) ServerVersion() (*version.Info, error) { func (d *DiscoveryClient) OpenAPISchema() (*openapi_v2.Document, error) { data, err := d.restClient.Get().AbsPath("/openapi/v2").SetHeader("Accept", mimePb).Do().Raw() if err != nil { - if errors.IsForbidden(err) || errors.IsNotFound(err) { + if errors.IsForbidden(err) || errors.IsNotFound(err) || errors.IsNotAcceptable(err) { // single endpoint not found/registered in old server, try to fetch old endpoint // TODO(roycaihw): remove this in 1.11 data, err = d.restClient.Get().AbsPath("/swagger-2.0.0.pb-v1").Do().Raw() diff --git a/discovery/discovery_client_test.go b/discovery/discovery_client_test.go index ad855139a..6f4de6b48 100644 --- a/discovery/discovery_client_test.go +++ b/discovery/discovery_client_test.go @@ -326,12 +326,12 @@ var returnedOpenAPI = openapi_v2.Document{ }, } -func openapiSchemaDeprecatedFakeServer() (*httptest.Server, error) { +func openapiSchemaDeprecatedFakeServer(status int) (*httptest.Server, error) { var sErr error server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - // old server returns 403 on new endpoint request if req.URL.Path == "/openapi/v2" { - w.WriteHeader(http.StatusForbidden) + // write the error status for the new endpoint request + w.WriteHeader(status) return } if req.URL.Path != "/swagger-2.0.0.pb-v1" { @@ -398,8 +398,42 @@ func TestGetOpenAPISchema(t *testing.T) { } } -func TestGetOpenAPISchemaFallback(t *testing.T) { - server, err := openapiSchemaDeprecatedFakeServer() +func TestGetOpenAPISchemaForbiddenFallback(t *testing.T) { + server, err := openapiSchemaDeprecatedFakeServer(http.StatusForbidden) + if err != nil { + t.Errorf("unexpected error starting fake server: %v", err) + } + defer server.Close() + + client := NewDiscoveryClientForConfigOrDie(&restclient.Config{Host: server.URL}) + got, err := client.OpenAPISchema() + if err != nil { + t.Fatalf("unexpected error getting openapi: %v", err) + } + if e, a := returnedOpenAPI, *got; !reflect.DeepEqual(e, a) { + t.Errorf("expected %v, got %v", e, a) + } +} + +func TestGetOpenAPISchemaNotFoundFallback(t *testing.T) { + server, err := openapiSchemaDeprecatedFakeServer(http.StatusNotFound) + if err != nil { + t.Errorf("unexpected error starting fake server: %v", err) + } + defer server.Close() + + client := NewDiscoveryClientForConfigOrDie(&restclient.Config{Host: server.URL}) + got, err := client.OpenAPISchema() + if err != nil { + t.Fatalf("unexpected error getting openapi: %v", err) + } + if e, a := returnedOpenAPI, *got; !reflect.DeepEqual(e, a) { + t.Errorf("expected %v, got %v", e, a) + } +} + +func TestGetOpenAPISchemaNotAcceptableFallback(t *testing.T) { + server, err := openapiSchemaDeprecatedFakeServer(http.StatusNotAcceptable) if err != nil { t.Errorf("unexpected error starting fake server: %v", err) }