mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-10-31 02:08:13 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			96 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // +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)
 | |
| 		}
 | |
| 	}
 | |
| }
 | 
