From 42f1e81488d8599c6874e467fe39b91a23654886 Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Wed, 13 Jun 2018 15:53:41 +0200 Subject: [PATCH] apiextensions-apiserver: add pkg/cmd/server/testing pkg for integration bootstrapping In analogy to kube-apiserver. --- cmd/kube-apiserver/app/BUILD | 2 +- cmd/kube-apiserver/app/apiextensions.go | 4 +- hack/.golint_failures | 1 - .../Godeps/Godeps.json | 4 + .../k8s.io/apiextensions-apiserver/main.go | 2 +- .../pkg/cmd/server/BUILD | 15 +- .../pkg/cmd/server/options/BUILD | 33 +++ .../server/{start.go => options/options.go} | 55 ++--- .../pkg/cmd/server/server.go | 64 ++++++ .../pkg/cmd/server/testing/BUILD | 33 +++ .../pkg/cmd/server/testing/testserver.go | 201 ++++++++++++++++++ .../test/integration/BUILD | 6 +- .../test/integration/basic_test.go | 120 +++++------ .../test/integration/finalization_test.go | 24 +-- .../{testserver => fixtures}/BUILD | 12 +- .../{testserver => fixtures}/resources.go | 17 +- .../test/integration/fixtures/server.go | 108 ++++++++++ .../test/integration/objectmeta_test.go | 32 ++- .../test/integration/registration_test.go | 75 +++---- .../test/integration/subresources_test.go | 52 ++--- .../test/integration/table_test.go | 8 +- .../test/integration/testserver/start.go | 162 -------------- .../test/integration/validation_test.go | 50 ++--- .../test/integration/versioning_test.go | 30 +-- .../test/integration/yaml_test.go | 16 +- .../apiserver/pkg/server/config_selfclient.go | 24 ++- test/e2e/apimachinery/BUILD | 2 +- test/e2e/apimachinery/crd_watch.go | 12 +- .../custom_resource_definition.go | 8 +- test/e2e/apimachinery/garbage_collector.go | 2 +- test/e2e/auth/BUILD | 2 +- test/e2e/auth/audit.go | 8 +- test/e2e/framework/BUILD | 2 +- test/e2e/framework/crd_util.go | 6 +- test/integration/garbagecollector/BUILD | 2 +- .../garbage_collector_test.go | 2 +- 36 files changed, 725 insertions(+), 471 deletions(-) create mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/options/BUILD rename staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/{start.go => options/options.go} (73%) create mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/server.go create mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/testing/BUILD create mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/testing/testserver.go rename staging/src/k8s.io/apiextensions-apiserver/test/integration/{testserver => fixtures}/BUILD (84%) rename staging/src/k8s.io/apiextensions-apiserver/test/integration/{testserver => fixtures}/resources.go (93%) create mode 100644 staging/src/k8s.io/apiextensions-apiserver/test/integration/fixtures/server.go delete mode 100644 staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/start.go diff --git a/cmd/kube-apiserver/app/BUILD b/cmd/kube-apiserver/app/BUILD index ee2da638ce5..cdfccec6a6d 100644 --- a/cmd/kube-apiserver/app/BUILD +++ b/cmd/kube-apiserver/app/BUILD @@ -55,7 +55,7 @@ go_library( "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/options:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", diff --git a/cmd/kube-apiserver/app/apiextensions.go b/cmd/kube-apiserver/app/apiextensions.go index b94b5f311b0..c31f39b02d8 100644 --- a/cmd/kube-apiserver/app/apiextensions.go +++ b/cmd/kube-apiserver/app/apiextensions.go @@ -22,7 +22,7 @@ package app import ( "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" apiextensionsapiserver "k8s.io/apiextensions-apiserver/pkg/apiserver" - apiextensionscmd "k8s.io/apiextensions-apiserver/pkg/cmd/server" + apiextensionsoptions "k8s.io/apiextensions-apiserver/pkg/cmd/server/options" "k8s.io/apiserver/pkg/admission" genericapiserver "k8s.io/apiserver/pkg/server" genericoptions "k8s.io/apiserver/pkg/server/options" @@ -69,7 +69,7 @@ func createAPIExtensionsConfig( SharedInformerFactory: externalInformers, }, ExtraConfig: apiextensionsapiserver.ExtraConfig{ - CRDRESTOptionsGetter: apiextensionscmd.NewCRDRESTOptionsGetter(etcdOptions), + CRDRESTOptionsGetter: apiextensionsoptions.NewCRDRESTOptionsGetter(etcdOptions), MasterCount: masterCount, }, } diff --git a/hack/.golint_failures b/hack/.golint_failures index 3ad32e1d983..fb6c335aebf 100644 --- a/hack/.golint_failures +++ b/hack/.golint_failures @@ -468,7 +468,6 @@ staging/src/k8s.io/apiextensions-apiserver/pkg/controller/finalizer staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status staging/src/k8s.io/apiextensions-apiserver/pkg/features staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition -staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver staging/src/k8s.io/apimachinery/pkg/api/meta staging/src/k8s.io/apimachinery/pkg/api/testing/fuzzer staging/src/k8s.io/apimachinery/pkg/api/testing/roundtrip diff --git a/staging/src/k8s.io/apiextensions-apiserver/Godeps/Godeps.json b/staging/src/k8s.io/apiextensions-apiserver/Godeps/Godeps.json index 12a80a7f7a0..5dbc634745d 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/Godeps/Godeps.json +++ b/staging/src/k8s.io/apiextensions-apiserver/Godeps/Godeps.json @@ -2298,6 +2298,10 @@ "ImportPath": "k8s.io/client-go/dynamic", "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, + { + "ImportPath": "k8s.io/client-go/kubernetes", + "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + }, { "ImportPath": "k8s.io/client-go/kubernetes/scheme", "Rev": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" diff --git a/staging/src/k8s.io/apiextensions-apiserver/main.go b/staging/src/k8s.io/apiextensions-apiserver/main.go index 09143ab6e1b..888a04b1a46 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/main.go +++ b/staging/src/k8s.io/apiextensions-apiserver/main.go @@ -32,7 +32,7 @@ func main() { defer logs.FlushLogs() stopCh := genericapiserver.SetupSignalHandler() - cmd := server.NewCommandStartCustomResourceDefinitionsServer(os.Stdout, os.Stderr, stopCh) + cmd := server.NewServerCommand(os.Stdout, os.Stderr, stopCh) cmd.Flags().AddGoFlagSet(flag.CommandLine) if err := cmd.Execute(); err != nil { glog.Fatal(err) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/BUILD index da8aad019cd..d4629de41e5 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/BUILD +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/BUILD @@ -7,17 +7,12 @@ load( go_library( name = "go_default_library", - srcs = ["start.go"], + srcs = ["server.go"], importmap = "k8s.io/kubernetes/vendor/k8s.io/apiextensions-apiserver/pkg/cmd/server", importpath = "k8s.io/apiextensions-apiserver/pkg/cmd/server", deps = [ - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/options:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/server/options:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", ], ) @@ -31,6 +26,10 @@ filegroup( filegroup( name = "all-srcs", - srcs = [":package-srcs"], + srcs = [ + ":package-srcs", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/options:all-srcs", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/testing:all-srcs", + ], tags = ["automanaged"], ) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/options/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/options/BUILD new file mode 100644 index 00000000000..48e77981168 --- /dev/null +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/options/BUILD @@ -0,0 +1,33 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["options.go"], + importmap = "k8s.io/kubernetes/vendor/k8s.io/apiextensions-apiserver/pkg/cmd/server/options", + importpath = "k8s.io/apiextensions-apiserver/pkg/cmd/server/options", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/server:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/server/options:go_default_library", + "//vendor/github.com/spf13/pflag:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/start.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/options/options.go similarity index 73% rename from staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/start.go rename to staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/options/options.go index 4ef57bd2285..5e18ba3bddb 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/start.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/options/options.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 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. @@ -14,14 +14,14 @@ See the License for the specific language governing permissions and limitations under the License. */ -package server +package options import ( "fmt" "io" "net" - "github.com/spf13/cobra" + "github.com/spf13/pflag" "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" "k8s.io/apiextensions-apiserver/pkg/apiserver" @@ -34,6 +34,7 @@ import ( const defaultEtcdPathPrefix = "/registry/apiextensions.kubernetes.io" +// CustomResourceDefinitionsServerOptions describes the runtime options of an apiextensions-apiserver. type CustomResourceDefinitionsServerOptions struct { RecommendedOptions *genericoptions.RecommendedOptions APIEnablement *genericoptions.APIEnablementOptions @@ -42,6 +43,7 @@ type CustomResourceDefinitionsServerOptions struct { StdErr io.Writer } +// NewCustomResourceDefinitionsServerOptions creates default options of an apiextensions-apiserver. func NewCustomResourceDefinitionsServerOptions(out, errOut io.Writer) *CustomResourceDefinitionsServerOptions { o := &CustomResourceDefinitionsServerOptions{ RecommendedOptions: genericoptions.NewRecommendedOptions(defaultEtcdPathPrefix, apiserver.Codecs.LegacyCodec(v1beta1.SchemeGroupVersion)), @@ -54,43 +56,26 @@ func NewCustomResourceDefinitionsServerOptions(out, errOut io.Writer) *CustomRes return o } -func NewCommandStartCustomResourceDefinitionsServer(out, errOut io.Writer, stopCh <-chan struct{}) *cobra.Command { - o := NewCustomResourceDefinitionsServerOptions(out, errOut) - - cmd := &cobra.Command{ - Short: "Launch an API extensions API server", - Long: "Launch an API extensions API server", - RunE: func(c *cobra.Command, args []string) error { - if err := o.Complete(); err != nil { - return err - } - if err := o.Validate(args); err != nil { - return err - } - if err := o.RunCustomResourceDefinitionsServer(stopCh); err != nil { - return err - } - return nil - }, - } - - flags := cmd.Flags() - o.RecommendedOptions.AddFlags(flags) - o.APIEnablement.AddFlags(flags) - return cmd +// AddFlags adds the apiextensions-apiserver flags to the flagset. +func (o CustomResourceDefinitionsServerOptions) AddFlags(fs *pflag.FlagSet) { + o.RecommendedOptions.AddFlags(fs) + o.APIEnablement.AddFlags(fs) } -func (o CustomResourceDefinitionsServerOptions) Validate(args []string) error { +// Validate validates the apiextensions-apiserver options. +func (o CustomResourceDefinitionsServerOptions) Validate() error { errors := []error{} errors = append(errors, o.RecommendedOptions.Validate()...) errors = append(errors, o.APIEnablement.Validate(apiserver.Scheme)...) return utilerrors.NewAggregate(errors) } +// Complete fills in missing options. func (o *CustomResourceDefinitionsServerOptions) Complete() error { return nil } +// Config returns an apiextensions-apiserver configuration. func (o CustomResourceDefinitionsServerOptions) Config() (*apiserver.Config, error) { // TODO have a "real" external address if err := o.RecommendedOptions.SecureServing.MaybeDefaultWithSelfSignedCerts("localhost", nil, []net.IP{net.ParseIP("127.0.0.1")}); err != nil { @@ -114,6 +99,7 @@ func (o CustomResourceDefinitionsServerOptions) Config() (*apiserver.Config, err return config, nil } +// NewCRDRESTOptionsGetter create a RESTOptionsGetter for CustomResources. func NewCRDRESTOptionsGetter(etcdOptions genericoptions.EtcdOptions) genericregistry.RESTOptionsGetter { ret := apiserver.CRDRESTOptionsGetter{ StorageConfig: etcdOptions.StorageConfig, @@ -127,16 +113,3 @@ func NewCRDRESTOptionsGetter(etcdOptions genericoptions.EtcdOptions) genericregi return ret } - -func (o CustomResourceDefinitionsServerOptions) RunCustomResourceDefinitionsServer(stopCh <-chan struct{}) error { - config, err := o.Config() - if err != nil { - return err - } - - server, err := config.Complete().New(genericapiserver.NewEmptyDelegate()) - if err != nil { - return err - } - return server.GenericAPIServer.PrepareRun().Run(stopCh) -} diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/server.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/server.go new file mode 100644 index 00000000000..b30b9cb65cd --- /dev/null +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/server.go @@ -0,0 +1,64 @@ +/* +Copyright 2018 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 server + +import ( + "io" + + "github.com/spf13/cobra" + + "k8s.io/apiextensions-apiserver/pkg/cmd/server/options" + genericapiserver "k8s.io/apiserver/pkg/server" +) + +func NewServerCommand(out, errOut io.Writer, stopCh <-chan struct{}) *cobra.Command { + o := options.NewCustomResourceDefinitionsServerOptions(out, errOut) + + cmd := &cobra.Command{ + Short: "Launch an API extensions API server", + Long: "Launch an API extensions API server", + RunE: func(c *cobra.Command, args []string) error { + if err := o.Complete(); err != nil { + return err + } + if err := o.Validate(); err != nil { + return err + } + if err := Run(o, stopCh); err != nil { + return err + } + return nil + }, + } + + fs := cmd.Flags() + o.AddFlags(fs) + return cmd +} + +func Run(o *options.CustomResourceDefinitionsServerOptions, stopCh <-chan struct{}) error { + config, err := o.Config() + if err != nil { + return err + } + + server, err := config.Complete().New(genericapiserver.NewEmptyDelegate()) + if err != nil { + return err + } + return server.GenericAPIServer.PrepareRun().Run(stopCh) +} diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/testing/BUILD b/staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/testing/BUILD new file mode 100644 index 00000000000..a405adc82a3 --- /dev/null +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/testing/BUILD @@ -0,0 +1,33 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["testserver.go"], + importmap = "k8s.io/kubernetes/vendor/k8s.io/apiextensions-apiserver/pkg/cmd/server/testing", + importpath = "k8s.io/apiextensions-apiserver/pkg/cmd/server/testing", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/options:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/generic/registry:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/server:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/storage/storagebackend:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes:go_default_library", + "//staging/src/k8s.io/client-go/rest:go_default_library", + "//vendor/github.com/spf13/pflag:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/testing/testserver.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/testing/testserver.go new file mode 100644 index 00000000000..af2f0d2e6e8 --- /dev/null +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/testing/testserver.go @@ -0,0 +1,201 @@ +/* +Copyright 2018 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 testing + +import ( + "fmt" + "io/ioutil" + "net" + "os" + "time" + + "github.com/spf13/pflag" + + "k8s.io/apiextensions-apiserver/pkg/cmd/server/options" + "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/apiserver/pkg/registry/generic/registry" + genericapiserver "k8s.io/apiserver/pkg/server" + "k8s.io/apiserver/pkg/storage/storagebackend" + "k8s.io/client-go/kubernetes" + restclient "k8s.io/client-go/rest" +) + +// TearDownFunc is to be called to tear down a test server. +type TearDownFunc func() + +// TestServerInstanceOptions Instance options the TestServer +type TestServerInstanceOptions struct { + // DisableStorageCleanup Disable the automatic storage cleanup + DisableStorageCleanup bool +} + +// TestServer return values supplied by kube-test-ApiServer +type TestServer struct { + ClientConfig *restclient.Config // Rest client config + ServerOpts *options.CustomResourceDefinitionsServerOptions // ServerOpts + TearDownFn TearDownFunc // TearDown function + TmpDir string // Temp Dir used, by the apiserver +} + +// Logger allows t.Testing and b.Testing to be passed to StartTestServer and StartTestServerOrDie +type Logger interface { + Errorf(format string, args ...interface{}) + Fatalf(format string, args ...interface{}) + Logf(format string, args ...interface{}) +} + +// NewDefaultTestServerOptions Default options for TestServer instances +func NewDefaultTestServerOptions() *TestServerInstanceOptions { + return &TestServerInstanceOptions{ + DisableStorageCleanup: false, + } +} + +// StartTestServer starts a apiextensions-apiserver. A rest client config and a tear-down func, +// and location of the tmpdir are returned. +// +// Note: we return a tear-down func instead of a stop channel because the later will leak temporary +// files that because Golang testing's call to os.Exit will not give a stop channel go routine +// enough time to remove temporary files. +func StartTestServer(t Logger, instanceOptions *TestServerInstanceOptions, customFlags []string, storageConfig *storagebackend.Config) (result TestServer, err error) { + if instanceOptions == nil { + instanceOptions = NewDefaultTestServerOptions() + } + + // TODO : Remove TrackStorageCleanup below when PR + // https://github.com/kubernetes/kubernetes/pull/50690 + // merges as that shuts down storage properly + if !instanceOptions.DisableStorageCleanup { + registry.TrackStorageCleanup() + } + + stopCh := make(chan struct{}) + tearDown := func() { + if !instanceOptions.DisableStorageCleanup { + registry.CleanupStorage() + } + close(stopCh) + if len(result.TmpDir) != 0 { + os.RemoveAll(result.TmpDir) + } + } + defer func() { + if result.TearDownFn == nil { + tearDown() + } + }() + + result.TmpDir, err = ioutil.TempDir("", "apiextensions-apiserver") + if err != nil { + return result, fmt.Errorf("failed to create temp dir: %v", err) + } + + fs := pflag.NewFlagSet("test", pflag.PanicOnError) + + s := options.NewCustomResourceDefinitionsServerOptions(os.Stdout, os.Stderr) + s.AddFlags(fs) + + s.RecommendedOptions.SecureServing.Listener, s.RecommendedOptions.SecureServing.BindPort, err = createListenerOnFreePort() + if err != nil { + return result, fmt.Errorf("failed to create listener: %v", err) + } + s.RecommendedOptions.SecureServing.ServerCert.CertDirectory = result.TmpDir + if storageConfig != nil { + s.RecommendedOptions.Etcd.StorageConfig = *storageConfig + } + s.APIEnablement.RuntimeConfig.Set("api/all=true") + + fs.Parse(customFlags) + + if err := s.Complete(); err != nil { + return result, fmt.Errorf("failed to set default options: %v", err) + } + if err := s.Validate(); err != nil { + return result, fmt.Errorf("failed to validate options: %v", err) + } + + t.Logf("runtime-config=%v", s.APIEnablement.RuntimeConfig) + t.Logf("Starting apiextensions-apiserver on port %d...", s.RecommendedOptions.SecureServing.BindPort) + + config, err := s.Config() + if err != nil { + return result, fmt.Errorf("failed to create config from options: %v", err) + } + server, err := config.Complete().New(genericapiserver.NewEmptyDelegate()) + if err != nil { + return result, fmt.Errorf("failed to create server: %v", err) + } + + go func(stopCh <-chan struct{}) { + if err := server.GenericAPIServer.PrepareRun().Run(stopCh); err != nil { + t.Errorf("apiextensions-apiserver failed run: %v", err) + } + }(stopCh) + + t.Logf("Waiting for /healthz to be ok...") + + client, err := kubernetes.NewForConfig(server.GenericAPIServer.LoopbackClientConfig) + if err != nil { + return result, fmt.Errorf("failed to create a client: %v", err) + } + err = wait.Poll(100*time.Millisecond, 30*time.Second, func() (bool, error) { + result := client.CoreV1().RESTClient().Get().AbsPath("/healthz").Do() + status := 0 + result.StatusCode(&status) + if status == 200 { + return true, nil + } + return false, nil + }) + if err != nil { + return result, fmt.Errorf("failed to wait for /healthz to return ok: %v", err) + } + + // from here the caller must call tearDown + result.ClientConfig = server.GenericAPIServer.LoopbackClientConfig + result.ServerOpts = s + result.TearDownFn = tearDown + + return result, nil +} + +// StartTestServerOrDie calls StartTestServer t.Fatal if it does not succeed. +func StartTestServerOrDie(t Logger, instanceOptions *TestServerInstanceOptions, flags []string, storageConfig *storagebackend.Config) *TestServer { + result, err := StartTestServer(t, instanceOptions, flags, storageConfig) + if err == nil { + return &result + } + + t.Fatalf("failed to launch server: %v", err) + return nil +} + +func createListenerOnFreePort() (net.Listener, int, error) { + ln, err := net.Listen("tcp", ":0") + if err != nil { + return nil, 0, err + } + + // get port + tcpAddr, ok := ln.Addr().(*net.TCPAddr) + if !ok { + ln.Close() + return nil, 0, fmt.Errorf("invalid listen address: %q", ln.Addr().String()) + } + + return ln, tcpAddr.Port, nil +} diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/BUILD b/staging/src/k8s.io/apiextensions-apiserver/test/integration/BUILD index 07837263805..6929e34e283 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/BUILD +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/BUILD @@ -24,9 +24,9 @@ go_test( deps = [ "//staging/src/k8s.io/api/autoscaling/v1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/options:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/test/integration/fixtures:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", @@ -60,7 +60,7 @@ filegroup( name = "all-srcs", srcs = [ ":package-srcs", - "//staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver:all-srcs", + "//staging/src/k8s.io/apiextensions-apiserver/test/integration/fixtures:all-srcs", ], tags = ["automanaged"], ) diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/basic_test.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/basic_test.go index 2a196bd63b1..7d0ae0c057e 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/basic_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/basic_test.go @@ -24,7 +24,7 @@ import ( "time" apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" - "k8s.io/apiextensions-apiserver/test/integration/testserver" + "k8s.io/apiextensions-apiserver/test/integration/fixtures" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -37,22 +37,22 @@ import ( ) func TestServerUp(t *testing.T) { - stopCh, _, _, err := testserver.StartDefaultServerWithClients() + tearDown, _, _, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() } func TestNamespaceScopedCRUD(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() - noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -64,14 +64,14 @@ func TestNamespaceScopedCRUD(t *testing.T) { } func TestClusterScopedCRUD(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() - noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -110,7 +110,7 @@ func testSimpleCRUD(t *testing.T, ns string, noxuDefinition *apiextensionsv1beta }() for version, noxuResourceClient := range noxuResourceClients { - createdNoxuInstance, err := instantiateVersionedCustomResource(t, testserver.NewVersionedNoxuInstance(ns, "foo", version), noxuResourceClient, noxuDefinition, version) + createdNoxuInstance, err := instantiateVersionedCustomResource(t, fixtures.NewVersionedNoxuInstance(ns, "foo", version), noxuResourceClient, noxuDefinition, version) if disabledVersions[version] { if !errors.IsNotFound(err) { t.Errorf("expected the CR creation fail with NotFound for disabled version %s, got error: %v", version, err) @@ -344,11 +344,11 @@ func testFieldSelector(t *testing.T, ns string, noxuDefinition *apiextensionsv1b } defer noxuWatch.Stop() - _, err = instantiateCustomResource(t, testserver.NewNoxuInstance(ns, "bar"), noxuResourceClient, noxuDefinition) + _, err = instantiateCustomResource(t, fixtures.NewNoxuInstance(ns, "bar"), noxuResourceClient, noxuDefinition) if err != nil { t.Fatalf("unable to create noxu Instance:%v", err) } - createdNoxuInstanceFoo, err := instantiateCustomResource(t, testserver.NewNoxuInstance(ns, "foo"), noxuResourceClient, noxuDefinition) + createdNoxuInstanceFoo, err := instantiateCustomResource(t, fixtures.NewNoxuInstance(ns, "foo"), noxuResourceClient, noxuDefinition) if err != nil { t.Fatalf("unable to create noxu Instance:%v", err) } @@ -456,15 +456,15 @@ func TestDiscovery(t *testing.T) { group := "mygroup.example.com" version := "v1beta1" - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() scope := apiextensionsv1beta1.NamespaceScoped - noxuDefinition := testserver.NewNoxuCustomResourceDefinition(scope) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(scope) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -504,14 +504,14 @@ func TestDiscovery(t *testing.T) { } func TestNoNamespaceReject(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() - noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -536,21 +536,21 @@ func TestNoNamespaceReject(t *testing.T) { t.Errorf("expected %v, got %v", e, a) } - createdNoxuInstance, err := instantiateCustomResource(t, testserver.NewNoxuInstance(ns, "foo"), noxuResourceClient, noxuDefinition) + createdNoxuInstance, err := instantiateCustomResource(t, fixtures.NewNoxuInstance(ns, "foo"), noxuResourceClient, noxuDefinition) if err == nil { t.Fatalf("unexpected non-error: an empty namespace may not be set during creation while creating noxu instance: %v ", createdNoxuInstance) } } func TestSameNameDiffNamespace(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() - noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -563,15 +563,15 @@ func TestSameNameDiffNamespace(t *testing.T) { } func TestSelfLink(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() // namespace scoped - noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -579,7 +579,7 @@ func TestSelfLink(t *testing.T) { ns := "not-the-default" noxuNamespacedResourceClient := newNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) - noxuInstanceToCreate := testserver.NewNoxuInstance(ns, "foo") + noxuInstanceToCreate := fixtures.NewNoxuInstance(ns, "foo") createdNoxuInstance, err := noxuNamespacedResourceClient.Create(noxuInstanceToCreate) if err != nil { t.Fatal(err) @@ -590,15 +590,15 @@ func TestSelfLink(t *testing.T) { } // cluster scoped - curletDefinition := testserver.NewCurletCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) - curletDefinition, err = testserver.CreateNewCustomResourceDefinition(curletDefinition, apiExtensionClient, dynamicClient) + curletDefinition := fixtures.NewCurletCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) + curletDefinition, err = fixtures.CreateNewCustomResourceDefinition(curletDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } curletResourceClient := newNamespacedCustomResourceClient(ns, dynamicClient, curletDefinition) - curletInstanceToCreate := testserver.NewCurletInstance(ns, "foo") + curletInstanceToCreate := fixtures.NewCurletInstance(ns, "foo") createdCurletInstance, err := curletResourceClient.Create(curletInstanceToCreate) if err != nil { t.Fatal(err) @@ -610,14 +610,14 @@ func TestSelfLink(t *testing.T) { } func TestPreserveInt(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() - noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -625,7 +625,7 @@ func TestPreserveInt(t *testing.T) { ns := "not-the-default" noxuNamespacedResourceClient := newNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) - noxuInstanceToCreate := testserver.NewNoxuInstance(ns, "foo") + noxuInstanceToCreate := fixtures.NewNoxuInstance(ns, "foo") createdNoxuInstance, err := noxuNamespacedResourceClient.Create(noxuInstanceToCreate) if err != nil { t.Fatal(err) @@ -652,14 +652,14 @@ func TestPreserveInt(t *testing.T) { } func TestPatch(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() - noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -667,7 +667,7 @@ func TestPatch(t *testing.T) { ns := "not-the-default" noxuNamespacedResourceClient := newNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) - noxuInstanceToCreate := testserver.NewNoxuInstance(ns, "foo") + noxuInstanceToCreate := fixtures.NewNoxuInstance(ns, "foo") createdNoxuInstance, err := noxuNamespacedResourceClient.Create(noxuInstanceToCreate) if err != nil { t.Fatal(err) @@ -712,14 +712,14 @@ func TestPatch(t *testing.T) { } func TestCrossNamespaceListWatch(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() - noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -812,7 +812,7 @@ func TestCrossNamespaceListWatch(t *testing.T) { } func createInstanceWithNamespaceHelper(t *testing.T, ns string, name string, noxuNamespacedResourceClient dynamic.ResourceInterface, noxuDefinition *apiextensionsv1beta1.CustomResourceDefinition) *unstructured.Unstructured { - createdInstance, err := instantiateCustomResource(t, testserver.NewNoxuInstance(ns, name), noxuNamespacedResourceClient, noxuDefinition) + createdInstance, err := instantiateCustomResource(t, fixtures.NewNoxuInstance(ns, name), noxuNamespacedResourceClient, noxuDefinition) if err != nil { t.Fatalf("unable to create noxu Instance:%v", err) } @@ -848,19 +848,19 @@ func checkNamespacesWatchHelper(t *testing.T, ns string, namespacedwatch watch.I } func TestNameConflict(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() - noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } - noxu2Definition := testserver.NewNoxu2CustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) + noxu2Definition := fixtures.NewNoxu2CustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) _, err = apiExtensionClient.ApiextensionsV1beta1().CustomResourceDefinitions().Create(noxu2Definition) if err != nil { t.Fatal(err) @@ -884,7 +884,7 @@ func TestNameConflict(t *testing.T) { t.Fatal(err) } - err = testserver.DeleteCustomResourceDefinition(noxuDefinition, apiExtensionClient) + err = fixtures.DeleteCustomResourceDefinition(noxuDefinition, apiExtensionClient) if err != nil { t.Fatal(err) } @@ -909,14 +909,14 @@ func TestNameConflict(t *testing.T) { } func TestStatusGetAndPatch(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() - noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/finalization_test.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/finalization_test.go index 4dcf8d727bb..8f1bf0a2e71 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/finalization_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/finalization_test.go @@ -24,26 +24,26 @@ import ( apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" - "k8s.io/apiextensions-apiserver/test/integration/testserver" + "k8s.io/apiextensions-apiserver/test/integration/fixtures" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/wait" ) func TestFinalization(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) require.NoError(t, err) - defer close(stopCh) + defer tearDown() - noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) require.NoError(t, err) ns := "not-the-default" name := "foo123" noxuResourceClient := newNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) - instance := testserver.NewNoxuInstance(ns, name) + instance := fixtures.NewNoxuInstance(ns, name) instance.SetFinalizers([]string{"noxu.example.com/finalizer"}) createdNoxuInstance, err := instantiateCustomResource(t, instance, noxuResourceClient, noxuDefinition) require.NoError(t, err) @@ -94,13 +94,13 @@ func TestFinalization(t *testing.T) { } func TestFinalizationAndDeletion(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) require.NoError(t, err) - defer close(stopCh) + defer tearDown() // Create a CRD. - noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) require.NoError(t, err) // Create a CR with a finalizer. @@ -108,7 +108,7 @@ func TestFinalizationAndDeletion(t *testing.T) { name := "foo123" noxuResourceClient := newNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) - instance := testserver.NewNoxuInstance(ns, name) + instance := fixtures.NewNoxuInstance(ns, name) instance.SetFinalizers([]string{"noxu.example.com/finalizer"}) createdNoxuInstance, err := instantiateCustomResource(t, instance, noxuResourceClient, noxuDefinition) require.NoError(t, err) @@ -128,7 +128,7 @@ func TestFinalizationAndDeletion(t *testing.T) { require.NotNil(t, gottenNoxuInstance.GetDeletionTimestamp()) // Delete the CRD. - testserver.DeleteCustomResourceDefinition(noxuDefinition, apiExtensionClient) + fixtures.DeleteCustomResourceDefinition(noxuDefinition, apiExtensionClient) // Check is CR still there after the CRD deletion. gottenNoxuInstance, err = noxuResourceClient.Get(name, metav1.GetOptions{}) diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/BUILD b/staging/src/k8s.io/apiextensions-apiserver/test/integration/fixtures/BUILD similarity index 84% rename from staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/BUILD rename to staging/src/k8s.io/apiextensions-apiserver/test/integration/fixtures/BUILD index 5165fe38ab2..9ff56dab970 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/BUILD +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/fixtures/BUILD @@ -9,23 +9,21 @@ go_library( name = "go_default_library", srcs = [ "resources.go", - "start.go", + "server.go", ], - importmap = "k8s.io/kubernetes/vendor/k8s.io/apiextensions-apiserver/test/integration/testserver", - importpath = "k8s.io/apiextensions-apiserver/test/integration/testserver", + importmap = "k8s.io/kubernetes/vendor/k8s.io/apiextensions-apiserver/test/integration/fixtures", + importpath = "k8s.io/apiextensions-apiserver/test/integration/fixtures", deps = [ "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/options:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/testing:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/server:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/server/options:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/names:go_default_library", "//staging/src/k8s.io/client-go/discovery:go_default_library", "//staging/src/k8s.io/client-go/dynamic:go_default_library", diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/resources.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/fixtures/resources.go similarity index 93% rename from staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/resources.go rename to staging/src/k8s.io/apiextensions-apiserver/test/integration/fixtures/resources.go index d33bf737e8b..49de84a9f3e 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/resources.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/fixtures/resources.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package testserver +package fixtures import ( "fmt" @@ -40,7 +40,7 @@ const ( noxuInstanceNum int64 = 9223372036854775807 ) -//NewRandomNameCustomResourceDefinition generates a CRD with random name to avoid name conflict in e2e tests +// NewRandomNameCustomResourceDefinition generates a CRD with random name to avoid name conflict in e2e tests func NewRandomNameCustomResourceDefinition(scope apiextensionsv1beta1.ResourceScope) *apiextensionsv1beta1.CustomResourceDefinition { // ensure the singular doesn't end in an s for now gName := names.SimpleNameGenerator.GenerateName("foo") + "a" @@ -60,6 +60,7 @@ func NewRandomNameCustomResourceDefinition(scope apiextensionsv1beta1.ResourceSc } } +// NewNoxuCustomResourceDefinition returns a WishIHadChosenNoxu CRD. func NewNoxuCustomResourceDefinition(scope apiextensionsv1beta1.ResourceScope) *apiextensionsv1beta1.CustomResourceDefinition { return &apiextensionsv1beta1.CustomResourceDefinition{ ObjectMeta: metav1.ObjectMeta{Name: "noxus.mygroup.example.com"}, @@ -79,6 +80,7 @@ func NewNoxuCustomResourceDefinition(scope apiextensionsv1beta1.ResourceScope) * } } +// NewVersionedNoxuInstance returns a WishIHadChosenNoxu instance for a given version func NewVersionedNoxuInstance(namespace, name, version string) *unstructured.Unstructured { return &unstructured.Unstructured{ Object: map[string]interface{}{ @@ -99,10 +101,12 @@ func NewVersionedNoxuInstance(namespace, name, version string) *unstructured.Uns } } +// NewNoxuInstance returns a WishIHadChosenNoxu instance for v1beta1. func NewNoxuInstance(namespace, name string) *unstructured.Unstructured { return NewVersionedNoxuInstance(namespace, name, "v1beta1") } +// NewMultipleVersionNoxuCRD returns a WishIHadChosenNoxu with multiple versions. func NewMultipleVersionNoxuCRD(scope apiextensionsv1beta1.ResourceScope) *apiextensionsv1beta1.CustomResourceDefinition { return &apiextensionsv1beta1.CustomResourceDefinition{ ObjectMeta: metav1.ObjectMeta{Name: "noxus.mygroup.example.com"}, @@ -139,6 +143,7 @@ func NewMultipleVersionNoxuCRD(scope apiextensionsv1beta1.ResourceScope) *apiext } } +// NewNoxu2CustomResourceDefinition returns a WishIHadChosenNoxu2 CRD. func NewNoxu2CustomResourceDefinition(scope apiextensionsv1beta1.ResourceScope) *apiextensionsv1beta1.CustomResourceDefinition { return &apiextensionsv1beta1.CustomResourceDefinition{ ObjectMeta: metav1.ObjectMeta{Name: "noxus2.mygroup.example.com"}, @@ -157,6 +162,7 @@ func NewNoxu2CustomResourceDefinition(scope apiextensionsv1beta1.ResourceScope) } } +// NewCurletCustomResourceDefinition returns a Curlet CRD. func NewCurletCustomResourceDefinition(scope apiextensionsv1beta1.ResourceScope) *apiextensionsv1beta1.CustomResourceDefinition { return &apiextensionsv1beta1.CustomResourceDefinition{ ObjectMeta: metav1.ObjectMeta{Name: "curlets.mygroup.example.com"}, @@ -174,6 +180,7 @@ func NewCurletCustomResourceDefinition(scope apiextensionsv1beta1.ResourceScope) } } +// NewCurletInstance returns a Curlet instance. func NewCurletInstance(namespace, name string) *unstructured.Unstructured { return &unstructured.Unstructured{ Object: map[string]interface{}{ @@ -242,6 +249,7 @@ func CreateNewCustomResourceDefinitionWatchUnsafe(crd *apiextensionsv1beta1.Cust return crd, err } +// CreateNewCustomResourceDefinition creates the given CRD and makes sure its watch cache is primed on the server. func CreateNewCustomResourceDefinition(crd *apiextensionsv1beta1.CustomResourceDefinition, apiExtensionsClient clientset.Interface, dynamicClientSet dynamic.Interface) (*apiextensionsv1beta1.CustomResourceDefinition, error) { crd, err := CreateNewCustomResourceDefinitionWatchUnsafe(crd, apiExtensionsClient) if err != nil { @@ -271,9 +279,8 @@ func resourceClientForVersion(crd *apiextensionsv1beta1.CustomResourceDefinition gvr := schema.GroupVersionResource{Group: crd.Spec.Group, Version: version, Resource: crd.Spec.Names.Plural} if crd.Spec.Scope != apiextensionsv1beta1.ClusterScoped { return dynamicClientSet.Resource(gvr).Namespace(namespace) - } else { - return dynamicClientSet.Resource(gvr) } + return dynamicClientSet.Resource(gvr) } // isWatchCachePrimed returns true if the watch is primed for an specified version of CRD watch @@ -346,6 +353,7 @@ func isWatchCachePrimed(crd *apiextensionsv1beta1.CustomResourceDefinition, dyna return true, nil } +// DeleteCustomResourceDefinition deletes a CRD and waits until it disappears from discovery. func DeleteCustomResourceDefinition(crd *apiextensionsv1beta1.CustomResourceDefinition, apiExtensionsClient clientset.Interface) error { if err := apiExtensionsClient.Apiextensions().CustomResourceDefinitions().Delete(crd.Name, nil); err != nil { return err @@ -362,6 +370,7 @@ func DeleteCustomResourceDefinition(crd *apiextensionsv1beta1.CustomResourceDefi return nil } +// CreateNewScaleClient returns a scale client. func CreateNewScaleClient(crd *apiextensionsv1beta1.CustomResourceDefinition, config *rest.Config) (scale.ScalesGetter, error) { discoveryClient, err := discovery.NewDiscoveryClientForConfig(config) if err != nil { diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/fixtures/server.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/fixtures/server.go new file mode 100644 index 00000000000..0a3d6444e9d --- /dev/null +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/fixtures/server.go @@ -0,0 +1,108 @@ +/* +Copyright 2018 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 fixtures + +import ( + "io/ioutil" + "os" + "strings" + + "github.com/pborman/uuid" + "k8s.io/apiextensions-apiserver/pkg/cmd/server/options" + + "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" + servertesting "k8s.io/apiextensions-apiserver/pkg/cmd/server/testing" + "k8s.io/client-go/dynamic" + "k8s.io/client-go/rest" +) + +// StartDefaultServer starts a test server. +func StartDefaultServer(t servertesting.Logger) (func(), *rest.Config, *options.CustomResourceDefinitionsServerOptions, error) { + // create kubeconfig which will not actually be used. But authz/authn needs it to startup. + fakeKubeConfig, err := ioutil.TempFile("", "kubeconfig") + fakeKubeConfig.WriteString(` +apiVersion: v1 +kind: Config +clusters: +- cluster: + server: http://127.1.2.3:12345 + name: integration +contexts: +- context: + cluster: integration + user: test + name: default-context +current-context: default-context +users: +- name: test + user: + password: test + username: test +`) + fakeKubeConfig.Close() + + s, err := servertesting.StartTestServer(t, nil, []string{ + "--etcd-prefix", uuid.New(), + "--etcd-servers", strings.Join(IntegrationEtcdServers(), ","), + "--authentication-skip-lookup", + "--authentication-kubeconfig", fakeKubeConfig.Name(), + "--authorization-kubeconfig", fakeKubeConfig.Name(), + "--kubeconfig", fakeKubeConfig.Name(), + "--disable-admission-plugins", "NamespaceLifecycle,MutatingAdmissionWebhook,ValidatingAdmissionWebhook", + }, nil) + if err != nil { + os.Remove(fakeKubeConfig.Name()) + return nil, nil, nil, err + } + + tearDownFn := func() { + defer os.Remove(fakeKubeConfig.Name()) + s.TearDownFn() + } + + return tearDownFn, s.ClientConfig, s.ServerOpts, nil +} + +// StartDefaultServerWithClients starts a test server and returns clients for it. +func StartDefaultServerWithClients(t servertesting.Logger) (func(), clientset.Interface, dynamic.Interface, error) { + tearDown, config, _, err := StartDefaultServer(t) + if err != nil { + return nil, nil, nil, err + } + + apiExtensionsClient, err := clientset.NewForConfig(config) + if err != nil { + tearDown() + return nil, nil, nil, err + } + + dynamicClient, err := dynamic.NewForConfig(config) + if err != nil { + tearDown() + return nil, nil, nil, err + } + + return tearDown, apiExtensionsClient, dynamicClient, nil +} + +// IntegrationEtcdServers returns etcd server URLs. +func IntegrationEtcdServers() []string { + if etcdURL, ok := os.LookupEnv("KUBE_INTEGRATION_ETCD_URL"); ok { + return []string{etcdURL} + } + return []string{"http://127.0.0.1:2379"} +} diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/objectmeta_test.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/objectmeta_test.go index 50f656bf120..1ce637aa702 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/objectmeta_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/objectmeta_test.go @@ -24,9 +24,11 @@ import ( "github.com/coreos/etcd/clientv3" "github.com/coreos/etcd/pkg/transport" + apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" - "k8s.io/apiextensions-apiserver/test/integration/testserver" + serveroptions "k8s.io/apiextensions-apiserver/pkg/cmd/server/options" + "k8s.io/apiextensions-apiserver/test/integration/fixtures" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -37,21 +39,21 @@ import ( ) func TestPostInvalidObjectMeta(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() - noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } noxuResourceClient := newNamespacedCustomResourceClient("default", dynamicClient, noxuDefinition) - obj := testserver.NewNoxuInstance("default", "foo") + obj := fixtures.NewNoxuInstance("default", "foo") unstructured.SetNestedField(obj.UnstructuredContent(), int64(42), "metadata", "unknown") unstructured.SetNestedField(obj.UnstructuredContent(), map[string]interface{}{"foo": int64(42), "bar": "abc"}, "metadata", "labels") _, err = instantiateCustomResource(t, obj, noxuResourceClient, noxuDefinition) @@ -80,16 +82,11 @@ func TestPostInvalidObjectMeta(t *testing.T) { } func TestInvalidObjectMetaInStorage(t *testing.T) { - serverConfig, err := testserver.DefaultServerConfig() - if err != nil { - t.Fatal(err) - } - - stopCh, config, err := testserver.StartServer(serverConfig) - defer close(stopCh) + tearDown, config, options, err := fixtures.StartDefaultServer(t) if err != nil { t.Fatal(err) } + defer tearDown() apiExtensionClient, err := clientset.NewForConfig(config) if err != nil { @@ -101,13 +98,14 @@ func TestInvalidObjectMetaInStorage(t *testing.T) { t.Fatal(err) } - noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } - restOptions, err := serverConfig.GenericConfig.RESTOptionsGetter.GetRESTOptions(schema.GroupResource{Group: noxuDefinition.Spec.Group, Resource: noxuDefinition.Spec.Names.Plural}) + RESTOptionsGetter := serveroptions.NewCRDRESTOptionsGetter(*options.RecommendedOptions.Etcd) + restOptions, err := RESTOptionsGetter.GetRESTOptions(schema.GroupResource{Group: noxuDefinition.Spec.Group, Resource: noxuDefinition.Spec.Names.Plural}) if err != nil { t.Fatal(err) } @@ -131,7 +129,7 @@ func TestInvalidObjectMetaInStorage(t *testing.T) { t.Logf("Creating object with invalid labels manually in etcd") - original := testserver.NewNoxuInstance("default", "foo") + original := fixtures.NewNoxuInstance("default", "foo") unstructured.SetNestedField(original.UnstructuredContent(), int64(42), "metadata", "unknown") unstructured.SetNestedField(original.UnstructuredContent(), map[string]interface{}{"foo": int64(42), "bar": "abc"}, "metadata", "labels") diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/registration_test.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/registration_test.go index 9cb33ac70e3..2523210c811 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/registration_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/registration_test.go @@ -29,9 +29,8 @@ import ( "github.com/coreos/etcd/clientv3" apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" - extensionsapiserver "k8s.io/apiextensions-apiserver/pkg/apiserver" apiextensionsclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" - "k8s.io/apiextensions-apiserver/test/integration/testserver" + "k8s.io/apiextensions-apiserver/test/integration/fixtures" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -41,15 +40,15 @@ import ( ) func TestMultipleResourceInstances(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() ns := "not-the-default" - noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -80,7 +79,7 @@ func TestMultipleResourceInstances(t *testing.T) { } for key, val := range instances { - val.Instance, err = instantiateCustomResource(t, testserver.NewNoxuInstance(ns, key), noxuNamespacedResourceClient, noxuDefinition) + val.Instance, err = instantiateCustomResource(t, fixtures.NewNoxuInstance(ns, key), noxuNamespacedResourceClient, noxuDefinition) if err != nil { t.Fatalf("unable to create Noxu Instance %q:%v", key, err) } @@ -165,21 +164,21 @@ func TestMultipleResourceInstances(t *testing.T) { } func TestMultipleRegistration(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() ns := "not-the-default" sameInstanceName := "foo" - noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } noxuNamespacedResourceClient := newNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) - createdNoxuInstance, err := instantiateCustomResource(t, testserver.NewNoxuInstance(ns, sameInstanceName), noxuNamespacedResourceClient, noxuDefinition) + createdNoxuInstance, err := instantiateCustomResource(t, fixtures.NewNoxuInstance(ns, sameInstanceName), noxuNamespacedResourceClient, noxuDefinition) if err != nil { t.Fatalf("unable to create noxu Instance:%v", err) } @@ -192,13 +191,13 @@ func TestMultipleRegistration(t *testing.T) { t.Errorf("expected %v, got %v", e, a) } - curletDefinition := testserver.NewCurletCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - curletDefinition, err = testserver.CreateNewCustomResourceDefinition(curletDefinition, apiExtensionClient, dynamicClient) + curletDefinition := fixtures.NewCurletCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) + curletDefinition, err = fixtures.CreateNewCustomResourceDefinition(curletDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } curletNamespacedResourceClient := newNamespacedCustomResourceClient(ns, dynamicClient, curletDefinition) - createdCurletInstance, err := instantiateCustomResource(t, testserver.NewCurletInstance(ns, sameInstanceName), curletNamespacedResourceClient, curletDefinition) + createdCurletInstance, err := instantiateCustomResource(t, fixtures.NewCurletInstance(ns, sameInstanceName), curletNamespacedResourceClient, curletDefinition) if err != nil { t.Fatalf("unable to create noxu Instance:%v", err) } @@ -221,24 +220,24 @@ func TestMultipleRegistration(t *testing.T) { } func TestDeRegistrationAndReRegistration(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) - noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) + defer tearDown() + noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) ns := "not-the-default" sameInstanceName := "foo" func() { - noxuDefinition, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition, err := fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } noxuNamespacedResourceClient := newNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition) - if _, err := instantiateCustomResource(t, testserver.NewNoxuInstance(ns, sameInstanceName), noxuNamespacedResourceClient, noxuDefinition); err != nil { + if _, err := instantiateCustomResource(t, fixtures.NewNoxuInstance(ns, sameInstanceName), noxuNamespacedResourceClient, noxuDefinition); err != nil { t.Fatal(err) } - if err := testserver.DeleteCustomResourceDefinition(noxuDefinition, apiExtensionClient); err != nil { + if err := fixtures.DeleteCustomResourceDefinition(noxuDefinition, apiExtensionClient); err != nil { t.Fatal(err) } if _, err := apiExtensionClient.ApiextensionsV1beta1().CustomResourceDefinitions().Get(noxuDefinition.Name, metav1.GetOptions{}); err == nil || !errors.IsNotFound(err) { @@ -256,7 +255,7 @@ func TestDeRegistrationAndReRegistration(t *testing.T) { if _, err := apiExtensionClient.ApiextensionsV1beta1().CustomResourceDefinitions().Get(noxuDefinition.Name, metav1.GetOptions{}); err == nil || !errors.IsNotFound(err) { t.Fatalf("expected a NotFound error, got:%v", err) } - noxuDefinition, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition, err := fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -271,7 +270,7 @@ func TestDeRegistrationAndReRegistration(t *testing.T) { if e, a := 0, len(initialList.Items); e != a { t.Fatalf("expected %v, got %v", e, a) } - createdNoxuInstance, err := instantiateCustomResource(t, testserver.NewNoxuInstance(ns, sameInstanceName), noxuNamespacedResourceClient, noxuDefinition) + createdNoxuInstance, err := instantiateCustomResource(t, fixtures.NewNoxuInstance(ns, sameInstanceName), noxuNamespacedResourceClient, noxuDefinition) if err != nil { t.Fatal(err) } @@ -310,15 +309,11 @@ func TestDeRegistrationAndReRegistration(t *testing.T) { } func TestEtcdStorage(t *testing.T) { - config, err := testserver.DefaultServerConfig() + tearDown, clientConfig, s, err := fixtures.StartDefaultServer(t) if err != nil { t.Fatal(err) } - stopCh, clientConfig, err := testserver.StartServer(config) - if err != nil { - t.Fatal(err) - } - defer close(stopCh) + defer tearDown() apiExtensionClient, err := apiextensionsclientset.NewForConfig(clientConfig) if err != nil { @@ -329,27 +324,27 @@ func TestEtcdStorage(t *testing.T) { t.Fatal(err) } - etcdPrefix := getPrefixFromConfig(t, config) + etcdPrefix := s.RecommendedOptions.Etcd.StorageConfig.Prefix ns1 := "another-default-is-possible" - curletDefinition := testserver.NewCurletCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) - curletDefinition, err = testserver.CreateNewCustomResourceDefinition(curletDefinition, apiExtensionClient, dynamicClient) + curletDefinition := fixtures.NewCurletCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) + curletDefinition, err = fixtures.CreateNewCustomResourceDefinition(curletDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } curletNamespacedResourceClient := newNamespacedCustomResourceClient(ns1, dynamicClient, curletDefinition) - if _, err := instantiateCustomResource(t, testserver.NewCurletInstance(ns1, "bar"), curletNamespacedResourceClient, curletDefinition); err != nil { + if _, err := instantiateCustomResource(t, fixtures.NewCurletInstance(ns1, "bar"), curletNamespacedResourceClient, curletDefinition); err != nil { t.Fatalf("unable to create curlet cluster scoped Instance:%v", err) } ns2 := "the-cruel-default" - noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } noxuNamespacedResourceClient := newNamespacedCustomResourceClient(ns2, dynamicClient, noxuDefinition) - if _, err := instantiateCustomResource(t, testserver.NewNoxuInstance(ns2, "foo"), noxuNamespacedResourceClient, noxuDefinition); err != nil { + if _, err := instantiateCustomResource(t, fixtures.NewNoxuInstance(ns2, "foo"), noxuNamespacedResourceClient, noxuDefinition); err != nil { t.Fatalf("unable to create noxu namespace scoped Instance:%v", err) } @@ -432,14 +427,6 @@ func TestEtcdStorage(t *testing.T) { } } -func getPrefixFromConfig(t *testing.T, config *extensionsapiserver.Config) string { - extensionsOptionsGetter, ok := config.ExtraConfig.CRDRESTOptionsGetter.(extensionsapiserver.CRDRESTOptionsGetter) - if !ok { - t.Fatal("can't obtain etcd prefix: unable to cast config.CRDRESTOptionsGetter to extensionsapiserver.CRDRESTOptionsGetter") - } - return extensionsOptionsGetter.StoragePrefix -} - func getFromEtcd(keys clientv3.KV, prefix, localPath string) (*metaObject, error) { internalPath := path.Join("/", prefix, localPath) // TODO: Double check, should we concatenate two prefixes? response, err := keys.Get(context.Background(), internalPath) diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/subresources_test.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/subresources_test.go index a8cf13b5879..4fd50a5a4b7 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/subresources_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/subresources_test.go @@ -33,7 +33,7 @@ import ( apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" - "k8s.io/apiextensions-apiserver/test/integration/testserver" + "k8s.io/apiextensions-apiserver/test/integration/fixtures" ) var labelSelectorPath = ".status.labelSelector" @@ -85,14 +85,14 @@ func NewNoxuSubresourceInstance(namespace, name string) *unstructured.Unstructur } func TestStatusSubresource(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() noxuDefinition := NewNoxuSubresourcesCRD(apiextensionsv1beta1.NamespaceScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -196,11 +196,11 @@ func TestScaleSubresource(t *testing.T) { Resource: "noxus", } - stopCh, config, err := testserver.StartDefaultServer() + tearDown, config, _, err := fixtures.StartDefaultServer(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() apiExtensionClient, err := clientset.NewForConfig(config) if err != nil { @@ -215,13 +215,13 @@ func TestScaleSubresource(t *testing.T) { // set invalid json path for specReplicasPath noxuDefinition.Spec.Subresources.Scale.SpecReplicasPath = "foo,bar" - _, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + _, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err == nil { t.Fatalf("unexpected non-error: specReplicasPath should be a valid json path under .spec") } noxuDefinition.Spec.Subresources.Scale.SpecReplicasPath = ".spec.replicas" - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -233,7 +233,7 @@ func TestScaleSubresource(t *testing.T) { t.Fatalf("unable to create noxu instance: %v", err) } - scaleClient, err := testserver.CreateNewScaleClient(noxuDefinition, config) + scaleClient, err := fixtures.CreateNewScaleClient(noxuDefinition, config) if err != nil { t.Fatal(err) } @@ -322,11 +322,11 @@ func TestScaleSubresource(t *testing.T) { } func TestValidationSchemaWithStatus(t *testing.T) { - stopCh, config, err := testserver.StartDefaultServer() + tearDown, config, _, err := fixtures.StartDefaultServer(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() apiExtensionClient, err := clientset.NewForConfig(config) if err != nil { @@ -342,7 +342,7 @@ func TestValidationSchemaWithStatus(t *testing.T) { noxuDefinition.Spec.Subresources = &apiextensionsv1beta1.CustomResourceSubresources{ Status: &apiextensionsv1beta1.CustomResourceSubresourceStatus{}, } - _, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + _, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err == nil { t.Fatalf(`unexpected non-error, expected: must not have "additionalProperties" at the root of the schema if the status subresource is enabled`) } @@ -362,18 +362,18 @@ func TestValidationSchemaWithStatus(t *testing.T) { Required: []string{"spec"}, Description: "This is a description at the root of the schema", } - _, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + _, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatalf("unable to created crd %v: %v", noxuDefinition.Name, err) } } func TestValidateOnlyStatus(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() // UpdateStatus should validate only status // 1. create a crd with max value of .spec.num = 10 and .status.num = 10 @@ -408,7 +408,7 @@ func TestValidateOnlyStatus(t *testing.T) { OpenAPIV3Schema: schema, } - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -456,11 +456,11 @@ func TestValidateOnlyStatus(t *testing.T) { } func TestSubresourcesDiscovery(t *testing.T) { - stopCh, config, err := testserver.StartDefaultServer() + tearDown, config, _, err := fixtures.StartDefaultServer(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() apiExtensionClient, err := clientset.NewForConfig(config) if err != nil { @@ -472,7 +472,7 @@ func TestSubresourcesDiscovery(t *testing.T) { } noxuDefinition := NewNoxuSubresourcesCRD(apiextensionsv1beta1.NamespaceScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -540,14 +540,14 @@ func TestSubresourcesDiscovery(t *testing.T) { } func TestGeneration(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() noxuDefinition := NewNoxuSubresourcesCRD(apiextensionsv1beta1.NamespaceScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -610,11 +610,11 @@ func TestSubresourcePatch(t *testing.T) { Resource: "noxus", } - stopCh, config, err := testserver.StartDefaultServer() + tearDown, config, _, err := fixtures.StartDefaultServer(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() apiExtensionClient, err := clientset.NewForConfig(config) if err != nil { @@ -626,7 +626,7 @@ func TestSubresourcePatch(t *testing.T) { } noxuDefinition := NewNoxuSubresourcesCRD(apiextensionsv1beta1.NamespaceScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -638,7 +638,7 @@ func TestSubresourcePatch(t *testing.T) { t.Fatalf("unable to create noxu instance: %v", err) } - scaleClient, err := testserver.CreateNewScaleClient(noxuDefinition, config) + scaleClient, err := fixtures.CreateNewScaleClient(noxuDefinition, config) if err != nil { t.Fatal(err) } diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/table_test.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/table_test.go index 0c3ac609a9c..f9371459611 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/table_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/table_test.go @@ -31,7 +31,7 @@ import ( "k8s.io/client-go/rest" apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" - "k8s.io/apiextensions-apiserver/test/integration/testserver" + "k8s.io/apiextensions-apiserver/test/integration/fixtures" ) func newTableCRD() *apiextensionsv1beta1.CustomResourceDefinition { @@ -76,11 +76,11 @@ func newTableInstance(name string) *unstructured.Unstructured { } func TestTableGet(t *testing.T) { - stopCh, config, err := testserver.StartDefaultServer() + tearDown, config, _, err := fixtures.StartDefaultServer(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() apiExtensionClient, err := clientset.NewForConfig(config) if err != nil { @@ -93,7 +93,7 @@ func TestTableGet(t *testing.T) { } crd := newTableCRD() - crd, err = testserver.CreateNewCustomResourceDefinition(crd, apiExtensionClient, dynamicClient) + crd, err = fixtures.CreateNewCustomResourceDefinition(crd, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/start.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/start.go deleted file mode 100644 index 406d4e972ef..00000000000 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/start.go +++ /dev/null @@ -1,162 +0,0 @@ -/* -Copyright 2017 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 testserver - -import ( - "fmt" - "net" - "os" - "time" - - "github.com/pborman/uuid" - - extensionsapiserver "k8s.io/apiextensions-apiserver/pkg/apiserver" - "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" - "k8s.io/apiextensions-apiserver/pkg/cmd/server" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/util/wait" - genericapiserver "k8s.io/apiserver/pkg/server" - genericapiserveroptions "k8s.io/apiserver/pkg/server/options" - "k8s.io/client-go/dynamic" - "k8s.io/client-go/rest" -) - -func DefaultServerConfig() (*extensionsapiserver.Config, error) { - listener, port, err := genericapiserveroptions.CreateListener("tcp", "127.0.0.1:0") - if err != nil { - return nil, err - } - - options := server.NewCustomResourceDefinitionsServerOptions(os.Stdout, os.Stderr) - options.RecommendedOptions.Audit.LogOptions.Path = "-" - options.RecommendedOptions.SecureServing.BindPort = port - options.RecommendedOptions.Authentication = nil // disable - options.RecommendedOptions.Authorization = nil // disable - options.RecommendedOptions.Admission = nil // disable - options.RecommendedOptions.CoreAPI = nil // disable - options.RecommendedOptions.SecureServing.BindAddress = net.ParseIP("127.0.0.1") - options.RecommendedOptions.SecureServing.Listener = listener - etcdURL, ok := os.LookupEnv("KUBE_INTEGRATION_ETCD_URL") - if !ok { - etcdURL = "http://127.0.0.1:2379" - } - options.RecommendedOptions.Etcd.StorageConfig.ServerList = []string{etcdURL} - options.RecommendedOptions.Etcd.StorageConfig.Prefix = uuid.New() - - genericConfig := genericapiserver.NewRecommendedConfig(extensionsapiserver.Codecs) - - if err := options.RecommendedOptions.SecureServing.MaybeDefaultWithSelfSignedCerts("localhost", nil, []net.IP{net.ParseIP("127.0.0.1")}); err != nil { - return nil, fmt.Errorf("error creating self-signed certificates: %v", err) - } - if err := options.RecommendedOptions.ApplyTo(genericConfig, nil); err != nil { - return nil, err - } - if err := options.APIEnablement.ApplyTo(&genericConfig.Config, extensionsapiserver.DefaultAPIResourceConfigSource(), extensionsapiserver.Scheme); err != nil { - return nil, err - } - - customResourceDefinitionRESTOptionsGetter := extensionsapiserver.CRDRESTOptionsGetter{ - StorageConfig: options.RecommendedOptions.Etcd.StorageConfig, - StoragePrefix: options.RecommendedOptions.Etcd.StorageConfig.Prefix, - EnableWatchCache: options.RecommendedOptions.Etcd.EnableWatchCache, - DefaultWatchCacheSize: options.RecommendedOptions.Etcd.DefaultWatchCacheSize, - EnableGarbageCollection: options.RecommendedOptions.Etcd.EnableGarbageCollection, - DeleteCollectionWorkers: options.RecommendedOptions.Etcd.DeleteCollectionWorkers, - } - customResourceDefinitionRESTOptionsGetter.StorageConfig.Codec = unstructured.UnstructuredJSONScheme - - config := &extensionsapiserver.Config{ - GenericConfig: genericConfig, - ExtraConfig: extensionsapiserver.ExtraConfig{ - CRDRESTOptionsGetter: customResourceDefinitionRESTOptionsGetter, - }, - } - - return config, nil -} - -func StartServer(config *extensionsapiserver.Config) (chan struct{}, *rest.Config, error) { - stopCh := make(chan struct{}) - server, err := config.Complete().New(genericapiserver.NewEmptyDelegate()) - if err != nil { - return nil, nil, err - } - go func() { - err := server.GenericAPIServer.PrepareRun().Run(stopCh) - if err != nil { - close(stopCh) - panic(err) - } - }() - - // wait until the server is healthy - err = wait.PollImmediate(30*time.Millisecond, 30*time.Second, func() (bool, error) { - healthClient, err := clientset.NewForConfig(server.GenericAPIServer.LoopbackClientConfig) - if err != nil { - return false, nil - } - healthResult := healthClient.Discovery().RESTClient().Get().AbsPath("/healthz").Do() - if healthResult.Error() != nil { - return false, nil - } - rawHealth, err := healthResult.Raw() - if err != nil { - return false, nil - } - if string(rawHealth) != "ok" { - return false, nil - } - - return true, nil - }) - if err != nil { - close(stopCh) - return nil, nil, err - } - - return stopCh, config.GenericConfig.LoopbackClientConfig, nil -} - -func StartDefaultServer() (chan struct{}, *rest.Config, error) { - config, err := DefaultServerConfig() - if err != nil { - return nil, nil, err - } - - return StartServer(config) -} - -func StartDefaultServerWithClients() (chan struct{}, clientset.Interface, dynamic.Interface, error) { - stopCh, config, err := StartDefaultServer() - if err != nil { - return nil, nil, nil, err - } - - apiExtensionsClient, err := clientset.NewForConfig(config) - if err != nil { - close(stopCh) - return nil, nil, nil, err - } - - dynamicClient, err := dynamic.NewForConfig(config) - if err != nil { - close(stopCh) - return nil, nil, nil, err - } - - return stopCh, apiExtensionsClient, dynamicClient, nil -} diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/validation_test.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/validation_test.go index cb761330dd6..9460eac32cc 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/validation_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/validation_test.go @@ -27,18 +27,18 @@ import ( "k8s.io/apimachinery/pkg/util/wait" apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" - "k8s.io/apiextensions-apiserver/test/integration/testserver" + "k8s.io/apiextensions-apiserver/test/integration/fixtures" ) func TestForProperValidationErrors(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() - noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -54,7 +54,7 @@ func TestForProperValidationErrors(t *testing.T) { { name: "bad version", instanceFn: func() *unstructured.Unstructured { - instance := testserver.NewVersionedNoxuInstance(ns, "foo", "v2") + instance := fixtures.NewVersionedNoxuInstance(ns, "foo", "v2") return instance }, expectedError: "the API version in the data (mygroup.example.com/v2) does not match the expected API version (mygroup.example.com/v1beta1)", @@ -62,7 +62,7 @@ func TestForProperValidationErrors(t *testing.T) { { name: "bad kind", instanceFn: func() *unstructured.Unstructured { - instance := testserver.NewNoxuInstance(ns, "foo") + instance := fixtures.NewNoxuInstance(ns, "foo") instance.Object["kind"] = "SomethingElse" return instance }, @@ -168,14 +168,14 @@ func newNoxuValidationInstance(namespace, name string) *unstructured.Unstructure } func TestCustomResourceValidation(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() noxuDefinition := newNoxuValidationCRD(apiextensionsv1beta1.NamespaceScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -189,14 +189,14 @@ func TestCustomResourceValidation(t *testing.T) { } func TestCustomResourceUpdateValidation(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() noxuDefinition := newNoxuValidationCRD(apiextensionsv1beta1.NamespaceScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -232,14 +232,14 @@ func TestCustomResourceUpdateValidation(t *testing.T) { } func TestCustomResourceValidationErrors(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() noxuDefinition := newNoxuValidationCRD(apiextensionsv1beta1.NamespaceScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -323,18 +323,18 @@ func TestCustomResourceValidationErrors(t *testing.T) { } func TestCRValidationOnCRDUpdate(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() noxuDefinition := newNoxuValidationCRD(apiextensionsv1beta1.NamespaceScoped) // set stricter schema noxuDefinition.Spec.Validation.OpenAPIV3Schema.Required = []string{"alpha", "beta", "epsilon"} - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -374,16 +374,16 @@ func TestCRValidationOnCRDUpdate(t *testing.T) { } func TestForbiddenFieldsInSchema(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() noxuDefinition := newNoxuValidationCRD(apiextensionsv1beta1.NamespaceScoped) noxuDefinition.Spec.Validation.OpenAPIV3Schema.AdditionalProperties.Allows = false - _, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + _, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err == nil { t.Fatalf("unexpected non-error: additionalProperties cannot be set to false") } @@ -394,7 +394,7 @@ func TestForbiddenFieldsInSchema(t *testing.T) { } noxuDefinition.Spec.Validation.OpenAPIV3Schema.AdditionalProperties.Allows = true - _, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + _, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err == nil { t.Fatalf("unexpected non-error: uniqueItems cannot be set to true") } @@ -405,14 +405,14 @@ func TestForbiddenFieldsInSchema(t *testing.T) { UniqueItems: false, } - _, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + _, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err == nil { t.Fatal("unexpected non-error: $ref cannot be non-empty string") } noxuDefinition.Spec.Validation.OpenAPIV3Schema.Ref = nil - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/versioning_test.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/versioning_test.go index 55d0c17af22..7d305b081fd 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/versioning_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/versioning_test.go @@ -21,19 +21,19 @@ import ( "testing" apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" - "k8s.io/apiextensions-apiserver/test/integration/testserver" + "k8s.io/apiextensions-apiserver/test/integration/fixtures" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) func TestVersionedNamspacedScopedCRD(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() - noxuDefinition := testserver.NewMultipleVersionNoxuCRD(apiextensionsv1beta1.NamespaceScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition := fixtures.NewMultipleVersionNoxuCRD(apiextensionsv1beta1.NamespaceScoped) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -43,14 +43,14 @@ func TestVersionedNamspacedScopedCRD(t *testing.T) { } func TestVersionedClusterScopedCRD(t *testing.T) { - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() - noxuDefinition := testserver.NewMultipleVersionNoxuCRD(apiextensionsv1beta1.ClusterScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition := fixtures.NewMultipleVersionNoxuCRD(apiextensionsv1beta1.ClusterScoped) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -60,13 +60,13 @@ func TestVersionedClusterScopedCRD(t *testing.T) { } func TestStoragedVersionInNamespacedCRDStatus(t *testing.T) { - noxuDefinition := testserver.NewMultipleVersionNoxuCRD(apiextensionsv1beta1.NamespaceScoped) + noxuDefinition := fixtures.NewMultipleVersionNoxuCRD(apiextensionsv1beta1.NamespaceScoped) ns := "not-the-default" testStoragedVersionInCRDStatus(t, ns, noxuDefinition) } func TestStoragedVersionInClusterScopedCRDStatus(t *testing.T) { - noxuDefinition := testserver.NewMultipleVersionNoxuCRD(apiextensionsv1beta1.ClusterScoped) + noxuDefinition := fixtures.NewMultipleVersionNoxuCRD(apiextensionsv1beta1.ClusterScoped) ns := "" testStoragedVersionInCRDStatus(t, ns, noxuDefinition) } @@ -96,14 +96,14 @@ func testStoragedVersionInCRDStatus(t *testing.T, ns string, noxuDefinition *api Storage: true, }, } - stopCh, apiExtensionClient, dynamicClient, err := testserver.StartDefaultServerWithClients() + tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() noxuDefinition.Spec.Versions = versionsV1Beta1Storage - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -131,7 +131,7 @@ func testStoragedVersionInCRDStatus(t *testing.T, ns string, noxuDefinition *api t.Errorf("expected %v, got %v", e, a) } - err = testserver.DeleteCustomResourceDefinition(crd, apiExtensionClient) + err = fixtures.DeleteCustomResourceDefinition(crd, apiExtensionClient) if err != nil { t.Fatal(err) } diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/yaml_test.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/yaml_test.go index 2dc27955943..45e5176b000 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/yaml_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/yaml_test.go @@ -31,15 +31,15 @@ import ( apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" - "k8s.io/apiextensions-apiserver/test/integration/testserver" + "k8s.io/apiextensions-apiserver/test/integration/fixtures" ) func TestYAML(t *testing.T) { - stopCh, config, err := testserver.StartDefaultServer() + tearDown, config, _, err := fixtures.StartDefaultServer(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() apiExtensionClient, err := clientset.NewForConfig(config) if err != nil { @@ -50,8 +50,8 @@ func TestYAML(t *testing.T) { t.Fatal(err) } - noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } @@ -354,11 +354,11 @@ values: } func TestYAMLSubresource(t *testing.T) { - stopCh, config, err := testserver.StartDefaultServer() + tearDown, config, _, err := fixtures.StartDefaultServer(t) if err != nil { t.Fatal(err) } - defer close(stopCh) + defer tearDown() apiExtensionClient, err := clientset.NewForConfig(config) if err != nil { @@ -370,7 +370,7 @@ func TestYAMLSubresource(t *testing.T) { } noxuDefinition := NewNoxuSubresourcesCRD(apiextensionsv1beta1.ClusterScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil { t.Fatal(err) } diff --git a/staging/src/k8s.io/apiserver/pkg/server/config_selfclient.go b/staging/src/k8s.io/apiserver/pkg/server/config_selfclient.go index eb11dc701b2..53f1795275c 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/config_selfclient.go +++ b/staging/src/k8s.io/apiserver/pkg/server/config_selfclient.go @@ -27,7 +27,7 @@ import ( // select the loopback certificate via SNI if TLS is used. const LoopbackClientServerNameOverride = "apiserver-loopback-client" -func (s *SecureServingInfo) NewLoopbackClientConfig(token string, loopbackCert []byte) (*restclient.Config, error) { +func (s *SecureServingInfo) NewClientConfig(caCert []byte) (*restclient.Config, error) { if s == nil || (s.Cert == nil && len(s.SNICerts) == 0) { return nil, nil } @@ -41,19 +41,29 @@ func (s *SecureServingInfo) NewLoopbackClientConfig(token string, loopbackCert [ // Increase QPS limits. The client is currently passed to all admission plugins, // and those can be throttled in case of higher load on apiserver - see #22340 and #22422 // for more details. Once #22422 is fixed, we may want to remove it. - QPS: 50, - Burst: 100, - Host: "https://" + net.JoinHostPort(host, port), - BearerToken: token, + QPS: 50, + Burst: 100, + Host: "https://" + net.JoinHostPort(host, port), // override the ServerName to select our loopback certificate via SNI. This name is also // used by the client to compare the returns server certificate against. TLSClientConfig: restclient.TLSClientConfig{ - ServerName: LoopbackClientServerNameOverride, - CAData: loopbackCert, + CAData: caCert, }, }, nil } +func (s *SecureServingInfo) NewLoopbackClientConfig(token string, loopbackCert []byte) (*restclient.Config, error) { + c, err := s.NewClientConfig(loopbackCert) + if err != nil || c == nil { + return c, err + } + + c.BearerToken = token + c.TLSClientConfig.ServerName = LoopbackClientServerNameOverride + + return c, nil +} + // LoopbackHostPort returns the host and port loopback REST clients should use // to contact the server. func LoopbackHostPort(bindAddress string) (string, string, error) { diff --git a/test/e2e/apimachinery/BUILD b/test/e2e/apimachinery/BUILD index 707ac1d17eb..0c3a92b551c 100644 --- a/test/e2e/apimachinery/BUILD +++ b/test/e2e/apimachinery/BUILD @@ -40,7 +40,7 @@ go_library( "//staging/src/k8s.io/api/rbac/v1beta1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/test/integration/fixtures:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", diff --git a/test/e2e/apimachinery/crd_watch.go b/test/e2e/apimachinery/crd_watch.go index 1f0ea85e3fb..7ce8507d45d 100644 --- a/test/e2e/apimachinery/crd_watch.go +++ b/test/e2e/apimachinery/crd_watch.go @@ -21,7 +21,7 @@ import ( apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" - "k8s.io/apiextensions-apiserver/test/integration/testserver" + "k8s.io/apiextensions-apiserver/test/integration/fixtures" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -63,14 +63,14 @@ var _ = SIGDescribe("CustomResourceDefinition Watch", func() { framework.Failf("failed to initialize apiExtensionClient: %v", err) } - noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) - noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, f.DynamicClient) + noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) + noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, f.DynamicClient) if err != nil { framework.Failf("failed to create CustomResourceDefinition: %v", err) } defer func() { - err = testserver.DeleteCustomResourceDefinition(noxuDefinition, apiExtensionClient) + err = fixtures.DeleteCustomResourceDefinition(noxuDefinition, apiExtensionClient) if err != nil { framework.Failf("failed to delete CustomResourceDefinition: %v", err) } @@ -85,8 +85,8 @@ var _ = SIGDescribe("CustomResourceDefinition Watch", func() { watchB, err := watchCRWithName(noxuResourceClient, watchCRNameB) Expect(err).NotTo(HaveOccurred()) - testCrA := testserver.NewNoxuInstance(ns, watchCRNameA) - testCrB := testserver.NewNoxuInstance(ns, watchCRNameB) + testCrA := fixtures.NewNoxuInstance(ns, watchCRNameA) + testCrB := fixtures.NewNoxuInstance(ns, watchCRNameB) By("Creating first CR ") testCrA, err = instantiateCustomResource(testCrA, noxuResourceClient, noxuDefinition) diff --git a/test/e2e/apimachinery/custom_resource_definition.go b/test/e2e/apimachinery/custom_resource_definition.go index 18f19b6847b..b4c9a6b266d 100644 --- a/test/e2e/apimachinery/custom_resource_definition.go +++ b/test/e2e/apimachinery/custom_resource_definition.go @@ -19,7 +19,7 @@ package apimachinery import ( "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" - "k8s.io/apiextensions-apiserver/test/integration/testserver" + "k8s.io/apiextensions-apiserver/test/integration/fixtures" utilversion "k8s.io/kubernetes/pkg/util/version" "k8s.io/kubernetes/test/e2e/framework" @@ -52,16 +52,16 @@ var _ = SIGDescribe("CustomResourceDefinition resources", func() { framework.Failf("failed to initialize apiExtensionClient: %v", err) } - randomDefinition := testserver.NewRandomNameCustomResourceDefinition(v1beta1.ClusterScoped) + randomDefinition := fixtures.NewRandomNameCustomResourceDefinition(v1beta1.ClusterScoped) //create CRD and waits for the resource to be recognized and available. - randomDefinition, err = testserver.CreateNewCustomResourceDefinition(randomDefinition, apiExtensionClient, f.DynamicClient) + randomDefinition, err = fixtures.CreateNewCustomResourceDefinition(randomDefinition, apiExtensionClient, f.DynamicClient) if err != nil { framework.Failf("failed to create CustomResourceDefinition: %v", err) } defer func() { - err = testserver.DeleteCustomResourceDefinition(randomDefinition, apiExtensionClient) + err = fixtures.DeleteCustomResourceDefinition(randomDefinition, apiExtensionClient) if err != nil { framework.Failf("failed to delete CustomResourceDefinition: %v", err) } diff --git a/test/e2e/apimachinery/garbage_collector.go b/test/e2e/apimachinery/garbage_collector.go index 9bb8d0a3850..3b92183c272 100644 --- a/test/e2e/apimachinery/garbage_collector.go +++ b/test/e2e/apimachinery/garbage_collector.go @@ -27,7 +27,7 @@ import ( "k8s.io/api/extensions/v1beta1" apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" apiextensionsclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" - apiextensionstestserver "k8s.io/apiextensions-apiserver/test/integration/testserver" + apiextensionstestserver "k8s.io/apiextensions-apiserver/test/integration/fixtures" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" diff --git a/test/e2e/auth/BUILD b/test/e2e/auth/BUILD index 5523226dbc8..a5afae44546 100644 --- a/test/e2e/auth/BUILD +++ b/test/e2e/auth/BUILD @@ -34,7 +34,7 @@ go_library( "//staging/src/k8s.io/api/rbac/v1beta1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/test/integration/fixtures:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", diff --git a/test/e2e/auth/audit.go b/test/e2e/auth/audit.go index cd239a4771f..80705d12289 100644 --- a/test/e2e/auth/audit.go +++ b/test/e2e/auth/audit.go @@ -27,7 +27,7 @@ import ( apiv1 "k8s.io/api/core/v1" apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" apiextensionclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" - "k8s.io/apiextensions-apiserver/test/integration/testserver" + "k8s.io/apiextensions-apiserver/test/integration/fixtures" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" @@ -45,7 +45,7 @@ var ( watchTestTimeout int64 = 1 auditTestUser = "kubecfg" - crd = testserver.NewRandomNameCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) + crd = fixtures.NewRandomNameCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped) crdName = strings.SplitN(crd.Name, ".", 2)[0] crdNamespace = strings.SplitN(crd.Name, ".", 2)[1] @@ -619,9 +619,9 @@ var _ = SIGDescribe("Advanced Audit", func() { // Create and delete custom resource definition. { func() { - crd, err = testserver.CreateNewCustomResourceDefinition(crd, apiExtensionClient, f.DynamicClient) + crd, err = fixtures.CreateNewCustomResourceDefinition(crd, apiExtensionClient, f.DynamicClient) framework.ExpectNoError(err, "failed to create custom resource definition") - testserver.DeleteCustomResourceDefinition(crd, apiExtensionClient) + fixtures.DeleteCustomResourceDefinition(crd, apiExtensionClient) }, []auditEvent{ { diff --git a/test/e2e/framework/BUILD b/test/e2e/framework/BUILD index 4e8858c6e3d..8a88c2dfd9c 100644 --- a/test/e2e/framework/BUILD +++ b/test/e2e/framework/BUILD @@ -90,7 +90,7 @@ go_library( "//staging/src/k8s.io/api/rbac/v1beta1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/test/integration/fixtures:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/test/e2e/framework/crd_util.go b/test/e2e/framework/crd_util.go index f7db7daef4b..0421158d4aa 100644 --- a/test/e2e/framework/crd_util.go +++ b/test/e2e/framework/crd_util.go @@ -21,7 +21,7 @@ import ( apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" crdclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" - "k8s.io/apiextensions-apiserver/test/integration/testserver" + "k8s.io/apiextensions-apiserver/test/integration/fixtures" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/dynamic" @@ -76,7 +76,7 @@ func CreateTestCRD(f *Framework) (*TestCrd, error) { crd := newCRDForTest(testcrd) //create CRD and waits for the resource to be recognized and available. - crd, err = testserver.CreateNewCustomResourceDefinitionWatchUnsafe(crd, apiExtensionClient) + crd, err = fixtures.CreateNewCustomResourceDefinitionWatchUnsafe(crd, apiExtensionClient) if err != nil { Failf("failed to create CustomResourceDefinition: %v", err) return nil, err @@ -89,7 +89,7 @@ func CreateTestCRD(f *Framework) (*TestCrd, error) { testcrd.Crd = crd testcrd.DynamicClient = resourceClient testcrd.CleanUp = func() error { - err := testserver.DeleteCustomResourceDefinition(crd, apiExtensionClient) + err := fixtures.DeleteCustomResourceDefinition(crd, apiExtensionClient) if err != nil { Failf("failed to delete CustomResourceDefinition(%s): %v", name, err) } diff --git a/test/integration/garbagecollector/BUILD b/test/integration/garbagecollector/BUILD index 6a86286fa18..e2c2f241ae8 100644 --- a/test/integration/garbagecollector/BUILD +++ b/test/integration/garbagecollector/BUILD @@ -15,7 +15,7 @@ go_test( "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset:go_default_library", - "//staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver:go_default_library", + "//staging/src/k8s.io/apiextensions-apiserver/test/integration/fixtures:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", diff --git a/test/integration/garbagecollector/garbage_collector_test.go b/test/integration/garbagecollector/garbage_collector_test.go index a6fce7efd3a..c8e9577e02a 100644 --- a/test/integration/garbagecollector/garbage_collector_test.go +++ b/test/integration/garbagecollector/garbage_collector_test.go @@ -27,7 +27,7 @@ import ( "k8s.io/api/core/v1" apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" apiextensionsclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" - apiextensionstestserver "k8s.io/apiextensions-apiserver/test/integration/testserver" + apiextensionstestserver "k8s.io/apiextensions-apiserver/test/integration/fixtures" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"