mirror of
https://github.com/optim-enterprises-bv/kubernetes.git
synced 2025-11-02 19:28:16 +00:00
controlplane: add generic storage construction
Signed-off-by: Dr. Stefan Schimanski <stefan.schimanski@gmail.com>
This commit is contained in:
@@ -29,6 +29,8 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
autoscalingrest "k8s.io/kubernetes/pkg/registry/autoscaling/rest"
|
||||
resourcerest "k8s.io/kubernetes/pkg/registry/resource/rest"
|
||||
|
||||
autoscalingapiv2beta1 "k8s.io/api/autoscaling/v2beta1"
|
||||
autoscalingapiv2beta2 "k8s.io/api/autoscaling/v2beta2"
|
||||
@@ -69,9 +71,17 @@ import (
|
||||
generatedopenapi "k8s.io/kubernetes/pkg/generated/openapi"
|
||||
"k8s.io/kubernetes/pkg/kubeapiserver"
|
||||
kubeletclient "k8s.io/kubernetes/pkg/kubelet/client"
|
||||
appsrest "k8s.io/kubernetes/pkg/registry/apps/rest"
|
||||
batchrest "k8s.io/kubernetes/pkg/registry/batch/rest"
|
||||
certificatesrest "k8s.io/kubernetes/pkg/registry/certificates/rest"
|
||||
corerest "k8s.io/kubernetes/pkg/registry/core/rest"
|
||||
discoveryrest "k8s.io/kubernetes/pkg/registry/discovery/rest"
|
||||
networkingrest "k8s.io/kubernetes/pkg/registry/networking/rest"
|
||||
noderest "k8s.io/kubernetes/pkg/registry/node/rest"
|
||||
policyrest "k8s.io/kubernetes/pkg/registry/policy/rest"
|
||||
"k8s.io/kubernetes/pkg/registry/registrytest"
|
||||
schedulingrest "k8s.io/kubernetes/pkg/registry/scheduling/rest"
|
||||
storagerest "k8s.io/kubernetes/pkg/registry/storage/rest"
|
||||
)
|
||||
|
||||
// setUp is a convenience function for setting up for (most) tests.
|
||||
@@ -159,12 +169,7 @@ func TestLegacyRestStorageStrategies(t *testing.T) {
|
||||
defer etcdserver.Terminate(t)
|
||||
|
||||
storageProvider, err := corerest.New(corerest.Config{
|
||||
GenericConfig: corerest.GenericConfig{
|
||||
StorageFactory: apiserverCfg.ControlPlane.Extra.StorageFactory,
|
||||
EventTTL: apiserverCfg.ControlPlane.Extra.EventTTL,
|
||||
LoopbackClientConfig: apiserverCfg.ControlPlane.Generic.LoopbackClientConfig,
|
||||
Informers: apiserverCfg.ControlPlane.Extra.VersionedInformers,
|
||||
},
|
||||
GenericConfig: *apiserverCfg.ControlPlane.NewCoreGenericConfig(),
|
||||
Proxy: corerest.ProxyConfig{
|
||||
Transport: apiserverCfg.ControlPlane.Extra.ProxyTransport,
|
||||
KubeletClientConfig: apiserverCfg.Extra.KubeletClientConfig,
|
||||
@@ -206,15 +211,16 @@ func TestCertificatesRestStorageStrategies(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func newInstance(t *testing.T) (*Instance, *etcd3testing.EtcdTestServer, Config, *assert.Assertions) {
|
||||
func newInstance(t *testing.T) (*Instance, *etcd3testing.EtcdTestServer, CompletedConfig, *assert.Assertions) {
|
||||
etcdserver, config, assert := setUp(t)
|
||||
|
||||
apiserver, err := config.Complete().New(genericapiserver.NewEmptyDelegate())
|
||||
completed := config.Complete()
|
||||
apiserver, err := completed.New(genericapiserver.NewEmptyDelegate())
|
||||
if err != nil {
|
||||
t.Fatalf("Error in bringing up the master: %v", err)
|
||||
}
|
||||
|
||||
return apiserver, etcdserver, config, assert
|
||||
return apiserver, etcdserver, completed, assert
|
||||
}
|
||||
|
||||
// TestVersion tests /version
|
||||
@@ -480,3 +486,67 @@ func TestNewBetaResourcesEnabledByDefault(t *testing.T) {
|
||||
t.Errorf("no new beta resources can be enabled by default, see https://github.com/kubernetes/enhancements/blob/0ad0fc8269165ca300d05ca51c7ce190a79976a5/keps/sig-architecture/3136-beta-apis-off-by-default/README.md: %v", gvr)
|
||||
}
|
||||
}
|
||||
|
||||
// TestGenericStorageProviders is a smoke test that ensures that the kube
|
||||
// storage providers and the generic storage providers don't unexpectedly
|
||||
// divert, i.e. the later is an equally ordered subset.
|
||||
func TestGenericStorageProviders(t *testing.T) {
|
||||
_, config, _ := setUp(t)
|
||||
completed := config.Complete()
|
||||
|
||||
// create kube storage providers
|
||||
client, err := kubernetes.NewForConfig(config.ControlPlane.Generic.LoopbackClientConfig)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
kube, err := completed.StorageProviders(client.Discovery())
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// create generic storage providers. These should be an equally ordered subset
|
||||
generic, err := completed.ControlPlane.GenericStorageProviders(client.Discovery())
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
g := 0 // generic index
|
||||
for k := range kube {
|
||||
kt := reflect.TypeOf(kube[k])
|
||||
var gt reflect.Type
|
||||
if g < len(generic) {
|
||||
gt = reflect.TypeOf(generic[g])
|
||||
}
|
||||
|
||||
// special case: we identify full core and generic core
|
||||
if kt.Kind() == reflect.Ptr && kt.Elem().PkgPath() == reflect.TypeOf(corerest.Config{}).PkgPath() {
|
||||
kt = reflect.TypeOf(&corerest.GenericConfig{})
|
||||
}
|
||||
|
||||
if kt == gt {
|
||||
g++
|
||||
continue
|
||||
}
|
||||
|
||||
switch kube[k].(type) {
|
||||
case autoscalingrest.RESTStorageProvider,
|
||||
batchrest.RESTStorageProvider,
|
||||
discoveryrest.StorageProvider,
|
||||
networkingrest.RESTStorageProvider,
|
||||
noderest.RESTStorageProvider,
|
||||
policyrest.RESTStorageProvider,
|
||||
schedulingrest.RESTStorageProvider,
|
||||
storagerest.RESTStorageProvider,
|
||||
appsrest.StorageProvider,
|
||||
resourcerest.RESTStorageProvider:
|
||||
// all these are non-generic, but kube specific
|
||||
continue
|
||||
default:
|
||||
t.Errorf("Unexpected, uncategorized storage %T from %s. Put into the list above for kube-specific APIs, or into GenericStorageProviders for generic APIs", kube[k], kt.PkgPath())
|
||||
}
|
||||
}
|
||||
|
||||
if g != len(generic) {
|
||||
t.Errorf("Unexpected, generic APIs found: %#v", generic[g:])
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user