github.com/deemoprobe/k8s-first-commit@v0.0.0-20230430165612-a541f1982be3/pkg/client/client_test.go (about) 1 /* 2 Copyright 2014 Google Inc. All rights reserved. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 package client 17 18 import ( 19 "encoding/json" 20 "net/http/httptest" 21 "net/url" 22 "reflect" 23 "testing" 24 25 "github.com/GoogleCloudPlatform/kubernetes/pkg/api" 26 "github.com/GoogleCloudPlatform/kubernetes/pkg/util" 27 ) 28 29 // TODO: This doesn't reduce typing enough to make it worth the less readable errors. Remove. 30 func expectNoError(t *testing.T, err error) { 31 if err != nil { 32 t.Errorf("Unexpected error: %#v", err) 33 } 34 } 35 36 // TODO: Move this to a common place, it's needed in multiple tests. 37 var apiPath = "/api/v1beta1" 38 39 func makeUrl(suffix string) string { 40 return apiPath + suffix 41 } 42 43 func TestListEmptyTasks(t *testing.T) { 44 fakeHandler := util.FakeHandler{ 45 StatusCode: 200, 46 ResponseBody: `{ "items": []}`, 47 } 48 testServer := httptest.NewTLSServer(&fakeHandler) 49 client := Client{ 50 Host: testServer.URL, 51 } 52 taskList, err := client.ListTasks(nil) 53 fakeHandler.ValidateRequest(t, makeUrl("/tasks"), "GET", nil) 54 if err != nil { 55 t.Errorf("Unexpected error in listing tasks: %#v", err) 56 } 57 if len(taskList.Items) != 0 { 58 t.Errorf("Unexpected items in task list: %#v", taskList) 59 } 60 testServer.Close() 61 } 62 63 func TestListTasks(t *testing.T) { 64 expectedTaskList := api.TaskList{ 65 Items: []api.Task{ 66 api.Task{ 67 CurrentState: api.TaskState{ 68 Status: "Foobar", 69 }, 70 Labels: map[string]string{ 71 "foo": "bar", 72 "name": "baz", 73 }, 74 }, 75 }, 76 } 77 body, _ := json.Marshal(expectedTaskList) 78 fakeHandler := util.FakeHandler{ 79 StatusCode: 200, 80 ResponseBody: string(body), 81 } 82 testServer := httptest.NewTLSServer(&fakeHandler) 83 client := Client{ 84 Host: testServer.URL, 85 } 86 receivedTaskList, err := client.ListTasks(nil) 87 fakeHandler.ValidateRequest(t, makeUrl("/tasks"), "GET", nil) 88 if err != nil { 89 t.Errorf("Unexpected error in listing tasks: %#v", err) 90 } 91 if !reflect.DeepEqual(expectedTaskList, receivedTaskList) { 92 t.Errorf("Unexpected task list: %#v\nvs.\n%#v", receivedTaskList, expectedTaskList) 93 } 94 testServer.Close() 95 } 96 97 func TestListTasksLabels(t *testing.T) { 98 expectedTaskList := api.TaskList{ 99 Items: []api.Task{ 100 api.Task{ 101 CurrentState: api.TaskState{ 102 Status: "Foobar", 103 }, 104 Labels: map[string]string{ 105 "foo": "bar", 106 "name": "baz", 107 }, 108 }, 109 }, 110 } 111 body, _ := json.Marshal(expectedTaskList) 112 fakeHandler := util.FakeHandler{ 113 StatusCode: 200, 114 ResponseBody: string(body), 115 } 116 testServer := httptest.NewTLSServer(&fakeHandler) 117 client := Client{ 118 Host: testServer.URL, 119 } 120 query := map[string]string{"foo": "bar", "name": "baz"} 121 receivedTaskList, err := client.ListTasks(query) 122 fakeHandler.ValidateRequest(t, makeUrl("/tasks"), "GET", nil) 123 queryString := fakeHandler.RequestReceived.URL.Query().Get("labels") 124 queryString, _ = url.QueryUnescape(queryString) 125 // TODO(bburns) : This assumes some ordering in serialization that might not always 126 // be true, parse it into a map. 127 if queryString != "foo=bar,name=baz" { 128 t.Errorf("Unexpected label query: %s", queryString) 129 } 130 if err != nil { 131 t.Errorf("Unexpected error in listing tasks: %#v", err) 132 } 133 if !reflect.DeepEqual(expectedTaskList, receivedTaskList) { 134 t.Errorf("Unexpected task list: %#v\nvs.\n%#v", receivedTaskList, expectedTaskList) 135 } 136 testServer.Close() 137 } 138 139 func TestGetTask(t *testing.T) { 140 expectedTask := api.Task{ 141 CurrentState: api.TaskState{ 142 Status: "Foobar", 143 }, 144 Labels: map[string]string{ 145 "foo": "bar", 146 "name": "baz", 147 }, 148 } 149 body, _ := json.Marshal(expectedTask) 150 fakeHandler := util.FakeHandler{ 151 StatusCode: 200, 152 ResponseBody: string(body), 153 } 154 testServer := httptest.NewTLSServer(&fakeHandler) 155 client := Client{ 156 Host: testServer.URL, 157 } 158 receivedTask, err := client.GetTask("foo") 159 fakeHandler.ValidateRequest(t, makeUrl("/tasks/foo"), "GET", nil) 160 if err != nil { 161 t.Errorf("Unexpected error: %#v", err) 162 } 163 if !reflect.DeepEqual(expectedTask, receivedTask) { 164 t.Errorf("Received task: %#v\n doesn't match expected task: %#v", receivedTask, expectedTask) 165 } 166 testServer.Close() 167 } 168 169 func TestDeleteTask(t *testing.T) { 170 fakeHandler := util.FakeHandler{ 171 StatusCode: 200, 172 ResponseBody: `{"success": true}`, 173 } 174 testServer := httptest.NewTLSServer(&fakeHandler) 175 client := Client{ 176 Host: testServer.URL, 177 } 178 err := client.DeleteTask("foo") 179 fakeHandler.ValidateRequest(t, makeUrl("/tasks/foo"), "DELETE", nil) 180 if err != nil { 181 t.Errorf("Unexpected error: %#v", err) 182 } 183 testServer.Close() 184 } 185 186 func TestCreateTask(t *testing.T) { 187 requestTask := api.Task{ 188 CurrentState: api.TaskState{ 189 Status: "Foobar", 190 }, 191 Labels: map[string]string{ 192 "foo": "bar", 193 "name": "baz", 194 }, 195 } 196 body, _ := json.Marshal(requestTask) 197 fakeHandler := util.FakeHandler{ 198 StatusCode: 200, 199 ResponseBody: string(body), 200 } 201 testServer := httptest.NewTLSServer(&fakeHandler) 202 client := Client{ 203 Host: testServer.URL, 204 } 205 receivedTask, err := client.CreateTask(requestTask) 206 fakeHandler.ValidateRequest(t, makeUrl("/tasks"), "POST", nil) 207 if err != nil { 208 t.Errorf("Unexpected error: %#v", err) 209 } 210 if !reflect.DeepEqual(requestTask, receivedTask) { 211 t.Errorf("Received task: %#v\n doesn't match expected task: %#v", receivedTask, requestTask) 212 } 213 testServer.Close() 214 } 215 216 func TestUpdateTask(t *testing.T) { 217 requestTask := api.Task{ 218 JSONBase: api.JSONBase{ID: "foo"}, 219 CurrentState: api.TaskState{ 220 Status: "Foobar", 221 }, 222 Labels: map[string]string{ 223 "foo": "bar", 224 "name": "baz", 225 }, 226 } 227 body, _ := json.Marshal(requestTask) 228 fakeHandler := util.FakeHandler{ 229 StatusCode: 200, 230 ResponseBody: string(body), 231 } 232 testServer := httptest.NewTLSServer(&fakeHandler) 233 client := Client{ 234 Host: testServer.URL, 235 } 236 receivedTask, err := client.UpdateTask(requestTask) 237 fakeHandler.ValidateRequest(t, makeUrl("/tasks/foo"), "PUT", nil) 238 if err != nil { 239 t.Errorf("Unexpected error: %#v", err) 240 } 241 expectEqual(t, requestTask, receivedTask) 242 testServer.Close() 243 } 244 245 func expectEqual(t *testing.T, expected, observed interface{}) { 246 if !reflect.DeepEqual(expected, observed) { 247 t.Errorf("Unexpected inequality. Expected: %#v Observed: %#v", expected, observed) 248 } 249 } 250 251 func TestEncodeDecodeLabelQuery(t *testing.T) { 252 queryIn := map[string]string{ 253 "foo": "bar", 254 "baz": "blah", 255 } 256 queryString, _ := url.QueryUnescape(EncodeLabelQuery(queryIn)) 257 queryOut := DecodeLabelQuery(queryString) 258 expectEqual(t, queryIn, queryOut) 259 } 260 261 func TestDecodeEmpty(t *testing.T) { 262 query := DecodeLabelQuery("") 263 if len(query) != 0 { 264 t.Errorf("Unexpected query: %#v", query) 265 } 266 } 267 268 func TestDecodeBad(t *testing.T) { 269 query := DecodeLabelQuery("foo") 270 if len(query) != 0 { 271 t.Errorf("Unexpected query: %#v", query) 272 } 273 } 274 275 func TestGetController(t *testing.T) { 276 expectedController := api.ReplicationController{ 277 JSONBase: api.JSONBase{ 278 ID: "foo", 279 }, 280 DesiredState: api.ReplicationControllerState{ 281 Replicas: 2, 282 }, 283 Labels: map[string]string{ 284 "foo": "bar", 285 "name": "baz", 286 }, 287 } 288 body, _ := json.Marshal(expectedController) 289 fakeHandler := util.FakeHandler{ 290 StatusCode: 200, 291 ResponseBody: string(body), 292 } 293 testServer := httptest.NewTLSServer(&fakeHandler) 294 client := Client{ 295 Host: testServer.URL, 296 } 297 receivedController, err := client.GetReplicationController("foo") 298 expectNoError(t, err) 299 if !reflect.DeepEqual(expectedController, receivedController) { 300 t.Errorf("Unexpected controller, expected: %#v, received %#v", expectedController, receivedController) 301 } 302 fakeHandler.ValidateRequest(t, makeUrl("/replicationControllers/foo"), "GET", nil) 303 testServer.Close() 304 } 305 306 func TestUpdateController(t *testing.T) { 307 expectedController := api.ReplicationController{ 308 JSONBase: api.JSONBase{ 309 ID: "foo", 310 }, 311 DesiredState: api.ReplicationControllerState{ 312 Replicas: 2, 313 }, 314 Labels: map[string]string{ 315 "foo": "bar", 316 "name": "baz", 317 }, 318 } 319 body, _ := json.Marshal(expectedController) 320 fakeHandler := util.FakeHandler{ 321 StatusCode: 200, 322 ResponseBody: string(body), 323 } 324 testServer := httptest.NewTLSServer(&fakeHandler) 325 client := Client{ 326 Host: testServer.URL, 327 } 328 receivedController, err := client.UpdateReplicationController(api.ReplicationController{ 329 JSONBase: api.JSONBase{ 330 ID: "foo", 331 }, 332 }) 333 expectNoError(t, err) 334 if !reflect.DeepEqual(expectedController, receivedController) { 335 t.Errorf("Unexpected controller, expected: %#v, received %#v", expectedController, receivedController) 336 } 337 fakeHandler.ValidateRequest(t, makeUrl("/replicationControllers/foo"), "PUT", nil) 338 testServer.Close() 339 } 340 341 func TestDeleteController(t *testing.T) { 342 fakeHandler := util.FakeHandler{ 343 StatusCode: 200, 344 ResponseBody: `{"success": true}`, 345 } 346 testServer := httptest.NewTLSServer(&fakeHandler) 347 client := Client{ 348 Host: testServer.URL, 349 } 350 err := client.DeleteReplicationController("foo") 351 fakeHandler.ValidateRequest(t, makeUrl("/replicationControllers/foo"), "DELETE", nil) 352 if err != nil { 353 t.Errorf("Unexpected error: %#v", err) 354 } 355 testServer.Close() 356 } 357 358 func TestCreateController(t *testing.T) { 359 expectedController := api.ReplicationController{ 360 JSONBase: api.JSONBase{ 361 ID: "foo", 362 }, 363 DesiredState: api.ReplicationControllerState{ 364 Replicas: 2, 365 }, 366 Labels: map[string]string{ 367 "foo": "bar", 368 "name": "baz", 369 }, 370 } 371 body, _ := json.Marshal(expectedController) 372 fakeHandler := util.FakeHandler{ 373 StatusCode: 200, 374 ResponseBody: string(body), 375 } 376 testServer := httptest.NewTLSServer(&fakeHandler) 377 client := Client{ 378 Host: testServer.URL, 379 } 380 receivedController, err := client.CreateReplicationController(api.ReplicationController{ 381 JSONBase: api.JSONBase{ 382 ID: "foo", 383 }, 384 }) 385 expectNoError(t, err) 386 if !reflect.DeepEqual(expectedController, receivedController) { 387 t.Errorf("Unexpected controller, expected: %#v, received %#v", expectedController, receivedController) 388 } 389 fakeHandler.ValidateRequest(t, makeUrl("/replicationControllers"), "POST", nil) 390 testServer.Close() 391 }