Skip to content

Commit c6d0cdf

Browse files
authored
Merge pull request kubernetes#72694 from liggitt/integration-api-versions
Use apps/v1 APIs in integration, explicitly enable all resources for print/etcd/scale tests
2 parents fb9e07c + b64075d commit c6d0cdf

File tree

11 files changed

+97
-58
lines changed

11 files changed

+97
-58
lines changed

hack/update-openapi-spec.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ kube::log::status "Starting kube-apiserver"
6666
--etcd-servers="http://${ETCD_HOST}:${ETCD_PORT}" \
6767
--advertise-address="10.10.10.10" \
6868
--cert-dir="${TMP_DIR}/certs" \
69-
--runtime-config="api/all=true" \
69+
--runtime-config="api/all=true,extensions/v1beta1/daemonsets=true,extensions/v1beta1/deployments=true,extensions/v1beta1/replicasets=true,extensions/v1beta1/networkpolicies=true,extensions/v1beta1/podsecuritypolicies=true,extensions/v1beta1/replicationcontrollers=true" \
7070
--token-auth-file="${TMP_DIR}/tokenauth.csv" \
7171
--logtostderr \
7272
--v=2 \

test/integration/apiserver/BUILD

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,17 @@ go_test(
2020
],
2121
deps = [
2222
"//pkg/api/legacyscheme:go_default_library",
23-
"//pkg/api/testapi:go_default_library",
24-
"//pkg/apis/core:go_default_library",
2523
"//pkg/kubectl/cmd/util:go_default_library",
2624
"//pkg/master:go_default_library",
2725
"//pkg/printers:go_default_library",
2826
"//pkg/printers/internalversion:go_default_library",
2927
"//staging/src/k8s.io/api/apps/v1:go_default_library",
28+
"//staging/src/k8s.io/api/apps/v1beta1:go_default_library",
29+
"//staging/src/k8s.io/api/apps/v1beta2:go_default_library",
3030
"//staging/src/k8s.io/api/auditregistration/v1alpha1:go_default_library",
3131
"//staging/src/k8s.io/api/batch/v2alpha1:go_default_library",
3232
"//staging/src/k8s.io/api/core/v1:go_default_library",
33+
"//staging/src/k8s.io/api/extensions/v1beta1:go_default_library",
3334
"//staging/src/k8s.io/api/rbac/v1alpha1:go_default_library",
3435
"//staging/src/k8s.io/api/scheduling/v1beta1:go_default_library",
3536
"//staging/src/k8s.io/api/settings/v1alpha1:go_default_library",

test/integration/apiserver/apiserver_test.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"io/ioutil"
2424
"net/http"
2525
"net/http/httptest"
26+
"path"
2627
"reflect"
2728
"testing"
2829

@@ -39,17 +40,20 @@ import (
3940
restclient "k8s.io/client-go/rest"
4041
"k8s.io/client-go/tools/pager"
4142
"k8s.io/klog"
42-
"k8s.io/kubernetes/pkg/api/testapi"
43-
api "k8s.io/kubernetes/pkg/apis/core"
4443
"k8s.io/kubernetes/pkg/master"
4544
"k8s.io/kubernetes/test/integration/framework"
4645
)
4746

4847
func setup(t *testing.T, groupVersions ...schema.GroupVersion) (*httptest.Server, clientset.Interface, framework.CloseFunc) {
48+
return setupWithResources(t, groupVersions, nil)
49+
}
50+
51+
func setupWithResources(t *testing.T, groupVersions []schema.GroupVersion, resources []schema.GroupVersionResource) (*httptest.Server, clientset.Interface, framework.CloseFunc) {
4952
masterConfig := framework.NewIntegrationTestMasterConfig()
50-
if len(groupVersions) > 0 {
53+
if len(groupVersions) > 0 || len(resources) > 0 {
5154
resourceConfig := master.DefaultAPIResourceConfigSource()
5255
resourceConfig.EnableVersions(groupVersions...)
56+
resourceConfig.EnableResources(resources...)
5357
masterConfig.ExtraConfig.APIResourceConfigSource = resourceConfig
5458
}
5559
_, s, closeFn := framework.RunAMaster(masterConfig)
@@ -82,10 +86,6 @@ func verifyStatusCode(t *testing.T, verb, URL, body string, expectedStatusCode i
8286
}
8387
}
8488

85-
func path(resource, namespace, name string) string {
86-
return testapi.Extensions.ResourcePath(resource, namespace, name)
87-
}
88-
8989
func newRS(namespace string) *apps.ReplicaSet {
9090
return &apps.ReplicaSet{
9191
TypeMeta: metav1.TypeMeta{
@@ -118,7 +118,7 @@ func newRS(namespace string) *apps.ReplicaSet {
118118
var cascDel = `
119119
{
120120
"kind": "DeleteOptions",
121-
"apiVersion": "` + testapi.Groups[api.GroupName].GroupVersion().String() + `",
121+
"apiVersion": "v1",
122122
"orphanDependents": false
123123
}
124124
`
@@ -139,7 +139,7 @@ func Test202StatusCode(t *testing.T) {
139139
if err != nil {
140140
t.Fatalf("Failed to create rs: %v", err)
141141
}
142-
verifyStatusCode(t, "DELETE", s.URL+path("replicasets", ns.Name, rs.Name), "", 200)
142+
verifyStatusCode(t, "DELETE", s.URL+path.Join("/apis/apps/v1/namespaces", ns.Name, "replicasets", rs.Name), "", 200)
143143

144144
// 2. Create the resource with a finalizer so that the resource is not immediately deleted and then delete it without setting DeleteOptions.
145145
// Verify that the apiserver still returns 200 since DeleteOptions.OrphanDependents is not set.
@@ -149,7 +149,7 @@ func Test202StatusCode(t *testing.T) {
149149
if err != nil {
150150
t.Fatalf("Failed to create rs: %v", err)
151151
}
152-
verifyStatusCode(t, "DELETE", s.URL+path("replicasets", ns.Name, rs.Name), "", 200)
152+
verifyStatusCode(t, "DELETE", s.URL+path.Join("/apis/apps/v1/namespaces", ns.Name, "replicasets", rs.Name), "", 200)
153153

154154
// 3. Create the resource and then delete it with DeleteOptions.OrphanDependents=false.
155155
// Verify that the server still returns 200 since the resource is immediately deleted.
@@ -158,7 +158,7 @@ func Test202StatusCode(t *testing.T) {
158158
if err != nil {
159159
t.Fatalf("Failed to create rs: %v", err)
160160
}
161-
verifyStatusCode(t, "DELETE", s.URL+path("replicasets", ns.Name, rs.Name), cascDel, 200)
161+
verifyStatusCode(t, "DELETE", s.URL+path.Join("/apis/apps/v1/namespaces", ns.Name, "replicasets", rs.Name), cascDel, 200)
162162

163163
// 4. Create the resource with a finalizer so that the resource is not immediately deleted and then delete it with DeleteOptions.OrphanDependents=false.
164164
// Verify that the server returns 202 in this case.
@@ -168,7 +168,7 @@ func Test202StatusCode(t *testing.T) {
168168
if err != nil {
169169
t.Fatalf("Failed to create rs: %v", err)
170170
}
171-
verifyStatusCode(t, "DELETE", s.URL+path("replicasets", ns.Name, rs.Name), cascDel, 202)
171+
verifyStatusCode(t, "DELETE", s.URL+path.Join("/apis/apps/v1/namespaces", ns.Name, "replicasets", rs.Name), cascDel, 202)
172172
}
173173

174174
func TestAPIListChunking(t *testing.T) {

test/integration/apiserver/print_test.go

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,19 @@ import (
2626
"testing"
2727
"time"
2828

29+
appsv1beta1 "k8s.io/api/apps/v1beta1"
30+
appsv1beta2 "k8s.io/api/apps/v1beta2"
2931
auditregv1alpha1 "k8s.io/api/auditregistration/v1alpha1"
3032
batchv2alpha1 "k8s.io/api/batch/v2alpha1"
33+
extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
3134
rbacv1alpha1 "k8s.io/api/rbac/v1alpha1"
3235
schedulerapi "k8s.io/api/scheduling/v1beta1"
3336
settingsv1alpha1 "k8s.io/api/settings/v1alpha1"
3437
storagev1alpha1 "k8s.io/api/storage/v1alpha1"
3538
"k8s.io/apimachinery/pkg/api/meta"
3639
metav1beta1 "k8s.io/apimachinery/pkg/apis/meta/v1beta1"
3740
"k8s.io/apimachinery/pkg/runtime"
41+
"k8s.io/apimachinery/pkg/runtime/schema"
3842
"k8s.io/cli-runtime/pkg/genericclioptions"
3943
"k8s.io/client-go/discovery"
4044
"k8s.io/client-go/tools/clientcmd"
@@ -131,14 +135,27 @@ var missingHanlders = sets.NewString(
131135
)
132136

133137
func TestServerSidePrint(t *testing.T) {
134-
s, _, closeFn := setup(t,
138+
s, _, closeFn := setupWithResources(t,
135139
// additional groupversions needed for the test to run
136-
auditregv1alpha1.SchemeGroupVersion,
137-
batchv2alpha1.SchemeGroupVersion,
138-
rbacv1alpha1.SchemeGroupVersion,
139-
settingsv1alpha1.SchemeGroupVersion,
140-
schedulerapi.SchemeGroupVersion,
141-
storagev1alpha1.SchemeGroupVersion)
140+
[]schema.GroupVersion{
141+
auditregv1alpha1.SchemeGroupVersion,
142+
batchv2alpha1.SchemeGroupVersion,
143+
rbacv1alpha1.SchemeGroupVersion,
144+
settingsv1alpha1.SchemeGroupVersion,
145+
schedulerapi.SchemeGroupVersion,
146+
storagev1alpha1.SchemeGroupVersion,
147+
appsv1beta1.SchemeGroupVersion,
148+
appsv1beta2.SchemeGroupVersion,
149+
extensionsv1beta1.SchemeGroupVersion,
150+
},
151+
[]schema.GroupVersionResource{
152+
extensionsv1beta1.SchemeGroupVersion.WithResource("daemonsets"),
153+
extensionsv1beta1.SchemeGroupVersion.WithResource("deployments"),
154+
extensionsv1beta1.SchemeGroupVersion.WithResource("networkpolicies"),
155+
extensionsv1beta1.SchemeGroupVersion.WithResource("podsecuritypolicies"),
156+
extensionsv1beta1.SchemeGroupVersion.WithResource("replicasets"),
157+
},
158+
)
142159
defer closeFn()
143160

144161
ns := framework.CreateTestingNamespace("server-print", s, t)

test/integration/etcd/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ go_test(
1515
"integration",
1616
],
1717
deps = [
18+
"//cmd/kube-apiserver/app/options:go_default_library",
1819
"//staging/src/k8s.io/api/core/v1:go_default_library",
1920
"//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library",
2021
"//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library",

test/integration/etcd/etcd_storage_path_test.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import (
3535
"k8s.io/apimachinery/pkg/util/diff"
3636
"k8s.io/apimachinery/pkg/util/sets"
3737
"k8s.io/client-go/dynamic"
38+
"k8s.io/kubernetes/cmd/kube-apiserver/app/options"
3839
)
3940

4041
// Only add kinds to this list when this a virtual resource with get and create verbs that doesn't actually
@@ -49,7 +50,15 @@ const testNamespace = "etcdstoragepathtestnamespace"
4950
// It will also fail when a type gets moved to a different location. Be very careful in this situation because
5051
// it essentially means that you will be break old clusters unless you create some migration path for the old data.
5152
func TestEtcdStoragePath(t *testing.T) {
52-
master := StartRealMasterOrDie(t)
53+
master := StartRealMasterOrDie(t, func(opts *options.ServerRunOptions) {
54+
// force enable all resources so we can check storage.
55+
// TODO: drop these once we stop allowing them to be served.
56+
opts.APIEnablement.RuntimeConfig["extensions/v1beta1/deployments"] = "true"
57+
opts.APIEnablement.RuntimeConfig["extensions/v1beta1/daemonsets"] = "true"
58+
opts.APIEnablement.RuntimeConfig["extensions/v1beta1/replicasets"] = "true"
59+
opts.APIEnablement.RuntimeConfig["extensions/v1beta1/podsecuritypolicies"] = "true"
60+
opts.APIEnablement.RuntimeConfig["extensions/v1beta1/networkpolicies"] = "true"
61+
})
5362
defer master.Cleanup()
5463
defer dumpEtcdKVOnFailure(t, master.KV)
5564

test/integration/etcd/server.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ import (
5454
)
5555

5656
// StartRealMasterOrDie starts an API master that is appropriate for use in tests that require one of every resource
57-
func StartRealMasterOrDie(t *testing.T) *Master {
57+
func StartRealMasterOrDie(t *testing.T, configFuncs ...func(*options.ServerRunOptions)) *Master {
5858
certDir, err := ioutil.TempDir("", t.Name())
5959
if err != nil {
6060
t.Fatal(err)
@@ -79,13 +79,14 @@ func StartRealMasterOrDie(t *testing.T) *Master {
7979
kubeAPIServerOptions.ServiceClusterIPRange = *defaultServiceClusterIPRange
8080
kubeAPIServerOptions.Authorization.Modes = []string{"RBAC"}
8181
kubeAPIServerOptions.Admission.GenericAdmission.DisablePlugins = []string{"ServiceAccount"}
82+
kubeAPIServerOptions.APIEnablement.RuntimeConfig["api/all"] = "true"
83+
for _, f := range configFuncs {
84+
f(kubeAPIServerOptions)
85+
}
8286
completedOptions, err := app.Complete(kubeAPIServerOptions)
8387
if err != nil {
8488
t.Fatal(err)
8589
}
86-
if err := completedOptions.APIEnablement.RuntimeConfig.Set("api/all=true"); err != nil {
87-
t.Fatal(err)
88-
}
8990

9091
// get etcd client before starting API server
9192
rawClient, kvClient, err := integration.GetEtcdClients(completedOptions.Etcd.StorageConfig.Transport)

test/integration/scale/scale_test.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,11 @@ func TestMain(m *testing.M) {
5252
}
5353

5454
func TestScaleSubresources(t *testing.T) {
55-
clientSet, tearDown := setup(t)
55+
clientSet, tearDown := setupWithOptions(t, nil, []string{
56+
"--runtime-config",
57+
// TODO(liggitt): remove these once apps/v1beta1, apps/v1beta2, and extensions/v1beta1 can no longer be served
58+
"api/all=true,extensions/v1beta1/deployments=true,extensions/v1beta1/replicationcontrollers=true,extensions/v1beta1/replicasets=true",
59+
})
5660
defer tearDown()
5761

5862
resourceLists, err := clientSet.Discovery().ServerResources()
@@ -63,6 +67,7 @@ func TestScaleSubresources(t *testing.T) {
6367
expectedScaleSubresources := map[schema.GroupVersionResource]schema.GroupVersionKind{
6468
makeGVR("", "v1", "replicationcontrollers/scale"): makeGVK("autoscaling", "v1", "Scale"),
6569

70+
// TODO(liggitt): remove these once apps/v1beta1, apps/v1beta2, and extensions/v1beta1 can no longer be served
6671
makeGVR("extensions", "v1beta1", "deployments/scale"): makeGVK("extensions", "v1beta1", "Scale"),
6772
makeGVR("extensions", "v1beta1", "replicationcontrollers/scale"): makeGVK("extensions", "v1beta1", "Scale"),
6873
makeGVR("extensions", "v1beta1", "replicasets/scale"): makeGVK("extensions", "v1beta1", "Scale"),
@@ -215,7 +220,11 @@ var (
215220
)
216221

217222
func setup(t *testing.T) (client kubernetes.Interface, tearDown func()) {
218-
result := apitesting.StartTestServerOrDie(t, nil, nil, framework.SharedEtcd())
223+
return setupWithOptions(t, nil, nil)
224+
}
225+
226+
func setupWithOptions(t *testing.T, instanceOptions *apitesting.TestServerInstanceOptions, flags []string) (client kubernetes.Interface, tearDown func()) {
227+
result := apitesting.StartTestServerOrDie(t, instanceOptions, flags, framework.SharedEtcd())
219228

220229
// TODO: Disable logging here until we resolve teardown issues which result in
221230
// massive log spam. Another path forward would be to refactor

test/integration/statefulset/BUILD

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ go_library(
88
deps = [
99
#"//pkg/api:go_default_library",
1010
"//pkg/controller/statefulset:go_default_library",
11-
"//staging/src/k8s.io/api/apps/v1beta1:go_default_library",
11+
"//staging/src/k8s.io/api/apps/v1:go_default_library",
1212
"//staging/src/k8s.io/api/core/v1:go_default_library",
1313
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
1414
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
1515
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
1616
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
1717
"//staging/src/k8s.io/client-go/informers:go_default_library",
1818
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
19-
"//staging/src/k8s.io/client-go/kubernetes/typed/apps/v1beta1:go_default_library",
19+
"//staging/src/k8s.io/client-go/kubernetes/typed/apps/v1:go_default_library",
2020
"//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library",
2121
"//staging/src/k8s.io/client-go/rest:go_default_library",
2222
"//staging/src/k8s.io/client-go/util/retry:go_default_library",
@@ -34,7 +34,7 @@ go_test(
3434
embed = [":go_default_library"],
3535
tags = ["integration"],
3636
deps = [
37-
"//staging/src/k8s.io/api/apps/v1beta1:go_default_library",
37+
"//staging/src/k8s.io/api/apps/v1:go_default_library",
3838
"//staging/src/k8s.io/api/core/v1:go_default_library",
3939
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
4040
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",

test/integration/statefulset/statefulset_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import (
2020
"fmt"
2121
"testing"
2222

23-
"k8s.io/api/apps/v1beta1"
23+
appsv1 "k8s.io/api/apps/v1"
2424
"k8s.io/api/core/v1"
2525
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2626
"k8s.io/apimachinery/pkg/util/wait"
@@ -37,7 +37,7 @@ func TestSpecReplicasChange(t *testing.T) {
3737

3838
createHeadlessService(t, c, newHeadlessService(ns.Name))
3939
sts := newSTS("sts", ns.Name, 2)
40-
stss, _ := createSTSsPods(t, c, []*v1beta1.StatefulSet{sts}, []*v1.Pod{})
40+
stss, _ := createSTSsPods(t, c, []*appsv1.StatefulSet{sts}, []*v1.Pod{})
4141
sts = stss[0]
4242
waitSTSStable(t, c, sts)
4343

@@ -48,9 +48,9 @@ func TestSpecReplicasChange(t *testing.T) {
4848

4949
// Add a template annotation change to test STS's status does update
5050
// without .Spec.Replicas change
51-
stsClient := c.AppsV1beta1().StatefulSets(ns.Name)
51+
stsClient := c.AppsV1().StatefulSets(ns.Name)
5252
var oldGeneration int64
53-
newSTS := updateSTS(t, stsClient, sts.Name, func(sts *v1beta1.StatefulSet) {
53+
newSTS := updateSTS(t, stsClient, sts.Name, func(sts *appsv1.StatefulSet) {
5454
oldGeneration = sts.Generation
5555
sts.Spec.Template.Annotations = map[string]string{"test": "annotation"}
5656
})
@@ -64,7 +64,7 @@ func TestSpecReplicasChange(t *testing.T) {
6464
if err != nil {
6565
return false, err
6666
}
67-
return *newSTS.Status.ObservedGeneration >= savedGeneration, nil
67+
return newSTS.Status.ObservedGeneration >= savedGeneration, nil
6868
}); err != nil {
6969
t.Fatalf("failed to verify .Status.ObservedGeneration has incremented for sts %s: %v", sts.Name, err)
7070
}
@@ -80,7 +80,7 @@ func TestDeletingAndFailedPods(t *testing.T) {
8080

8181
labelMap := labelMap()
8282
sts := newSTS("sts", ns.Name, 2)
83-
stss, _ := createSTSsPods(t, c, []*v1beta1.StatefulSet{sts}, []*v1.Pod{})
83+
stss, _ := createSTSsPods(t, c, []*appsv1.StatefulSet{sts}, []*v1.Pod{})
8484
sts = stss[0]
8585
waitSTSStable(t, c, sts)
8686

0 commit comments

Comments
 (0)