github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/edgeworkers/edgeworker_version_test.go (about) 1 package edgeworkers 2 3 import ( 4 "bytes" 5 "context" 6 "errors" 7 "net/http" 8 "net/http/httptest" 9 "strconv" 10 "testing" 11 12 "github.com/stretchr/testify/assert" 13 "github.com/stretchr/testify/require" 14 ) 15 16 func TestGetEdgeWorkerVersion(t *testing.T) { 17 tests := map[string]struct { 18 params GetEdgeWorkerVersionRequest 19 responseStatus int 20 responseBody string 21 expectedPath string 22 expectedResponse *EdgeWorkerVersion 23 withError error 24 }{ 25 "200 OK - get EdgeWorkerVersion": { 26 params: GetEdgeWorkerVersionRequest{ 27 EdgeWorkerID: 12345, 28 Version: "1.2.3", 29 }, 30 responseStatus: http.StatusOK, 31 responseBody: ` 32 { 33 "edgeWorkerId": 12345, 34 "version": "1.2.3", 35 "accountId": "B-123-WNKA6P", 36 "checksum": "868f28f16c26f46d418d83e24973520534d9ea4e4dbfd8a69ab00c1c37f28ca4", 37 "sequenceNumber": 3, 38 "createdBy": "jbond", 39 "createdTime": "2021-04-19T07:08:37Z" 40 } 41 `, 42 expectedPath: "/edgeworkers/v1/ids/12345/versions/1.2.3", 43 expectedResponse: &EdgeWorkerVersion{ 44 EdgeWorkerID: 12345, 45 Version: "1.2.3", 46 AccountID: "B-123-WNKA6P", 47 Checksum: "868f28f16c26f46d418d83e24973520534d9ea4e4dbfd8a69ab00c1c37f28ca4", 48 SequenceNumber: 3, 49 CreatedBy: "jbond", 50 CreatedTime: "2021-04-19T07:08:37Z", 51 }, 52 }, 53 "500 internal server error": { 54 params: GetEdgeWorkerVersionRequest{ 55 EdgeWorkerID: 12345, 56 Version: "1.2.3", 57 }, 58 responseStatus: http.StatusInternalServerError, 59 responseBody: ` 60 { 61 "type": "https://problems.luna-dev.akamaiapis.net/-/resource-impl/forward-origin-error", 62 "title": "Server Error", 63 "status": 500, 64 "instance": "host_name/edgeworkers/v1/ids/12345/versions/1.2.3", 65 "method": "GET", 66 "serverIp": "10.0.0.1", 67 "clientIp": "192.168.0.1", 68 "requestId": "a73affa111", 69 "requestTime": "2021-12-06T10:27:11Z" 70 }`, 71 expectedPath: "/edgeworkers/v1/ids/12345/versions/1.2.3", 72 withError: &Error{ 73 Type: "https://problems.luna-dev.akamaiapis.net/-/resource-impl/forward-origin-error", 74 Title: "Server Error", 75 Status: 500, 76 Instance: "host_name/edgeworkers/v1/ids/12345/versions/1.2.3", 77 Method: "GET", 78 ServerIP: "10.0.0.1", 79 ClientIP: "192.168.0.1", 80 RequestID: "a73affa111", 81 RequestTime: "2021-12-06T10:27:11Z", 82 }, 83 }, 84 "missing EdgeWorkerID": { 85 params: GetEdgeWorkerVersionRequest{ 86 Version: "1.2.3", 87 }, 88 withError: ErrStructValidation, 89 }, 90 "missing Version": { 91 params: GetEdgeWorkerVersionRequest{ 92 EdgeWorkerID: 12345, 93 }, 94 withError: ErrStructValidation, 95 }, 96 "403 Forbidden - incorrect credentials": { 97 params: GetEdgeWorkerVersionRequest{ 98 EdgeWorkerID: 12345, 99 Version: "1.2.3", 100 }, 101 responseStatus: http.StatusForbidden, 102 responseBody: ` 103 { 104 "type": "https://problems.luna-dev.akamaiapis.net/-/pep-authz/deny", 105 "title": "Forbidden", 106 "status": 403, 107 "detail": "The client does not have the grant needed for the request", 108 "instance": "host_name/edgeworkers/v1/ids/12345/versions/1.2.3", 109 "authzRealm": "scuomder224df6ct.dkekfr3qqg4dghpj", 110 "method": "GET", 111 "serverIp": "10.0.0.1", 112 "clientIp": "192.168.0.1", 113 "requestId": "a73affa111", 114 "requestTime": "2021-12-06T12:45:09Z" 115 }`, 116 expectedPath: "/edgeworkers/v1/ids/12345/versions/1.2.3", 117 withError: &Error{ 118 Type: "https://problems.luna-dev.akamaiapis.net/-/pep-authz/deny", 119 Title: "Forbidden", 120 Status: 403, 121 Detail: "The client does not have the grant needed for the request", 122 Instance: "host_name/edgeworkers/v1/ids/12345/versions/1.2.3", 123 AuthzRealm: "scuomder224df6ct.dkekfr3qqg4dghpj", 124 Method: "GET", 125 ServerIP: "10.0.0.1", 126 ClientIP: "192.168.0.1", 127 RequestID: "a73affa111", 128 RequestTime: "2021-12-06T12:45:09Z", 129 }, 130 }, 131 "404 Not Found - EdgeWorkerID doesn't exist": { 132 params: GetEdgeWorkerVersionRequest{ 133 EdgeWorkerID: 12345, 134 Version: "1.2.3", 135 }, 136 responseStatus: http.StatusForbidden, 137 responseBody: ` 138 { 139 "type": "/edgeworkers/error-types/edgeworkers-not-found", 140 "title": "The given resource could not be found.", 141 "detail": "Unable to find the requested version", 142 "instance": "/edgeworkers/error-instances/86d1cc10-4baf-49e1-b81a-075b72a2f6a4", 143 "status": 404, 144 "errorCode": "EW2002" 145 }`, 146 expectedPath: "/edgeworkers/v1/ids/12345/versions/1.2.3", 147 withError: &Error{ 148 Type: "/edgeworkers/error-types/edgeworkers-not-found", 149 Title: "The given resource could not be found.", 150 Detail: "Unable to find the requested version", 151 Status: 404, 152 Instance: "/edgeworkers/error-instances/86d1cc10-4baf-49e1-b81a-075b72a2f6a4", 153 ErrorCode: "EW2002", 154 }, 155 }, 156 } 157 158 for name, test := range tests { 159 t.Run(name, func(t *testing.T) { 160 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 161 assert.Equal(t, test.expectedPath, r.URL.String()) 162 assert.Equal(t, http.MethodGet, r.Method) 163 w.WriteHeader(test.responseStatus) 164 _, err := w.Write([]byte(test.responseBody)) 165 assert.NoError(t, err) 166 })) 167 client := mockAPIClient(t, mockServer) 168 result, err := client.GetEdgeWorkerVersion(context.Background(), test.params) 169 if test.withError != nil { 170 assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err) 171 return 172 } 173 require.NoError(t, err) 174 assert.Equal(t, test.expectedResponse, result) 175 }) 176 } 177 } 178 179 func TestListEdgeWorkerVersions(t *testing.T) { 180 tests := map[string]struct { 181 params ListEdgeWorkerVersionsRequest 182 responseStatus int 183 responseBody string 184 expectedPath string 185 expectedResponse *ListEdgeWorkerVersionsResponse 186 withError error 187 }{ 188 "200 OK - list Edgeworker versions": { 189 params: ListEdgeWorkerVersionsRequest{ 190 EdgeWorkerID: 88334, 191 }, 192 responseStatus: http.StatusOK, 193 responseBody: ` 194 { 195 "versions": [ 196 { 197 "edgeWorkerId": 88334, 198 "version": "1.23", 199 "accountId": "B-3-WNKA6P", 200 "checksum": "868f28f16c26f46d418d83e24973520534d9ea4e4dbfd8a69ab00c1c37f28ca4", 201 "sequenceNumber": 3, 202 "createdBy": "jsmith", 203 "createdTime": "2021-12-20T08:28:37Z" 204 }, 205 { 206 "edgeWorkerId": 88334, 207 "version": "1.24.5", 208 "accountId": "B-3-WNKA6P", 209 "checksum": "ad9c18a7f2ed5d7bbcd31c55b94a0a00ae1771c6a15fd9265aeae08f5ef41e1f", 210 "sequenceNumber": 4, 211 "createdBy": "jsmith", 212 "createdTime": "2021-12-20T09:39:48Z" 213 } 214 ] 215 }`, 216 expectedPath: "/edgeworkers/v1/ids/88334/versions", 217 expectedResponse: &ListEdgeWorkerVersionsResponse{[]EdgeWorkerVersion{ 218 { 219 EdgeWorkerID: 88334, 220 Version: "1.23", 221 AccountID: "B-3-WNKA6P", 222 Checksum: "868f28f16c26f46d418d83e24973520534d9ea4e4dbfd8a69ab00c1c37f28ca4", 223 SequenceNumber: 3, 224 CreatedBy: "jsmith", 225 CreatedTime: "2021-12-20T08:28:37Z", 226 }, 227 { 228 EdgeWorkerID: 88334, 229 Version: "1.24.5", 230 AccountID: "B-3-WNKA6P", 231 Checksum: "ad9c18a7f2ed5d7bbcd31c55b94a0a00ae1771c6a15fd9265aeae08f5ef41e1f", 232 SequenceNumber: 4, 233 CreatedBy: "jsmith", 234 CreatedTime: "2021-12-20T09:39:48Z", 235 }, 236 }}, 237 }, 238 "200 OK - no Versions under EdgeworkerID": { 239 params: ListEdgeWorkerVersionsRequest{ 240 EdgeWorkerID: 88334, 241 }, 242 responseStatus: http.StatusOK, 243 responseBody: ` 244 { 245 "versions": [] 246 }`, 247 expectedPath: "/edgeworkers/v1/ids/88334/versions", 248 expectedResponse: &ListEdgeWorkerVersionsResponse{[]EdgeWorkerVersion{}}, 249 }, 250 "missing EdgeWorkerID": { 251 params: ListEdgeWorkerVersionsRequest{}, 252 withError: ErrStructValidation, 253 }, 254 "500 internal server error": { 255 params: ListEdgeWorkerVersionsRequest{ 256 EdgeWorkerID: 88334, 257 }, 258 responseStatus: http.StatusInternalServerError, 259 responseBody: ` 260 { 261 "type": "https://problems.luna-dev.akamaiapis.net/-/resource-impl/forward-origin-error", 262 "title": "Server Error", 263 "status": 500, 264 "instance": "host_name/edgeworkers/v1/ids/88334/versions", 265 "method": "GET", 266 "serverIp": "10.0.0.1", 267 "clientIp": "192.168.0.1", 268 "requestId": "a73affa111", 269 "requestTime": "2021-12-06T10:27:11Z" 270 }`, 271 expectedPath: "/edgeworkers/v1/ids/88334/versions", 272 withError: &Error{ 273 Type: "https://problems.luna-dev.akamaiapis.net/-/resource-impl/forward-origin-error", 274 Title: "Server Error", 275 Status: 500, 276 Instance: "host_name/edgeworkers/v1/ids/88334/versions", 277 Method: "GET", 278 ServerIP: "10.0.0.1", 279 ClientIP: "192.168.0.1", 280 RequestID: "a73affa111", 281 RequestTime: "2021-12-06T10:27:11Z", 282 }, 283 }, 284 "403 Forbidden - incorrect credentials": { 285 params: ListEdgeWorkerVersionsRequest{ 286 EdgeWorkerID: 88334, 287 }, 288 responseStatus: http.StatusForbidden, 289 responseBody: ` 290 { 291 "type": "https://problems.luna-dev.akamaiapis.net/-/pep-authz/deny", 292 "title": "Forbidden", 293 "status": 403, 294 "detail": "The client does not have the grant needed for the request", 295 "instance": "host_name/edgeworkers/v1/ids/88334/versions", 296 "authzRealm": "scuomder224df6ct.dkekfr3qqg4dghpj", 297 "method": "GET", 298 "serverIp": "10.0.0.1", 299 "clientIp": "192.168.0.1", 300 "requestId": "a73affa111", 301 "requestTime": "2021-12-13T12:01:17Z" 302 }`, 303 expectedPath: "/edgeworkers/v1/ids/88334/versions", 304 withError: &Error{ 305 Type: "https://problems.luna-dev.akamaiapis.net/-/pep-authz/deny", 306 Title: "Forbidden", 307 Status: 403, 308 Detail: "The client does not have the grant needed for the request", 309 Instance: "host_name/edgeworkers/v1/ids/88334/versions", 310 AuthzRealm: "scuomder224df6ct.dkekfr3qqg4dghpj", 311 Method: "GET", 312 ServerIP: "10.0.0.1", 313 ClientIP: "192.168.0.1", 314 RequestID: "a73affa111", 315 RequestTime: "2021-12-13T12:01:17Z", 316 }, 317 }, 318 } 319 for name, test := range tests { 320 t.Run(name, func(t *testing.T) { 321 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 322 assert.Equal(t, test.expectedPath, r.URL.String()) 323 assert.Equal(t, http.MethodGet, r.Method) 324 w.WriteHeader(test.responseStatus) 325 _, err := w.Write([]byte(test.responseBody)) 326 assert.NoError(t, err) 327 })) 328 client := mockAPIClient(t, mockServer) 329 result, err := client.ListEdgeWorkerVersions(context.Background(), test.params) 330 if test.withError != nil { 331 assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err) 332 return 333 } 334 require.NoError(t, err) 335 assert.Equal(t, test.expectedResponse, result) 336 }) 337 } 338 } 339 340 func TestGetEdgeWorkerVersionContent(t *testing.T) { 341 tests := map[string]struct { 342 params GetEdgeWorkerVersionContentRequest 343 responseStatus int 344 responseBody string 345 expectedPath string 346 withError error 347 }{ 348 "200 OK - get EdgeWorkerVersion": { 349 params: GetEdgeWorkerVersionContentRequest{ 350 EdgeWorkerID: 88334, 351 Version: "1.23", 352 }, 353 responseStatus: http.StatusOK, 354 expectedPath: "/edgeworkers/v1/ids/88334/versions/1.23/content", 355 }, 356 "500 internal server error": { 357 params: GetEdgeWorkerVersionContentRequest{ 358 EdgeWorkerID: 88334, 359 Version: "1.23", 360 }, 361 responseStatus: http.StatusInternalServerError, 362 responseBody: ` 363 { 364 "type": "https://problems.luna-dev.akamaiapis.net/-/resource-impl/forward-origin-error", 365 "title": "Server Error", 366 "status": 500, 367 "instance": "host_name/edgeworkers/v1/ids/88334/versions/1.23/content", 368 "method": "GET", 369 "serverIp": "10.0.0.1", 370 "clientIp": "192.168.0.1", 371 "requestId": "a73affa111", 372 "requestTime": "2021-12-06T10:27:11Z" 373 }`, 374 expectedPath: "/edgeworkers/v1/ids/88334/versions/1.23/content", 375 withError: &Error{ 376 Type: "https://problems.luna-dev.akamaiapis.net/-/resource-impl/forward-origin-error", 377 Title: "Server Error", 378 Status: 500, 379 Instance: "host_name/edgeworkers/v1/ids/88334/versions/1.23/content", 380 Method: "GET", 381 ServerIP: "10.0.0.1", 382 ClientIP: "192.168.0.1", 383 RequestID: "a73affa111", 384 RequestTime: "2021-12-06T10:27:11Z", 385 }, 386 }, 387 "missing EdgeWorkerID": { 388 params: GetEdgeWorkerVersionContentRequest{ 389 Version: "1.23", 390 }, 391 withError: ErrStructValidation, 392 }, 393 "missing Version": { 394 params: GetEdgeWorkerVersionContentRequest{ 395 EdgeWorkerID: 88334, 396 }, 397 withError: ErrStructValidation, 398 }, 399 "403 Forbidden - incorrect credentials": { 400 params: GetEdgeWorkerVersionContentRequest{ 401 EdgeWorkerID: 88334, 402 Version: "1.23", 403 }, 404 responseStatus: http.StatusForbidden, 405 responseBody: ` 406 { 407 "type": "https://problems.luna-dev.akamaiapis.net/-/pep-authz/deny", 408 "title": "Forbidden", 409 "status": 403, 410 "detail": "The client does not have the grant needed for the request", 411 "instance": "host_name/edgeworkers/v1/ids/88334/versions/1.23/content", 412 "authzRealm": "scuomder224df6ct.dkekfr3qqg4dghpj", 413 "method": "GET", 414 "serverIp": "10.0.0.1", 415 "clientIp": "192.168.0.1", 416 "requestId": "a73affa111", 417 "requestTime": "2021-12-06T12:45:09Z" 418 }`, 419 expectedPath: "/edgeworkers/v1/ids/88334/versions/1.23/content", 420 withError: &Error{ 421 Type: "https://problems.luna-dev.akamaiapis.net/-/pep-authz/deny", 422 Title: "Forbidden", 423 Status: 403, 424 Detail: "The client does not have the grant needed for the request", 425 Instance: "host_name/edgeworkers/v1/ids/88334/versions/1.23/content", 426 AuthzRealm: "scuomder224df6ct.dkekfr3qqg4dghpj", 427 Method: "GET", 428 ServerIP: "10.0.0.1", 429 ClientIP: "192.168.0.1", 430 RequestID: "a73affa111", 431 RequestTime: "2021-12-06T12:45:09Z", 432 }, 433 }, 434 "404 Not Found": { 435 params: GetEdgeWorkerVersionContentRequest{ 436 EdgeWorkerID: 88334, 437 Version: "1.23", 438 }, 439 expectedPath: "/edgeworkers/v1/ids/88334/versions/1.23/content", 440 responseStatus: http.StatusNotFound, 441 responseBody: ` 442 { 443 "type": "/edgeworkers/error-types/edgeworkers-not-found", 444 "title": "The given resource could not be found.", 445 "detail": "Unable to delete the version provided", 446 "instance": "/edgeworkers/error-instances/514139f4-1608-4afc-88ac-67da91696af3", 447 "status": 404, 448 "errorCode": "EW2002" 449 }`, 450 withError: &Error{ 451 Type: "/edgeworkers/error-types/edgeworkers-not-found", 452 Title: "The given resource could not be found.", 453 Detail: "Unable to delete the version provided", 454 Instance: "/edgeworkers/error-instances/514139f4-1608-4afc-88ac-67da91696af3", 455 Status: 404, 456 ErrorCode: "EW2002", 457 }, 458 }, 459 } 460 461 for name, test := range tests { 462 t.Run(name, func(t *testing.T) { 463 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 464 assert.Equal(t, test.expectedPath, r.URL.String()) 465 assert.Equal(t, http.MethodGet, r.Method) 466 w.WriteHeader(test.responseStatus) 467 _, err := w.Write([]byte(test.responseBody)) 468 assert.NoError(t, err) 469 })) 470 client := mockAPIClient(t, mockServer) 471 _, err := client.GetEdgeWorkerVersionContent(context.Background(), test.params) 472 if test.withError != nil { 473 assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err) 474 if test.responseStatus != 0 { 475 assert.Contains(t, err.Error(), strconv.FormatInt(int64(test.responseStatus), 10)) 476 } 477 478 return 479 } 480 require.NoError(t, err) 481 }) 482 } 483 } 484 485 func TestCreateEdgeWorkerVersion(t *testing.T) { 486 tests := map[string]struct { 487 params CreateEdgeWorkerVersionRequest 488 responseStatus int 489 responseBody string 490 expectedPath string 491 expectedResponse *EdgeWorkerVersion 492 withError error 493 }{ 494 "201 Created - create EdgeWorker Version": { 495 params: CreateEdgeWorkerVersionRequest{ 496 EdgeWorkerID: 88334, 497 ContentBundle: Bundle{bytes.NewBuffer([]byte("testing create"))}, 498 }, 499 responseStatus: http.StatusCreated, 500 responseBody: ` 501 { 502 "edgeWorkerId": 88334, 503 "version": "1.23", 504 "accountId": "B-3-WNKA6P", 505 "checksum": "868f28f16c26f46d418d83e24973520534d9ea4e4dbfd8a69ab00c1c37f28ca4", 506 "sequenceNumber": 24, 507 "createdBy": "jsmith", 508 "createdTime": "2021-12-21T12:57:54Z" 509 }`, 510 expectedPath: "/edgeworkers/v1/ids/88334/versions", 511 expectedResponse: &EdgeWorkerVersion{ 512 EdgeWorkerID: 88334, 513 Version: "1.23", 514 AccountID: "B-3-WNKA6P", 515 Checksum: "868f28f16c26f46d418d83e24973520534d9ea4e4dbfd8a69ab00c1c37f28ca4", 516 SequenceNumber: 24, 517 CreatedBy: "jsmith", 518 CreatedTime: "2021-12-21T12:57:54Z", 519 }, 520 }, 521 "missing EdgeWorkerID": { 522 params: CreateEdgeWorkerVersionRequest{ 523 ContentBundle: Bundle{bytes.NewBuffer([]byte("testing create"))}, 524 }, 525 withError: ErrStructValidation, 526 }, 527 "missing ContentBundle": { 528 params: CreateEdgeWorkerVersionRequest{ 529 EdgeWorkerID: 88334, 530 }, 531 withError: ErrStructValidation, 532 }, 533 "500 internal server error": { 534 params: CreateEdgeWorkerVersionRequest{ 535 EdgeWorkerID: 88334, 536 ContentBundle: Bundle{bytes.NewBuffer([]byte("testing create"))}, 537 }, 538 responseStatus: http.StatusInternalServerError, 539 responseBody: ` 540 { 541 "type": "https://problems.luna-dev.akamaiapis.net/-/resource-impl/forward-origin-error", 542 "title": "Server Error", 543 "status": 500, 544 "instance": "host_name/edgeworkers/v1/ids/88334/versions", 545 "method": "POST", 546 "serverIp": "10.0.0.1", 547 "clientIp": "192.168.0.1", 548 "requestId": "a73affa111", 549 "requestTime": "2021-12-13T13:32:37Z" 550 }`, 551 expectedPath: "/edgeworkers/v1/ids/88334/versions", 552 withError: &Error{ 553 Type: "https://problems.luna-dev.akamaiapis.net/-/resource-impl/forward-origin-error", 554 Title: "Server Error", 555 Status: 500, 556 Instance: "host_name/edgeworkers/v1/ids/88334/versions", 557 Method: "POST", 558 ServerIP: "10.0.0.1", 559 ClientIP: "192.168.0.1", 560 RequestID: "a73affa111", 561 RequestTime: "2021-12-13T13:32:37Z", 562 }, 563 }, 564 "403 Forbidden - incorrect credentials": { 565 params: CreateEdgeWorkerVersionRequest{ 566 EdgeWorkerID: 88334, 567 ContentBundle: Bundle{bytes.NewBuffer([]byte("testing create"))}, 568 }, 569 responseStatus: http.StatusForbidden, 570 responseBody: ` 571 { 572 "type": "https://problems.luna-dev.akamaiapis.net/-/pep-authz/deny", 573 "title": "Forbidden", 574 "status": 403, 575 "detail": "The client does not have the grant needed for the request", 576 "instance": "host_name/edgeworkers/v1/ids/88334/versions", 577 "authzRealm": "scuomder224df6ct.dkekfr3qqg4dghpj", 578 "method": "POST", 579 "serverIp": "10.0.0.1", 580 "clientIp": "192.168.0.1", 581 "requestId": "a73affa111", 582 "requestTime": "2021-12-13T13:32:37Z" 583 }`, 584 expectedPath: "/edgeworkers/v1/ids/88334/versions", 585 withError: &Error{ 586 Type: "https://problems.luna-dev.akamaiapis.net/-/pep-authz/deny", 587 Title: "Forbidden", 588 Status: 403, 589 Detail: "The client does not have the grant needed for the request", 590 Instance: "host_name/edgeworkers/v1/ids/88334/versions", 591 AuthzRealm: "scuomder224df6ct.dkekfr3qqg4dghpj", 592 Method: "POST", 593 ServerIP: "10.0.0.1", 594 ClientIP: "192.168.0.1", 595 RequestID: "a73affa111", 596 RequestTime: "2021-12-13T13:32:37Z", 597 }, 598 }, 599 } 600 for name, test := range tests { 601 t.Run(name, func(t *testing.T) { 602 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 603 assert.Equal(t, test.expectedPath, r.URL.String()) 604 assert.Equal(t, http.MethodPost, r.Method) 605 w.WriteHeader(test.responseStatus) 606 _, err := w.Write([]byte(test.responseBody)) 607 assert.NoError(t, err) 608 })) 609 client := mockAPIClient(t, mockServer) 610 result, err := client.CreateEdgeWorkerVersion(context.Background(), test.params) 611 if test.withError != nil { 612 assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err) 613 return 614 } 615 require.NoError(t, err) 616 assert.Equal(t, test.expectedResponse, result) 617 }) 618 } 619 } 620 621 func TestDeleteEdgeWorkerVersion(t *testing.T) { 622 tests := map[string]struct { 623 params DeleteEdgeWorkerVersionRequest 624 withError error 625 expectedPath string 626 responseStatus int 627 responseBody string 628 }{ 629 "204 Deleted": { 630 params: DeleteEdgeWorkerVersionRequest{ 631 EdgeWorkerID: 88334, 632 Version: "1.23", 633 }, 634 expectedPath: "/edgeworkers/v1/ids/88334/versions/1.23", 635 responseStatus: http.StatusNoContent, 636 }, 637 "missing EdgeWorkerID": { 638 params: DeleteEdgeWorkerVersionRequest{ 639 Version: "1.23", 640 }, 641 withError: ErrStructValidation, 642 }, 643 "missing Version": { 644 params: DeleteEdgeWorkerVersionRequest{ 645 EdgeWorkerID: 88334, 646 }, 647 withError: ErrStructValidation, 648 }, 649 "404 Not Found": { 650 params: DeleteEdgeWorkerVersionRequest{ 651 EdgeWorkerID: 88334, 652 Version: "1.23", 653 }, 654 expectedPath: "/edgeworkers/v1/ids/88334/versions/1.23", 655 responseStatus: http.StatusNotFound, 656 responseBody: ` 657 { 658 "type": "/edgeworkers/error-types/edgeworkers-not-found", 659 "title": "The given resource could not be found.", 660 "detail": "Unable to delete the version provided", 661 "instance": "/edgeworkers/error-instances/514139f4-1608-4afc-88ac-67da91696af3", 662 "status": 404, 663 "errorCode": "EW2002" 664 }`, 665 withError: &Error{ 666 Type: "/edgeworkers/error-types/edgeworkers-not-found", 667 Title: "The given resource could not be found.", 668 Detail: "Unable to delete the version provided", 669 Instance: "/edgeworkers/error-instances/514139f4-1608-4afc-88ac-67da91696af3", 670 Status: 404, 671 ErrorCode: "EW2002", 672 }, 673 }, 674 "500 internal server error": { 675 params: DeleteEdgeWorkerVersionRequest{ 676 EdgeWorkerID: 88334, 677 Version: "1.23", 678 }, 679 expectedPath: "/edgeworkers/v1/ids/88334/versions/1.23", 680 responseStatus: http.StatusInternalServerError, 681 responseBody: ` 682 { 683 "type": "https://problems.luna-dev.akamaiapis.net/-/resource-impl/forward-origin-error", 684 "title": "Server Error", 685 "status": 500, 686 "instance": "host_name/edgeworkers/v1/ids/88334/versions/1.23", 687 "method": "DELETE", 688 "serverIp": "10.0.0.1", 689 "clientIp": "192.168.0.1", 690 "requestId": "a73affa111", 691 "requestTime": "2021-12-17T16:32:37Z" 692 }`, 693 withError: &Error{ 694 Type: "https://problems.luna-dev.akamaiapis.net/-/resource-impl/forward-origin-error", 695 Title: "Server Error", 696 Status: 500, 697 Instance: "host_name/edgeworkers/v1/ids/88334/versions/1.23", 698 Method: "DELETE", 699 ServerIP: "10.0.0.1", 700 ClientIP: "192.168.0.1", 701 RequestID: "a73affa111", 702 RequestTime: "2021-12-17T16:32:37Z", 703 }, 704 }, 705 } 706 for name, test := range tests { 707 t.Run(name, func(t *testing.T) { 708 mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 709 assert.Equal(t, test.expectedPath, r.URL.String()) 710 assert.Equal(t, http.MethodDelete, r.Method) 711 w.WriteHeader(test.responseStatus) 712 _, err := w.Write([]byte(test.responseBody)) 713 assert.NoError(t, err) 714 })) 715 client := mockAPIClient(t, mockServer) 716 err := client.DeleteEdgeWorkerVersion(context.Background(), test.params) 717 if test.withError != nil { 718 assert.True(t, errors.Is(err, test.withError), "want: %s; got: %s", test.withError, err) 719 if test.responseStatus != 0 { 720 assert.Contains(t, err.Error(), strconv.FormatInt(int64(test.responseStatus), 10)) 721 } 722 723 return 724 } 725 require.NoError(t, err) 726 }) 727 } 728 }