123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- // +build !race
- /*
- Copyright 2014 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 master
- // This test file is separated from master_test.go so we would be able to disable
- // race check for it. TestValidOpenAPISpec will became extremely slow if -race
- // flag exists, and will cause the tests to timeout.
- import (
- "net/http"
- "net/http/httptest"
- "testing"
- "github.com/go-openapi/loads"
- "github.com/go-openapi/spec"
- "github.com/go-openapi/strfmt"
- "github.com/go-openapi/validate"
- openapinamer "k8s.io/apiserver/pkg/endpoints/openapi"
- genericapiserver "k8s.io/apiserver/pkg/server"
- "k8s.io/kubernetes/pkg/api/legacyscheme"
- openapigen "k8s.io/kubernetes/pkg/generated/openapi"
- )
- // TestValidOpenAPISpec verifies that the open api is added
- // at the proper endpoint and the spec is valid.
- func TestValidOpenAPISpec(t *testing.T) {
- etcdserver, config, assert := setUp(t)
- defer etcdserver.Terminate(t)
- config.GenericConfig.EnableIndex = true
- config.GenericConfig.OpenAPIConfig = genericapiserver.DefaultOpenAPIConfig(openapigen.GetOpenAPIDefinitions, openapinamer.NewDefinitionNamer(legacyscheme.Scheme))
- config.GenericConfig.OpenAPIConfig.Info = &spec.Info{
- InfoProps: spec.InfoProps{
- Title: "Kubernetes",
- Version: "unversioned",
- },
- }
- master, err := config.Complete().New(genericapiserver.NewEmptyDelegate())
- if err != nil {
- t.Fatalf("Error in bringing up the master: %v", err)
- }
- // make sure swagger.json is not registered before calling PrepareRun.
- server := httptest.NewServer(master.GenericAPIServer.Handler.Director)
- defer server.Close()
- resp, err := http.Get(server.URL + "/openapi/v2")
- if !assert.NoError(err) {
- t.Errorf("unexpected error: %v", err)
- }
- assert.Equal(http.StatusNotFound, resp.StatusCode)
- master.GenericAPIServer.PrepareRun()
- resp, err = http.Get(server.URL + "/openapi/v2")
- if !assert.NoError(err) {
- t.Errorf("unexpected error: %v", err)
- }
- assert.Equal(http.StatusOK, resp.StatusCode)
- // as json schema
- var sch spec.Schema
- if assert.NoError(decodeResponse(resp, &sch)) {
- validator := validate.NewSchemaValidator(spec.MustLoadSwagger20Schema(), nil, "", strfmt.Default)
- res := validator.Validate(&sch)
- assert.NoError(res.AsError())
- }
- // Validate OpenApi spec
- doc, err := loads.Spec(server.URL + "/openapi/v2")
- if assert.NoError(err) {
- validator := validate.NewSpecValidator(doc.Schema(), strfmt.Default)
- res, warns := validator.Validate(doc)
- assert.NoError(res.AsError())
- if !warns.IsValid() {
- t.Logf("Open API spec on root has some warnings : %v", warns)
- }
- }
- }
|