Update go dependencies
This commit is contained in:
parent
293223eea0
commit
b7a799bf82
432 changed files with 37346 additions and 25783 deletions
128
vendor/k8s.io/apiserver/pkg/server/genericapiserver_test.go
generated
vendored
128
vendor/k8s.io/apiserver/pkg/server/genericapiserver_test.go
generated
vendored
|
|
@ -25,6 +25,8 @@ import (
|
|||
"net/http"
|
||||
"net/http/httptest"
|
||||
goruntime "runtime"
|
||||
"strconv"
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
|
|
@ -44,13 +46,13 @@ import (
|
|||
"k8s.io/apiserver/pkg/authentication/user"
|
||||
"k8s.io/apiserver/pkg/authorization/authorizer"
|
||||
"k8s.io/apiserver/pkg/endpoints/discovery"
|
||||
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||
genericapifilters "k8s.io/apiserver/pkg/endpoints/filters"
|
||||
apirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||
"k8s.io/apiserver/pkg/registry/rest"
|
||||
etcdtesting "k8s.io/apiserver/pkg/storage/etcd/testing"
|
||||
genericfilters "k8s.io/apiserver/pkg/server/filters"
|
||||
"k8s.io/client-go/informers"
|
||||
"k8s.io/client-go/kubernetes/fake"
|
||||
restclient "k8s.io/client-go/rest"
|
||||
openapi "k8s.io/kube-openapi/pkg/common"
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
@ -78,17 +80,11 @@ func init() {
|
|||
examplev1.AddToScheme(scheme)
|
||||
}
|
||||
|
||||
func testGetOpenAPIDefinitions(ref openapi.ReferenceCallback) map[string]openapi.OpenAPIDefinition {
|
||||
return map[string]openapi.OpenAPIDefinition{}
|
||||
}
|
||||
|
||||
// setUp is a convience function for setting up for (most) tests.
|
||||
func setUp(t *testing.T) (*etcdtesting.EtcdTestServer, Config, *assert.Assertions) {
|
||||
etcdServer, _ := etcdtesting.NewUnsecuredEtcd3TestClientServer(t, scheme)
|
||||
|
||||
func setUp(t *testing.T) (Config, *assert.Assertions) {
|
||||
config := NewConfig(codecs)
|
||||
config.PublicAddress = net.ParseIP("192.168.10.4")
|
||||
config.RequestContextMapper = genericapirequest.NewRequestContextMapper()
|
||||
config.RequestContextMapper = apirequest.NewRequestContextMapper()
|
||||
config.LegacyAPIGroupPrefixes = sets.NewString("/api")
|
||||
config.LoopbackClientConfig = &restclient.Config{}
|
||||
|
||||
|
|
@ -109,24 +105,23 @@ func setUp(t *testing.T) (*etcdtesting.EtcdTestServer, Config, *assert.Assertion
|
|||
sharedInformers := informers.NewSharedInformerFactory(clientset, config.LoopbackClientConfig.Timeout)
|
||||
config.Complete(sharedInformers)
|
||||
|
||||
return etcdServer, *config, assert.New(t)
|
||||
return *config, assert.New(t)
|
||||
}
|
||||
|
||||
func newMaster(t *testing.T) (*GenericAPIServer, *etcdtesting.EtcdTestServer, Config, *assert.Assertions) {
|
||||
etcdserver, config, assert := setUp(t)
|
||||
func newMaster(t *testing.T) (*GenericAPIServer, Config, *assert.Assertions) {
|
||||
config, assert := setUp(t)
|
||||
|
||||
s, err := config.Complete(nil).New("test", EmptyDelegate)
|
||||
if err != nil {
|
||||
t.Fatalf("Error in bringing up the server: %v", err)
|
||||
}
|
||||
return s, etcdserver, config, assert
|
||||
return s, config, assert
|
||||
}
|
||||
|
||||
// TestNew verifies that the New function returns a GenericAPIServer
|
||||
// using the configuration properly.
|
||||
func TestNew(t *testing.T) {
|
||||
s, etcdserver, config, assert := newMaster(t)
|
||||
defer etcdserver.Terminate(t)
|
||||
s, config, assert := newMaster(t)
|
||||
|
||||
// Verify many of the variables match their config counterparts
|
||||
assert.Equal(s.legacyAPIGroupPrefixes, config.LegacyAPIGroupPrefixes)
|
||||
|
|
@ -141,8 +136,7 @@ func TestNew(t *testing.T) {
|
|||
|
||||
// Verifies that AddGroupVersions works as expected.
|
||||
func TestInstallAPIGroups(t *testing.T) {
|
||||
etcdserver, config, assert := setUp(t)
|
||||
defer etcdserver.Terminate(t)
|
||||
config, assert := setUp(t)
|
||||
|
||||
config.LegacyAPIGroupPrefixes = sets.NewString("/apiPrefix")
|
||||
config.DiscoveryAddresses = discovery.DefaultAddresses{DefaultAddress: "ExternalAddress"}
|
||||
|
|
@ -308,8 +302,7 @@ func TestInstallAPIGroups(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestPrepareRun(t *testing.T) {
|
||||
s, etcdserver, config, assert := newMaster(t)
|
||||
defer etcdserver.Terminate(t)
|
||||
s, config, assert := newMaster(t)
|
||||
|
||||
assert.NotNil(config.SwaggerConfig)
|
||||
|
||||
|
|
@ -336,8 +329,7 @@ func TestPrepareRun(t *testing.T) {
|
|||
|
||||
// TestCustomHandlerChain verifies the handler chain with custom handler chain builder functions.
|
||||
func TestCustomHandlerChain(t *testing.T) {
|
||||
etcdserver, config, _ := setUp(t)
|
||||
defer etcdserver.Terminate(t)
|
||||
config, _ := setUp(t)
|
||||
|
||||
var protected, called bool
|
||||
|
||||
|
|
@ -390,13 +382,12 @@ func TestCustomHandlerChain(t *testing.T) {
|
|||
|
||||
// TestNotRestRoutesHaveAuth checks that special non-routes are behind authz/authn.
|
||||
func TestNotRestRoutesHaveAuth(t *testing.T) {
|
||||
etcdserver, config, _ := setUp(t)
|
||||
defer etcdserver.Terminate(t)
|
||||
config, _ := setUp(t)
|
||||
|
||||
authz := mockAuthorizer{}
|
||||
|
||||
config.LegacyAPIGroupPrefixes = sets.NewString("/apiPrefix")
|
||||
config.Authorizer = &authz
|
||||
config.Authorization.Authorizer = &authz
|
||||
|
||||
config.EnableSwaggerUI = true
|
||||
config.EnableIndex = true
|
||||
|
|
@ -437,9 +428,9 @@ type mockAuthorizer struct {
|
|||
lastURI string
|
||||
}
|
||||
|
||||
func (authz *mockAuthorizer) Authorize(a authorizer.Attributes) (authorized bool, reason string, err error) {
|
||||
func (authz *mockAuthorizer) Authorize(a authorizer.Attributes) (authorized authorizer.Decision, reason string, err error) {
|
||||
authz.lastURI = a.GetPath()
|
||||
return true, "", nil
|
||||
return authorizer.DecisionAllow, "", nil
|
||||
}
|
||||
|
||||
type mockAuthenticator struct {
|
||||
|
|
@ -479,7 +470,7 @@ func (p *testGetterStorage) New() runtime.Object {
|
|||
}
|
||||
}
|
||||
|
||||
func (p *testGetterStorage) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) {
|
||||
func (p *testGetterStorage) Get(ctx apirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
|
|
@ -509,3 +500,82 @@ func fakeVersion() version.Info {
|
|||
Platform: fmt.Sprintf("%s/%s", goruntime.GOOS, goruntime.GOARCH),
|
||||
}
|
||||
}
|
||||
|
||||
// TestGracefulShutdown verifies server shutdown after request handler finish.
|
||||
func TestGracefulShutdown(t *testing.T) {
|
||||
config, _ := setUp(t)
|
||||
|
||||
var graceShutdown bool
|
||||
wg := sync.WaitGroup{}
|
||||
wg.Add(1)
|
||||
|
||||
config.BuildHandlerChainFunc = func(apiHandler http.Handler, c *Config) http.Handler {
|
||||
handler := genericfilters.WithWaitGroup(apiHandler, c.RequestContextMapper, c.LongRunningFunc, c.HandlerChainWaitGroup)
|
||||
handler = genericapifilters.WithRequestInfo(handler, c.RequestInfoResolver, c.RequestContextMapper)
|
||||
handler = apirequest.WithRequestContext(handler, c.RequestContextMapper)
|
||||
return handler
|
||||
}
|
||||
|
||||
handler := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
||||
wg.Done()
|
||||
time.Sleep(2 * time.Second)
|
||||
w.WriteHeader(http.StatusOK)
|
||||
graceShutdown = true
|
||||
})
|
||||
|
||||
s, err := config.Complete(nil).New("test", EmptyDelegate)
|
||||
if err != nil {
|
||||
t.Fatalf("Error in bringing up the server: %v", err)
|
||||
}
|
||||
|
||||
s.Handler.NonGoRestfulMux.Handle("/test", handler)
|
||||
|
||||
insecureServer := &http.Server{
|
||||
Addr: "0.0.0.0:0",
|
||||
Handler: s.Handler,
|
||||
}
|
||||
stopCh := make(chan struct{})
|
||||
|
||||
ln, err := net.Listen("tcp", insecureServer.Addr)
|
||||
if err != nil {
|
||||
t.Errorf("failed to listen on %v: %v", insecureServer.Addr, err)
|
||||
}
|
||||
|
||||
// get port
|
||||
serverPort := ln.Addr().(*net.TCPAddr).Port
|
||||
err = RunServer(insecureServer, ln, 10*time.Second, stopCh)
|
||||
if err != nil {
|
||||
t.Errorf("RunServer err: %v", err)
|
||||
}
|
||||
|
||||
graceCh := make(chan struct{})
|
||||
// mock a client request
|
||||
go func() {
|
||||
resp, err := http.Get("http://127.0.0.1:" + strconv.Itoa(serverPort) + "/test")
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected http error: %v", err)
|
||||
}
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
t.Errorf("Unexpected http status code: %v", resp.StatusCode)
|
||||
}
|
||||
close(graceCh)
|
||||
}()
|
||||
|
||||
// close stopCh after request sent to server to guarantee request handler is running.
|
||||
wg.Wait()
|
||||
close(stopCh)
|
||||
// wait for wait group handler finish
|
||||
s.HandlerChainWaitGroup.Wait()
|
||||
|
||||
// check server all handlers finished.
|
||||
if !graceShutdown {
|
||||
t.Errorf("server shutdown not gracefully.")
|
||||
}
|
||||
// check client to make sure receive response.
|
||||
select {
|
||||
case <-graceCh:
|
||||
t.Logf("server shutdown gracefully.")
|
||||
case <-time.After(30 * time.Second):
|
||||
t.Errorf("Timed out waiting for response.")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue