mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +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 controlplane
 | 
						|
 | 
						|
// 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)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |