1package testing
2
3import (
4	"fmt"
5	"net/http"
6	"testing"
7	"time"
8
9	"github.com/gophercloud/gophercloud"
10	"github.com/gophercloud/gophercloud/openstack/containerinfra/v1/clusters"
11	th "github.com/gophercloud/gophercloud/testhelper"
12	fake "github.com/gophercloud/gophercloud/testhelper/client"
13)
14
15const clusterUUID = "746e779a-751a-456b-a3e9-c883d734946f"
16const clusterUUID2 = "846e779a-751a-456b-a3e9-c883d734946f"
17const requestUUID = "req-781e9bdc-4163-46eb-91c9-786c53188bbb"
18
19var ClusterCreateResponse = fmt.Sprintf(`
20										{
21											"uuid":"%s"
22										}`, clusterUUID)
23
24var ExpectedCluster = clusters.Cluster{
25	APIAddress:        "https://172.24.4.6:6443",
26	COEVersion:        "v1.2.0",
27	ClusterTemplateID: "0562d357-8641-4759-8fed-8173f02c9633",
28	CreateTimeout:     60,
29	CreatedAt:         time.Date(2016, 8, 29, 6, 51, 31, 0, time.UTC),
30	DiscoveryURL:      "https://discovery.etcd.io/cbeb580da58915809d59ee69348a84f3",
31	Links: []gophercloud.Link{
32		{
33			Href: "http://10.164.180.104:9511/v1/clusters/746e779a-751a-456b-a3e9-c883d734946f",
34			Rel:  "self",
35		},
36		{
37			Href: "http://10.164.180.104:9511/clusters/746e779a-751a-456b-a3e9-c883d734946f",
38			Rel:  "bookmark",
39		},
40	},
41	KeyPair:            "my-keypair",
42	MasterAddresses:    []string{"172.24.4.6"},
43	MasterCount:        1,
44	Name:               "k8s",
45	NodeAddresses:      []string{"172.24.4.13"},
46	NodeCount:          1,
47	StackID:            "9c6f1169-7300-4d08-a444-d2be38758719",
48	Status:             "CREATE_COMPLETE",
49	StatusReason:       "Stack CREATE completed successfully",
50	UpdatedAt:          time.Date(2016, 8, 29, 6, 53, 24, 0, time.UTC),
51	UUID:               clusterUUID,
52	FloatingIPEnabled:  true,
53	FixedNetwork:       "private_network",
54	FixedSubnet:        "private_subnet",
55	HealthStatus:       "HEALTHY",
56	HealthStatusReason: map[string]interface{}{"api": "ok"},
57}
58
59var ExpectedCluster2 = clusters.Cluster{
60	APIAddress:        "https://172.24.4.6:6443",
61	COEVersion:        "v1.2.0",
62	ClusterTemplateID: "0562d357-8641-4759-8fed-8173f02c9633",
63	CreateTimeout:     60,
64	CreatedAt:         time.Time{},
65	DiscoveryURL:      "https://discovery.etcd.io/cbeb580da58915809d59ee69348a84f3",
66	Links: []gophercloud.Link{
67		{
68			Href: "http://10.164.180.104:9511/v1/clusters/746e779a-751a-456b-a3e9-c883d734946f",
69			Rel:  "self",
70		},
71		{
72			Href: "http://10.164.180.104:9511/clusters/746e779a-751a-456b-a3e9-c883d734946f",
73			Rel:  "bookmark",
74		},
75	},
76	KeyPair:            "my-keypair",
77	MasterAddresses:    []string{"172.24.4.6"},
78	MasterCount:        1,
79	Name:               "k8s",
80	NodeAddresses:      []string{"172.24.4.13"},
81	NodeCount:          1,
82	StackID:            "9c6f1169-7300-4d08-a444-d2be38758719",
83	Status:             "CREATE_COMPLETE",
84	StatusReason:       "Stack CREATE completed successfully",
85	UpdatedAt:          time.Date(2016, 8, 29, 6, 53, 24, 0, time.UTC),
86	UUID:               clusterUUID2,
87	FloatingIPEnabled:  true,
88	FixedNetwork:       "private_network",
89	FixedSubnet:        "private_subnet",
90	HealthStatus:       "HEALTHY",
91	HealthStatusReason: map[string]interface{}{"api": "ok"},
92}
93
94var ExpectedClusterUUID = clusterUUID
95
96func HandleCreateClusterSuccessfully(t *testing.T) {
97	th.Mux.HandleFunc("/v1/clusters", func(w http.ResponseWriter, r *http.Request) {
98		th.TestMethod(t, r, "POST")
99		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
100
101		w.Header().Add("Content-Type", "application/json")
102		w.Header().Add("X-OpenStack-Request-Id", requestUUID)
103		w.WriteHeader(http.StatusAccepted)
104
105		fmt.Fprint(w, ClusterCreateResponse)
106	})
107}
108
109func HandleGetClusterSuccessfully(t *testing.T) {
110	th.Mux.HandleFunc("/v1/clusters/"+clusterUUID, func(w http.ResponseWriter, r *http.Request) {
111		th.TestMethod(t, r, "GET")
112		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
113
114		w.Header().Add("Content-Type", "application/json")
115		w.WriteHeader(http.StatusOK)
116
117		fmt.Fprint(w, ClusterGetResponse)
118	})
119}
120
121var ClusterGetResponse = fmt.Sprintf(`
122{
123		"status":"CREATE_COMPLETE",
124		"uuid":"%s",
125		"links":[
126		  {
127			 "href":"http://10.164.180.104:9511/v1/clusters/746e779a-751a-456b-a3e9-c883d734946f",
128			 "rel":"self"
129		  },
130		  {
131			 "href":"http://10.164.180.104:9511/clusters/746e779a-751a-456b-a3e9-c883d734946f",
132			 "rel":"bookmark"
133		  }
134		],
135		"stack_id":"9c6f1169-7300-4d08-a444-d2be38758719",
136		"created_at":"2016-08-29T06:51:31+00:00",
137		"api_address":"https://172.24.4.6:6443",
138		"discovery_url":"https://discovery.etcd.io/cbeb580da58915809d59ee69348a84f3",
139		"updated_at":"2016-08-29T06:53:24+00:00",
140		"master_count":1,
141		"coe_version": "v1.2.0",
142		"keypair":"my-keypair",
143		"cluster_template_id":"0562d357-8641-4759-8fed-8173f02c9633",
144		"master_addresses":[
145		  "172.24.4.6"
146		],
147		"node_count":1,
148		"node_addresses":[
149		  "172.24.4.13"
150		],
151		"status_reason":"Stack CREATE completed successfully",
152		"create_timeout":60,
153		"name":"k8s",
154		"floating_ip_enabled": true,
155		"fixed_network": "private_network",
156		"fixed_subnet": "private_subnet",
157		"health_status": "HEALTHY",
158		"health_status_reason": {"api": "ok"}
159}`, clusterUUID)
160
161var ClusterListResponse = fmt.Sprintf(`
162{
163	"clusters": [
164		{
165			"api_address":"https://172.24.4.6:6443",
166			"cluster_template_id":"0562d357-8641-4759-8fed-8173f02c9633",
167			"coe_version": "v1.2.0",
168			"create_timeout":60,
169			"created_at":"2016-08-29T06:51:31+00:00",
170			"discovery_url":"https://discovery.etcd.io/cbeb580da58915809d59ee69348a84f3",
171			"keypair":"my-keypair",
172			"links":[
173			  {
174				 "href":"http://10.164.180.104:9511/v1/clusters/746e779a-751a-456b-a3e9-c883d734946f",
175				 "rel":"self"
176			  },
177			  {
178				 "href":"http://10.164.180.104:9511/clusters/746e779a-751a-456b-a3e9-c883d734946f",
179				 "rel":"bookmark"
180			  }
181			],
182			"master_addresses":[
183			  "172.24.4.6"
184			],
185			"master_count":1,
186			"name":"k8s",
187			"node_addresses":[
188			  "172.24.4.13"
189			],
190			"node_count":1,
191			"stack_id":"9c6f1169-7300-4d08-a444-d2be38758719",
192			"status":"CREATE_COMPLETE",
193			"status_reason":"Stack CREATE completed successfully",
194			"updated_at":"2016-08-29T06:53:24+00:00",
195			"uuid":"%s",
196			"floating_ip_enabled": true,
197			"fixed_network": "private_network",
198			"fixed_subnet": "private_subnet",
199			"health_status": "HEALTHY",
200			"health_status_reason": {"api": "ok"}
201		},
202		{
203			"api_address":"https://172.24.4.6:6443",
204			"cluster_template_id":"0562d357-8641-4759-8fed-8173f02c9633",
205			"coe_version": "v1.2.0",
206			"create_timeout":60,
207			"created_at":null,
208			"discovery_url":"https://discovery.etcd.io/cbeb580da58915809d59ee69348a84f3",
209			"keypair":"my-keypair",
210			"links":[
211			  {
212				 "href":"http://10.164.180.104:9511/v1/clusters/746e779a-751a-456b-a3e9-c883d734946f",
213				 "rel":"self"
214			  },
215			  {
216				 "href":"http://10.164.180.104:9511/clusters/746e779a-751a-456b-a3e9-c883d734946f",
217				 "rel":"bookmark"
218			  }
219			],
220			"master_addresses":[
221			  "172.24.4.6"
222			],
223			"master_count":1,
224			"name":"k8s",
225			"node_addresses":[
226			  "172.24.4.13"
227			],
228			"node_count":1,
229			"stack_id":"9c6f1169-7300-4d08-a444-d2be38758719",
230			"status":"CREATE_COMPLETE",
231			"status_reason":"Stack CREATE completed successfully",
232			"updated_at":null,
233			"uuid":"%s",
234			"floating_ip_enabled": true,
235			"fixed_network": "private_network",
236			"fixed_subnet": "private_subnet",
237			"health_status": "HEALTHY",
238			"health_status_reason": {"api": "ok"}
239		}
240	]
241}`, clusterUUID, clusterUUID2)
242
243var ExpectedClusters = []clusters.Cluster{ExpectedCluster}
244
245func HandleListClusterSuccessfully(t *testing.T) {
246	th.Mux.HandleFunc("/v1/clusters", func(w http.ResponseWriter, r *http.Request) {
247		th.TestMethod(t, r, "GET")
248		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
249
250		w.Header().Add("Content-Type", "application/json")
251		w.Header().Add("X-OpenStack-Request-Id", requestUUID)
252		w.WriteHeader(http.StatusOK)
253
254		fmt.Fprint(w, ClusterListResponse)
255	})
256}
257
258func HandleListDetailClusterSuccessfully(t *testing.T) {
259	th.Mux.HandleFunc("/v1/clusters/detail", func(w http.ResponseWriter, r *http.Request) {
260		th.TestMethod(t, r, "GET")
261		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
262
263		w.Header().Add("Content-Type", "application/json")
264		w.Header().Add("X-OpenStack-Request-Id", requestUUID)
265		w.WriteHeader(http.StatusOK)
266
267		fmt.Fprint(w, ClusterListResponse)
268	})
269}
270
271var UpdateResponse = fmt.Sprintf(`
272{
273	"uuid":"%s"
274}`, clusterUUID)
275
276func HandleUpdateClusterSuccessfully(t *testing.T) {
277	th.Mux.HandleFunc("/v1/clusters/"+clusterUUID, func(w http.ResponseWriter, r *http.Request) {
278		th.TestMethod(t, r, "PATCH")
279		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
280
281		w.Header().Add("Content-Type", "application/json")
282		w.Header().Add("X-OpenStack-Request-Id", requestUUID)
283		w.WriteHeader(http.StatusOK)
284
285		fmt.Fprint(w, UpdateResponse)
286	})
287}
288
289var UpgradeResponse = fmt.Sprintf(`
290{
291	"uuid":"%s"
292}`, clusterUUID)
293
294func HandleUpgradeClusterSuccessfully(t *testing.T) {
295	th.Mux.HandleFunc("/v1/clusters/"+clusterUUID+"/actions/upgrade", func(w http.ResponseWriter, r *http.Request) {
296		th.TestMethod(t, r, "POST")
297		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
298
299		w.Header().Add("Content-Type", "application/json")
300		w.Header().Add("X-OpenStack-Request-Id", requestUUID)
301		w.WriteHeader(http.StatusAccepted)
302
303		fmt.Fprint(w, UpgradeResponse)
304	})
305}
306
307func HandleDeleteClusterSuccessfully(t *testing.T) {
308	th.Mux.HandleFunc("/v1/clusters/"+clusterUUID, func(w http.ResponseWriter, r *http.Request) {
309		th.TestMethod(t, r, "DELETE")
310		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
311
312		w.Header().Add("Content-Type", "application/json")
313		w.Header().Add("X-OpenStack-Request-Id", requestUUID)
314		w.WriteHeader(http.StatusNoContent)
315	})
316}
317
318var ResizeResponse = fmt.Sprintf(`
319{
320	"uuid": "%s"
321}`, clusterUUID)
322
323func HandleResizeClusterSuccessfully(t *testing.T) {
324	th.Mux.HandleFunc("/v1/clusters/"+clusterUUID+"/actions/resize", func(w http.ResponseWriter, r *http.Request) {
325		th.TestMethod(t, r, "POST")
326		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
327
328		w.Header().Add("Content-Type", "application/json")
329		w.Header().Add("X-OpenStack-Request-Id", requestUUID)
330		w.WriteHeader(http.StatusAccepted)
331
332		fmt.Fprint(w, ResizeResponse)
333	})
334}
335