integration: Start{RealMasterOrDie->TestServer} in dryrun tests

This commit is contained in:
Dr. Stefan Schimanski 2019-05-13 11:29:40 +02:00
parent 28f88c91ee
commit 76b5bee48c
2 changed files with 38 additions and 6 deletions

View File

@ -17,7 +17,9 @@ go_test(
"integration", "integration",
], ],
deps = [ deps = [
"//cmd/kube-apiserver/app/testing:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/errors: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:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library",
@ -27,6 +29,7 @@ go_test(
"//staging/src/k8s.io/apiserver/pkg/features:go_default_library", "//staging/src/k8s.io/apiserver/pkg/features:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/client-go/dynamic:go_default_library", "//staging/src/k8s.io/client-go/dynamic:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
"//staging/src/k8s.io/component-base/featuregate/testing:go_default_library", "//staging/src/k8s.io/component-base/featuregate/testing:go_default_library",
"//test/integration/etcd:go_default_library", "//test/integration/etcd:go_default_library",
"//test/integration/framework:go_default_library", "//test/integration/framework:go_default_library",

View File

@ -19,7 +19,8 @@ package dryrun
import ( import (
"testing" "testing"
"k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
apiextensionsclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
"k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@ -29,8 +30,11 @@ import (
"k8s.io/apiserver/pkg/features" "k8s.io/apiserver/pkg/features"
utilfeature "k8s.io/apiserver/pkg/util/feature" utilfeature "k8s.io/apiserver/pkg/util/feature"
"k8s.io/client-go/dynamic" "k8s.io/client-go/dynamic"
"k8s.io/client-go/kubernetes"
featuregatetesting "k8s.io/component-base/featuregate/testing" featuregatetesting "k8s.io/component-base/featuregate/testing"
kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing"
"k8s.io/kubernetes/test/integration/etcd" "k8s.io/kubernetes/test/integration/etcd"
"k8s.io/kubernetes/test/integration/framework"
) )
// Only add kinds to this list when this a virtual resource with get and create verbs that doesn't actually // Only add kinds to this list when this a virtual resource with get and create verbs that doesn't actually
@ -206,10 +210,29 @@ func DryRunDeleteTest(t *testing.T, rsc dynamic.ResourceInterface, name string)
func TestDryRun(t *testing.T) { func TestDryRun(t *testing.T) {
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DryRun, true)() defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DryRun, true)()
master := etcd.StartRealMasterOrDie(t) // start API server
defer master.Cleanup() s, err := kubeapiservertesting.StartTestServer(t, kubeapiservertesting.NewDefaultTestServerOptions(), []string{
"--disable-admission-plugins=ServiceAccount,StorageObjectInUseProtection",
"--runtime-config=extensions/v1beta1/deployments=true,extensions/v1beta1/daemonsets=true,extensions/v1beta1/replicasets=true,extensions/v1beta1/podsecuritypolicies=true,extensions/v1beta1/networkpolicies=true",
}, framework.SharedEtcd())
if err != nil {
t.Fatal(err)
}
defer s.TearDownFn()
if _, err := master.Client.CoreV1().Namespaces().Create(&v1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: testNamespace}}); err != nil { client, err := kubernetes.NewForConfig(s.ClientConfig)
if err != nil {
t.Fatal(err)
}
dynamicClient, err := dynamic.NewForConfig(s.ClientConfig)
if err != nil {
t.Fatal(err)
}
// create CRDs so we can make sure that custom resources do not get lost
etcd.CreateTestCRDs(t, apiextensionsclientset.NewForConfigOrDie(s.ClientConfig), false, etcd.GetCustomResourceDefinitionData()...)
if _, err := client.CoreV1().Namespaces().Create(&v1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: testNamespace}}); err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -225,7 +248,13 @@ func TestDryRun(t *testing.T) {
dryrunData[resource] = data dryrunData[resource] = data
} }
for _, resourceToTest := range master.Resources { // gather resources to test
_, resources, err := client.Discovery().ServerGroupsAndResources()
if err != nil {
t.Fatalf("Failed to get ServerGroupsAndResources with error: %+v", err)
}
for _, resourceToTest := range etcd.GetResources(t, resources) {
t.Run(resourceToTest.Mapping.Resource.String(), func(t *testing.T) { t.Run(resourceToTest.Mapping.Resource.String(), func(t *testing.T) {
mapping := resourceToTest.Mapping mapping := resourceToTest.Mapping
gvk := resourceToTest.Mapping.GroupVersionKind gvk := resourceToTest.Mapping.GroupVersionKind
@ -242,7 +271,7 @@ func TestDryRun(t *testing.T) {
t.Fatalf("no test data for %s. Please add a test for your new type to etcd.GetEtcdStorageData().", gvResource) t.Fatalf("no test data for %s. Please add a test for your new type to etcd.GetEtcdStorageData().", gvResource)
} }
rsc, obj, err := etcd.JSONToUnstructured(testData.Stub, testNamespace, mapping, master.Dynamic) rsc, obj, err := etcd.JSONToUnstructured(testData.Stub, testNamespace, mapping, dynamicClient)
if err != nil { if err != nil {
t.Fatalf("failed to unmarshal stub (%v): %v", testData.Stub, err) t.Fatalf("failed to unmarshal stub (%v): %v", testData.Stub, err)
} }