Skip to content

Commit a1eaacd

Browse files
authored
Merge pull request kubernetes#77804 from sttts/sttts-apimachinery-integration-test-unify
integration: don't use low-level etcd master setup for dry-run+admission-webhook tests
2 parents fb41b7a + 76b5bee commit a1eaacd

File tree

4 files changed

+56
-22
lines changed

4 files changed

+56
-22
lines changed

test/integration/apiserver/admissionwebhook/BUILD

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ go_test(
1212
"integration",
1313
],
1414
deps = [
15-
"//cmd/kube-apiserver/app/options:go_default_library",
1615
"//cmd/kube-apiserver/app/testing:go_default_library",
1716
"//staging/src/k8s.io/api/admission/v1beta1:go_default_library",
1817
"//staging/src/k8s.io/api/admissionregistration/v1beta1:go_default_library",
@@ -21,6 +20,7 @@ go_test(
2120
"//staging/src/k8s.io/api/core/v1:go_default_library",
2221
"//staging/src/k8s.io/api/extensions/v1beta1:go_default_library",
2322
"//staging/src/k8s.io/api/policy/v1beta1:go_default_library",
23+
"//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset:go_default_library",
2424
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
2525
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
2626
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library",
@@ -31,6 +31,7 @@ go_test(
3131
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
3232
"//staging/src/k8s.io/client-go/dynamic:go_default_library",
3333
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
34+
"//staging/src/k8s.io/client-go/rest:go_default_library",
3435
"//staging/src/k8s.io/client-go/util/retry:go_default_library",
3536
"//test/integration/etcd:go_default_library",
3637
"//test/integration/framework:go_default_library",

test/integration/apiserver/admissionwebhook/admission_test.go

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import (
3636
corev1 "k8s.io/api/core/v1"
3737
extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
3838
policyv1beta1 "k8s.io/api/policy/v1beta1"
39+
apiextensionsclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
3940
"k8s.io/apimachinery/pkg/api/errors"
4041
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
4142
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -46,9 +47,11 @@ import (
4647
"k8s.io/apimachinery/pkg/util/wait"
4748
dynamic "k8s.io/client-go/dynamic"
4849
clientset "k8s.io/client-go/kubernetes"
50+
"k8s.io/client-go/rest"
4951
"k8s.io/client-go/util/retry"
50-
"k8s.io/kubernetes/cmd/kube-apiserver/app/options"
52+
kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing"
5153
"k8s.io/kubernetes/test/integration/etcd"
54+
"k8s.io/kubernetes/test/integration/framework"
5255
)
5356

5457
const (
@@ -323,25 +326,23 @@ func TestWebhookV1beta1(t *testing.T) {
323326
defer webhookServer.Close()
324327

325328
// start API server
326-
master := etcd.StartRealMasterOrDie(t, func(opts *options.ServerRunOptions) {
327-
// turn off admission plugins that add finalizers
328-
opts.Admission.GenericAdmission.DisablePlugins = []string{"ServiceAccount", "StorageObjectInUseProtection"}
329-
330-
// force enable all resources so we can check storage.
331-
// TODO: drop these once we stop allowing them to be served.
332-
opts.APIEnablement.RuntimeConfig["extensions/v1beta1/deployments"] = "true"
333-
opts.APIEnablement.RuntimeConfig["extensions/v1beta1/daemonsets"] = "true"
334-
opts.APIEnablement.RuntimeConfig["extensions/v1beta1/replicasets"] = "true"
335-
opts.APIEnablement.RuntimeConfig["extensions/v1beta1/podsecuritypolicies"] = "true"
336-
opts.APIEnablement.RuntimeConfig["extensions/v1beta1/networkpolicies"] = "true"
337-
})
338-
defer master.Cleanup()
329+
s, err := kubeapiservertesting.StartTestServer(t, kubeapiservertesting.NewDefaultTestServerOptions(), []string{
330+
"--disable-admission-plugins=ServiceAccount,StorageObjectInUseProtection",
331+
"--runtime-config=extensions/v1beta1/deployments=true,extensions/v1beta1/daemonsets=true,extensions/v1beta1/replicasets=true,extensions/v1beta1/podsecuritypolicies=true,extensions/v1beta1/networkpolicies=true",
332+
}, framework.SharedEtcd())
333+
if err != nil {
334+
t.Fatal(err)
335+
}
336+
defer s.TearDownFn()
337+
338+
// create CRDs so we can make sure that custom resources do not get lost
339+
etcd.CreateTestCRDs(t, apiextensionsclientset.NewForConfigOrDie(s.ClientConfig), false, etcd.GetCustomResourceDefinitionData()...)
339340

340341
// Configure a client with a distinct user name so that it is easy to distinguish requests
341342
// made by the client from requests made by controllers. We use this to filter out requests
342343
// before recording them to ensure we don't accidentally mistake requests from controllers
343344
// as requests made by the client.
344-
clientConfig := master.Config
345+
clientConfig := rest.CopyConfig(s.ClientConfig)
345346
clientConfig.Impersonate.UserName = testClientUsername
346347
clientConfig.Impersonate.Groups = []string{"system:masters", "system:authenticated"}
347348
client, err := clientset.NewForConfig(clientConfig)

test/integration/dryrun/BUILD

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ go_test(
1717
"integration",
1818
],
1919
deps = [
20+
"//cmd/kube-apiserver/app/testing:go_default_library",
2021
"//staging/src/k8s.io/api/core/v1:go_default_library",
22+
"//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset:go_default_library",
2123
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
2224
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
2325
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library",
@@ -27,6 +29,7 @@ go_test(
2729
"//staging/src/k8s.io/apiserver/pkg/features:go_default_library",
2830
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
2931
"//staging/src/k8s.io/client-go/dynamic:go_default_library",
32+
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
3033
"//staging/src/k8s.io/component-base/featuregate/testing:go_default_library",
3134
"//test/integration/etcd:go_default_library",
3235
"//test/integration/framework:go_default_library",

test/integration/dryrun/dryrun_test.go

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ package dryrun
1919
import (
2020
"testing"
2121

22-
"k8s.io/api/core/v1"
22+
v1 "k8s.io/api/core/v1"
23+
apiextensionsclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
2324
"k8s.io/apimachinery/pkg/api/errors"
2425
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2526
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -29,8 +30,11 @@ import (
2930
"k8s.io/apiserver/pkg/features"
3031
utilfeature "k8s.io/apiserver/pkg/util/feature"
3132
"k8s.io/client-go/dynamic"
33+
"k8s.io/client-go/kubernetes"
3234
featuregatetesting "k8s.io/component-base/featuregate/testing"
35+
kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing"
3336
"k8s.io/kubernetes/test/integration/etcd"
37+
"k8s.io/kubernetes/test/integration/framework"
3438
)
3539

3640
// 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)
206210
func TestDryRun(t *testing.T) {
207211
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DryRun, true)()
208212

209-
master := etcd.StartRealMasterOrDie(t)
210-
defer master.Cleanup()
213+
// start API server
214+
s, err := kubeapiservertesting.StartTestServer(t, kubeapiservertesting.NewDefaultTestServerOptions(), []string{
215+
"--disable-admission-plugins=ServiceAccount,StorageObjectInUseProtection",
216+
"--runtime-config=extensions/v1beta1/deployments=true,extensions/v1beta1/daemonsets=true,extensions/v1beta1/replicasets=true,extensions/v1beta1/podsecuritypolicies=true,extensions/v1beta1/networkpolicies=true",
217+
}, framework.SharedEtcd())
218+
if err != nil {
219+
t.Fatal(err)
220+
}
221+
defer s.TearDownFn()
222+
223+
client, err := kubernetes.NewForConfig(s.ClientConfig)
224+
if err != nil {
225+
t.Fatal(err)
226+
}
227+
dynamicClient, err := dynamic.NewForConfig(s.ClientConfig)
228+
if err != nil {
229+
t.Fatal(err)
230+
}
231+
232+
// create CRDs so we can make sure that custom resources do not get lost
233+
etcd.CreateTestCRDs(t, apiextensionsclientset.NewForConfigOrDie(s.ClientConfig), false, etcd.GetCustomResourceDefinitionData()...)
211234

212-
if _, err := master.Client.CoreV1().Namespaces().Create(&v1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: testNamespace}}); err != nil {
235+
if _, err := client.CoreV1().Namespaces().Create(&v1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: testNamespace}}); err != nil {
213236
t.Fatal(err)
214237
}
215238

@@ -225,7 +248,13 @@ func TestDryRun(t *testing.T) {
225248
dryrunData[resource] = data
226249
}
227250

228-
for _, resourceToTest := range master.Resources {
251+
// gather resources to test
252+
_, resources, err := client.Discovery().ServerGroupsAndResources()
253+
if err != nil {
254+
t.Fatalf("Failed to get ServerGroupsAndResources with error: %+v", err)
255+
}
256+
257+
for _, resourceToTest := range etcd.GetResources(t, resources) {
229258
t.Run(resourceToTest.Mapping.Resource.String(), func(t *testing.T) {
230259
mapping := resourceToTest.Mapping
231260
gvk := resourceToTest.Mapping.GroupVersionKind
@@ -242,7 +271,7 @@ func TestDryRun(t *testing.T) {
242271
t.Fatalf("no test data for %s. Please add a test for your new type to etcd.GetEtcdStorageData().", gvResource)
243272
}
244273

245-
rsc, obj, err := etcd.JSONToUnstructured(testData.Stub, testNamespace, mapping, master.Dynamic)
274+
rsc, obj, err := etcd.JSONToUnstructured(testData.Stub, testNamespace, mapping, dynamicClient)
246275
if err != nil {
247276
t.Fatalf("failed to unmarshal stub (%v): %v", testData.Stub, err)
248277
}

0 commit comments

Comments
 (0)