@@ -19,7 +19,8 @@ package dryrun
19
19
import (
20
20
"testing"
21
21
22
- "k8s.io/api/core/v1"
22
+ v1 "k8s.io/api/core/v1"
23
+ apiextensionsclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
23
24
"k8s.io/apimachinery/pkg/api/errors"
24
25
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
25
26
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -29,8 +30,11 @@ import (
29
30
"k8s.io/apiserver/pkg/features"
30
31
utilfeature "k8s.io/apiserver/pkg/util/feature"
31
32
"k8s.io/client-go/dynamic"
33
+ "k8s.io/client-go/kubernetes"
32
34
featuregatetesting "k8s.io/component-base/featuregate/testing"
35
+ kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing"
33
36
"k8s.io/kubernetes/test/integration/etcd"
37
+ "k8s.io/kubernetes/test/integration/framework"
34
38
)
35
39
36
40
// 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)
206
210
func TestDryRun (t * testing.T ) {
207
211
defer featuregatetesting .SetFeatureGateDuringTest (t , utilfeature .DefaultFeatureGate , features .DryRun , true )()
208
212
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 ()... )
211
234
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 {
213
236
t .Fatal (err )
214
237
}
215
238
@@ -225,7 +248,13 @@ func TestDryRun(t *testing.T) {
225
248
dryrunData [resource ] = data
226
249
}
227
250
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 ) {
229
258
t .Run (resourceToTest .Mapping .Resource .String (), func (t * testing.T ) {
230
259
mapping := resourceToTest .Mapping
231
260
gvk := resourceToTest .Mapping .GroupVersionKind
@@ -242,7 +271,7 @@ func TestDryRun(t *testing.T) {
242
271
t .Fatalf ("no test data for %s. Please add a test for your new type to etcd.GetEtcdStorageData()." , gvResource )
243
272
}
244
273
245
- rsc , obj , err := etcd .JSONToUnstructured (testData .Stub , testNamespace , mapping , master . Dynamic )
274
+ rsc , obj , err := etcd .JSONToUnstructured (testData .Stub , testNamespace , mapping , dynamicClient )
246
275
if err != nil {
247
276
t .Fatalf ("failed to unmarshal stub (%v): %v" , testData .Stub , err )
248
277
}
0 commit comments