-
Notifications
You must be signed in to change notification settings - Fork 4.7k
/
Copy pathdeploy_scale_test.go
129 lines (116 loc) · 4.62 KB
/
deploy_scale_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package integration
import (
"fmt"
"testing"
"time"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/util/wait"
extensionsv1beta1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
deployapi "github.com/openshift/origin/pkg/apps/apis/apps"
deploytest "github.com/openshift/origin/pkg/apps/apis/apps/test"
appsclient "github.com/openshift/origin/pkg/apps/generated/internalclientset"
deployutil "github.com/openshift/origin/pkg/apps/util"
testutil "github.com/openshift/origin/test/util"
testserver "github.com/openshift/origin/test/util/server"
)
func TestDeployScale(t *testing.T) {
const namespace = "test-deploy-scale"
masterConfig, clusterAdminKubeConfig, err := testserver.StartTestMaster()
if err != nil {
t.Fatal(err)
}
defer testserver.CleanupMasterEtcd(t, masterConfig)
clusterAdminClientConfig, err := testutil.GetClusterAdminClientConfig(clusterAdminKubeConfig)
if err != nil {
t.Fatal(err)
}
_, _, err = testserver.CreateNewProject(clusterAdminClientConfig, namespace, "my-test-user")
if err != nil {
t.Fatal(err)
}
_, adminConfig, err := testutil.GetClientForUser(clusterAdminClientConfig, "my-test-user")
if err != nil {
t.Fatal(err)
}
adminAppsClient := appsclient.NewForConfigOrDie(adminConfig)
config := deploytest.OkDeploymentConfig(0)
config.Namespace = namespace
config.Spec.Triggers = []deployapi.DeploymentTriggerPolicy{}
config.Spec.Replicas = 1
dc, err := adminAppsClient.DeploymentConfigs(namespace).Create(config)
if err != nil {
t.Fatalf("Couldn't create DeploymentConfig: %v %#v", err, config)
}
generation := dc.Generation
{
// Get scale subresource
legacyPath := fmt.Sprintf("/oapi/v1/namespaces/%s/deploymentconfigs/%s/scale", dc.Namespace, dc.Name)
legacyScale := &unstructured.Unstructured{}
if err := adminAppsClient.AppsClient.RESTClient().Get().AbsPath(legacyPath).Do().Into(legacyScale); err != nil {
t.Fatal(err)
}
// Ensure correct type
if legacyScale.GetAPIVersion() != "extensions/v1beta1" {
t.Fatalf("Expected extensions/v1beta1, got %v", legacyScale.GetAPIVersion())
}
// Ensure we can submit the same type back
if err := adminAppsClient.AppsClient.RESTClient().Put().AbsPath(legacyPath).Body(legacyScale).Do().Error(); err != nil {
t.Fatal(err)
}
}
{
// Get scale subresource
scalePath := fmt.Sprintf("/apis/apps.openshift.io/v1/namespaces/%s/deploymentconfigs/%s/scale", dc.Namespace, dc.Name)
scale := &unstructured.Unstructured{}
if err := adminAppsClient.AppsClient.RESTClient().Get().AbsPath(scalePath).Do().Into(scale); err != nil {
t.Fatal(err)
}
// Ensure correct type
if scale.GetAPIVersion() != "extensions/v1beta1" {
t.Fatalf("Expected extensions/v1beta1, got %v", scale.GetAPIVersion())
}
// Ensure we can submit the same type back
if err := adminAppsClient.AppsClient.RESTClient().Put().AbsPath(scalePath).Body(scale).Do().Error(); err != nil {
t.Fatal(err)
}
}
condition := func() (bool, error) {
config, err := adminAppsClient.DeploymentConfigs(namespace).Get(dc.Name, metav1.GetOptions{})
if err != nil {
return false, nil
}
return deployutil.HasSynced(config, generation), nil
}
if err := wait.PollImmediate(500*time.Millisecond, 10*time.Second, condition); err != nil {
t.Fatalf("Deployment config never synced: %v", err)
}
scale, err := adminAppsClient.DeploymentConfigs(namespace).GetScale(config.Name, metav1.GetOptions{})
if err != nil {
t.Fatalf("Couldn't get DeploymentConfig scale: %v", err)
}
if scale.Spec.Replicas != 1 {
t.Fatalf("Expected scale.spec.replicas=1, got %#v", scale)
}
scaleUpdate := deployapi.ScaleFromConfig(dc)
scaleUpdate.Spec.Replicas = 3
scaleUpdatev1beta1 := &extensionsv1beta1.Scale{}
if err := extensionsv1beta1.Convert_extensions_Scale_To_v1beta1_Scale(scaleUpdate, scaleUpdatev1beta1, nil); err != nil {
t.Fatalf("Unexpected error: %v", err)
}
updatedScale, err := adminAppsClient.DeploymentConfigs(namespace).UpdateScale(config.Name, scaleUpdatev1beta1)
if err != nil {
// If this complains about "Scale" not being registered in "v1", check the kind overrides in the API registration in SubresourceGroupVersionKind
t.Fatalf("Couldn't update DeploymentConfig scale to %#v: %v", scaleUpdate, err)
}
if updatedScale.Spec.Replicas != 3 {
t.Fatalf("Expected scale.spec.replicas=3, got %#v", scale)
}
persistedScale, err := adminAppsClient.DeploymentConfigs(namespace).GetScale(config.Name, metav1.GetOptions{})
if err != nil {
t.Fatalf("Couldn't get DeploymentConfig scale: %v", err)
}
if persistedScale.Spec.Replicas != 3 {
t.Fatalf("Expected scale.spec.replicas=3, got %#v", scale)
}
}